Skip to content

Commit d6bbbe4

Browse files
authored
Merge pull request #5925 from 317787106/hotfix/set_block_both_have2
feat(net): set block_both_have after handling broadcast block
2 parents 729a99b + 34eb577 commit d6bbbe4

File tree

3 files changed

+57
-5
lines changed

3 files changed

+57
-5
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,13 @@ private void processBlock(PeerConnection peer, BlockCapsule block) throws P2pExc
151151
try {
152152
tronNetDelegate.processBlock(block, false);
153153
witnessProductBlockService.validWitnessProductTwoBlock(block);
154+
155+
Item item = new Item(blockId, InventoryType.BLOCK);
156+
tronNetDelegate.getActivePeer().forEach(p -> {
157+
if (p.getAdvInvReceive().getIfPresent(item) != null) {
158+
p.setBlockBothHave(blockId);
159+
}
160+
});
154161
} catch (Exception e) {
155162
logger.warn("Process adv block {} from peer {} failed. reason: {}",
156163
blockId, peer.getInetAddress(), e.getMessage());

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,8 @@ public String log() {
229229
channel.getInetSocketAddress(),
230230
(now - channel.getStartTime()) / Constant.ONE_THOUSAND,
231231
channel.getAvgLatency(),
232-
fastForwardBlock != null ? fastForwardBlock.getNum() : blockBothHave.getNum(),
232+
fastForwardBlock != null ? fastForwardBlock.getNum() : String.format("%d [%ds]",
233+
blockBothHave.getNum(), (now - blockBothHaveUpdateTime) / Constant.ONE_THOUSAND),
233234
isNeedSyncFromPeer(),
234235
isNeedSyncFromUs(),
235236
syncBlockToFetch.size(),

framework/src/test/java/org/tron/core/net/messagehandler/BlockMsgHandlerTest.java

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,33 @@
11
package org.tron.core.net.messagehandler;
22

33
import static org.junit.Assert.assertEquals;
4+
import static org.mockito.ArgumentMatchers.any;
5+
import static org.mockito.ArgumentMatchers.anyBoolean;
46

57
import com.google.common.collect.ImmutableList;
68
import com.google.protobuf.ByteString;
7-
89
import java.lang.reflect.Field;
10+
import java.lang.reflect.Method;
911
import java.net.InetSocketAddress;
12+
import java.util.ArrayList;
1013
import java.util.List;
1114
import javax.annotation.Resource;
12-
1315
import lombok.extern.slf4j.Slf4j;
16+
import org.junit.Assert;
1417
import org.junit.Before;
1518
import org.junit.BeforeClass;
1619
import org.junit.Test;
20+
import org.mockito.Mockito;
1721
import org.tron.common.BaseTest;
22+
import org.tron.common.utils.ByteArray;
1823
import org.tron.common.utils.Sha256Hash;
1924
import org.tron.core.Constant;
2025
import org.tron.core.capsule.BlockCapsule;
26+
import org.tron.core.capsule.BlockCapsule.BlockId;
2127
import org.tron.core.config.Parameter;
2228
import org.tron.core.config.args.Args;
2329
import org.tron.core.exception.P2pException;
30+
import org.tron.core.net.TronNetDelegate;
2431
import org.tron.core.net.message.adv.BlockMessage;
2532
import org.tron.core.net.peer.Item;
2633
import org.tron.core.net.peer.PeerConnection;
@@ -41,9 +48,8 @@ public class BlockMsgHandlerTest extends BaseTest {
4148
*/
4249
@BeforeClass
4350
public static void init() {
44-
Args.setParam(new String[]{"--output-directory", dbPath(), "--debug"},
51+
Args.setParam(new String[] {"--output-directory", dbPath(), "--debug"},
4552
Constant.TEST_CONF);
46-
4753
}
4854

4955
@Before
@@ -123,4 +129,42 @@ public void testProcessMessage() {
123129
logger.error("error", e);
124130
}
125131
}
132+
133+
@Test
134+
public void testProcessBlock() {
135+
TronNetDelegate tronNetDelegate = Mockito.mock(TronNetDelegate.class);
136+
137+
try {
138+
Field field = handler.getClass().getDeclaredField("tronNetDelegate");
139+
field.setAccessible(true);
140+
field.set(handler, tronNetDelegate);
141+
142+
BlockCapsule blockCapsule0 = new BlockCapsule(1,
143+
Sha256Hash.wrap(ByteString
144+
.copyFrom(ByteArray
145+
.fromHexString(
146+
"9938a342238077182498b464ac0292229938a342238077182498b464ac029222"))),
147+
1234,
148+
ByteString.copyFrom("1234567".getBytes()));
149+
150+
peer.getAdvInvReceive()
151+
.put(new Item(blockCapsule0.getBlockId(), InventoryType.BLOCK),
152+
System.currentTimeMillis());
153+
154+
Mockito.doReturn(true).when(tronNetDelegate).validBlock(any(BlockCapsule.class));
155+
Mockito.doReturn(true).when(tronNetDelegate).containBlock(any(BlockId.class));
156+
Mockito.doReturn(blockCapsule0.getBlockId()).when(tronNetDelegate).getHeadBlockId();
157+
Mockito.doNothing().when(tronNetDelegate).processBlock(any(BlockCapsule.class), anyBoolean());
158+
List<PeerConnection> peers = new ArrayList<>();
159+
peers.add(peer);
160+
Mockito.doReturn(peers).when(tronNetDelegate).getActivePeer();
161+
162+
Method method = handler.getClass()
163+
.getDeclaredMethod("processBlock", PeerConnection.class, BlockCapsule.class);
164+
method.setAccessible(true);
165+
method.invoke(handler, peer, blockCapsule0);
166+
} catch (Exception e) {
167+
Assert.fail();
168+
}
169+
}
126170
}

0 commit comments

Comments
 (0)