in src/main/java/org/apache/cassandra/sidecar/routes/sstableuploads/SSTableUploadHandler.java [205:235]
private Future<String> ensureSufficientSpaceAvailable(String uploadDirectory)
{
float minimumPercentageRequired = configuration.getMinSpacePercentRequiredForUpload();
if (minimumPercentageRequired == 0)
{
return Future.succeededFuture(uploadDirectory);
}
return fs.fsProps(uploadDirectory)
.compose(fsProps -> {
// calculate available disk space percentage
long totalSpace = fsProps.totalSpace();
long usableSpace = fsProps.usableSpace();
// using double for higher precision
double spacePercentAvailable = (usableSpace > 0L && totalSpace > 0L)
? ((double) usableSpace / (double) totalSpace) * 100D
: 0D;
return Future.succeededFuture(spacePercentAvailable);
})
.compose(availableDiskSpacePercentage -> {
if (availableDiskSpacePercentage < minimumPercentageRequired)
{
logger.warn("Insufficient space available for upload in stagingDir={}, available={}%, " +
"required={}%", uploadDirectory,
availableDiskSpacePercentage, minimumPercentageRequired);
return Future.failedFuture(wrapHttpException(HttpResponseStatus.INSUFFICIENT_STORAGE,
"Insufficient space available for upload"));
}
return Future.succeededFuture(uploadDirectory);
});
}