@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); } }); }