in src/main/java/org/apache/cassandra/sidecar/routes/SnapshotsHandler.java [253:286]
private void processCreateSnapshotFailure(Throwable cause, RoutingContext context, SnapshotRequest requestParams,
SocketAddress remoteAddress, String host)
{
logger.error("SnapshotsHandler failed for request={}, remoteAddress={}, instance={}, method={}",
requestParams, remoteAddress, host, context.request().method(), cause);
if (cause instanceof SnapshotAlreadyExistsException)
{
context.fail(wrapHttpException(HttpResponseStatus.CONFLICT, cause.getMessage()));
return;
}
else if (cause instanceof NodeBootstrappingException)
{
// Cassandra does not allow taking snapshots while the node is JOINING the ring
context.fail(wrapHttpException(HttpResponseStatus.SERVICE_UNAVAILABLE,
"The Cassandra instance " + host + " is not available"));
}
else if (cause instanceof IllegalArgumentException)
{
if (StringUtils.contains(cause.getMessage(),
"Keyspace " + requestParams.keyspace() + " does not exist") ||
StringUtils.contains(cause.getMessage(),
"Unknown keyspace/cf pair"))
{
context.fail(wrapHttpException(HttpResponseStatus.NOT_FOUND, cause.getMessage()));
}
else
{
context.fail(wrapHttpException(HttpResponseStatus.BAD_REQUEST, cause.getMessage()));
}
return;
}
context.fail(wrapHttpException(HttpResponseStatus.BAD_REQUEST, "Invalid request for " + requestParams));
}