mirror of
https://github.com/bisq-network/bisq.git
synced 2024-11-19 18:03:12 +01:00
Fix issue with message Listenter added too late and wrong handling of PreliminaryDataRequest vs. UpdateDataRequest
This commit is contained in:
parent
48e6cc34a8
commit
fd1efe7353
@ -37,6 +37,7 @@ public class RequestDataHandler implements MessageListener {
|
||||
private static final Logger log = LoggerFactory.getLogger(RequestDataHandler.class);
|
||||
|
||||
private static final long TIME_OUT_SEC = 20;
|
||||
private NodeAddress peersNodeAddress;
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -85,8 +86,9 @@ public class RequestDataHandler implements MessageListener {
|
||||
// API
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public void requestData(NodeAddress nodeAddress) {
|
||||
public void requestData(NodeAddress nodeAddress, boolean isPreliminaryDataRequest) {
|
||||
Log.traceCall("nodeAddress=" + nodeAddress);
|
||||
peersNodeAddress = nodeAddress;
|
||||
if (!stopped) {
|
||||
GetDataRequest getDataRequest;
|
||||
|
||||
@ -99,7 +101,7 @@ public class RequestDataHandler implements MessageListener {
|
||||
.map(e -> e.getKey().bytes)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
if (networkNode.getNodeAddress() == null)
|
||||
if (isPreliminaryDataRequest)
|
||||
getDataRequest = new PreliminaryGetDataRequest(nonce, excludedKeys);
|
||||
else
|
||||
getDataRequest = new GetUpdatedDataRequest(networkNode.getNodeAddress(), nonce, excludedKeys);
|
||||
@ -120,13 +122,13 @@ public class RequestDataHandler implements MessageListener {
|
||||
}
|
||||
|
||||
log.debug("We send a {} to peer {}. ", getDataRequest.getClass().getSimpleName(), nodeAddress);
|
||||
networkNode.addMessageListener(this);
|
||||
SettableFuture<Connection> future = networkNode.sendMessage(nodeAddress, getDataRequest);
|
||||
Futures.addCallback(future, new FutureCallback<Connection>() {
|
||||
@Override
|
||||
public void onSuccess(Connection connection) {
|
||||
if (!stopped) {
|
||||
RequestDataHandler.this.connection = connection;
|
||||
connection.addMessageListener(RequestDataHandler.this);
|
||||
log.trace("Send " + getDataRequest + " to " + nodeAddress + " succeeded.");
|
||||
} else {
|
||||
log.trace("We have stopped already. We ignore that networkNode.sendMessage.onSuccess call." +
|
||||
@ -161,6 +163,7 @@ public class RequestDataHandler implements MessageListener {
|
||||
|
||||
@Override
|
||||
public void onMessage(Message message, Connection connection) {
|
||||
if (connection.getPeersNodeAddressOptional().isPresent() && connection.getPeersNodeAddressOptional().get().equals(peersNodeAddress)) {
|
||||
if (message instanceof GetDataResponse) {
|
||||
Log.traceCall(message.toString() + "\n\tconnection=" + connection);
|
||||
if (!stopped) {
|
||||
@ -236,8 +239,10 @@ public class RequestDataHandler implements MessageListener {
|
||||
log.warn("We have stopped already. We ignore that onDataRequest call.");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log.trace("We got a message from another connection and ignore it.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void stop() {
|
||||
cleanup();
|
||||
@ -258,8 +263,7 @@ public class RequestDataHandler implements MessageListener {
|
||||
private void cleanup() {
|
||||
Log.traceCall();
|
||||
stopped = true;
|
||||
if (connection != null)
|
||||
connection.removeMessageListener(this);
|
||||
networkNode.removeMessageListener(this);
|
||||
stopTimeoutTimer();
|
||||
}
|
||||
|
||||
|
@ -24,6 +24,7 @@ public class RequestDataManager implements MessageListener, ConnectionListener,
|
||||
|
||||
private static final long RETRY_DELAY_SEC = 10;
|
||||
private static final long CLEANUP_TIMER = 120;
|
||||
private boolean isPreliminaryDataRequest = true;
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -101,6 +102,7 @@ public class RequestDataManager implements MessageListener, ConnectionListener,
|
||||
Collections.shuffle(nodeAddresses);
|
||||
NodeAddress nextCandidate = nodeAddresses.get(0);
|
||||
nodeAddresses.remove(nextCandidate);
|
||||
isPreliminaryDataRequest = true;
|
||||
requestData(nextCandidate, nodeAddresses);
|
||||
}
|
||||
}
|
||||
@ -114,6 +116,7 @@ public class RequestDataManager implements MessageListener, ConnectionListener,
|
||||
Collections.shuffle(remainingNodeAddresses);
|
||||
NodeAddress candidate = nodeAddressOfPreliminaryDataRequest.get();
|
||||
remainingNodeAddresses.remove(candidate);
|
||||
isPreliminaryDataRequest = false;
|
||||
requestData(candidate, remainingNodeAddresses);
|
||||
}
|
||||
}
|
||||
@ -301,7 +304,7 @@ public class RequestDataManager implements MessageListener, ConnectionListener,
|
||||
}
|
||||
});
|
||||
handlerMap.put(nodeAddress, requestDataHandler);
|
||||
requestDataHandler.requestData(nodeAddress);
|
||||
requestDataHandler.requestData(nodeAddress, isPreliminaryDataRequest);
|
||||
} else {
|
||||
log.warn("We have started already a requestDataHandshake to peer. nodeAddress=" + nodeAddress + "\n" +
|
||||
"We start a cleanup timer if the handler has not closed by itself in between 2 minutes.");
|
||||
|
Loading…
Reference in New Issue
Block a user