in server/src/main/java/org/apache/cassandra/sidecar/handlers/restore/CreateRestoreSliceHandler.java [160:212]
private void createOrPollRangeForSparkManagedJob(RoutingContext context,
InstanceMetadata instance,
RestoreJob job,
RestoreSlice slice)
{
RestoreJobProgressTracker.Status status;
String uploadId = RestoreJobUtil.generateUniqueUploadId(job.jobId, slice.sliceId());
RestoreRange range = RestoreRange.builderFromSlice(slice)
.ownerInstance(instance)
.stageDirectory(Paths.get(instance.stagingDir()), uploadId)
.build();
try
{
status = restoreJobManagerGroup.trySubmit(instance, range, job);
}
catch (RestoreJobFatalException ex)
{
String errorMessage = "Restore slice failed. jobId=" + slice.jobId() + " sliceId=" + slice.sliceId();
logger.error(errorMessage, ex);
// propagate the restore slice failure message to client with custom server error status code
context.fail(wrapHttpException(HttpResponseStatus.valueOf(SERVER_ERROR_RESTORE_JOB_FAILED),
errorMessage,
ex));
return;
}
logger.info("slice is {}. slice key {}", status, slice.key());
switch (status)
{
case CREATED:
context.response()
.setStatusCode(HttpResponseStatus.CREATED.code())
.end();
break;
case PENDING:
context.response()
.setStatusCode(HttpResponseStatus.ACCEPTED.code())
.end();
break;
case COMPLETED:
context.response()
.setStatusCode(HttpResponseStatus.OK.code())
.end();
break;
default:
logger.error("Unknown restore slice status. jobId={}, sliceId={}, status={}",
slice.jobId(), slice.sliceId(), status);
context.fail(HttpResponseStatus.INTERNAL_SERVER_ERROR.code());
break;
}
}