源码分析ElasticJob故障失效转移机制

本文深入分析了ElasticJob的故障失效转移机制,包括如何判断和执行故障转移,以及故障分片的重新执行逻辑。文章通过源码解读,阐述了在任务节点宕机后,其他节点如何监听并瓜分失效节点的分片,以及如何创建和删除故障转移相关节点,确保任务的顺利执行。此外,还介绍了分片上下文的获取和任务执行流程。
摘要由CSDN通过智能技术生成

int item = Integer.parseInt(each);

String node = FailoverNode.getExecutionFailoverNode(item);

if (jobNodeStorage.isJobNodeExisted(node) && jobInstanceId.equals(jobNodeStorage.getJobNodeDataDirectly(node))) {

result.add(item);

}

}

Collections.sort(result);

return result;

}

首先获取 n a m e s p a c e / j o b n a m e / s h a r d i n g 目录下的直接子节点 ( 当前的分片信息 ) ,判断 {namespace}/jobname/sharding目录下的直接子节点(当前的分片信息),判断 namespace/jobname/sharding目录下的直接子节点(当前的分片信息),判断{namespace}/jobname/sharding/{item}/failover节点是否存在,如果存在判断该分片是否为当前任务的分片节点,如果是,则返回。该方法的主要目的就是获取已经转移到当前任务节点的分片信息。

代码@5,判断是否有失败分片转移到当前节点,初始状态肯定为空,将执行代码@6,设置故障转移相关准备环境。

代码@6,获取分配给Crashed(宕机的job实例)的所有分片节点,遍历已发生故障的分片,将这些分片设置为故障,待故障转移,设置为故障的实现方法为:创建${namespace}/jobname/leader/failover/items/{item}。

代码@7:执行FailoverService#failoverIfNecessary是否执行故障转移。

/**

  • 如果需要失效转移, 则执行作业失效转移.

*/

public void failoverIfNecessary() {

if (needFailover()) {

jobNodeStorage.executeInLeader(FailoverNode.LATCH, new FailoverLeaderExecutionCallback());

}

}

private boolean needFailover() {

return jobNodeStorage.isJobNodeExisted(FailoverNode.ITEMS_ROOT) && !jobNodeStorage.getJobNodeChildrenKeys(FailoverNode.ITEMS_ROOT).isEmpty()

&& !JobRegistry.getInstance().isJobRunning(jobName);

}

其实现思路:【needFailover方法】首先判断是否存在 n a m e s p a c e / j o b n a m e / l e a d e r / f a

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值