mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-04-22 08:29:16 -04:00
Fix null pointer
This commit is contained in:
parent
ae6b95eed8
commit
447849900f
@ -52,7 +52,7 @@ public class RequestDataManager implements MessageListener, ConnectionListener,
|
||||
private final Collection<NodeAddress> seedNodeAddresses;
|
||||
private final Listener listener;
|
||||
|
||||
private final Map<NodeAddress, RequestDataHandler> requestDataHandlerMap = new HashMap<>();
|
||||
private final Map<NodeAddress, RequestDataHandler> handlerMap = new HashMap<>();
|
||||
private Optional<NodeAddress> nodeAddressOfPreliminaryDataRequest = Optional.empty();
|
||||
private Timer retryTimer;
|
||||
private boolean dataUpdateRequested;
|
||||
@ -82,7 +82,7 @@ public class RequestDataManager implements MessageListener, ConnectionListener,
|
||||
stopRetryTimer();
|
||||
networkNode.removeMessageListener(this);
|
||||
peerManager.removeListener(this);
|
||||
requestDataHandlerMap.values().stream().forEach(RequestDataHandler::cleanup);
|
||||
handlerMap.values().stream().forEach(RequestDataHandler::cleanup);
|
||||
}
|
||||
|
||||
|
||||
@ -210,7 +210,7 @@ public class RequestDataManager implements MessageListener, ConnectionListener,
|
||||
private void requestData(NodeAddress nodeAddress, List<NodeAddress> remainingNodeAddresses) {
|
||||
Log.traceCall("nodeAddress=" + nodeAddress + " / remainingNodeAddresses=" + remainingNodeAddresses);
|
||||
if (!stopped) {
|
||||
if (!requestDataHandlerMap.containsKey(nodeAddress)) {
|
||||
if (!handlerMap.containsKey(nodeAddress)) {
|
||||
RequestDataHandler requestDataHandler = new RequestDataHandler(networkNode, dataStorage, peerManager,
|
||||
new RequestDataHandler.Listener() {
|
||||
@Override
|
||||
@ -220,7 +220,7 @@ public class RequestDataManager implements MessageListener, ConnectionListener,
|
||||
stopRetryTimer();
|
||||
|
||||
// need to remove before listeners are notified as they cause the update call
|
||||
requestDataHandlerMap.remove(nodeAddress);
|
||||
handlerMap.remove(nodeAddress);
|
||||
|
||||
// 1. We get a response from requestPreliminaryData
|
||||
if (!nodeAddressOfPreliminaryDataRequest.isPresent()) {
|
||||
@ -242,7 +242,7 @@ public class RequestDataManager implements MessageListener, ConnectionListener,
|
||||
log.trace("requestDataHandshake of outbound connection failed.\n\tnodeAddress={}\n\t" +
|
||||
"ErrorMessage={}", nodeAddress, errorMessage);
|
||||
|
||||
requestDataHandlerMap.remove(nodeAddress);
|
||||
handlerMap.remove(nodeAddress);
|
||||
peerManager.handleConnectionFault(nodeAddress, connection);
|
||||
|
||||
if (!stopped) {
|
||||
@ -273,7 +273,7 @@ public class RequestDataManager implements MessageListener, ConnectionListener,
|
||||
}
|
||||
}
|
||||
});
|
||||
requestDataHandlerMap.put(nodeAddress, requestDataHandler);
|
||||
handlerMap.put(nodeAddress, requestDataHandler);
|
||||
requestDataHandler.requestData(nodeAddress);
|
||||
} else {
|
||||
log.warn("We have started already a requestDataHandshake to peer. nodeAddress=" + nodeAddress);
|
||||
@ -346,16 +346,19 @@ public class RequestDataManager implements MessageListener, ConnectionListener,
|
||||
}
|
||||
|
||||
private void closeRequestDataHandler(Connection connection) {
|
||||
if (connection.getPeersNodeAddressOptional().isPresent()) {
|
||||
NodeAddress nodeAddress = connection.getPeersNodeAddressOptional().get();
|
||||
requestDataHandlerMap.get(nodeAddress).cleanup();
|
||||
requestDataHandlerMap.remove(nodeAddress);
|
||||
Optional<NodeAddress> peersNodeAddressOptional = connection.getPeersNodeAddressOptional();
|
||||
if (peersNodeAddressOptional.isPresent()) {
|
||||
NodeAddress nodeAddress = peersNodeAddressOptional.get();
|
||||
if (handlerMap.containsKey(nodeAddress)) {
|
||||
handlerMap.get(nodeAddress).cleanup();
|
||||
handlerMap.remove(nodeAddress);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void closeAllRequestDataHandlers() {
|
||||
requestDataHandlerMap.values().stream().forEach(RequestDataHandler::cleanup);
|
||||
requestDataHandlerMap.clear();
|
||||
handlerMap.values().stream().forEach(RequestDataHandler::cleanup);
|
||||
handlerMap.clear();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ public class KeepAliveManager implements MessageListener, ConnectionListener, Pe
|
||||
|
||||
private final NetworkNode networkNode;
|
||||
private final PeerManager peerManager;
|
||||
private final Map<String, KeepAliveHandler> maintenanceHandlerMap = new HashMap<>();
|
||||
private final Map<String, KeepAliveHandler> handlerMap = new HashMap<>();
|
||||
private boolean stopped;
|
||||
private Timer keepAliveTimer;
|
||||
|
||||
@ -165,19 +165,19 @@ public class KeepAliveManager implements MessageListener, ConnectionListener, Pe
|
||||
.filter(connection -> connection instanceof OutboundConnection)
|
||||
.forEach(connection -> {
|
||||
final String uid = connection.getUid();
|
||||
if (!maintenanceHandlerMap.containsKey(uid)) {
|
||||
if (!handlerMap.containsKey(uid)) {
|
||||
KeepAliveHandler keepAliveHandler = new KeepAliveHandler(networkNode, peerManager, new KeepAliveHandler.Listener() {
|
||||
@Override
|
||||
public void onComplete() {
|
||||
maintenanceHandlerMap.remove(uid);
|
||||
handlerMap.remove(uid);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFault(String errorMessage) {
|
||||
maintenanceHandlerMap.remove(uid);
|
||||
handlerMap.remove(uid);
|
||||
}
|
||||
});
|
||||
maintenanceHandlerMap.put(uid, keepAliveHandler);
|
||||
handlerMap.put(uid, keepAliveHandler);
|
||||
keepAliveHandler.sendPing(connection);
|
||||
} else {
|
||||
log.warn("Connection with id {} has not completed and is still in our map. " +
|
||||
@ -185,7 +185,7 @@ public class KeepAliveManager implements MessageListener, ConnectionListener, Pe
|
||||
}
|
||||
});
|
||||
|
||||
int size = maintenanceHandlerMap.size();
|
||||
int size = handlerMap.size();
|
||||
log.info("maintenanceHandlerMap size=" + size);
|
||||
if (size > peerManager.getMaxConnections())
|
||||
log.warn("Seems we didn't clean up out map correctly.\n" +
|
||||
@ -195,19 +195,6 @@ public class KeepAliveManager implements MessageListener, ConnectionListener, Pe
|
||||
}
|
||||
}
|
||||
|
||||
private void closeMaintenanceHandler(Connection connection) {
|
||||
if (connection.getPeersNodeAddressOptional().isPresent()) {
|
||||
String uid = connection.getUid();
|
||||
maintenanceHandlerMap.get(uid).cleanup();
|
||||
maintenanceHandlerMap.remove(uid);
|
||||
}
|
||||
}
|
||||
|
||||
private void closeAllMaintenanceHandlers() {
|
||||
maintenanceHandlerMap.values().stream().forEach(KeepAliveHandler::cleanup);
|
||||
maintenanceHandlerMap.clear();
|
||||
}
|
||||
|
||||
private void stopKeepAliveTimer() {
|
||||
stopped = true;
|
||||
if (keepAliveTimer != null) {
|
||||
@ -215,4 +202,18 @@ public class KeepAliveManager implements MessageListener, ConnectionListener, Pe
|
||||
keepAliveTimer = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void closeMaintenanceHandler(Connection connection) {
|
||||
String uid = connection.getUid();
|
||||
if (handlerMap.containsKey(uid)) {
|
||||
handlerMap.get(uid).cleanup();
|
||||
handlerMap.remove(uid);
|
||||
}
|
||||
}
|
||||
|
||||
private void closeAllMaintenanceHandlers() {
|
||||
handlerMap.values().stream().forEach(KeepAliveHandler::cleanup);
|
||||
handlerMap.clear();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ public class PeerExchangeManager implements MessageListener, ConnectionListener,
|
||||
private final NetworkNode networkNode;
|
||||
private final PeerManager peerManager;
|
||||
private final Set<NodeAddress> seedNodeAddresses;
|
||||
private final Map<NodeAddress, PeerExchangeHandler> peerExchangeHandlerMap = new HashMap<>();
|
||||
private final Map<NodeAddress, PeerExchangeHandler> handlerMap = new HashMap<>();
|
||||
private Timer retryTimer, periodicTimer;
|
||||
private boolean stopped;
|
||||
|
||||
@ -180,14 +180,14 @@ public class PeerExchangeManager implements MessageListener, ConnectionListener,
|
||||
private void requestReportedPeers(NodeAddress nodeAddress, List<NodeAddress> remainingNodeAddresses) {
|
||||
Log.traceCall("nodeAddress=" + nodeAddress);
|
||||
if (!stopped) {
|
||||
if (!peerExchangeHandlerMap.containsKey(nodeAddress)) {
|
||||
if (!handlerMap.containsKey(nodeAddress)) {
|
||||
PeerExchangeHandler peerExchangeHandler = new PeerExchangeHandler(networkNode,
|
||||
peerManager,
|
||||
new PeerExchangeHandler.Listener() {
|
||||
@Override
|
||||
public void onComplete() {
|
||||
log.trace("PeerExchangeHandshake of outbound connection complete. nodeAddress={}", nodeAddress);
|
||||
peerExchangeHandlerMap.remove(nodeAddress);
|
||||
handlerMap.remove(nodeAddress);
|
||||
requestWithAvailablePeers();
|
||||
}
|
||||
|
||||
@ -196,7 +196,7 @@ public class PeerExchangeManager implements MessageListener, ConnectionListener,
|
||||
log.trace("PeerExchangeHandshake of outbound connection failed.\n\terrorMessage={}\n\t" +
|
||||
"nodeAddress={}", errorMessage, nodeAddress);
|
||||
|
||||
peerExchangeHandlerMap.remove(nodeAddress);
|
||||
handlerMap.remove(nodeAddress);
|
||||
peerManager.handleConnectionFault(nodeAddress, connection);
|
||||
if (!stopped) {
|
||||
if (!remainingNodeAddresses.isEmpty()) {
|
||||
@ -224,7 +224,7 @@ public class PeerExchangeManager implements MessageListener, ConnectionListener,
|
||||
}
|
||||
}
|
||||
});
|
||||
peerExchangeHandlerMap.put(nodeAddress, peerExchangeHandler);
|
||||
handlerMap.put(nodeAddress, peerExchangeHandler);
|
||||
peerExchangeHandler.sendGetPeersRequest(nodeAddress);
|
||||
} else {
|
||||
//TODO check when that happens
|
||||
@ -339,15 +339,18 @@ public class PeerExchangeManager implements MessageListener, ConnectionListener,
|
||||
}
|
||||
|
||||
private void closePeerExchangeHandler(Connection connection) {
|
||||
if (connection.getPeersNodeAddressOptional().isPresent()) {
|
||||
NodeAddress nodeAddress = connection.getPeersNodeAddressOptional().get();
|
||||
peerExchangeHandlerMap.get(nodeAddress).cleanup();
|
||||
peerExchangeHandlerMap.remove(nodeAddress);
|
||||
Optional<NodeAddress> peersNodeAddressOptional = connection.getPeersNodeAddressOptional();
|
||||
if (peersNodeAddressOptional.isPresent()) {
|
||||
NodeAddress nodeAddress = peersNodeAddressOptional.get();
|
||||
if (handlerMap.containsKey(nodeAddress)) {
|
||||
handlerMap.get(nodeAddress).cleanup();
|
||||
handlerMap.remove(nodeAddress);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void closeAllPeerExchangeHandlers() {
|
||||
peerExchangeHandlerMap.values().stream().forEach(PeerExchangeHandler::cleanup);
|
||||
peerExchangeHandlerMap.clear();
|
||||
handlerMap.values().stream().forEach(PeerExchangeHandler::cleanup);
|
||||
handlerMap.clear();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user