Skip to content

Commit 9c09ce1

Browse files
authored
Merge pull request tronprotocol#1098 from tronprotocol/revert-1097-add_message
Revert "Add message"
2 parents 723e11a + 4551def commit 9c09ce1

File tree

19 files changed

+102
-158
lines changed

19 files changed

+102
-158
lines changed

src/main/java/org/tron/common/overlay/discover/node/NodeHandler.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ public enum State {
8787
private NodeStatistics nodeStatistics;
8888
private NodeHandler replaceCandidate;
8989
private volatile boolean waitForPong = false;
90-
private volatile boolean waitForNeighbors = false;
9190
private volatile int pingTrials = 3;
9291
private long pingSent;
9392

@@ -205,11 +204,6 @@ public void handlePong(PongMessage msg) {
205204
}
206205

207206
public void handleNeighbours(NeighborsMessage msg) {
208-
if (!waitForNeighbors){
209-
logger.warn("Receive neighbors from {} without send find nodes.", node.getHost());
210-
return;
211-
}
212-
waitForNeighbors = false;
213207
getNodeStatistics().discoverInNeighbours.add();
214208
for (Node n : msg.getNodes()) {
215209
if (!nodeManager.getPublicHomeNode().getHexId().equals(n.getHexId())) {
@@ -275,7 +269,6 @@ public void sendNeighbours(List<Node> neighbours) {
275269
}
276270

277271
public void sendFindNode(byte[] target) {
278-
waitForNeighbors = true;
279272
Message findNode = new FindNodeMessage(nodeManager.getPublicHomeNode(), target);
280273
sendMessage(findNode);
281274
getNodeStatistics().discoverOutFind.add();

src/main/java/org/tron/common/overlay/discover/node/NodeManager.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,10 @@ public void run() {
138138
for (Node node : bootNodes) {
139139
getNodeHandler(node);
140140
}
141+
142+
for (Node node : args.getNodeActive()) {
143+
getNodeHandler(node).getNodeStatistics().setPredefined(true);
144+
}
141145
}
142146
}
143147

src/main/java/org/tron/common/overlay/discover/node/NodeStatistics.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ public NodeStatistics(Node node) {
8585
discoverMessageLatency = new SimpleStatter(node.getIdString());
8686
}
8787

88+
private int getSessionReputation() {
89+
return getSessionFairReputation() + (isPredefined ? REPUTATION_PREDEFINED : 0);
90+
}
91+
8892
private int getSessionFairReputation() {
8993
int discoverReput = 0;
9094

@@ -125,14 +129,7 @@ private int getSessionFairReputation() {
125129
}
126130

127131
public int getReputation() {
128-
int score = 0;
129-
if (!isReputationPenalized()){
130-
score += persistedReputation / 2 + getSessionFairReputation();
131-
}
132-
if (isPredefined){
133-
score += REPUTATION_PREDEFINED;
134-
}
135-
return score;
132+
return isReputationPenalized() ? 0 : persistedReputation / 2 + getSessionReputation();
136133
}
137134

138135
public ReasonCode getDisconnectReason() {

src/main/java/org/tron/common/overlay/discover/table/NodeEntry.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,15 @@ public class NodeEntry {
3333
public NodeEntry(Node n) {
3434
this.node = n;
3535
this.ownerId = n.getId();
36-
entryId = n.getHost();
36+
entryId = n.toString();
3737
distance = distance(ownerId, n.getId());
3838
touch();
3939
}
4040

4141
public NodeEntry(byte[] ownerId, Node n) {
4242
this.node = n;
4343
this.ownerId = ownerId;
44-
entryId = n.getHost();
44+
entryId = n.toString();
4545
distance = distance(ownerId, n.getId());
4646
touch();
4747
}

src/main/java/org/tron/common/overlay/discover/table/NodeTable.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,6 @@ public final void initialize() {
5959

6060
public synchronized Node addNode(Node n) {
6161
NodeEntry e = new NodeEntry(node.getId(), n);
62-
if (nodes.contains(e)) {
63-
nodes.forEach(nodeEntry -> {
64-
if (nodeEntry.equals(e)) {
65-
nodeEntry.touch();
66-
}
67-
});
68-
return null;
69-
}
7062
NodeEntry lastSeen = buckets[getBucketId(e)].addNode(e);
7163
if (lastSeen != null) {
7264
return lastSeen.getNode();

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

Lines changed: 29 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,38 @@
1+
/*
2+
* Copyright (c) [2016] [ <ether.camp> ]
3+
* This file is part of the ethereumJ library.
4+
*
5+
* The ethereumJ library is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU Lesser General Public License as published by
7+
* the Free Software Foundation, either version 3 of the License, or
8+
* (at your option) any later version.
9+
*
10+
* The ethereumJ library is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU Lesser General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU Lesser General Public License
16+
* along with the ethereumJ library. If not, see <http://www.gnu.org/licenses/>.
17+
*/
118
package org.tron.common.overlay.server;
219

320
import static org.tron.protos.Protocol.ReasonCode.DUPLICATE_PEER;
421
import static org.tron.protos.Protocol.ReasonCode.TOO_MANY_PEERS;
5-
import static org.tron.protos.Protocol.ReasonCode.TOO_MANY_PEERS_WITH_SAME_IP;
622
import static org.tron.protos.Protocol.ReasonCode.UNKNOWN;
723

824
import com.google.common.cache.Cache;
925
import com.google.common.cache.CacheBuilder;
1026
import java.net.InetAddress;
11-
import java.net.InetSocketAddress;
1227
import java.util.Collection;
1328
import java.util.Map;
1429
import java.util.concurrent.ConcurrentHashMap;
1530
import java.util.concurrent.TimeUnit;
16-
import lombok.Getter;
1731
import org.slf4j.Logger;
1832
import org.slf4j.LoggerFactory;
1933
import org.springframework.beans.factory.annotation.Autowired;
2034
import org.springframework.stereotype.Component;
2135
import org.tron.common.overlay.client.PeerClient;
22-
import org.tron.common.overlay.discover.node.Node;
2336
import org.tron.core.config.args.Args;
2437
import org.tron.core.db.ByteArrayWrapper;
2538
import org.tron.protos.Protocol.ReasonCode;
@@ -40,14 +53,9 @@ public class ChannelManager {
4053
private Cache<InetAddress, ReasonCode> recentlyDisconnected = CacheBuilder.newBuilder().maximumSize(1000)
4154
.expireAfterWrite(30, TimeUnit.SECONDS).recordStats().build();
4255

43-
@Getter
44-
private Map<InetAddress, Node> trustPeers = new ConcurrentHashMap();
45-
4656
private Args args = Args.getInstance();
4757

48-
private int maxActivePeers = args.getNodeMaxActiveNodes();
49-
50-
private int getMaxActivePeersWithSameIp = args.getNodeMaxActiveNodesWithSameIp();
58+
private int maxActivePeers = args.getNodeMaxActiveNodes() > 0 ? args.getNodeMaxActiveNodes() : 30;
5159

5260
private PeerServer peerServer;
5361

@@ -65,11 +73,6 @@ private ChannelManager(final PeerServer peerServer, final PeerClient peerClient)
6573
new Thread(() -> peerServer.start(Args.getInstance().getNodeListenPort()),
6674
"PeerServerThread").start();
6775
}
68-
69-
for (Node node : args.getPassiveNodes()){
70-
trustPeers.put(new InetSocketAddress(node.getHost(), node.getPort()).getAddress() , node);
71-
}
72-
logger.info("Trust peer size {}", trustPeers.size());
7376
}
7477

7578
public void processDisconnect(Channel channel, ReasonCode reason){
@@ -107,26 +110,19 @@ public void notifyDisconnect(Channel channel) {
107110

108111
public synchronized boolean processPeer(Channel peer) {
109112

110-
if (!trustPeers.containsKey(peer.getInetAddress())){
111-
if (recentlyDisconnected.getIfPresent(peer) != null){
112-
logger.info("Peer {} recently disconnected.", peer.getInetAddress());
113-
return false;
114-
}
115-
116-
if (badPeers.getIfPresent(peer) != null) {
117-
peer.disconnect(peer.getNodeStatistics().getDisconnectReason());
118-
return false;
119-
}
113+
if (recentlyDisconnected.getIfPresent(peer) != null){
114+
logger.info("Peer {} recently disconnected.", peer.getInetAddress());
115+
return false;
116+
}
120117

121-
if (!peer.isActive() && activePeers.size() >= maxActivePeers) {
122-
peer.disconnect(TOO_MANY_PEERS);
123-
return false;
124-
}
118+
if (badPeers.getIfPresent(peer) != null) {
119+
peer.disconnect(peer.getNodeStatistics().getDisconnectReason());
120+
return false;
121+
}
125122

126-
if (getConnectionNum(peer.getInetAddress()) >= getMaxActivePeersWithSameIp){
127-
peer.disconnect(TOO_MANY_PEERS_WITH_SAME_IP);
128-
return false;
129-
}
123+
if (!peer.isActive() && activePeers.size() >= maxActivePeers) {
124+
peer.disconnect(TOO_MANY_PEERS);
125+
return false;
130126
}
131127

132128
if (activePeers.containsKey(peer.getNodeIdWrapper())) {
@@ -144,16 +140,6 @@ public synchronized boolean processPeer(Channel peer) {
144140
return true;
145141
}
146142

147-
public int getConnectionNum(InetAddress inetAddress){
148-
int cnt = 0;
149-
for (Channel channel: activePeers.values()){
150-
if (channel.getInetAddress().equals(inetAddress)){
151-
cnt++;
152-
}
153-
}
154-
return cnt;
155-
}
156-
157143
public Collection<Channel> getActivePeers() {
158144
return activePeers.values();
159145
}

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import io.netty.buffer.ByteBuf;
2121
import io.netty.channel.ChannelHandlerContext;
2222
import io.netty.handler.codec.ByteToMessageDecoder;
23-
import java.net.InetAddress;
2423
import java.net.InetSocketAddress;
2524
import java.util.Arrays;
2625
import java.util.List;
@@ -126,8 +125,7 @@ private void sendHelloMsg(ChannelHandlerContext ctx, long time){
126125
private void handleHelloMsg(ChannelHandlerContext ctx, HelloMessage msg) {
127126
if (remoteId.length != 64) {
128127
channel.initNode(msg.getFrom().getId(), msg.getFrom().getPort());
129-
InetAddress address = ((InetSocketAddress)ctx.channel().remoteAddress()).getAddress();
130-
if (!channelManager.getTrustPeers().keySet().contains(address) && !syncPool.isCanConnect()) {
128+
if (!syncPool.isCanConnect()) {
131129
channel.disconnect(ReasonCode.TOO_MANY_PEERS);
132130
return;
133131
}

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

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
import com.google.common.cache.Cache;
2121
import com.google.common.cache.CacheBuilder;
22-
import com.google.common.collect.Lists;
2322
import java.net.InetAddress;
2423
import java.util.ArrayList;
2524
import java.util.Collections;
@@ -32,6 +31,8 @@
3231
import java.util.concurrent.TimeUnit;
3332
import java.util.concurrent.atomic.AtomicInteger;
3433
import java.util.function.Predicate;
34+
35+
import com.google.common.collect.Lists;
3536
import org.slf4j.Logger;
3637
import org.slf4j.LoggerFactory;
3738
import org.springframework.beans.factory.annotation.Autowired;
@@ -41,7 +42,6 @@
4142
import org.tron.common.overlay.discover.node.Node;
4243
import org.tron.common.overlay.discover.node.NodeHandler;
4344
import org.tron.common.overlay.discover.node.NodeManager;
44-
import org.tron.common.overlay.discover.node.NodeStatistics;
4545
import org.tron.core.config.args.Args;
4646
import org.tron.core.net.peer.PeerConnection;
4747
import org.tron.core.net.peer.PeerConnectionDelegate;
@@ -52,10 +52,8 @@ public class SyncPool {
5252
public static final Logger logger = LoggerFactory.getLogger("SyncPool");
5353

5454
private static final double factor = 0.4;
55-
private static final double activeFactor = 0.2;
5655

57-
private final List<PeerConnection> activePeers = Collections
58-
.synchronizedList(new ArrayList<PeerConnection>());
56+
private final List<PeerConnection> activePeers = Collections.synchronizedList(new ArrayList<PeerConnection>());
5957
private final AtomicInteger passivePeersCount = new AtomicInteger(0);
6058
private final AtomicInteger activePeersCount = new AtomicInteger(0);
6159

@@ -74,9 +72,7 @@ public class SyncPool {
7472

7573
private Args args = Args.getInstance();
7674

77-
private int maxActiveNodes = args.getNodeMaxActiveNodes();
78-
79-
private int getMaxActivePeersWithSameIp = args.getNodeMaxActiveNodesWithSameIp();
75+
private int maxActiveNodes = args.getNodeMaxActiveNodes() > 0 ? args.getNodeMaxActiveNodes() : 30;
8076

8177
private ScheduledExecutorService poolLoopExecutor = Executors.newSingleThreadScheduledExecutor();
8278

@@ -91,10 +87,6 @@ public void init(PeerConnectionDelegate peerDel) {
9187

9288
peerClient = ctx.getBean(PeerClient.class);
9389

94-
for (Node node : args.getActiveNodes()) {
95-
nodeManager.getNodeHandler(node).getNodeStatistics().setPredefined(true);
96-
}
97-
9890
poolLoopExecutor.scheduleWithFixedDelay(() -> {
9991
try {
10092
fillUp();
@@ -112,11 +104,8 @@ public void init(PeerConnectionDelegate peerDel) {
112104
}
113105

114106
private void fillUp() {
115-
int lackSize = Math.max((int) (maxActiveNodes * factor) - activePeers.size(),
116-
(int) (maxActiveNodes * activeFactor - activePeersCount.get()));
117-
if (lackSize <= 0) {
118-
return;
119-
}
107+
int lackSize = (int) (maxActiveNodes * factor) - activePeers.size();
108+
if(lackSize <= 0) return;
120109

121110
final Set<String> nodesInUse = new HashSet<>();
122111
channelManager.getActivePeers().forEach(channel -> nodesInUse.add(channel.getPeerId()));
@@ -200,7 +189,7 @@ public synchronized void onDisconnect(Channel peer) {
200189
}
201190

202191
public boolean isCanConnect() {
203-
if (passivePeersCount.get() >= maxActiveNodes * (1 - activeFactor)) {
192+
if (activePeers.size() >= maxActiveNodes) {
204193
return false;
205194
}
206195
return true;
@@ -231,22 +220,15 @@ public boolean test(NodeHandler handler) {
231220
return false;
232221
}
233222

234-
if (nodesInUse != null && nodesInUse.contains(handler.getNode().getHexId())) {
235-
return false;
236-
}
237-
238-
if (handler.getNodeStatistics().getReputation() >= NodeStatistics.REPUTATION_PREDEFINED){
239-
return true;
240-
}
241-
242223
InetAddress inetAddress = handler.getInetSocketAddress().getAddress();
243224
if (channelManager.getRecentlyDisconnected().getIfPresent(inetAddress) != null) {
244225
return false;
245226
}
246227
if (channelManager.getBadPeers().getIfPresent(inetAddress) != null) {
247228
return false;
248229
}
249-
if (channelManager.getConnectionNum(inetAddress) >= getMaxActivePeersWithSameIp){
230+
231+
if (nodesInUse != null && nodesInUse.contains(handler.getNode().getHexId())) {
250232
return false;
251233
}
252234

src/main/java/org/tron/common/utils/Sha256Hash.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ public class Sha256Hash implements Serializable, Comparable<Sha256Hash> {
4545

4646
private final byte[] bytes;
4747

48+
private long blockNum;
49+
50+
4851
private byte[] generateBlockId(long blockNum, Sha256Hash blockHash) {
4952
byte[] numBytes = Longs.toByteArray(blockNum);
5053
byte[] hash = blockHash.getBytes();
@@ -59,16 +62,22 @@ private byte[] generateBlockId(long blockNum, byte[] blockHash) {
5962
return hash;
6063
}
6164

65+
public long getBlockNum(){
66+
return blockNum;
67+
}
68+
6269
public Sha256Hash(long num, byte[] hash) {
6370
byte[] rawHashBytes = this.generateBlockId(num, hash);
6471
checkArgument(rawHashBytes.length == LENGTH);
6572
this.bytes = rawHashBytes;
73+
this.blockNum = num;
6674
}
6775

6876
public Sha256Hash(long num, Sha256Hash hash) {
6977
byte[] rawHashBytes = this.generateBlockId(num, hash);
7078
checkArgument(rawHashBytes.length == LENGTH);
7179
this.bytes = rawHashBytes;
80+
this.blockNum = num;
7281
}
7382

7483
/**

0 commit comments

Comments
 (0)