public ShardingContexts getShardingContexts()

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);
    }