diff options
Diffstat (limited to 'agent/src/main/java/moe/yuuta/dn42peering/agent/grpc/RPCVerticle.java')
-rw-r--r-- | agent/src/main/java/moe/yuuta/dn42peering/agent/grpc/RPCVerticle.java | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/agent/src/main/java/moe/yuuta/dn42peering/agent/grpc/RPCVerticle.java b/agent/src/main/java/moe/yuuta/dn42peering/agent/grpc/RPCVerticle.java index 3390b47..c24c29a 100644 --- a/agent/src/main/java/moe/yuuta/dn42peering/agent/grpc/RPCVerticle.java +++ b/agent/src/main/java/moe/yuuta/dn42peering/agent/grpc/RPCVerticle.java @@ -2,25 +2,39 @@ package moe.yuuta.dn42peering.agent.grpc; import io.vertx.core.AbstractVerticle; import io.vertx.core.Promise; +import io.vertx.core.impl.logging.Logger; +import io.vertx.core.impl.logging.LoggerFactory; import io.vertx.grpc.VertxServer; import io.vertx.grpc.VertxServerBuilder; import moe.yuuta.dn42peering.RPC; +import moe.yuuta.dn42peering.agent.Persistent; public class RPCVerticle extends AbstractVerticle { + private final Logger logger = LoggerFactory.getLogger(getClass().getSimpleName()); + private VertxServer server; @Override public void start(Promise<Void> startPromise) throws Exception { - server = VertxServerBuilder - .forAddress(vertx, vertx.getOrCreateContext().config().getString("internal_ip"), - RPC.AGENT_PORT) - .addService(new AgentServiceImpl(vertx)) - .build() - .start(startPromise); + Persistent.recover(vertx) + .onComplete(ar -> { + if(ar.succeeded()) { + server = VertxServerBuilder + .forAddress(vertx, vertx.getOrCreateContext().config().getString("internal_ip"), + RPC.AGENT_PORT) + .addService(new AgentServiceImpl(vertx)) + .build() + .start(startPromise); + } else { + logger.error("Cannot recover from persistent state, aborting.", ar.cause()); + startPromise.fail("Recover failed."); + } + }); } @Override public void stop(Promise<Void> stopPromise) throws Exception { - server.shutdown(stopPromise); + if(server != null) + server.shutdown(stopPromise); } } |