From 59ae070c83808402703830bd129af361dc9321d4 Mon Sep 17 00:00:00 2001 From: catbref Date: Fri, 8 May 2020 10:32:27 +0100 Subject: [PATCH] Fix API call POST /peers so it returns "false" for existing peer, instead of throwing / Internal Server Error --- .../java/org/qortal/api/resource/PeersResource.java | 11 ++++++----- src/main/java/org/qortal/network/Network.java | 11 ++++++++--- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/qortal/api/resource/PeersResource.java b/src/main/java/org/qortal/api/resource/PeersResource.java index 486eb2cb..80cb5fa5 100644 --- a/src/main/java/org/qortal/api/resource/PeersResource.java +++ b/src/main/java/org/qortal/api/resource/PeersResource.java @@ -8,7 +8,7 @@ import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; -import java.util.Arrays; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -169,13 +169,14 @@ public class PeersResource { try { PeerAddress peerAddress = PeerAddress.fromString(address); - Network.getInstance().mergePeers("API", addedWhen, Arrays.asList(peerAddress)); + List newPeerAddresses = new ArrayList<>(1); + newPeerAddresses.add(peerAddress); - return "true"; + boolean addResult = Network.getInstance().mergePeers("API", addedWhen, newPeerAddresses); + + return addResult ? "true" : "false"; } catch (IllegalArgumentException e) { throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.INVALID_NETWORK_ADDRESS); - } catch (ApiException e) { - throw e; } catch (DataException e) { throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.REPOSITORY_ISSUE, e); } diff --git a/src/main/java/org/qortal/network/Network.java b/src/main/java/org/qortal/network/Network.java index 3d48f9af..d27e3ba1 100644 --- a/src/main/java/org/qortal/network/Network.java +++ b/src/main/java/org/qortal/network/Network.java @@ -1123,11 +1123,11 @@ public class Network { } } - public void mergePeers(String addedBy, long addedWhen, List peerAddresses) throws DataException { + public boolean mergePeers(String addedBy, long addedWhen, List peerAddresses) throws DataException { mergePeersLock.lock(); try (final Repository repository = RepositoryManager.getRepository()) { - this.mergePeers(repository, addedBy, addedWhen, peerAddresses); + return this.mergePeers(repository, addedBy, addedWhen, peerAddresses); } finally { mergePeersLock.unlock(); } @@ -1158,7 +1158,7 @@ public class Network { } } - private void mergePeers(Repository repository, String addedBy, long addedWhen, List peerAddresses) throws DataException { + private boolean mergePeers(Repository repository, String addedBy, long addedWhen, List peerAddresses) throws DataException { List newPeers; synchronized (this.allKnownPeers) { for (PeerData knownPeerData : this.allKnownPeers) { @@ -1167,6 +1167,9 @@ public class Network { peerAddresses.removeIf(isKnownAddress); } + if (peerAddresses.isEmpty()) + return false; + // Add leftover peer addresses to known peers list newPeers = peerAddresses.stream().map(peerAddress -> new PeerData(peerAddress, addedWhen, addedBy)).collect(Collectors.toList()); @@ -1184,6 +1187,8 @@ public class Network { LOGGER.error(String.format("Repository issue while merging peers list from %s", addedBy), e); throw e; } + + return true; } }