Skip to content

Commit e88f99f

Browse files
committed
add the block number check
1 parent a86aa4a commit e88f99f

2 files changed

Lines changed: 34 additions & 2 deletions

File tree

src/main/java/org/tron/common/overlay/discover/node/statistics/Reputation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ int calculate(int baseScore) {
7474
reput += t.p2pHandShake.getTotalCount() > 0 ? 10 : 0;
7575
reput += min(t.tcpFlow.getTotalCount() / 10240, 20);
7676
reput += t.messageStatistics.p2pOutPing.getTotalCount() == t.messageStatistics.p2pInPong
77-
.getTotalCount() ? 10 : -10;
77+
.getTotalCount() ? 10 : 0;
7878
return reput;
7979
}
8080
}

src/main/java/org/tron/common/overlay/server/PeerConnectionCheckService.java

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.ArrayList;
44
import java.util.Collections;
5+
import java.util.Comparator;
56
import java.util.List;
67
import java.util.concurrent.Executors;
78
import java.util.concurrent.ScheduledExecutorService;
@@ -13,6 +14,7 @@
1314
import org.springframework.stereotype.Service;
1415
import org.tron.common.overlay.discover.node.statistics.NodeStatistics;
1516
import org.tron.core.config.args.Args;
17+
import org.tron.core.db.Manager;
1618
import org.tron.core.net.peer.PeerConnection;
1719
import org.tron.protos.Protocol.ReasonCode;
1820

@@ -23,21 +25,28 @@ public class PeerConnectionCheckService {
2325
public static final long CHECK_TIME = 5 * 60 * 1000L;
2426
private double disconnectNumberFactor = Args.getInstance().getDisconnectNumberFactor();
2527
private double maxConnectNumberFactor = Args.getInstance().getMaxConnectNumberFactor();
28+
private static long beforeBlockNum = -1;
2629

2730
@Autowired
2831
private SyncPool pool;
2932

3033
@Autowired
3134
private ChannelManager channelManager;
3235

33-
private ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1,
36+
@Autowired
37+
private Manager manager;
38+
39+
private ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(2,
3440
r -> new Thread(r, "check-peer-connect"));
3541

3642
@PostConstruct
3743
public void check() {
3844
logger.info("start the PeerConnectionCheckService");
45+
beforeBlockNum = manager.getHeadBlockNum();
3946
scheduledExecutorService
4047
.scheduleWithFixedDelay(new CheckDataTransferTask(), 5, 5, TimeUnit.MINUTES);
48+
scheduledExecutorService
49+
.scheduleWithFixedDelay(new CheckBlockNumberHighTask(), 300, 5, TimeUnit.SECONDS);
4150
}
4251

4352
@PreDestroy
@@ -81,4 +90,27 @@ public void run() {
8190
}
8291
}
8392

93+
private class CheckBlockNumberHighTask implements Runnable {
94+
95+
@Override
96+
public void run() {
97+
if (beforeBlockNum == manager.getHeadBlockNum()) {
98+
logger.error("block number not change, now block number is : {}", beforeBlockNum);
99+
//disconnect some score low peer
100+
List<PeerConnection> peerList = new ArrayList<>(pool.getActivePeers());
101+
peerList.sort(Comparator.comparingInt(o -> o.getNodeStatistics().getReputation()));
102+
if (pool.getActivePeers().size() >= Args.getInstance().getNodeMaxActiveNodes() * Args
103+
.getInstance().getActiveConnectFactor()) {
104+
for (int i = 0; i < peerList.size() * 0.9; i++) {
105+
logger.error("block number not change, disconnect the peer : {}",
106+
peerList.get(i).getInetAddress());
107+
peerList.get(i).disconnect(ReasonCode.RESET);
108+
}
109+
}
110+
} else {
111+
beforeBlockNum = manager.getHeadBlockNum();
112+
}
113+
}
114+
}
115+
84116
}

0 commit comments

Comments
 (0)