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