Move handling of GET_PEERS from Controller to Network. On sync fail, only update outbound peer info in repository to help prevent useless 'known peer' entries.

This commit is contained in:
catbref 2019-06-04 09:13:03 +01:00
parent dcb8d67236
commit de96e8347d
2 changed files with 17 additions and 14 deletions

View File

@ -292,14 +292,17 @@ public class Controller extends Thread {
LOGGER.info(String.format("Failed to synchronize with peer %s (%s) - cooling off", peer, syncResult.name()));
// Don't use this peer again for a while
try (final Repository repository = RepositoryManager.getRepository()) {
PeerData peerData = peer.getPeerData();
peerData.setLastMisbehaved(NTP.getTime());
repository.getNetworkRepository().save(peerData);
repository.saveChanges();
} catch (DataException e) {
LOGGER.warn("Repository issue while updating peer synchronization info", e);
}
PeerData peerData = peer.getPeerData();
peerData.setLastMisbehaved(NTP.getTime());
// Only save to repository if outbound peer
if (peer.isOutbound())
try (final Repository repository = RepositoryManager.getRepository()) {
repository.getNetworkRepository().save(peerData);
repository.saveChanges();
} catch (DataException e) {
LOGGER.warn("Repository issue while updating peer synchronization info", e);
}
break;
case NO_REPLY:
@ -616,12 +619,6 @@ public class Controller extends Thread {
}
break;
case GET_PEERS:
// Send our known peers
if (!peer.sendMessage(Network.getInstance().buildPeersMessage(peer)))
peer.disconnect("failed to send peers list");
break;
default:
LOGGER.debug(String.format("Unhandled %s message [ID %d] from peer %s", message.getType().name(), message.getId(), peer));
break;

View File

@ -472,6 +472,12 @@ public class Network extends Thread {
mergePeers(peerV2Addresses);
break;
case GET_PEERS:
// Send our known peers
if (!peer.sendMessage(buildPeersMessage(peer)))
peer.disconnect("failed to send peers list");
break;
default:
// Bump up to controller for possible action
Controller.getInstance().onNetworkMessage(peer, message);