Skip to content

Commit b6d9665

Browse files
committed
Merge branch 'release-2.5' into release-2.5-bft
2 parents fbf58e1 + 9660747 commit b6d9665

File tree

7 files changed

+230
-9
lines changed

7 files changed

+230
-9
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
# - verify - runs unit tests for only the changed package tree
4848

4949
UBUNTU_VER ?= 22.04
50-
FABRIC_VER ?= 2.5.12
50+
FABRIC_VER ?= 2.5.13
5151

5252
# 3rd party image version
5353
# These versions are also set in the runners in ./integration/runners/

docs/source/install.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ Run the script with the `-h` option to see the options:
4343
./install-fabric.sh -h
4444
Usage: ./install-fabric.sh [-f|--fabric-version <arg>] [-c|--ca-version <arg>] <comp-1> [<comp-2>] ... [<comp-n>] ...
4545
<comp>: Component to install one or more of d[ocker]|b[inary]|s[amples]. If none specified, all will be installed
46-
-f, --fabric-version: FabricVersion (default: '2.5.12')
46+
-f, --fabric-version: FabricVersion (default: '2.5.13')
4747
-c, --ca-version: Fabric CA Version (default: '1.5.15')
4848
```
4949

@@ -70,10 +70,10 @@ If no arguments are supplied, then the arguments `docker binary samples` are ass
7070

7171
By default the latest version of the components are used; these can be altered by using the options `--fabric-version` and `-ca-version`. `-f` and `-c` are the respective short forms.
7272

73-
For example, to download the v2.5.12 binaries, run this command
73+
For example, to download the v2.5.13 binaries, run this command
7474

7575
```bash
76-
./install-fabric.sh --fabric-version 2.5.12 binary
76+
./install-fabric.sh --fabric-version 2.5.13 binary
7777
```
7878

7979
You have completed installing Fabric samples, Docker images, and binaries to your system.

docs/source/whatsnew.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,7 @@ Specifically, take a look at the changes and deprecations.
346346
* `Fabric v2.5.10 release notes <https://github.com/hyperledger/fabric/releases/tag/v2.5.10>`_.
347347
* `Fabric v2.5.11 release notes <https://github.com/hyperledger/fabric/releases/tag/v2.5.11>`_.
348348
* `Fabric v2.5.12 release notes <https://github.com/hyperledger/fabric/releases/tag/v2.5.12>`_.
349+
* `Fabric v2.5.13 release notes <https://github.com/hyperledger/fabric/releases/tag/v2.5.13>`_.
349350

350351
.. Licensed under Creative Commons Attribution 4.0 International License
351352
https://creativecommons.org/licenses/by/4.0/

integration/raft/config_test.go

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
protosorderer "github.com/hyperledger/fabric-protos-go/orderer"
2727
"github.com/hyperledger/fabric-protos-go/orderer/etcdraft"
2828
"github.com/hyperledger/fabric/common/crypto/tlsgen"
29+
"github.com/hyperledger/fabric/integration/channelparticipation"
2930
"github.com/hyperledger/fabric/integration/nwo"
3031
"github.com/hyperledger/fabric/integration/nwo/commands"
3132
"github.com/hyperledger/fabric/integration/ordererclient"
@@ -1237,6 +1238,128 @@ var _ = Describe("EndToEnd reconfiguration and onboarding", func() {
12371238
})
12381239
})
12391240

