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