Skip to content

Commit bcba5c1

Browse files
authored
Merge pull request #5873 from zeusoo001/sortpeers-method-opt
feat(net) : optimize the sortPeers method
2 parents dfbd1ff + f9e595a commit bcba5c1

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

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

+5-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,11 @@ private static void remove(PeerConnection peerConnection) {
9494
}
9595

9696
public static synchronized void sortPeers() {
97-
peers.sort(Comparator.comparingDouble(c -> c.getChannel().getAvgLatency()));
97+
try {
98+
peers.sort(Comparator.comparingLong(c -> c.getChannel().getAvgLatency()));
99+
} catch (Exception e) {
100+
logger.warn("Sort peers failed. {}", e.getMessage());
101+
}
98102
}
99103

100104
public static PeerConnection getPeerConnection(Channel channel) {

framework/src/test/java/org/tron/core/net/peer/PeerManagerTest.java

+28
Original file line numberDiff line numberDiff line change
@@ -135,4 +135,32 @@ public void testGetPeers() throws Exception {
135135
Assert.assertEquals(2, peers.size());
136136
}
137137

138+
@Test
139+
public void testSortPeers() throws Exception {
140+
PeerConnection p1 = new PeerConnection();
141+
PeerConnection p2 = new PeerConnection();
142+
143+
List<PeerConnection> peers = new ArrayList<>();
144+
peers.add(p1);
145+
peers.add(p2);
146+
147+
Field field = PeerManager.class.getDeclaredField("peers");
148+
field.setAccessible(true);
149+
field.set(PeerManager.class, Collections.synchronizedList(peers));
150+
151+
PeerManager.sortPeers();
152+
153+
Channel c1 = new Channel();
154+
c1.updateAvgLatency(100000L);
155+
ReflectUtils.setFieldValue(p1, "channel", c1);
156+
157+
Channel c2 = new Channel();
158+
c2.updateAvgLatency(1000L);
159+
ReflectUtils.setFieldValue(p2, "channel", c2);
160+
161+
PeerManager.sortPeers();
162+
163+
Assert.assertEquals(PeerManager.getPeers().get(0), p2);
164+
}
165+
138166
}

0 commit comments

Comments
 (0)