in kernel/src/main/java/org/apache/shardingsphere/elasticjob/kernel/executor/facade/SingleShardingJobFacade.java [121:156]
public ShardingContexts getShardingContexts() {
JobConfiguration jobConfig = configService.load(true);
boolean isFailover = jobConfig.isFailover();
if (isFailover) {
List<Integer> failoverShardingItems = failoverService.getLocalFailoverItems();
if (!failoverShardingItems.isEmpty()) {
return executionContextService.getJobShardingContext(failoverShardingItems);
}
}
List<Integer> shardingItems;
String nextJobInstIP = null;
if (isNeedSharding()) {
shardingService.shardingIfNecessary();
shardingItems = shardingService.getLocalShardingItems();
} else {
nextJobInstIP = jobNodeStorage.getJobNodeDataDirectly("next-job-instance-ip");
if (StringUtils.isBlank(nextJobInstIP)) {
shardingService.shardingIfNecessary();
shardingItems = shardingService.getLocalShardingItems();
} else {
JobInstance jobInst = JobRegistry.getInstance().getJobInstance(jobConfig.getJobName());
shardingItems = nextJobInstIP.equals(jobInst.getServerIp()) ? Collections.singletonList(0) : new ArrayList<>();
}
}
if (log.isDebugEnabled()) {
log.debug("job name: {}, sharding items: {}, nextJobInstIP: {}, sharding total count: {}, isFailover: {}",
jobConfig.getJobName(), shardingItems, nextJobInstIP, jobConfig.getShardingTotalCount(), isFailover);
}
if (isFailover) {
shardingItems.removeAll(failoverService.getLocalTakeOffItems());
}
shardingItems.removeAll(executionService.getDisabledItems(shardingItems));
return executionContextService.getJobShardingContext(shardingItems);
}