aboutsummaryrefslogtreecommitdiff
path: root/central/src/main/java/moe/yuuta/dn42peering/peer/PeerServiceImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'central/src/main/java/moe/yuuta/dn42peering/peer/PeerServiceImpl.java')
-rw-r--r--central/src/main/java/moe/yuuta/dn42peering/peer/PeerServiceImpl.java49
1 files changed, 30 insertions, 19 deletions
diff --git a/central/src/main/java/moe/yuuta/dn42peering/peer/PeerServiceImpl.java b/central/src/main/java/moe/yuuta/dn42peering/peer/PeerServiceImpl.java
index d202882..1f7f428 100644
--- a/central/src/main/java/moe/yuuta/dn42peering/peer/PeerServiceImpl.java
+++ b/central/src/main/java/moe/yuuta/dn42peering/peer/PeerServiceImpl.java
@@ -62,25 +62,36 @@ class PeerServiceImpl implements IPeerService {
@Nonnull
@Override
public IPeerService updateTo(@Nonnull Peer peer, @Nonnull Handler<AsyncResult<Void>> handler) {
- SqlTemplate
- .forUpdate(pool, "UPDATE peer SET " +
- "type = #{type}, " +
- "ipv4 = #{ipv4}, " +
- "ipv6 = #{ipv6}, " +
- "wg_endpoint = #{wg_endpoint}, " +
- "wg_endpoint_port = #{wg_endpoint_port}, " +
- "wg_self_pubkey = #{wg_self_pubkey}, " +
- "wg_self_privkey = #{wg_self_privkey}, " +
- "wg_peer_pubkey = #{wg_peer_pubkey}, " +
- "wg_preshared_secret = #{wg_preshared_secret}, " +
- "provision_status = #{provision_status}, " +
- "mpbgp = #{mpbgp}, " +
- "node = #{node} " +
- "WHERE id = #{id} AND asn = #{asn}")
- .mapFrom(PeerParametersMapper.INSTANCE)
- .execute(peer)
- .<Void>compose(res -> Future.succeededFuture(null))
- .onComplete(handler);
+ Future.<Void>future(f -> {
+ SqlTemplate
+ .forUpdate(pool, "UPDATE peer SET " +
+ "type = #{type}, " +
+ "ipv4 = #{ipv4}, " +
+ "ipv6 = #{ipv6}, " +
+ "wg_endpoint = #{wg_endpoint}, " +
+ "wg_endpoint_port = #{wg_endpoint_port}, " +
+ "wg_self_pubkey = #{wg_self_pubkey}, " +
+ "wg_self_privkey = #{wg_self_privkey}, " +
+ "wg_peer_pubkey = #{wg_peer_pubkey}, " +
+ "wg_preshared_secret = #{wg_preshared_secret}, " +
+ "provision_status = #{provision_status}, " +
+ "mpbgp = #{mpbgp}, " +
+ "node = #{node} " +
+ "WHERE id = #{id} AND asn = #{asn}")
+ .mapFrom(PeerParametersMapper.INSTANCE)
+ .execute(peer)
+ .<Void>compose(res -> Future.succeededFuture(null))
+ .onFailure(err -> {
+ if (err instanceof MySQLException) {
+ if (((MySQLException) err).getErrorCode() == 1062 /* Duplicate */) {
+ f.fail(new DuplicatePeerException());
+ return;
+ }
+ f.fail(err);
+ }
+ })
+ .onSuccess(f::complete);
+ }).onComplete(handler);
return this;
}