Skip to content

Commit 79051b4

Browse files
authored
Merge pull request #746 from tronprotocol/fix-net-bug
after add to active success then send hello msg
2 parents ffb975e + d16ba95 commit 79051b4

File tree

3 files changed

+34
-27
lines changed

3 files changed

+34
-27
lines changed

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
*/
1818
package org.tron.common.overlay.server;
1919

20-
import io.netty.channel.ChannelFutureListener;
2120
import io.netty.channel.ChannelHandlerContext;
2221
import io.netty.channel.ChannelPipeline;
2322
import io.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder;
@@ -138,7 +137,6 @@ public void publicHandshakeFinished(ChannelHandlerContext ctx, HelloMessage msg)
138137
setStartTime(msg.getTimestamp());
139138
setTronState(TronState.HANDSHAKE_FINISHED);
140139
getNodeStatistics().p2pHandShake.add();
141-
channelManager.add(this);
142140
logger.info("Finish handshake with {}.", ctx.channel().remoteAddress());
143141
}
144142

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

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ public Set<String> nodesInUse() {
8585

8686
public void disconnect(Channel peer, ReasonCode reason) {
8787
peer.disconnect(reason);
88-
InetSocketAddress socketAddress = (InetSocketAddress)peer.getChannelHandlerContext().channel().remoteAddress();
88+
InetSocketAddress socketAddress = (InetSocketAddress) peer.getChannelHandlerContext().channel()
89+
.remoteAddress();
8990
recentlyDisconnected.put(socketAddress.getAddress(), new Date());
9091
}
9192

@@ -115,34 +116,30 @@ public boolean isRecentlyDisconnected(InetAddress peerAddr) {
115116
}
116117
}
117118

118-
public void add(Channel peer) {
119-
if (isShouldAddToActivePeers(peer)) {
120-
activePeers.put(peer.getNodeIdWrapper(), peer);
121-
syncPool.onConnect(peer);
122-
logger.info("Add active peer {}, total active peers: {}", peer, activePeers.size());
123-
}
124-
}
125-
126-
private boolean isShouldAddToActivePeers(Channel peer) {
119+
public synchronized boolean procPeer(Channel peer) {
127120
if (peer.getNodeStatistics().isPenalized()) {
128121
disconnect(peer, peer.getNodeStatistics().getDisconnectReason());
129122
return false;
130-
} else if (!peer.isActive() && activePeers.size() >= maxActivePeers) {
123+
}
124+
125+
if (!peer.isActive() && activePeers.size() >= maxActivePeers) {
131126
disconnect(peer, TOO_MANY_PEERS);
132127
return false;
133-
} else if (activePeers.containsKey(peer.getNodeIdWrapper())) {
128+
}
129+
130+
if (activePeers.containsKey(peer.getNodeIdWrapper())) {
134131
Channel channel = activePeers.get(peer.getNodeIdWrapper());
135132
if (channel.getStartTime() > peer.getStartTime()) {
136133
logger.info("Disconnect connection established later, {}", channel.getNode());
137134
disconnect(channel, DUPLICATE_PEER);
138-
return true;
139135
} else {
140136
disconnect(peer, DUPLICATE_PEER);
141137
return false;
142138
}
143-
} else {
144-
return true;
145139
}
140+
logger.info("Add active peer {}, total active peers: {}", peer, activePeers.size());
141+
activePeers.put(peer.getNodeIdWrapper(), peer);
142+
return true;
146143
}
147144

148145
public Collection<Channel> getActivePeers() {

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

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import io.netty.channel.ChannelHandlerContext;
2222
import io.netty.handler.codec.ByteToMessageDecoder;
2323
import java.net.InetSocketAddress;
24-
import java.net.SocketAddress;
2524
import java.util.Arrays;
2625
import java.util.List;
2726
import org.slf4j.Logger;
@@ -31,14 +30,15 @@
3130
import org.springframework.context.annotation.Scope;
3231
import org.springframework.stereotype.Component;
3332
import org.tron.common.overlay.discover.NodeManager;
34-
import org.tron.common.overlay.message.*;
35-
import org.tron.common.utils.ByteArray;
33+
import org.tron.common.overlay.message.DisconnectMessage;
34+
import org.tron.common.overlay.message.HelloMessage;
35+
import org.tron.common.overlay.message.P2pMessage;
36+
import org.tron.common.overlay.message.P2pMessageFactory;
37+
import org.tron.common.overlay.message.ReasonCode;
3638
import org.tron.core.config.args.Args;
3739
import org.tron.core.db.Manager;
3840
import org.tron.core.net.peer.PeerConnection;
3941

40-
import static org.tron.common.overlay.message.StaticMessages.PONG_MESSAGE;
41-
4242
@Component
4343
@Scope("prototype")
4444
public class HandshakeHandler extends ByteToMessageDecoder {
@@ -51,13 +51,20 @@ public class HandshakeHandler extends ByteToMessageDecoder {
5151

5252
private final NodeManager nodeManager;
5353

54+
private final ChannelManager channelManager;
55+
5456
private Manager manager;
5557

5658
private P2pMessageFactory messageFactory = new P2pMessageFactory();
59+
60+
@Autowired
61+
private SyncPool syncPool;
5762

5863
@Autowired
59-
public HandshakeHandler(final NodeManager nodeManager, final Manager manager) {
64+
public HandshakeHandler(final NodeManager nodeManager, final ChannelManager channelManager,
65+
final Manager manager) {
6066
this.nodeManager = nodeManager;
67+
this.channelManager = channelManager;
6168
this.manager = manager;
6269
}
6370

@@ -140,14 +147,19 @@ private void handleHelloMsg(ChannelHandlerContext ctx, HelloMessage msg) {
140147
return;
141148
}
142149

143-
if (remoteId.length != 64) {
144-
sendHelloMsg(ctx, msg.getTimestamp());
145-
}
146-
147150
((PeerConnection)channel).setHelloMessage(msg);
148151

149152
channel.getNodeStatistics().p2pInHello.add();
150153

151154
channel.publicHandshakeFinished(ctx, msg);
155+
if (!channelManager.procPeer(channel)) {
156+
return;
157+
}
158+
159+
if (remoteId.length != 64) {
160+
sendHelloMsg(ctx, msg.getTimestamp());
161+
}
162+
163+
syncPool.onConnect(channel);
152164
}
153165
}

0 commit comments

Comments
 (0)