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.responses.ApiResponse;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@ -169,13 +169,14 @@ public class PeersResource {
|
|||||||
try {
|
try {
|
||||||
PeerAddress peerAddress = PeerAddress.fromString(address);
|
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) {
|
} catch (IllegalArgumentException e) {
|
||||||
throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.INVALID_NETWORK_ADDRESS);
|
throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.INVALID_NETWORK_ADDRESS);
|
||||||
} catch (ApiException e) {
|
|
||||||
throw e;
|
|
||||||
} catch (DataException e) {
|
} catch (DataException e) {
|
||||||
throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.REPOSITORY_ISSUE, 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();
|
mergePeersLock.lock();
|
||||||
|
|
||||||
try (final Repository repository = RepositoryManager.getRepository()) {
|
try (final Repository repository = RepositoryManager.getRepository()) {
|
||||||
this.mergePeers(repository, addedBy, addedWhen, peerAddresses);
|
return this.mergePeers(repository, addedBy, addedWhen, peerAddresses);
|
||||||
} finally {
|
} finally {
|
||||||
mergePeersLock.unlock();
|
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;
|
List<PeerData> newPeers;
|
||||||
synchronized (this.allKnownPeers) {
|
synchronized (this.allKnownPeers) {
|
||||||
for (PeerData knownPeerData : this.allKnownPeers) {
|
for (PeerData knownPeerData : this.allKnownPeers) {
|
||||||
@ -1167,6 +1167,9 @@ public class Network {
|
|||||||
peerAddresses.removeIf(isKnownAddress);
|
peerAddresses.removeIf(isKnownAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (peerAddresses.isEmpty())
|
||||||
|
return false;
|
||||||
|
|
||||||
// Add leftover peer addresses to known peers list
|
// Add leftover peer addresses to known peers list
|
||||||
newPeers = peerAddresses.stream().map(peerAddress -> new PeerData(peerAddress, addedWhen, addedBy)).collect(Collectors.toList());
|
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);
|
LOGGER.error(String.format("Repository issue while merging peers list from %s", addedBy), e);
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user