ihaolin/antares

任务调度错误汇总

bondaddy opened this issue · 8 comments

配置修改,redis配置成redis cluster

  1. 调度服务就会报 has a running instance ,任务就不会再执行
  2. Antares系统报警 elapsedTime 会无限累加 每次都会告警
  3. 停止服务再启动服务,调度已经停止,客户端依旧会执行任务
  1. 这个问题主要是由于当前任务实例未执行完,然后相应的所有客户单实例都shutdown了,导致该实例一直无法执行完成,也无法主动删除,该问题后面会考虑处理,当前可以先尝试手动删除zk中的任务实例节点;
  2. elapsedTime是根据每次新的任务实例的startTime计算(now() - startTime),无限累加大致是什么情况呢?;
  3. 这个问题只要任务实例还没执行完,客户端拿到分片,就会执行,不过服务端会保证多次执行也可以幂等,README中也提到,客户端应用也要保证执行重复分片(如由于网络,或客户端实例宕机等问题导致)时的幂等性。
  1. 并没有停止客户端 只是停止了调度服务 停止调度服务后 server会报一个 failed to update job state
    然后再次启动调度任务 server就会一直报has a running instance 了
    还有一个warn
    There is an job timeout event(JobFinishedEvent{jobInstanceId=58} JobEvent{jobId=1}).
    看起来是无法通知到客户端的,客户端是否要配置自己的服务地址 我使用的是源码里面的demo
    2 看起来elapsedTime 像是个累加的过程 没有正确的执行应有的效果 所以每次执行 都会调用发送邮件的告警
  1. 👌 ,我持续track下;
  2. 怀疑是任务每次都超时,每次都会执行,你看看任务历史的(endTime - startTime)都大于设置的阈值。

停止调度的时候 再开启时 因为客户端没有关闭 所以一直会报has a running instance
客户端重启之后,这个问题就可以解决
问题可能在于canRunJobInstance这里面的逻辑存在问题

停止调度服务 ,再开启调度服务 服务端无法通知客户端开启服务 客户端必须重启才能继续进行调度
这个问题是否暂时无法解决?

我昨天这边试过(demo里的DemoJobA),cron设置的是0/30 * * * * ? ,先让任务调度正常执行,然后在某次调度时,客户端正在执行过程中,我将server关掉,客户端会一直重试finish请求,然后我再启动server,任务实例也继续执行完成,后续的调度也正常,并没有出现不能继续进行调度呢,你用最新的master代码,详述下操作步骤呢?

不是关闭server 是在tower里面停止调度任务, 然后再开启调度 。
调度器会打印
Waiting the job(myapp/me.hao0.antares.client.spring.starter.jobs.HelloJob/7) with timeout(0) to be finished.
但是无法收到HelloJob/7 has finished 客户端也不会执行任务
之后根据表达式触发任务的时候,就会报
WARN - The job(myapp/me.hao0.antares.client.spring.starter.jobs.HelloJob) has a running instance, so ignore this execution.

此时如果重启客户端服务,一切又会回复正常 调度任务又将正确执行

👌我稍后再复现一下。