Skip to content

Commit 9e644e6

Browse files
authored
Merge pull request tronprotocol#3313 from tronprotocol/pbft-4.1-dev
fix the pbft data sync
2 parents 3b259d0 + 43cc312 commit 9e644e6

8 files changed

Lines changed: 21 additions & 20 deletions

File tree

chainbase/src/main/java/org/tron/core/net/message/MessageTypes.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,7 @@ public enum MessageTypes {
3333

3434
TRX_INVENTORY(0x13),
3535

36-
PBFT_BLOCK_MSG(0x14),
37-
38-
PBFT_SRL_MSG(0x15),
36+
PBFT_COMMIT_MSG(0x14),
3937

4038
P2P_HELLO(0x20),
4139

@@ -84,7 +82,7 @@ public static boolean inP2pRange(byte code) {
8482
}
8583

8684
public static boolean inTronRange(byte code) {
87-
return code <= PBFT_SRL_MSG.asByte() && code >= FIRST.asByte();
85+
return code <= PBFT_COMMIT_MSG.asByte() && code >= FIRST.asByte();
8886
}
8987

9088
public byte asByte() {

framework/src/main/java/org/tron/core/net/TronNetService.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,7 @@ protected void onMessage(PeerConnection peer, TronMessage msg) {
107107
case TRXS:
108108
transactionsMsgHandler.processMessage(peer, msg);
109109
break;
110-
case PBFT_BLOCK_MSG:
111-
case PBFT_SRL_MSG:
110+
case PBFT_COMMIT_MSG:
112111
pbftDataSyncHandler.processMessage(peer, msg);
113112
break;
114113
default:

framework/src/main/java/org/tron/core/net/message/PbftCommitMessage.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ public class PbftCommitMessage extends TronMessage {
99

1010
public PbftCommitMessage(byte[] data) {
1111
super(data);
12-
this.type = MessageTypes.PBFT_BLOCK_MSG.asByte();
12+
this.type = MessageTypes.PBFT_COMMIT_MSG.asByte();
1313
this.pbftSignCapsule = new PbftSignCapsule(data);
1414
}
1515

1616
public PbftCommitMessage(PbftSignCapsule pbftSignCapsule) {
1717
data = pbftSignCapsule.getData();
18-
this.type = MessageTypes.PBFT_BLOCK_MSG.asByte();
18+
this.type = MessageTypes.PBFT_COMMIT_MSG.asByte();
1919
this.pbftSignCapsule = pbftSignCapsule;
2020
}
2121

framework/src/main/java/org/tron/core/net/message/TronMessageFactory.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,7 @@ private TronMessage create(byte type, byte[] packed) throws Exception {
6363
return new FetchBlockHeadersMessage(packed);
6464
case TRX_INVENTORY:
6565
return new TransactionInventoryMessage(packed);
66-
case PBFT_BLOCK_MSG:
67-
case PBFT_SRL_MSG:
66+
case PBFT_COMMIT_MSG:
6867
return new PbftCommitMessage(packed);
6968
default:
7069
throw new P2pException(P2pException.TypeEnum.NO_SUCH_MESSAGE,

framework/src/main/java/org/tron/core/net/messagehandler/FetchInvDataMsgHandler.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public void processMessage(PeerConnection peer, TronMessage msg) throws P2pExcep
104104

105105
private void sendPbftCommitMessage(PeerConnection peer, BlockCapsule blockCapsule) {
106106
try {
107-
if (!tronNetDelegate.allowPBFT()) {
107+
if (!tronNetDelegate.allowPBFT() || peer.isSyncFinish()) {
108108
return;
109109
}
110110
long epoch = 0;
@@ -114,16 +114,16 @@ private void sendPbftCommitMessage(PeerConnection peer, BlockCapsule blockCapsul
114114
.getMaintenanceTimeInterval();
115115
if (pbftSignCapsule != null) {
116116
Raw raw = Raw.parseFrom(pbftSignCapsule.getPbftCommitResult().getData());
117-
epoch = raw.getEpoch() + maintenanceTimeInterval;
117+
epoch = raw.getEpoch();
118118
peer.sendMessage(new PbftCommitMessage(pbftSignCapsule));
119119
} else {
120120
epoch =
121121
(blockCapsule.getTimeStamp() / maintenanceTimeInterval + 1) * maintenanceTimeInterval;
122122
}
123123
if (epochCache.getIfPresent(epoch) == null) {
124-
epochCache.put(epoch, true);
125124
PbftSignCapsule srl = tronNetDelegate.getSRLPbftCommitData(epoch);
126125
if (srl != null) {
126+
epochCache.put(epoch, true);
127127
peer.sendMessage(new PbftCommitMessage(srl));
128128
}
129129
}

framework/src/main/java/org/tron/core/net/messagehandler/PbftDataSyncHandler.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,23 +55,22 @@ public void processMessage(PeerConnection peer, TronMessage msg) throws P2pExcep
5555
}
5656
}
5757

58-
public void processPBFTCommitMessage(long blockNum) {
58+
public void processPBFTCommitData(BlockCapsule block) {
5959
try {
6060
if (!chainBaseManager.getDynamicPropertiesStore().allowPBFT()) {
6161
return;
6262
}
6363
long epoch = 0;
64-
PbftCommitMessage pbftCommitMessage = pbftCommitMessageCache.remove(blockNum);
64+
PbftCommitMessage pbftCommitMessage = pbftCommitMessageCache.remove(block.getNum());
6565
long maintenanceTimeInterval = chainBaseManager.getDynamicPropertiesStore()
6666
.getMaintenanceTimeInterval();
6767
if (pbftCommitMessage == null) {
68-
BlockCapsule blockCapsule = chainBaseManager.getBlockByNum(blockNum);
69-
long round = blockCapsule.getTimeStamp() / maintenanceTimeInterval;
68+
long round = block.getTimeStamp() / maintenanceTimeInterval;
7069
epoch = (round + 1) * maintenanceTimeInterval;
7170
} else {
7271
processPBFTCommitMessage(pbftCommitMessage);
7372
Raw raw = Raw.parseFrom(pbftCommitMessage.getPBFTCommitResult().getData());
74-
epoch = raw.getEpoch() + maintenanceTimeInterval;
73+
epoch = raw.getEpoch();
7574
}
7675
pbftCommitMessage = pbftCommitMessageCache.remove(epoch);
7776
if (pbftCommitMessage != null) {
@@ -93,16 +92,18 @@ private void processPBFTCommitMessage(PbftCommitMessage pbftCommitMessage) {
9392
if (raw.getDataType() == DataType.BLOCK
9493
&& pbftSignDataStore.getBlockSignData(raw.getViewN()) == null) {
9594
pbftSignDataStore.putBlockSignData(raw.getViewN(), pbftCommitMessage.getPbftSignCapsule());
95+
logger.info("save the block {} pbft commit data", raw.getViewN());
9696
} else if (raw.getDataType() == DataType.SRL
9797
&& pbftSignDataStore.getSrSignData(raw.getEpoch()) == null) {
9898
pbftSignDataStore.putSrSignData(raw.getEpoch(), pbftCommitMessage.getPbftSignCapsule());
99+
logger.info("save the srl {} pbft commit data", raw.getEpoch());
99100
}
100101
} catch (InvalidProtocolBufferException e) {
101102
logger.error("", e);
102103
}
103104
}
104105

105-
public boolean validPbftSign(Raw raw, List<ByteString> srSignList,
106+
private boolean validPbftSign(Raw raw, List<ByteString> srSignList,
106107
List<ByteString> currentSrList) {
107108
//valid sr list
108109
if (srSignList.size() != 0) {

framework/src/main/java/org/tron/core/net/peer/PeerConnection.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,4 +179,8 @@ public String log() {
179179
+ nodeStatistics.toString() + "\n";
180180
}
181181

182+
public boolean isSyncFinish() {
183+
return !(needSyncFromPeer || needSyncFromUs);
184+
}
185+
182186
}

framework/src/main/java/org/tron/core/net/service/SyncService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,8 +263,8 @@ private void processSyncBlock(BlockCapsule block) {
263263
boolean flag = true;
264264
BlockId blockId = block.getBlockId();
265265
try {
266-
pbftDataSyncHandler.processPBFTCommitMessage(block.getNum());
267266
tronNetDelegate.processBlock(block, true);
267+
pbftDataSyncHandler.processPBFTCommitData(block);
268268
} catch (Exception e) {
269269
logger.error("Process sync block {} failed.", blockId.getString(), e);
270270
flag = false;

0 commit comments

Comments
 (0)