use of bio.terra.stairway.exception.DuplicateFlightIdException in project terra-workspace-manager by DataBiosphere.
the class LaunchCloneGcsBucketResourceFlightStep method doStep.
@Override
public StepResult doStep(FlightContext context) throws InterruptedException, RetryException {
validateRequiredEntries(context.getInputParameters(), JobMapKeys.AUTH_USER_INFO.getKeyName(), ControlledResourceKeys.DESTINATION_WORKSPACE_ID);
@Nullable final var location = context.getInputParameters().get(ControlledResourceKeys.LOCATION, String.class);
final var userRequest = context.getInputParameters().get(JobMapKeys.AUTH_USER_INFO.getKeyName(), AuthenticatedUserRequest.class);
final var destinationWorkspaceId = context.getInputParameters().get(ControlledResourceKeys.DESTINATION_WORKSPACE_ID, UUID.class);
// Gather input parameters for flight. See
// bio.terra.workspace.service.resource.controlled.ControlledResourceService#cloneGcsBucket.
final FlightMap subflightInputParameters = new FlightMap();
subflightInputParameters.put(ControlledResourceKeys.LOCATION, location);
subflightInputParameters.put(ControlledResourceKeys.DESTINATION_WORKSPACE_ID, destinationWorkspaceId);
subflightInputParameters.put(JobMapKeys.AUTH_USER_INFO.getKeyName(), userRequest);
subflightInputParameters.put(ResourceKeys.RESOURCE, resource);
subflightInputParameters.put(ControlledResourceKeys.CLONING_INSTRUCTIONS, resource.getCloningInstructions());
// submit flight
try {
context.getStairway().submit(subflightId, CloneControlledGcsBucketResourceFlight.class, subflightInputParameters);
} catch (DuplicateFlightIdException unused) {
return StepResult.getStepResultSuccess();
} catch (DatabaseOperationException | StairwayExecutionException e) {
return new StepResult(StepStatus.STEP_RESULT_FAILURE_RETRY, e);
}
return StepResult.getStepResultSuccess();
}
use of bio.terra.stairway.exception.DuplicateFlightIdException in project terra-workspace-manager by DataBiosphere.
the class LaunchCreateReferenceResourceFlightStep method doStep.
@Override
public StepResult doStep(FlightContext context) throws InterruptedException, RetryException {
if (CloningInstructions.COPY_REFERENCE != resource.getCloningInstructions()) {
// Nothing to do -- don't launch flight
return StepResult.getStepResultSuccess();
}
FlightUtils.validateRequiredEntries(context.getInputParameters(), ControlledResourceKeys.DESTINATION_WORKSPACE_ID, JobMapKeys.AUTH_USER_INFO.getKeyName());
final var destinationWorkspaceId = context.getInputParameters().get(ControlledResourceKeys.DESTINATION_WORKSPACE_ID, UUID.class);
final var userRequest = context.getInputParameters().get(JobMapKeys.AUTH_USER_INFO.getKeyName(), AuthenticatedUserRequest.class);
final String description = String.format("Clone of Referenced Resource %s", resource.getResourceId());
final ReferencedResource destinationResource = WorkspaceCloneUtils.buildDestinationReferencedResource(resource, destinationWorkspaceId, null, description);
// put the destination resource in the map, because it's not communicated
// from the flight as the response (and we need the workspace ID)
context.getWorkingMap().put(ControlledResourceKeys.DESTINATION_REFERENCED_RESOURCE, destinationResource);
final FlightMap subflightInputParameters = new FlightMap();
subflightInputParameters.put(ResourceKeys.RESOURCE, destinationResource);
subflightInputParameters.put(JobMapKeys.AUTH_USER_INFO.getKeyName(), userRequest);
subflightInputParameters.put(WorkspaceFlightMapKeys.ResourceKeys.RESOURCE_TYPE, resource.getResourceType().name());
try {
context.getStairway().submit(subflightId, CreateReferenceResourceFlight.class, subflightInputParameters);
} catch (DatabaseOperationException | StairwayExecutionException e) {
return new StepResult(StepStatus.STEP_RESULT_FAILURE_RETRY, e);
} catch (DuplicateFlightIdException unused) {
// already submitted the flight - treat as success
return StepResult.getStepResultSuccess();
}
FlightUtils.validateRequiredEntries(context.getWorkingMap(), ControlledResourceKeys.DESTINATION_REFERENCED_RESOURCE);
return StepResult.getStepResultSuccess();
}
use of bio.terra.stairway.exception.DuplicateFlightIdException in project terra-workspace-manager by DataBiosphere.
the class LaunchCloneControlledGcpBigQueryDatasetResourceFlightStep method doStep.
@Override
public StepResult doStep(FlightContext context) throws InterruptedException, RetryException {
validateRequiredEntries(context.getInputParameters(), JobMapKeys.AUTH_USER_INFO.getKeyName(), ControlledResourceKeys.DESTINATION_WORKSPACE_ID);
final var userRequest = context.getInputParameters().get(JobMapKeys.AUTH_USER_INFO.getKeyName(), AuthenticatedUserRequest.class);
final var destinationWorkspaceId = context.getInputParameters().get(ControlledResourceKeys.DESTINATION_WORKSPACE_ID, UUID.class);
@Nullable final var location = context.getInputParameters().get(ControlledResourceKeys.LOCATION, String.class);
// build input parameter map. Leave out resource name, description, and dataset name so that
// they will take values from the source dataset.
final var subflightInputParameters = new FlightMap();
subflightInputParameters.put(JobMapKeys.AUTH_USER_INFO.getKeyName(), userRequest);
subflightInputParameters.put(ControlledResourceKeys.DESTINATION_WORKSPACE_ID, destinationWorkspaceId);
subflightInputParameters.put(ControlledResourceKeys.LOCATION, location);
subflightInputParameters.put(ControlledResourceKeys.CLONING_INSTRUCTIONS, resource.getCloningInstructions());
subflightInputParameters.put(ResourceKeys.RESOURCE, resource);
subflightInputParameters.put(ControlledResourceKeys.LOCATION, location);
// launch the flight
try {
context.getStairway().submit(subflightId, CloneControlledGcpBigQueryDatasetResourceFlight.class, subflightInputParameters);
} catch (DuplicateFlightIdException unused) {
return StepResult.getStepResultSuccess();
} catch (DatabaseOperationException | StairwayExecutionException e) {
return new StepResult(StepStatus.STEP_RESULT_FAILURE_RETRY, e);
}
return StepResult.getStepResultSuccess();
}
use of bio.terra.stairway.exception.DuplicateFlightIdException in project terra-workspace-manager by DataBiosphere.
the class LaunchWorkspaceCreateFlightStep method doStep.
@Override
public StepResult doStep(FlightContext context) throws InterruptedException, RetryException {
final FlightMap workingMap = context.getWorkingMap();
final FlightMap inputMap = context.getInputParameters();
FlightUtils.validateCommonEntries(inputMap);
FlightUtils.validateRequiredEntries(workingMap, ControlledResourceKeys.WORKSPACE_CREATE_FLIGHT_ID);
final var workspaceCreateJobId = workingMap.get(ControlledResourceKeys.WORKSPACE_CREATE_FLIGHT_ID, String.class);
// build input parameter map for subflight. Some entries are directly copied from
// this flight's input parameters.
final FlightMap subflightParameters = new FlightMap();
FlightUtils.copyCommonParams(inputMap, subflightParameters);
try {
context.getStairway().submit(workspaceCreateJobId, WorkspaceCreateFlight.class, subflightParameters);
} catch (DuplicateFlightIdException ignored) {
// this is a rerun, so it's benign
return StepResult.getStepResultSuccess();
} catch (DatabaseOperationException | StairwayExecutionException e) {
return new StepResult(StepStatus.STEP_RESULT_FAILURE_RETRY, e);
}
return StepResult.getStepResultSuccess();
}
use of bio.terra.stairway.exception.DuplicateFlightIdException in project terra-workspace-manager by DataBiosphere.
the class LaunchCloneAllResourcesFlightStep method doStep.
@Override
public StepResult doStep(FlightContext context) throws InterruptedException, RetryException {
validateRequiredEntries(context.getInputParameters(), JobMapKeys.AUTH_USER_INFO.getKeyName(), JobMapKeys.REQUEST.getKeyName());
validateRequiredEntries(context.getWorkingMap(), ControlledResourceKeys.RESOURCES_TO_CLONE, ControlledResourceKeys.CLONE_ALL_RESOURCES_FLIGHT_ID);
final var userRequest = context.getInputParameters().get(JobMapKeys.AUTH_USER_INFO.getKeyName(), AuthenticatedUserRequest.class);
@Nullable final var location = context.getInputParameters().get(ControlledResourceKeys.LOCATION, String.class);
final var cloneAllResourcesFlightId = context.getWorkingMap().get(ControlledResourceKeys.CLONE_ALL_RESOURCES_FLIGHT_ID, String.class);
final List<ResourceWithFlightId> resourcesAndFlightIds = context.getWorkingMap().get(ControlledResourceKeys.RESOURCES_TO_CLONE, new TypeReference<>() {
});
final var destinationWorkspace = context.getInputParameters().get(JobMapKeys.REQUEST.getKeyName(), Workspace.class);
final Stairway stairway = context.getStairway();
final FlightMap subflightInputParameters = new FlightMap();
subflightInputParameters.put(JobMapKeys.AUTH_USER_INFO.getKeyName(), userRequest);
subflightInputParameters.put(ControlledResourceKeys.RESOURCES_TO_CLONE, resourcesAndFlightIds);
subflightInputParameters.put(ControlledResourceKeys.DESTINATION_WORKSPACE_ID, destinationWorkspace.getWorkspaceId());
subflightInputParameters.put(ControlledResourceKeys.LOCATION, location);
// Build a CloneAllResourcesFlight
try {
stairway.submit(cloneAllResourcesFlightId, CloneAllResourcesFlight.class, subflightInputParameters);
} catch (DuplicateFlightIdException e) {
// exit early if flight is already going
return StepResult.getStepResultSuccess();
} catch (StairwayException e) {
return new StepResult(StepStatus.STEP_RESULT_FAILURE_RETRY, e);
}
return StepResult.getStepResultSuccess();
}
Aggregations