use of edu.harvard.iq.dataverse.engine.command.impl.RemoveLockCommand in project dataverse by IQSS.
the class WorkflowServiceBean method rollback.
@Asynchronous
private void rollback(Workflow wf, WorkflowContext ctxt, Failure failure, int lastCompletedStepIdx) {
ctxt = refresh(ctxt);
final List<WorkflowStepData> steps = wf.getSteps();
for (int stepIdx = lastCompletedStepIdx; stepIdx >= 0; --stepIdx) {
WorkflowStepData wsd = steps.get(stepIdx);
WorkflowStep step = createStep(wsd);
try {
logger.log(Level.INFO, "Workflow {0} step {1}: Rollback", new Object[] { ctxt.getInvocationId(), stepIdx });
rollbackStep(step, ctxt, failure);
} catch (Exception e) {
logger.log(Level.WARNING, "Workflow " + ctxt.getInvocationId() + " step " + stepIdx + ": Rollback error: " + e.getMessage(), e);
}
}
logger.log(Level.INFO, "Removing workflow lock");
try {
engine.submit(new RemoveLockCommand(ctxt.getRequest(), ctxt.getDataset(), DatasetLock.Reason.Workflow));
// Corner case - delete locks generated within this same transaction.
Query deleteQuery = em.createQuery("DELETE from DatasetLock l WHERE l.dataset.id=:id AND l.reason=:reason");
deleteQuery.setParameter("id", ctxt.getDataset().getId());
deleteQuery.setParameter("reason", DatasetLock.Reason.Workflow);
deleteQuery.executeUpdate();
} catch (CommandException ex) {
logger.log(Level.SEVERE, "Error restoring dataset locks state after rollback: " + ex.getMessage(), ex);
}
}
Aggregations