@@ -24,7 +24,7 @@ public class ResilienceService {
2424
2525 private static final long inactiveThreshold =
2626 CommonParameter .getInstance ().getInactiveThreshold () * 1000L ;
27- public static final long blockNotChangeThreshold = 90 * 1000L ;
27+ public static final long blockNotChangeThreshold = 60 * 1000L ;
2828
2929 //when node is isolated, retention percent peers will not be disconnected
3030 public static final double retentionPercent = 0.8 ;
@@ -86,67 +86,69 @@ private void disconnectRandom() {
8686 }
8787
8888 private void disconnectLan () {
89- if (isLanNode ()) {
90- // disconnect from the node that has keep inactive for more than inactiveThreshold
91- // and its lastActiveTime is smallest
92- int peerSize = tronNetDelegate .getActivePeer ().size ();
93- if (peerSize >= CommonParameter .getInstance ().getMinConnections ()) {
94- long now = System .currentTimeMillis ();
95- List <PeerConnection > peers = tronNetDelegate .getActivePeer ().stream ()
96- .filter (peer -> !peer .isDisconnect ())
97- .filter (peer -> now - peer .getLastActiveTime () >= inactiveThreshold )
98- .filter (peer -> !peer .getChannel ().isTrustPeer ())
99- .collect (Collectors .toList ());
100- Optional <PeerConnection > one = getEarliestPeer (peers );
101- one .ifPresent (peer -> disconnectFromPeer (peer , ReasonCode .BAD_PROTOCOL , "lan node" ));
102- }
89+ if (!isLanNode ()) {
90+ return ;
91+ }
92+ // disconnect from the node that has keep inactive for more than inactiveThreshold
93+ // and its lastActiveTime is smallest
94+ int peerSize = tronNetDelegate .getActivePeer ().size ();
95+ if (peerSize >= CommonParameter .getInstance ().getMinConnections ()) {
96+ long now = System .currentTimeMillis ();
97+ List <PeerConnection > peers = tronNetDelegate .getActivePeer ().stream ()
98+ .filter (peer -> !peer .isDisconnect ())
99+ .filter (peer -> now - peer .getLastActiveTime () >= inactiveThreshold )
100+ .filter (peer -> !peer .getChannel ().isTrustPeer ())
101+ .collect (Collectors .toList ());
102+ Optional <PeerConnection > one = getEarliestPeer (peers );
103+ one .ifPresent (peer -> disconnectFromPeer (peer , ReasonCode .BAD_PROTOCOL , "lan node" ));
103104 }
104105 }
105106
106107 private void disconnectIsolated2 () {
107- if (isIsolateLand2 ()) {
108- logger .warn ("Node is isolated, try to disconnect from peers" );
109- int peerSize = tronNetDelegate .getActivePeer ().size ();
110-
111- //disconnect from the node whose lastActiveTime is smallest
112- if (peerSize >= CommonParameter .getInstance ().getMinActiveConnections ()) {
113- List <PeerConnection > peers = tronNetDelegate .getActivePeer ().stream ()
114- .filter (peer -> !peer .isDisconnect ())
115- .filter (peer -> !peer .getChannel ().isTrustPeer ())
116- .filter (peer -> peer .getChannel ().isActive ())
117- .collect (Collectors .toList ());
118-
119- Optional <PeerConnection > one = getEarliestPeer (peers );
120- one .ifPresent (
121- peer -> disconnectFromPeer (peer , ReasonCode .BAD_PROTOCOL , "isolate2 and active" ));
122- }
108+ if (!isIsolateLand2 ()) {
109+ return ;
110+ }
111+ logger .warn ("Node is isolated, try to disconnect from peers" );
112+ int peerSize = tronNetDelegate .getActivePeer ().size ();
123113
124- //disconnect from some passive nodes, make sure retention nodes' num <= 0.8 * maxConnection,
125- //so new peers can come in
126- peerSize = tronNetDelegate .getActivePeer ().size ();
127- int threshold = (int ) (CommonParameter .getInstance ().getMaxConnections () * retentionPercent );
128- if (peerSize > threshold ) {
129- int disconnectSize = peerSize - threshold ;
130- List <PeerConnection > peers = tronNetDelegate .getActivePeer ().stream ()
131- .filter (peer -> !peer .isDisconnect ())
132- .filter (peer -> !peer .getChannel ().isTrustPeer ())
133- .filter (peer -> !peer .getChannel ().isActive ())
134- .collect (Collectors .toList ());
135- try {
136- peers .sort (Comparator .comparing (PeerConnection ::getLastActiveTime , Long ::compareTo ));
137- } catch (Exception e ) {
138- logger .warn ("Sort disconnectIsolated2 peers failed: {}" , e .getMessage ());
139- return ;
140- }
141- int candidateSize = peers .size ();
142- if (peers .size () > disconnectSize ) {
143- peers = peers .subList (0 , disconnectSize );
144- }
145- logger .info ("All peer Size:{}, plan size:{}, candidate size:{}, real size:{}" , peerSize ,
146- disconnectSize , candidateSize , peers .size ());
147- peers .forEach (
148- peer -> disconnectFromPeer (peer , ReasonCode .BAD_PROTOCOL , "isolate2 and passive" ));
114+ //disconnect from the node whose lastActiveTime is smallest
115+ if (peerSize >= CommonParameter .getInstance ().getMinActiveConnections ()) {
116+ List <PeerConnection > peers = tronNetDelegate .getActivePeer ().stream ()
117+ .filter (peer -> !peer .isDisconnect ())
118+ .filter (peer -> !peer .getChannel ().isTrustPeer ())
119+ .filter (peer -> peer .getChannel ().isActive ())
120+ .collect (Collectors .toList ());
121+
122+ Optional <PeerConnection > one = getEarliestPeer (peers );
123+ one .ifPresent (
124+ peer -> disconnectFromPeer (peer , ReasonCode .BAD_PROTOCOL , "isolate2 and active" ));
125+ }
126+
127+ //disconnect from some passive nodes, make sure retention nodes' num <= 0.8 * maxConnection,
128+ //so new peers can come in
129+ peerSize = tronNetDelegate .getActivePeer ().size ();
130+ int threshold = (int ) (CommonParameter .getInstance ().getMaxConnections () * retentionPercent );
131+ if (peerSize > threshold ) {
132+ int disconnectSize = peerSize - threshold ;
133+ List <PeerConnection > peers = tronNetDelegate .getActivePeer ().stream ()
134+ .filter (peer -> !peer .isDisconnect ())
135+ .filter (peer -> !peer .getChannel ().isTrustPeer ())
136+ .filter (peer -> !peer .getChannel ().isActive ())
137+ .collect (Collectors .toList ());
138+ try {
139+ peers .sort (Comparator .comparing (PeerConnection ::getLastActiveTime , Long ::compareTo ));
140+ } catch (Exception e ) {
141+ logger .warn ("Sort disconnectIsolated2 peers failed: {}" , e .getMessage ());
142+ return ;
143+ }
144+ int candidateSize = peers .size ();
145+ if (peers .size () > disconnectSize ) {
146+ peers = peers .subList (0 , disconnectSize );
149147 }
148+ logger .info ("All peer Size:{}, plan size:{}, candidate size:{}, real size:{}" , peerSize ,
149+ disconnectSize , candidateSize , peers .size ());
150+ peers .forEach (
151+ peer -> disconnectFromPeer (peer , ReasonCode .BAD_PROTOCOL , "isolate2 and passive" ));
150152 }
151153 }
152154
@@ -166,7 +168,8 @@ private boolean isLanNode() {
166168 int activePeerSize = (int ) tronNetDelegate .getActivePeer ().stream ()
167169 .filter (peer -> peer .getChannel ().isActive ())
168170 .count ();
169- return peerSize > 0 && peerSize == activePeerSize ;
171+ return peerSize > CommonParameter .getInstance ().getMinActiveConnections ()
172+ && peerSize == activePeerSize ;
170173 }
171174
172175 private boolean isIsolateLand2 () {
0 commit comments