/** * Pause the job * @param jobId the job id * @return the pause result */ @RequestMapping(value = "/{jobId}/pause", method = RequestMethod.POST) public JsonResponse pauseJob(@PathVariable("jobId") Long jobId){ Response<Boolean> pauseResp = serverService.pauseJob(jobId); if (!pauseResp.isSuccess() || !pauseResp.getData()){ return JsonResponse.notOk(messages.get(pauseResp.getErr())); } return JsonResponse.ok(pauseResp.getData()); }
/** * Stop the job, the job won't be scheduled at after * @param jobId the job id * @return the remove result */ @RequestMapping(value = "/{jobId}/stop", method = RequestMethod.POST) public JsonResponse stopJob(@PathVariable("jobId") Long jobId){ // remove job from the scheduler Response<Boolean> removeResp = serverService.removeJob(jobId); if (!removeResp.isSuccess() || !removeResp.isSuccess()){ return JsonResponse.notOk(messages.get(removeResp.getErr())); } return JsonResponse.ok(); }
/** * Resume the job to be scheduled for pausing * @param jobId the job id * @return the resume result */ @RequestMapping(value = "/{jobId}/resume", method = RequestMethod.POST) public JsonResponse resumeJob(@PathVariable("jobId") Long jobId){ Response<Boolean> resumeResp = serverService.resumeJob(jobId); if (!resumeResp.isSuccess() || !resumeResp.getData()){ return JsonResponse.notOk(messages.get(resumeResp.getErr())); } return JsonResponse.ok(resumeResp.getData()); }
/** * Save the job * @param jobEditDto the job edit dto * @return true or false */ @RequestMapping(method = RequestMethod.POST) public JsonResponse saveJob(@RequestBody JobEditDto jobEditDto){ if (!Crons.isValidExpression(jobEditDto.getCron())){ return JsonResponse.notOk(messages.get("job.cron.invalid")); } Response<Long> saveResp = jobService.saveJob(jobEditDto); if(!saveResp.isSuccess()){ return JsonResponse.notOk(messages.get(saveResp.getErr())); } Response<Boolean> opResp; if (jobEditDto.getStatus()){ // try to enable the job opResp = serverService.scheduleJobIfPossible(saveResp.getData()); } else { // try to disable the job opResp = serverService.removeJob(saveResp.getData()); } if (!opResp.isSuccess() || !opResp.getData()){ return JsonResponse.notOk(messages.get(opResp.getErr())); } return JsonResponse.ok(opResp.getData()); }
/** * Schedule the job, the job will be scheduled at after * @param jobId the job id * @return the schedule result */ @RequestMapping(value = "/{jobId}/schedule", method = RequestMethod.POST) public JsonResponse scheduleJob(@PathVariable("jobId") Long jobId){ // schedule the job Response<Boolean> scheduleResp = serverService.scheduleJob(jobId); if (!scheduleResp.isSuccess() || !scheduleResp.isSuccess()){ return JsonResponse.notOk(messages.get(scheduleResp.getErr())); } return JsonResponse.ok(); }
/** * Trigger the job * @param jobId the job id * @return the trigger result */ @RequestMapping(value = "/{jobId}/trigger", method = RequestMethod.POST) public JsonResponse triggerJob(@PathVariable("jobId") Long jobId){ Response<Boolean> triggerResp = serverService.triggerJob(jobId); if (!triggerResp.isSuccess() || !triggerResp.getData()){ return JsonResponse.notOk(messages.get(triggerResp.getErr())); } return JsonResponse.ok(triggerResp.getData()); }
/** * Enable the job, will start to scheduling the job * @param jobId the job id * @return the enable result */ @RequestMapping(value = "/{jobId}/enable", method = RequestMethod.POST) public JsonResponse enableJob(@PathVariable("jobId") Long jobId){ // enable the job Response<Boolean> enableResp = jobService.enableJob(jobId); if (!enableResp.isSuccess()){ return JsonResponse.notOk(messages.get(enableResp.getErr())); } // try to scheduling the job Response<Boolean> schedulingResp = serverService.scheduleJobIfPossible(jobId); if (!schedulingResp.isSuccess() || !schedulingResp.getData()){ return JsonResponse.notOk(messages.get(schedulingResp.getErr())); } return JsonResponse.ok(); }
private void notifyAllNextJobs(JobFinishedEvent e) { int pageNo = 1; int pageSize = 100; Long jobId = e.getJobId(); Response<Page<Long>> nextJobIdsResp; for (;;){ nextJobIdsResp = jobService.pagingNextJobIds(jobId, pageNo, pageSize); if (!nextJobIdsResp.isSuccess()){ Logs.error("failed to paging next job ids(jobId={}, pageNo={}, pageSize={}) when notify all next jobs, cause: {}", jobId, pageNo, pageSize, nextJobIdsResp.getErr()); break; } List<Long> nextJobIds = nextJobIdsResp.getData().getData(); if (CollectionUtil.isNullOrEmpty(nextJobIds)){ // there aren't next jobs break; } for (Long nextJobId : nextJobIds){ serverService.notifyJob(nextJobId); } pageNo ++; } }
private void doFailOver(String server) { // TODO maybe think that one job fired just now, but the server crashed // lock the server's failover Lock lock = createServerFailoverLock(server); if(!lock.lock(1000)){ // has one server is doing failover return; } try { if (tryWaitServerStart(server)){ return; } Logs.warn("The server({}) left, will do failover.", server); // load the server's jobs Response<List<Long>> jobIdsResp = jobService.findJobIdsByServer(server); if (!jobIdsResp.isSuccess()){ Logs.warn("failed to find the server({})'s job ids, cause: {}", server, jobIdsResp.getErr()); return; } List<Long> jobIds = jobIdsResp.getData(); if (CollectionUtil.isNullOrEmpty(jobIds)){ // don't need to dispatch return; } // dispatch the jobs to other servers serverService.scheduleJobs(jobIds, serverCluster.alives()); } finally { lock.unlock(); } }
/** * Disable the job, and stop the scheduling if necessary * @param jobId the job id * @return the disable result */ @RequestMapping(value = "/{jobId}/disable", method = RequestMethod.POST) public JsonResponse disableJob(@PathVariable("jobId") Long jobId){ // disable the job Response<Boolean> disableResp = jobService.disableJob(jobId); if (!disableResp.isSuccess() || !disableResp.getData()){ return JsonResponse.notOk(messages.get(disableResp.getErr())); } // try to remove job schedule Response<Boolean> removeResp = serverService.removeJob(jobId); if (!removeResp.isSuccess() || !removeResp.isSuccess()){ return JsonResponse.notOk(messages.get(removeResp.getErr())); } return JsonResponse.ok(); }
/** * Delete the job * @param jobId the job id * @return the delete result */ @RequestMapping(value = "/{jobId}/delete", method = RequestMethod.POST) public JsonResponse deleteJob(@PathVariable("jobId") Long jobId){ // remove the job Response<Boolean> removeResp = serverService.removeJob(jobId); if (!removeResp.isSuccess() || !removeResp.getData()){ return JsonResponse.notOk(messages.get(removeResp.getErr())); } // delete the job Response<Boolean> deleteResp = jobService.deleteJob(jobId); if (!deleteResp.isSuccess() || !deleteResp.getData()){ return JsonResponse.notOk(messages.get(deleteResp.getErr())); } return JsonResponse.ok(); }