Browse Source

Fix API call POST /peers so it returns "false" for existing peer, instead of throwing / Internal Server Error

split-DB
catbref 4 years ago
parent
commit
59ae070c83
  1. 11
      src/main/java/org/qortal/api/resource/PeersResource.java
  2. 11
      src/main/java/org/qortal/network/Network.java

11
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<PeerAddress> 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);
}

11
src/main/java/org/qortal/network/Network.java

@ -1123,11 +1123,11 @@ public class Network {
}
}
public void mergePeers(String addedBy, long addedWhen, List<PeerAddress> peerAddresses) throws DataException {
public boolean mergePeers(String addedBy, long addedWhen, List<PeerAddress> 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<PeerAddress> peerAddresses) throws DataException {
private boolean mergePeers(Repository repository, String addedBy, long addedWhen, List<PeerAddress> peerAddresses) throws DataException {
List<PeerData> 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;
}
}

Loading…
Cancel
Save