forked from Qortal/qortal
Fix API call POST /peers so it returns "false" for existing peer, instead of throwing / Internal Server Error
This commit is contained in:
parent
2ab695f308
commit
59ae070c83
@ -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);
|
||||
}
|
||||
|
@ -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…
x
Reference in New Issue
Block a user