@Override public APIAuditor.Result longJobAudit(LongJob job, APIEvent rsp) { Class resourceType = job.getAuditType(); DebugUtils.Assert(resourceType != null, String.format("resourceType mustn't be null from longjob: %s", job.getClass().getSimpleName())); return new APIAuditor.Result(getResourceUuid(job), resourceType); } }
private String getResourceUuid(LongJob job) { return job.getAuditResourceUuid() == null ? "" : job.getAuditResourceUuid(); }
private void doStartJob(LongJob job, LongJobVO vo, AsyncBackup async) { String longJobUuid = vo.getUuid(); job.start(vo, new ReturnValueCompletion<APIEvent>(async) {
private void cancelLongJob(String uuid, Completion completion) { LongJobVO vo = updateByUuid(uuid, it -> it.setState(LongJobState.Canceling)); LongJob job = longJobFactory.getLongJob(vo.getJobName()); logger.info(String.format("longjob [uuid:%s, name:%s] has been marked canceling", vo.getUuid(), vo.getName())); job.cancel(vo, new Completion(completion) { @Override public void success() { updateByUuid(uuid, it -> it.setState(LongJobState.Canceled)); logger.info(String.format("longjob [uuid:%s, name:%s] has been canceled", vo.getUuid(), vo.getName())); completion.success(); } @Override public void fail(ErrorCode errorCode) { updateByUuid(uuid, it -> it.setState(LongJobState.Failed)); logger.error(String.format("failed to cancel longjob [uuid:%s, name:%s]", vo.getUuid(), vo.getName())); completion.fail(errorCode); } }); }
private void doLoadLongJob(LongJobVO vo, LongJobOperation operation) { if (operation == null) { operation = getLoadOperation(vo); } if (operation == LongJobOperation.Start) { // launch the waiting jobs ThreadContext.put(Constants.THREAD_CONTEXT_API, vo.getApiId()); LongJob job = longJobFactory.getLongJob(vo.getJobName()); ThreadContext.put(Constants.THREAD_CONTEXT_TASK_NAME, job.getClass().toString()); doStartJob(job, vo, null); SQL.New(LongJobVO.class).eq(LongJobVO_.uuid, vo.getUuid()).set(LongJobVO_.state, LongJobState.Running).update(); } else if (operation == LongJobOperation.Resume) { ThreadContext.put(Constants.THREAD_CONTEXT_API, vo.getApiId()); LongJob job = longJobFactory.getLongJob(vo.getJobName()); ThreadContext.put(Constants.THREAD_CONTEXT_TASK_NAME, job.getClass().toString()); logger.info(String.format("start to resume longjob [uuid:%s, name:%s]", vo.getUuid(), vo.getName())); job.resume(vo); dbf.update(vo); } }
@Override public void run(SyncTaskChain chain) { SubmitLongJobReply reply = new SubmitLongJobReply(); LongJobVO vo = updateByUuid(msg.getJobUuid(), it -> it.setState(LongJobState.Running)); // launch the long job right now ThreadContext.put(Constants.THREAD_CONTEXT_API, vo.getApiId()); LongJob job = longJobFactory.getLongJob(vo.getJobName()); ThreadContext.put(Constants.THREAD_CONTEXT_TASK_NAME, job.getClass().toString()); doStartJob(job, vo, msg); reply.setInventory(LongJobInventory.valueOf(vo)); if (job.getAuditType() != null) { reply.setNeedAudit(true); } logger.info(String.format("longjob [uuid:%s, name:%s] has been started", vo.getUuid(), vo.getName())); bus.reply(msg, reply); chain.next(); }