diff --git a/networking/src/main/java/ch/dissem/bitmessage/networking/AbstractConnection.java b/networking/src/main/java/ch/dissem/bitmessage/networking/AbstractConnection.java index 66f7dca..4a209aa 100644 --- a/networking/src/main/java/ch/dissem/bitmessage/networking/AbstractConnection.java +++ b/networking/src/main/java/ch/dissem/bitmessage/networking/AbstractConnection.java @@ -183,7 +183,7 @@ public abstract class AbstractConnection { } private void receiveMessage(Addr addr) { - LOG.debug("Received " + addr.getAddresses().size() + " addresses."); + LOG.trace("Received " + addr.getAddresses().size() + " addresses."); ctx.getNodeRegistry().offerAddresses(addr.getAddresses()); } diff --git a/networking/src/main/java/ch/dissem/bitmessage/networking/nio/NioNetworkHandler.java b/networking/src/main/java/ch/dissem/bitmessage/networking/nio/NioNetworkHandler.java index b1d1cb6..7c6a5b6 100644 --- a/networking/src/main/java/ch/dissem/bitmessage/networking/nio/NioNetworkHandler.java +++ b/networking/src/main/java/ch/dissem/bitmessage/networking/nio/NioNetworkHandler.java @@ -64,7 +64,7 @@ public class NioNetworkHandler implements NetworkHandler, InternalContext.Contex private Selector selector; private ServerSocketChannel serverChannel; private Map connections = new ConcurrentHashMap<>(); - private volatile int requestedObjectsCount; + private final Set requestedObjects = Collections.newSetFromMap(new ConcurrentHashMap(10_000)); private Thread starter; @@ -147,7 +147,6 @@ public class NioNetworkHandler implements NetworkHandler, InternalContext.Contex } catch (IOException e) { throw new ApplicationException(e); } - final Set requestedObjects = new HashSet<>(); thread("connection listener", new Runnable() { @Override public void run() { @@ -287,7 +286,6 @@ public class NioNetworkHandler implements NetworkHandler, InternalContext.Contex connection.disconnect(); } } - requestedObjectsCount = requestedObjects.size(); } for (Map.Entry e : connections.entrySet()) { if (e.getValue().isValid() && (e.getValue().interestOps() & OP_WRITE) == 0) { @@ -370,7 +368,10 @@ public class NioNetworkHandler implements NetworkHandler, InternalContext.Contex @Override public void request(Collection inventoryVectors) { - if (!isRunning()) return; + if (!isRunning()) { + requestedObjects.clear(); + return; + } Iterator iterator = inventoryVectors.iterator(); if (!iterator.hasNext()) { return; @@ -408,6 +409,9 @@ public class NioNetworkHandler implements NetworkHandler, InternalContext.Contex } } while (iterator.hasNext()); + // remove objects nobody knows of + requestedObjects.removeAll(inventoryVectors); + for (ConnectionInfo connection : distribution.keySet()) { List ivs = distribution.get(connection); if (!ivs.isEmpty()) { @@ -449,7 +453,7 @@ public class NioNetworkHandler implements NetworkHandler, InternalContext.Contex return new Property("network", null, new Property("connectionManager", isRunning() ? "running" : "stopped"), new Property("connections", null, streamProperties), - new Property("requestedObjects", requestedObjectsCount) + new Property("requestedObjects", requestedObjects.size()) ); }