use of bio.terra.workspace.service.job.exception.InternalStairwayException in project terra-workspace-manager by DataBiosphere.
the class JobService method waitForJob.
public void waitForJob(String jobId) {
try {
int pollSeconds = jobConfig.getPollingIntervalSeconds();
int pollCycles = jobConfig.getTimeoutSeconds() / jobConfig.getPollingIntervalSeconds();
for (int i = 0; i < pollCycles; i++) {
ScheduledFuture<FlightState> futureState = executor.schedule(new PollFlightTask(stairwayComponent.get(), jobId), pollSeconds, TimeUnit.SECONDS);
FlightState state = futureState.get();
if (state != null) {
// Indicates job has completed, though not necessarily successfully.
return;
} else {
// Indicates job has not completed yet, continue polling
continue;
}
}
} catch (InterruptedException | ExecutionException stairwayEx) {
throw new InternalStairwayException(stairwayEx);
}
// Indicates we timed out waiting for completion, throw exception
throw new InternalStairwayException("Flight did not complete in the allowed wait time");
}
use of bio.terra.workspace.service.job.exception.InternalStairwayException in project terra-workspace-manager by DataBiosphere.
the class JobService method verifyUserAccess.
/**
* Ensure the user in the user request has permission to read the workspace associated with the
* Job ID. Throws ForbiddenException if not.
*
* @param jobId - ID of running job
* @param userRequest - original user request
*/
private void verifyUserAccess(String jobId, AuthenticatedUserRequest userRequest) {
try {
FlightState flightState = stairwayComponent.get().getFlightState(jobId);
FlightMap inputParameters = flightState.getInputParameters();
UUID workspaceId = inputParameters.get(WorkspaceFlightMapKeys.WORKSPACE_ID, UUID.class);
flightBeanBag.getWorkspaceService().validateWorkspaceAndAction(userRequest, workspaceId, SamWorkspaceAction.READ);
} catch (DatabaseOperationException | InterruptedException ex) {
throw new InternalStairwayException("Stairway exception looking up the job", ex);
} catch (FlightNotFoundException ex) {
throw new JobNotFoundException("Job not found", ex);
}
}
use of bio.terra.workspace.service.job.exception.InternalStairwayException in project terra-workspace-manager by DataBiosphere.
the class JobService method enumerateJobs.
public List<ApiJobReport> enumerateJobs(int offset, int limit, AuthenticatedUserRequest userRequest) {
List<FlightState> flightStateList;
try {
FlightFilter filter = new FlightFilter();
filter.addFilterInputParameter(JobMapKeys.SUBJECT_ID.getKeyName(), FlightFilterOp.EQUAL, userRequest.getSubjectId());
flightStateList = stairwayComponent.get().getFlights(offset, limit, filter);
} catch (StairwayException | InterruptedException stairwayEx) {
throw new InternalStairwayException(stairwayEx);
}
List<ApiJobReport> jobReportList = new ArrayList<>();
for (FlightState flightState : flightStateList) {
ApiJobReport jobReport = mapFlightStateToApiJobReport(flightState);
jobReportList.add(jobReport);
}
return jobReportList;
}
use of bio.terra.workspace.service.job.exception.InternalStairwayException in project terra-workspace-manager by DataBiosphere.
the class Alpha1Service method enumerateJobs.
/**
* List Stairway flights related to a workspace. These inputs are translated into inputs to
* Stairway's getFlights calls. The resulting flights are translated into enumerated jobs. The
* jobs are ordered by submit time.
*
* @param workspaceId workspace we are listing in
* @param userRequest authenticated user
* @param limit max number of jobs to return
* @param pageToken optional starting place in the result set; start at beginning if missing
* @param cloudResourceType optional filter by cloud resource type
* @param stewardshipType optional filter by stewardship type
* @param resourceName optional filter by resource name
* @param jobStateFilter optional filter by job state
* @return POJO containing the results
*/
public EnumeratedJobs enumerateJobs(UUID workspaceId, AuthenticatedUserRequest userRequest, int limit, @Nullable String pageToken, @Nullable WsmResourceFamily cloudResourceType, @Nullable StewardshipType stewardshipType, @Nullable String resourceName, @Nullable JobStateFilter jobStateFilter) {
features.alpha1EnabledCheck();
// Readers can see the workspace jobs list
workspaceService.validateWorkspaceAndAction(userRequest, workspaceId, SamConstants.SamWorkspaceAction.READ);
FlightEnumeration flightEnumeration;
try {
FlightFilter filter = buildFlightFilter(workspaceId, cloudResourceType, stewardshipType, resourceName, jobStateFilter);
flightEnumeration = stairwayComponent.get().getFlights(pageToken, limit, filter);
} catch (StairwayException | InterruptedException stairwayEx) {
throw new InternalStairwayException(stairwayEx);
}
List<EnumeratedJob> jobList = new ArrayList<>();
for (FlightState state : flightEnumeration.getFlightStateList()) {
FlightMap inputMap = state.getInputParameters();
OperationType operationType = (inputMap.containsKey(WorkspaceFlightMapKeys.OPERATION_TYPE)) ? inputMap.get(WorkspaceFlightMapKeys.OPERATION_TYPE, OperationType.class) : OperationType.UNKNOWN;
WsmResource wsmResource = (inputMap.containsKey(ResourceKeys.RESOURCE)) ? inputMap.get(ResourceKeys.RESOURCE, new TypeReference<>() {
}) : null;
String jobDescription = (inputMap.containsKey(JobMapKeys.DESCRIPTION.getKeyName())) ? inputMap.get(JobMapKeys.DESCRIPTION.getKeyName(), String.class) : StringUtils.EMPTY;
EnumeratedJob enumeratedJob = new EnumeratedJob().flightState(state).jobDescription(jobDescription).operationType(operationType).resource(wsmResource);
jobList.add(enumeratedJob);
}
return new EnumeratedJobs().pageToken(flightEnumeration.getNextPageToken()).totalResults(flightEnumeration.getTotalFlights()).results(jobList);
}
use of bio.terra.workspace.service.job.exception.InternalStairwayException in project terra-workspace-manager by DataBiosphere.
the class JobService method retrieveJob.
@Traced
public ApiJobReport retrieveJob(String jobId, AuthenticatedUserRequest userRequest) {
try {
// jobId=flightId
verifyUserAccess(jobId, userRequest);
FlightState flightState = stairwayComponent.get().getFlightState(jobId);
return mapFlightStateToApiJobReport(flightState);
} catch (StairwayException | InterruptedException stairwayEx) {
throw new InternalStairwayException(stairwayEx);
}
}
Aggregations