in server/src/main/java/org/apache/cassandra/sidecar/handlers/DiskSpaceProtectionHandler.java [65:111]
protected void handleInternal(RoutingContext context,
HttpServerRequest httpRequest,
@NotNull String host,
SocketAddress remoteAddress,
Void request)
{
InstanceMetadata instance = metadataFetcher.instance(host);
String stagingDir = instance.stagingDir();
if (stagingDir == null)
{
logger.warn("Cannot resolve the staging dir. instance={}", instance.host());
context.next();
return;
}
float minimumPercentageRequired = config.sstableUploadConfiguration().minimumSpacePercentageRequired();
if (minimumPercentageRequired == 0)
{
logger.info("Minimum disk space percentage protection is disabled. " +
"It is highly recommend to configure the disk space protection.");
// since it is disabled, the request is let go.
context.next();
return;
}
double scaledRequiredUsablePercentage = minimumPercentageRequired / 100.0;
context
.vertx()
.fileSystem()
.mkdirs(stagingDir)
.compose(ignored -> ensureSufficientStorage(stagingDir,
scaledRequiredUsablePercentage,
executorPools.internal()))
.onSuccess(ignored -> context.next())
.onFailure(throwable -> {
if (throwable instanceof InsufficientStorageException)
{
instance.metrics().resource().insufficientStagingSpace.metric.update(1);
InsufficientStorageException exception = (InsufficientStorageException) throwable;
throwable = wrapHttpException(HttpResponseStatus.INSUFFICIENT_STORAGE,
exception.getMessage(),
exception);
}
processFailure(throwable, context, host, remoteAddress, request);
});
}