@Override
public void resume(ExecutionType type, @Nonnull String id, String user, boolean ignoreCurrentStatus) {
ImmutablePair<String, RedisClientDelegate> pair = fetchKey(id);
RedisClientDelegate delegate = pair.getRight();
delegate.withCommandsClient(c -> {
ExecutionStatus currentStatus = ExecutionStatus.valueOf(c.hget(pair.getLeft(), "status"));
if (!ignoreCurrentStatus && currentStatus != ExecutionStatus.PAUSED) {
throw new UnresumablePipelineException(format(
"Unable to resume pipeline that is not PAUSED (executionId: %s, currentStatus: %s)",
id,
currentStatus
));
}
try {
PausedDetails pausedDetails = mapper.readValue(c.hget(pair.getLeft(), "paused"), PausedDetails.class);
pausedDetails.setResumedBy(user);
pausedDetails.setResumeTime(currentTimeMillis());
Map<String, String> data = new HashMap<>();
data.put("paused", mapper.writeValueAsString(pausedDetails));
data.put("status", ExecutionStatus.RUNNING.toString());
c.hmset(pair.getLeft(), data);
c.srem(allBufferedExecutionsKey(type), id);
} catch (IOException e) {
throw new ExecutionSerializationException("Failed converting pausedDetails to json", e);
}
});
}