class DockerContainerOperationManager {

    @Async("pauseRunExecutor")
    public void resumeRun(PipelineRun run, List<String> endpoints) {
        try {
            final AbstractCloudRegion cloudRegion = regionManager.load(run.getInstance().getCloudRegionId());
            final CloudInstanceOperationResult startInstanceResult = cloudFacade.startInstance(cloudRegion.getId(),
                    run.getInstance().getNodeId());
            if (startInstanceResult.getStatus() != CloudInstanceOperationResult.Status.OK) {
                rollbackRunToPausedState(run, startInstanceResult);
                return;
            }
            kubernetesManager.waitForNodeReady(run.getInstance().getNodeName(),
                    run.getId().toString(), cloudRegion.getRegionCode());
            PipelineConfiguration configuration = getResumeConfiguration(run);
            launcher.launch(run, configuration, endpoints,  run.getId().toString(),
                    true, run.getPodId(), null, false);
            kubernetesManager.removeNodeLabel(run.getInstance().getNodeName(),
                    KubernetesConstants.PAUSED_NODE_LABEL);
            run.setStatus(TaskStatus.RUNNING);
            runManager.updatePipelineStatus(run);
        } catch (Exception e) {
            LOGGER.error(e.getMessage(), e);
            addRunLog(run, e.getMessage(), RESUME_RUN_TASK);
            failRunAndTerminateNode(run, e);
            throw new IllegalArgumentException(REJOIN_COMMAND_DESCRIPTION, e);
        }
    }

}