in server/src/main/java/org/apache/cassandra/sidecar/server/Server.java [154:201]
public Future<Void> close()
{
LOGGER.info("Stopping Cassandra Sidecar");
deployedServerVerticles.clear();
List<Future<Void>> closingFutures = new ArrayList<>();
closingFutures.add(notifyServerStopping(null));
closingFutures.add(Future.future(p -> {
sidecarClientProvider.close();
p.complete();
}));
instancesMetadata.instances().forEach(instance -> {
Promise<Void> closingFutureForInstance = Promise.promise();
executorPools.internal()
.runBlocking(() -> {
try
{
instance.delegate().close();
}
catch (Exception e)
{
LOGGER.error("Failed to close delegate", e);
closingFutureForInstance.tryFail(e);
}
finally
{
closingFutureForInstance.tryComplete(null);
}
});
closingFutures.add(closingFutureForInstance.future());
});
return Future.all(closingFutures)
.onSuccess(ignored -> LOGGER.debug("Closed Cassandra adapters"))
.transform(v -> {
LOGGER.debug("Closing PeriodicTaskExecutor");
return periodicTaskExecutor.close();
})
.transform(v -> {
LOGGER.debug("Closing executor pools");
return executorPools.close();
})
.transform(v -> {
LOGGER.debug("Closing vertx");
return vertx.close();
})
.onFailure(t -> LOGGER.error("Failed to gracefully shutdown Cassandra Sidecar", t))
.onSuccess(f -> LOGGER.info("Successfully stopped Cassandra Sidecar"));
}