protected void handleInternal()

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);
        });
    }