diff --git a/src/main/java/org/tron/common/overlay/discover/NodeStatistics.java b/src/main/java/org/tron/common/overlay/discover/NodeStatistics.java index ca2cfbb384a..294003c7aae 100644 --- a/src/main/java/org/tron/common/overlay/discover/NodeStatistics.java +++ b/src/main/java/org/tron/common/overlay/discover/NodeStatistics.java @@ -117,7 +117,9 @@ private int getSessionFairReputation() { } } } - int score = discoverReput + 10 * reput - disconnectTimes * 20; + int score = + discoverReput + 10 * reput - (int) Math.pow(2, disconnectTimes) * (disconnectTimes > 0 ? 10 + : 0); return score > 0 ? score : 0; } @@ -193,13 +195,15 @@ public boolean isPenalized() { public void nodeDisconnectedRemote(ReasonCode reason) { lastDisconnectedTime = System.currentTimeMillis(); tronLastRemoteDisconnectReason = reason; - disconnectTimes++; - persistedReputation = persistedReputation / 2; } public void nodeDisconnectedLocal(ReasonCode reason) { lastDisconnectedTime = System.currentTimeMillis(); tronLastLocalDisconnectReason = reason; + } + + public void notifyDisconnect() { + lastDisconnectedTime = System.currentTimeMillis(); disconnectTimes++; persistedReputation = persistedReputation / 2; } diff --git a/src/main/java/org/tron/common/overlay/server/ChannelManager.java b/src/main/java/org/tron/common/overlay/server/ChannelManager.java index 6ee3b78f323..04805421cc9 100644 --- a/src/main/java/org/tron/common/overlay/server/ChannelManager.java +++ b/src/main/java/org/tron/common/overlay/server/ChannelManager.java @@ -150,6 +150,7 @@ public void notifyDisconnect(Channel channel) { || channel.getChannelHandlerContext().channel() == null) { return; } + channel.getNodeStatistics().notifyDisconnect(); InetSocketAddress socketAddress = (InetSocketAddress) channel.getChannelHandlerContext() .channel().remoteAddress(); recentlyDisconnected.put(socketAddress.getAddress(), new Date()); diff --git a/src/main/java/org/tron/common/overlay/server/SyncPool.java b/src/main/java/org/tron/common/overlay/server/SyncPool.java index b074138e854..404ad071fdd 100644 --- a/src/main/java/org/tron/common/overlay/server/SyncPool.java +++ b/src/main/java/org/tron/common/overlay/server/SyncPool.java @@ -206,10 +206,6 @@ public boolean test(NodeHandler handler) { if (handler.getNodeStatistics().getReputation() < 100) { return false; } - - if (handler.getNodeStatistics().isPenalized()) { - return false; - } return true; }