Skip to content

Commit ea7ef8e

Browse files
authored
Merge pull request #5956 from 317787106/feature/test_isolated3
feat(net): adjust disconnect strategy in isolated scene
2 parents 424a3dd + 1a7abf3 commit ea7ef8e

File tree

6 files changed

+25
-23
lines changed

6 files changed

+25
-23
lines changed

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import org.tron.p2p.connection.Channel;
4141
import org.tron.protos.Protocol;
4242
import org.tron.protos.Protocol.Inventory.InventoryType;
43-
import org.tron.protos.Protocol.ReasonCode;
4443

4544
@Slf4j(topic = "net")
4645
@Component
@@ -207,7 +206,7 @@ private void processMessage(PeerConnection peer, byte[] data) {
207206
default:
208207
throw new P2pException(P2pException.TypeEnum.NO_SUCH_MESSAGE, msg.getType().toString());
209208
}
210-
updateLastActiveTime(peer, msg);
209+
updateLastInteractiveTime(peer, msg);
211210
} catch (Exception e) {
212211
processException(peer, msg, e);
213212
} finally {
@@ -223,7 +222,7 @@ private void processMessage(PeerConnection peer, byte[] data) {
223222
}
224223
}
225224

226-
private void updateLastActiveTime(PeerConnection peer, TronMessage msg) {
225+
private void updateLastInteractiveTime(PeerConnection peer, TronMessage msg) {
227226
MessageTypes type = msg.getType();
228227

229228
boolean flag = false;
@@ -240,7 +239,7 @@ private void updateLastActiveTime(PeerConnection peer, TronMessage msg) {
240239
break;
241240
}
242241
if (flag) {
243-
peer.setLastActiveTime(System.currentTimeMillis());
242+
peer.setLastInteractiveTime(System.currentTimeMillis());
244243
}
245244
}
246245

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public void processMessage(PeerConnection peer, TronMessage msg) {
4040
peer.getAdvInvReceive().put(item, System.currentTimeMillis());
4141
advService.addInv(item);
4242
if (type.equals(InventoryType.BLOCK) && peer.getAdvInvSpread().getIfPresent(item) == null) {
43-
peer.setLastActiveTime(System.currentTimeMillis());
43+
peer.setLastInteractiveTime(System.currentTimeMillis());
4444
}
4545
}
4646
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public class PeerConnection {
8181

8282
@Getter
8383
@Setter
84-
private volatile long lastActiveTime;
84+
private volatile long lastInteractiveTime;
8585

8686
@Getter
8787
@Setter
@@ -163,7 +163,7 @@ public void setChannel(Channel channel) {
163163
this.isRelayPeer = true;
164164
}
165165
this.nodeStatistics = TronStatsManager.getNodeStatistics(channel.getInetAddress());
166-
lastActiveTime = System.currentTimeMillis();
166+
lastInteractiveTime = System.currentTimeMillis();
167167
}
168168

169169
public void setBlockBothHave(BlockId blockId) {
@@ -245,7 +245,7 @@ public String log() {
245245
remainNum,
246246
requested == null ? 0 : (now - requested.getValue())
247247
/ Constant.ONE_THOUSAND,
248-
(now - lastActiveTime) / Constant.ONE_THOUSAND,
248+
(now - lastInteractiveTime) / Constant.ONE_THOUSAND,
249249
syncBlockInProcess.size());
250250
}
251251

framework/src/main/java/org/tron/core/net/service/effective/ResilienceService.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ private void disconnectRandom() {
7474
if (peerSize >= CommonParameter.getInstance().getMaxConnections()) {
7575
long now = System.currentTimeMillis();
7676
List<PeerConnection> peers = tronNetDelegate.getActivePeer().stream()
77-
.filter(peer -> now - peer.getLastActiveTime() >= inactiveThreshold)
77+
.filter(peer -> now - peer.getLastInteractiveTime() >= inactiveThreshold)
7878
.filter(peer -> !peer.getChannel().isTrustPeer())
7979
.filter(peer -> !peer.isNeedSyncFromUs() && !peer.isNeedSyncFromPeer())
8080
.collect(Collectors.toList());
@@ -96,7 +96,7 @@ private void disconnectLan() {
9696
if (peerSize >= CommonParameter.getInstance().getMinConnections()) {
9797
long now = System.currentTimeMillis();
9898
List<PeerConnection> peers = tronNetDelegate.getActivePeer().stream()
99-
.filter(peer -> now - peer.getLastActiveTime() >= inactiveThreshold)
99+
.filter(peer -> now - peer.getLastInteractiveTime() >= inactiveThreshold)
100100
.filter(peer -> !peer.isNeedSyncFromPeer() && !peer.isNeedSyncFromUs())
101101
.filter(peer -> !peer.getChannel().isTrustPeer())
102102
.collect(Collectors.toList());
@@ -111,10 +111,12 @@ private void disconnectIsolated2() {
111111
return;
112112
}
113113
logger.warn("Node is isolated, try to disconnect from peers");
114-
int peerSize = tronNetDelegate.getActivePeer().size();
115114

116115
//disconnect from the node whose lastActiveTime is smallest
117-
if (peerSize >= CommonParameter.getInstance().getMinActiveConnections()) {
116+
int activePeerSize = (int) tronNetDelegate.getActivePeer().stream()
117+
.filter(peer -> peer.getChannel().isActive())
118+
.count();
119+
if (activePeerSize >= CommonParameter.getInstance().getMinActiveConnections()) {
118120
List<PeerConnection> peers = tronNetDelegate.getActivePeer().stream()
119121
.filter(peer -> !peer.getChannel().isTrustPeer())
120122
.filter(peer -> peer.getChannel().isActive())
@@ -127,7 +129,7 @@ private void disconnectIsolated2() {
127129

128130
//disconnect from some passive nodes, make sure retention nodes' num <= 0.8 * maxConnection,
129131
//so new peers can come in
130-
peerSize = tronNetDelegate.getActivePeer().size();
132+
int peerSize = tronNetDelegate.getActivePeer().size();
131133
int threshold = (int) (CommonParameter.getInstance().getMaxConnections() * retentionPercent);
132134
if (peerSize > threshold) {
133135
int disconnectSize = peerSize - threshold;
@@ -136,7 +138,7 @@ private void disconnectIsolated2() {
136138
.filter(peer -> !peer.getChannel().isActive())
137139
.collect(Collectors.toList());
138140
try {
139-
peers.sort(Comparator.comparing(PeerConnection::getLastActiveTime, Long::compareTo));
141+
peers.sort(Comparator.comparing(PeerConnection::getLastInteractiveTime, Long::compareTo));
140142
} catch (Exception e) {
141143
logger.warn("Sort disconnectIsolated2 peers failed: {}", e.getMessage());
142144
return;
@@ -156,7 +158,7 @@ private Optional<PeerConnection> getEarliestPeer(List<PeerConnection> pees) {
156158
Optional<PeerConnection> one = Optional.empty();
157159
try {
158160
one = pees.stream()
159-
.min(Comparator.comparing(PeerConnection::getLastActiveTime, Long::compareTo));
161+
.min(Comparator.comparing(PeerConnection::getLastInteractiveTime, Long::compareTo));
160162
} catch (Exception e) {
161163
logger.warn("Get earliest peer failed: {}", e.getMessage());
162164
}
@@ -182,7 +184,8 @@ private boolean isIsolateLand2() {
182184

183185
private void disconnectFromPeer(PeerConnection peer, ReasonCode reasonCode,
184186
DisconnectCause cause) {
185-
int inactiveSeconds = (int) ((System.currentTimeMillis() - peer.getLastActiveTime()) / 1000);
187+
int inactiveSeconds = (int) ((System.currentTimeMillis() - peer.getLastInteractiveTime())
188+
/ 1000);
186189
logger.info("Disconnect from peer {}, inactive seconds {}, cause: {}",
187190
peer.getInetSocketAddress(), inactiveSeconds, cause);
188191
peer.disconnect(reasonCode);

framework/src/test/java/org/tron/core/net/P2pEventHandlerImplTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,20 +113,20 @@ public void testProcessInventoryMessage() throws Exception {
113113
}
114114

115115
@Test
116-
public void testUpdateLastActiveTime() throws Exception {
116+
public void testUpdateLastInteractiveTime() throws Exception {
117117
String[] a = new String[0];
118118
Args.setParam(a, Constant.TESTNET_CONF);
119119

120120
PeerConnection peer = new PeerConnection();
121121
P2pEventHandlerImpl p2pEventHandler = new P2pEventHandlerImpl();
122122

123123
Method method = p2pEventHandler.getClass()
124-
.getDeclaredMethod("updateLastActiveTime", PeerConnection.class, TronMessage.class);
124+
.getDeclaredMethod("updateLastInteractiveTime", PeerConnection.class, TronMessage.class);
125125
method.setAccessible(true);
126126

127127
long t1 = System.currentTimeMillis();
128128
FetchInvDataMessage message = new FetchInvDataMessage(new ArrayList<>(), InventoryType.BLOCK);
129129
method.invoke(p2pEventHandler, peer, message);
130-
Assert.assertTrue(peer.getLastActiveTime() >= t1);
130+
Assert.assertTrue(peer.getLastInteractiveTime() >= t1);
131131
}
132132
}

framework/src/test/java/org/tron/core/net/services/ResilienceServiceTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,10 @@ public void testDisconnectRandom() {
6969
Assert.assertEquals(maxConnection, PeerManager.getPeers().size());
7070

7171
PeerConnection p1 = PeerManager.getPeers().get(1);
72-
p1.setLastActiveTime(
72+
p1.setLastInteractiveTime(
7373
System.currentTimeMillis() - Args.getInstance().inactiveThreshold * 1000L - 1000);
7474
PeerConnection p2 = PeerManager.getPeers().get(10);
75-
p2.setLastActiveTime(
75+
p2.setLastInteractiveTime(
7676
System.currentTimeMillis() - Args.getInstance().inactiveThreshold * 1000L - 2000);
7777

7878
ReflectUtils.invokeMethod(service, "disconnectRandom");
@@ -108,11 +108,11 @@ public void testDisconnectLan() {
108108

109109
PeerConnection p1 = PeerManager.getPeers().get(1);
110110
InetSocketAddress address1 = p1.getChannel().getInetSocketAddress();
111-
p1.setLastActiveTime(
111+
p1.setLastInteractiveTime(
112112
System.currentTimeMillis() - Args.getInstance().inactiveThreshold * 1000L - 1000);
113113
PeerConnection p2 = PeerManager.getPeers().get(2);
114114
InetSocketAddress address2 = p2.getChannel().getInetSocketAddress();
115-
p2.setLastActiveTime(
115+
p2.setLastInteractiveTime(
116116
System.currentTimeMillis() - Args.getInstance().inactiveThreshold * 1000L - 2000);
117117

118118
ReflectUtils.invokeMethod(service, "disconnectLan");

0 commit comments

Comments
 (0)