Skip to content

Commit 0d2f2fd

Browse files
authored
<fix>(consensus,auth): fix add sealer bug when sdk connect observer to be added. (#807)
1 parent 7b291cc commit 0d2f2fd

File tree

4 files changed

+41
-19
lines changed

4 files changed

+41
-19
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ ext {
3535
// integrationTest.mustRunAfter test
3636
allprojects {
3737
group = 'org.fisco-bcos.java-sdk'
38-
version = '3.2.2'
38+
version = '3.2.3-SNAPSHOT'
3939

4040
apply plugin: 'maven-publish'
4141
apply plugin: 'idea'

src/main/java/org/fisco/bcos/sdk/v3/contract/auth/manager/AuthManager.java

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -261,15 +261,25 @@ private void checkSetConsensusWeightParams(String node, BigInteger weight, boole
261261
PrecompiledRetCode.CODE_ADD_SEALER_SHOULD_IN_OBSERVER.getCode());
262262
}
263263
SyncStatus syncStatus = client.getSyncStatus();
264-
BigInteger blockNumber = client.getBlockNumber().getBlockNumber();
265-
boolean anyMatch =
266-
syncStatus.getSyncStatus().getPeers().stream()
267-
.anyMatch(
268-
peersInfo ->
269-
peersInfo.getNodeId().equals(node)
270-
&& peersInfo.getBlockNumber()
271-
>= (blockNumber.longValue()
272-
- SYNC_KEEP_UP_THRESHOLD));
264+
// sdk block number
265+
BigInteger highestNumber =
266+
BigInteger.valueOf(syncStatus.getSyncStatus().getKnownHighestNumber());
267+
boolean anyMatch;
268+
if (syncStatus.getSyncStatus().getNodeId().equals(node)) {
269+
// sdk connect observer to be added to sealerList
270+
anyMatch =
271+
syncStatus.getSyncStatus().getBlockNumber()
272+
>= highestNumber.longValue() - SYNC_KEEP_UP_THRESHOLD;
273+
} else {
274+
anyMatch =
275+
syncStatus.getSyncStatus().getPeers().stream()
276+
.anyMatch(
277+
peersInfo ->
278+
peersInfo.getNodeId().equals(node)
279+
&& peersInfo.getBlockNumber()
280+
>= (highestNumber.longValue()
281+
- SYNC_KEEP_UP_THRESHOLD));
282+
}
273283
if (!anyMatch) {
274284
throw new ContractException(
275285
"Observer should keep up the block number sync threshold: "

src/main/java/org/fisco/bcos/sdk/v3/contract/precompiled/consensus/ConsensusService.java

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -75,15 +75,25 @@ public RetCode addSealer(String nodeId, BigInteger weight) throws ContractExcept
7575
PrecompiledRetCode.CODE_ADD_SEALER_SHOULD_IN_OBSERVER.getCode());
7676
}
7777
SyncStatus syncStatus = client.getSyncStatus();
78-
BigInteger blockNumber = client.getBlockNumber().getBlockNumber();
79-
boolean anyMatch =
80-
syncStatus.getSyncStatus().getPeers().stream()
81-
.anyMatch(
82-
peersInfo ->
83-
peersInfo.getNodeId().equals(nodeId)
84-
&& peersInfo.getBlockNumber()
85-
>= (blockNumber.longValue()
86-
- SYNC_KEEP_UP_THRESHOLD));
78+
// sdk block number
79+
BigInteger highestNumber =
80+
BigInteger.valueOf(syncStatus.getSyncStatus().getKnownHighestNumber());
81+
boolean anyMatch;
82+
if (syncStatus.getSyncStatus().getNodeId().equals(nodeId)) {
83+
// sdk connect observer to be added to sealerList
84+
anyMatch =
85+
syncStatus.getSyncStatus().getBlockNumber()
86+
>= highestNumber.longValue() - SYNC_KEEP_UP_THRESHOLD;
87+
} else {
88+
anyMatch =
89+
syncStatus.getSyncStatus().getPeers().stream()
90+
.anyMatch(
91+
peersInfo ->
92+
peersInfo.getNodeId().equals(nodeId)
93+
&& peersInfo.getBlockNumber()
94+
>= (highestNumber.longValue()
95+
- SYNC_KEEP_UP_THRESHOLD));
96+
}
8797
if (!anyMatch) {
8898
throw new ContractException(
8999
"Observer should keep up the block number sync threshold: "

src/test/java/org/fisco/bcos/sdk/v3/test/transaction/contract/PrecompiledTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,8 @@ public void mockGetSyncStatusRequest(long number, String... nodeIds) {
150150
SyncStatus syncStatus = new SyncStatus();
151151
SyncStatus.SyncStatusInfo syncStatusInfo = new SyncStatus.SyncStatusInfo();
152152
List<SyncStatus.PeersInfo> peersInfos = new ArrayList<>();
153+
syncStatusInfo.setNodeId(nodeIds[0]);
154+
syncStatusInfo.setKnownHighestNumber((int) number);
153155
for (String nodeId : nodeIds) {
154156
SyncStatus.PeersInfo peersInfo = new SyncStatus.PeersInfo();
155157
peersInfo.setBlockNumber(number);

0 commit comments

Comments
 (0)