@Override public void onUnlock(String path, String nodeData) { String[] paths = StringUtil.split(path, "/"); String jobId = paths[paths.length - 1]; // Sync execute cache in case broadcast not available try { executableManager.syncDigestsOfJob(jobId); } catch (PersistentException e) { logger.error("Failed to sync cache of job: " + jobId + ", at server: " + serverName); } final Output output = executableManager.getOutput(jobId); if (output.getState() == ExecutableState.RUNNING) { AbstractExecutable executable = executableManager.getJob(jobId); if (executable instanceof DefaultChainedExecutable && !nodeData.equalsIgnoreCase(serverName)) { try { logger.warn(nodeData + " has released the lock for: " + jobId + " but the job still running. so " + serverName + " resume the job"); if (!jobLock.isLocked(getLockPath(jobId))) { executableManager.resumeRunningJobForce(executable.getId()); fetcherPool.schedule(fetcher, 0, TimeUnit.SECONDS); } } catch (Exception e) { logger.error("resume the job but fail in server: " + serverName, e); } } } }
@Override public void onUnlock(String path, String nodeData) { String[] paths = StringUtil.split(path, "/"); String jobId = paths[paths.length - 1]; // Sync execute cache in case broadcast not available try { executableManager.syncDigestsOfJob(jobId); } catch (PersistentException e) { logger.error("Failed to sync cache of job: " + jobId + ", at server: " + serverName); } final Output output = executableManager.getOutput(jobId); if (output.getState() == ExecutableState.RUNNING) { AbstractExecutable executable = executableManager.getJob(jobId); if (executable instanceof DefaultChainedExecutable && !nodeData.equalsIgnoreCase(serverName)) { try { logger.warn(nodeData + " has released the lock for: " + jobId + " but the job still running. so " + serverName + " resume the job"); if (!jobLock.isLocked(getLockPath(jobId))) { executableManager.resumeRunningJobForce(executable.getId()); fetcherPool.schedule(fetcher, 0, TimeUnit.SECONDS); } } catch (Exception e) { logger.error("resume the job but fail in server: " + serverName, e); } } } }