public RestoreRangeHandler toAsyncTask()

in server/src/main/java/org/apache/cassandra/sidecar/db/RestoreRange.java [292:337]


    public RestoreRangeHandler toAsyncTask(StorageClientPool s3ClientPool,
                                           TaskExecutorPool executorPool,
                                           SSTableImporter importer,
                                           double requiredUsableSpacePercentage,
                                           RestoreRangeDatabaseAccessor rangeDatabaseAccessor,
                                           RestoreJobUtil restoreJobUtil,
                                           LocalTokenRangesProvider localTokenRangesProvider,
                                           SidecarMetrics metrics)
    {
        // All submitted range should be registered with a tracker and a source slice.
        // Otherwise, it is an unexpected state and cannot be retried
        if (!canProduceTask())
        {
            return RestoreRangeTask.failed(RestoreJobExceptions.ofFatal("Restore range is missing progress tracker or source slice",
                                                                        this, null), this);
        }

        if (isCancelled)
        {
            return RestoreRangeTask.failed(RestoreJobExceptions.ofFatal("Restore range is cancelled",
                                                                        this, null), this);
        }

        if (tracker.restoreJob().hasExpired(System.currentTimeMillis()))
        {
            return RestoreRangeTask.failed(RestoreJobExceptions.ofFatal("Restore job expired on " + tracker.restoreJob().expireAt.toInstant(),
                                                                        this, null), this);
        }

        try
        {
            StorageClient s3Client = s3ClientPool.storageClient(job());
            return new RestoreRangeTask(this, s3Client,
                                        executorPool, importer,
                                        requiredUsableSpacePercentage,
                                        rangeDatabaseAccessor,
                                        restoreJobUtil,
                                        localTokenRangesProvider,
                                        metrics);
        }
        catch (Exception cause)
        {
            return RestoreRangeTask.failed(RestoreJobExceptions.ofFatal("Restore range is failed",
                                                                        this, cause), this);
        }
    }