use of pipelite.RegisteredPipeline in project pipelite by enasequence.
the class RetryService method retry.
/**
* Retries a failed process.
*
* @param pipelineName the pipeline name
* @param processId the processId
* @throws PipeliteProcessRetryException if the process can't be retried
*/
public void retry(String pipelineName, String processId) {
processService.isRetryProcess(pipelineName, processId);
boolean isRetrySchedule = scheduleService.isRetrySchedule(pipelineName, processId);
RegisteredPipeline registeredPipeline = registeredPipelineService.getRegisteredPipeline(pipelineName);
Process process = ProcessFactory.create(processId, registeredPipeline);
// Retry stages
for (Stage stage : process.getStages()) {
stage.setStageEntity(getSavedStage(pipelineName, processId, stage.getStageName()));
if (DependencyResolver.isPermanentlyFailedStage(stage)) {
stage.getStageEntity().resetExecution();
stageService.saveStage(stage);
}
}
// Retry process
process.setProcessEntity(getSavedProcess(pipelineName, processId));
processService.startExecution(process.getProcessEntity());
// Retry schedule
if (isRetrySchedule) {
ScheduleRunner scheduler = runnerService.getScheduleRunner();
if (scheduler == null) {
throw new PipeliteProcessRetryException(pipelineName, processId, "missing scheduler");
}
scheduler.retrySchedule(pipelineName, processId);
}
}
use of pipelite.RegisteredPipeline in project pipelite by enasequence.
the class RegisteredPipelineService method registerPipeline.
public void registerPipeline(RegisteredPipeline registeredPipeline) {
String pipelineName = registeredPipeline.pipelineName();
if (pipelineName == null || pipelineName.trim().isEmpty()) {
throw new PipeliteException("Missing pipeline name");
}
if (registeredPipelineMap.containsKey(pipelineName)) {
throw new PipeliteException("Non-unique pipeline name: " + pipelineName);
}
if (registeredPipeline instanceof Schedule) {
Schedule schedule = (Schedule) registeredPipeline;
String cron = schedule.configurePipeline().cron();
if (cron == null) {
throw new PipeliteException("Missing cron expression for pipeline schedule: " + pipelineName);
}
if (!CronUtils.validate(cron)) {
throw new PipeliteException("Invalid cron expression '" + cron + "' for pipeline schedule: " + pipelineName);
}
} else if (registeredPipeline instanceof Pipeline) {
Pipeline pipeline = (Pipeline) registeredPipeline;
int pipelineParallelism = pipeline.configurePipeline().pipelineParallelism();
if (pipelineParallelism < 1) {
throw new PipeliteException("Invalid pipeline parallelism '" + pipelineParallelism + "' for pipeline: " + pipelineName);
}
}
registeredPipelineMap.put(pipelineName, registeredPipeline);
}
use of pipelite.RegisteredPipeline in project pipelite by enasequence.
the class StageController method stages.
@GetMapping("/{pipelineName}/{processId}")
@ResponseStatus(HttpStatus.OK)
@Operation(description = "Process stages")
@ApiResponses(value = { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "500", description = "Internal Server error") })
public List<StageInfo> stages(@PathVariable(value = "pipelineName") String pipelineName, @PathVariable(value = "processId") String processId) {
List<StageInfo> list = new ArrayList<>();
AtomicReference<Process> process = new AtomicReference<>();
try {
RegisteredPipeline registeredPipeline = registeredPipelineService.getRegisteredPipeline(pipelineName);
ProcessBuilder processBuilder = new ProcessBuilder(processId);
registeredPipeline.configureProcess(processBuilder);
process.set(processBuilder.build());
} catch (Exception ex) {
log.atSevere().withCause(ex).log(ex.getMessage());
}
stageService.getSavedStages(pipelineName, processId).forEach(stageEntity -> list.add(getStage(stageEntity, process.get())));
return list;
}
Aggregations