1241+
Describe("an all orderer nodes are evicted", func() {
1242+
BeforeEach(func() {
1243+
ordererRunners = nil
1244+
ordererProcesses = nil
1245+
1246+
network = nwo.New(nwo.MultiNodeEtcdRaftNoSysChan(), testDir, client, StartPort(), components)
1247+
network.GenerateConfigTree()
1248+
network.Bootstrap()
1249+
1250+
o1, o2, o3 := network.Orderer("orderer1"), network.Orderer("orderer2"), network.Orderer("orderer3")
1251+
orderers := []*nwo.Orderer{o1, o2, o3}
1252+
peer = network.Peer("Org1", "peer0")
1253+
1254+
By("Launching the orderers")
1255+
for _, o := range orderers {
1256+
runner := network.OrdererRunner(o, "FABRIC_LOGGING_SPEC=orderer.consensus.etcdraft=debug:info")
1257+
ordererRunners = append(ordererRunners, runner)
1258+
process := ifrit.Invoke(runner)
1259+
ordererProcesses = append(ordererProcesses, process)
1260+
}
1261+
1262+
for _, ordererProc := range ordererProcesses {
1263+
Eventually(ordererProc.Ready(), network.EventuallyTimeout).Should(BeClosed())
1264+
}
1265+
channelparticipation.JoinOrderersAppChannelCluster(network, "testchannel", o1, o2, o3)
1266+
})
1267+
1268+
AfterEach(func() {
1269+
for _, ordererInstance := range ordererProcesses {
1270+
ordererInstance.Signal(syscall.SIGTERM)
1271+
Eventually(ordererInstance.Wait(), network.EventuallyTimeout).Should(Receive())
1272+
}
1273+
})
1274+
1275+
It("remove channel from all orderers and add channel back", func() {
1276+
o1 := network.Orderer("orderer1")
1277+
o2 := network.Orderer("orderer2")
1278+
o3 := network.Orderer("orderer3")
1279+
1280+
By("Waiting for them to elect a leader")
1281+
findLeader(ordererRunners)
1282+
1283+
assertBlockReception(map[string]int{
1284+
"testchannel": 0,
1285+
}, network.Orderers, peer, network)
1286+
1287+
By("Removing channel from all orderers")
1288+
// TODO the channelparticipation.Remove does not clean up the etcdraft folder. This may prevent the
1289+
// correct re-creation of the channel on this orderer.
1290+
// See: https://github.com/hyperledger/fabric/issues/3992
1291+
for _, o := range network.Orderers {
1292+
ready := make(chan struct{})
1293+
go func() {
1294+
defer GinkgoRecover()
1295+
channelparticipation.Remove(network, o, "testchannel")
1296+
close(ready)
1297+
}()
1298+
Eventually(ready, network.EventuallyTimeout).Should(BeClosed())
1299+
1300+
Eventually(func() int { // Removal is async
1301+
channelList := channelparticipation.List(network, o)
1302+
return len(channelList.Channels)
1303+
}()).Should(BeZero())
1304+
}
1305+
1306+
// TODO It is recommended to remove the etcdraft folder for the WAL to be re-created correctly
1307+
// See: https://github.com/hyperledger/fabric/issues/3992
1308+
for _, o := range network.Orderers {
1309+
err := os.RemoveAll(path.Join(network.OrdererDir(o), "etcdraft", "wal", "testchannel"))
1310+
Expect(err).NotTo(HaveOccurred())
1311+
err = os.RemoveAll(path.Join(network.OrdererDir(o), "etcdraft", "snapshot", "testchannel"))
1312+
Expect(err).NotTo(HaveOccurred())
1313+
}
1314+
1315+
By("Re-create the genesis block")
1316+
for _, c := range network.Channels {
1317+
sess, err := network.ConfigTxGen(commands.OutputBlock{
1318+
ChannelID: c.Name,
1319+
Profile: c.Profile,
1320+
ConfigPath: network.RootDir,
1321+
OutputBlock: network.OutputBlockPath(c.Name),
1322+
})
1323+
Expect(err).NotTo(HaveOccurred())
1324+
Eventually(sess, network.EventuallyTimeout).Should(gexec.Exit(0))
1325+
}
1326+
1327+
By("Re-adding the channel to the orderers")
1328+
channelparticipation.JoinOrderersAppChannelCluster(network, "testchannel", o1, o2, o3)
1329+
1330+
findLeader(ordererRunners)
1331+
1332+
assertBlockReception(map[string]int{
1333+
"testchannel": 0,
1334+
}, network.Orderers, peer, network)
1335+
1336+
expectedInfo := channelparticipation.ListOne(network, o1, "testchannel")
1337+
1338+
By("Submitting tx")
1339+
env := CreateBroadcastEnvelope(network, o2, "testchannel", []byte("foo"))
1340+
resp, err := ordererclient.Broadcast(network, o2, env)
1341+
Expect(err).NotTo(HaveOccurred())
1342+
Expect(resp.Status).To(Equal(common.Status_SUCCESS))
1343+
1344+
By("Waiting for the channel to stabilize")
1345+
expectedInfo.Height++
1346+
assertCatchup := func(expected channelparticipation.ChannelInfo) bool {
1347+
current := channelparticipation.ListOne(network, o1, "testchannel")
1348+
ok := current == expected
1349+
if !ok {
1350+
fmt.Fprintf(GinkgoWriter, "Current ChannelInfo: %+v", current)
1351+
}
1352+
return ok
1353+
}
1354+
1355+
Eventually(assertCatchup(expectedInfo), network.EventuallyTimeout, 100*time.Millisecond).Should(BeTrue())
1356+
1357+
assertBlockReception(map[string]int{
1358+
"testchannel": 1,
1359+
}, []*nwo.Orderer{o1, o2, o3}, peer, network)
1360+
})
1361+
})
1362+
12401363
When("an orderer node is joined", func() {
12411364
It("isn't influenced by outdated orderers", func() {
12421365
// This test checks that if a lagged is not aware of newly added nodes,

release_notes/v2.5.13.md

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
v2.5.13 Release Notes - April 29, 2025
2+
======================================
3+
4+
v2.5.13 updates code dependencies.
5+
6+
Dependencies
7+
------------
8+
Fabric v2.5.13 has been tested with the following dependencies:
9+
* Go 1.24.2
10+
* CouchDB v3.4.2
11+
12+
Go dependencies have also been updated.
13+
14+
Fabric docker images on Docker Hub and GitHub Container Registry utilize Ubuntu 22.04.
15+
16+
17+
Deprecations (existing)
18+
-----------------------
19+
20+
**Ordering service system channel is deprecated**
21+
22+
v2.3 introduced the ability to manage an ordering service without a system channel.
23+
Managing an ordering service without a system channel has privacy, scalability,
24+
and operational benefits. The use of a system channel is deprecated and may be removed in a future release.
25+
For information about removal of the system channel, see the [Create a channel without system channel documentation](https://hyperledger-fabric.readthedocs.io/en/release-2.3/create_channel/create_channel_participation.html).
26+
27+
**FAB-15754: The 'Solo' consensus type is deprecated.**
28+
29+
The 'Solo' consensus type has always been marked non-production and should be in
30+
use only in test environments; however, for compatibility it is still available,
31+
but may be removed entirely in a future release.
32+
33+
**FAB-16408: The 'Kafka' consensus type is deprecated.**
34+
35+
The 'Raft' consensus type was introduced in v1.4.1 and has become the preferred
36+
production consensus type. There is a documented and tested migration path from
37+
Kafka to Raft, and existing users should migrate to the newer Raft consensus type.
38+
For compatibility with existing deployments, Kafka is still supported,
39+
but may be removed entirely in a future release.
40+
Additionally, the fabric-kafka and fabric-zookeeper docker images are no longer updated, maintained, or published.
41+
42+
**Fabric CouchDB image is deprecated**
43+
44+
v2.2.0 added support for CouchDB 3.1.0 as the recommended and tested version of CouchDB.
45+
If prior versions are utilized, a Warning will appear in the peer log.
46+
Note that CouchDB 3.1.0 requires that an admin username and password be set,
47+
while this was optional in CouchDB v2.x. See the
48+
[Fabric CouchDB documentation](https://hyperledger-fabric.readthedocs.io/en/v2.2.0/couchdb_as_state_database.html#couchdb-configuration)
49+
for configuration details.
50+
Also note that CouchDB 3.1.0 default max_document_size is reduced to 8MB. Set a higher value if needed in your environment.
51+
Finally, the fabric-couchdb docker image will not be updated to v3.1.0 and will no longer be updated, maintained, or published.
52+
Users can utilize the official CouchDB docker image maintained by the Apache CouchDB project instead.
53+
54+
**FAB-7559: Support for specifying orderer endpoints at the global level in channel configuration is deprecated.**
55+
56+
Utilize the new 'OrdererEndpoints' stanza within the channel configuration of an organization instead.
57+
Configuring orderer endpoints at the organization level accommodates
58+
scenarios where orderers are run by different organizations. Using
59+
this configuration ensures that only the TLS CA certificates of that organization
60+
are used for orderer communications; in contrast to the global channel level endpoints which
61+
would cause an aggregation of all orderer TLS CA certificates across
62+
all orderer organizations to be used for orderer communications.
63+
64+
**FAB-17428: Support for configtxgen flag `--outputAnchorPeersUpdate` is deprecated.**
65+
66+
The `--outputAnchorPeersUpdate` mechanism for updating anchor peers has always had
67+
limitations (for instance, it only works the first time anchor peers are updated).
68+
Instead, anchor peer updates should be performed through channel configuration updates.
69+
70+
**FAB-15406: The fabric-tools docker image is deprecated**
71+
72+
The fabric-tools docker image will not be published in future Fabric releases.
73+
Instead of using the fabric-tools docker image, users should utilize the
74+
published Fabric binaries. The Fabric binaries can be used to make client calls
75+
to Fabric runtime components, regardless of where the Fabric components are running.
76+
77+
**FAB-15317: Block dissemination via gossip is deprecated**
78+
79+
Block dissemination via gossip is deprecated and may be removed in a future release.
80+
Fabric peers can be configured to receive blocks directly from an ordering service
81+
node, and not gossip blocks, by using the following configuration:
82+
```
83+
peer.gossip.orgLeader: true
84+
peer.gossip.useLeaderElection: false
85+
peer.gossip.state.enabled: false
86+
peer.deliveryclient.blockGossipEnabled: false
87+
```
88+
89+
**FAB-15061: Legacy chaincode lifecycle is deprecated**
90+
91+
The legacy chaincode lifecycle from v1.x is deprecated and will be removed
92+
in a future release. To prepare for the eventual removal, utilize the v2.x
93+
chaincode lifecycle instead, by enabling V2_0 application capability on all
94+
channels, and redeploying all chaincodes using the v2.x lifecycle. The new
95+
chaincode lifecycle provides a more flexible and robust governance model
96+
for chaincodes. For more details see the
97+
[documentation for enabling the new lifecycle](https://hyperledger-fabric.readthedocs.io/en/release-2.2/enable_cc_lifecycle.html).

scripts/bootstrap.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#
77

88
# if version not passed in, default to latest released version
9-
VERSION=2.5.12
9+
VERSION=2.5.13
1010
# if ca version not passed in, default to latest released version
1111
CA_VERSION=1.5.15
1212
ARCH=$(echo "$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/windows/')-$(uname -m |sed 's/x86_64/amd64/g')" |sed 's/darwin-arm64/darwin-amd64/g')
@@ -21,8 +21,8 @@ printHelp() {
2121
echo "-s : bypass fabric-samples repo clone"
2222
echo "-b : bypass download of platform-specific binaries"
2323
echo
24-
echo "e.g. bootstrap.sh 2.5.12 1.5.15 -s"
25-
echo "will download docker images and binaries for Fabric v2.5.12 and Fabric CA v1.5.15"
24+
echo "e.g. bootstrap.sh 2.5.13 1.5.15 -s"
25+
echo "will download docker images and binaries for Fabric v2.5.13 and Fabric CA v1.5.15"
2626
}
2727

2828
# dockerPull() pulls docker images from fabric and chaincode repositories

scripts/install-fabric.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ _arg_comp=('' )
2121

2222
# if version not passed in, default to latest released version
2323
# if ca version not passed in, default to latest released version
24-
_arg_fabric_version="2.5.12"
24+
_arg_fabric_version="2.5.13"
2525
_arg_ca_version="1.5.15"
2626

2727
REGISTRY=${FABRIC_DOCKER_REGISTRY:-docker.io/hyperledger}
@@ -50,7 +50,7 @@ print_help()
5050
{
5151
printf 'Usage: %s [-f|--fabric-version <arg>] [-c|--ca-version <arg>] <comp-1> [<comp-2>] ... [<comp-n>] ...\n' "$0"
5252
printf '\t%s\n' "<comp> Component to install, one or more of docker | binary | samples | podman First letter of component also accepted; If none specified docker | binary | samples is assumed"
53-
printf '\t%s\n' "-f, --fabric-version: FabricVersion (default: '2.5.12')"
53+
printf '\t%s\n' "-f, --fabric-version: FabricVersion (default: '2.5.13')"
5454
printf '\t%s\n' "-c, --ca-version: Fabric CA Version (default: '1.5.15')"
5555
}
5656

0 commit comments

Comments
 (0)