设置重新分片标志

触发重新分配条件

  • 新的实例加入
  • /jobname/config文件变动
  • 实例变动(加入、删除)

 

SetUpFacade

新节点启动的时候,会设置重新分片标志

registerStartUpInfo

public void registerStartUpInfo(final boolean enabled) {
        listenerManager.startAllListeners();
        leaderService.electLeader(); // 选取主节点
        serverService.persistOnline(enabled); //  /${jobname}/servers/192.16.67.21  设置ENABLED
        instanceService.persistOnline(); // 添加instances 比如: /${jobname}/instances/192.16.67.21@-@249736
        shardingService.setReshardingFlag(); //设置重新分片标志  jobName/leader/sharding/necessary
        if (!reconcileService.isRunning()) {
            reconcileService.startAsync();
        }
    }

 

ShardingListenerManager

public void start() { // 监听的是/jobName
    addDataListener(new ShardingTotalCountChangedJobListener());
    addDataListener(new ListenServersChangedJobListener());
}

 

ShardingTotalCountChangedJobListener

/jobname/config配置文件变动 触发
// /jobname/config配置文件变动 触发
class ShardingTotalCountChangedJobListener extends AbstractJobListener {
	
	@Override
	protected void dataChanged(final String path, final Type eventType, final String data) {
		if (configNode.isConfigPath(path) && 0 != JobRegistry.getInstance().getCurrentShardingTotalCount(jobName)) {
			int newShardingTotalCount = YamlEngine.unmarshal(data, JobConfigurationPOJO.class).toJobConfiguration().getShardingTotalCount(); // 新的分片数(配置文件变了)
			if (newShardingTotalCount != JobRegistry.getInstance().getCurrentShardingTotalCount(jobName)) { // 数量不一致
				shardingService.setReshardingFlag(); // 设置需要分片标志
				JobRegistry.getInstance().setCurrentShardingTotalCount(jobName, newShardingTotalCount); // 设置新的分片总数
			}
		}
	}
}

ListenServersChangedJobListener

// 任务服务器数量事件
class ListenServersChangedJobListener extends AbstractJobListener {
	
	@Override // jobname/instances下面有新增、删除节点触发 // NODE_CREATED  NODE_DELETED 要么有新的servers节点  或者 是否是服务器路径jobname/servers/${ip}
	protected void dataChanged(final String path, final Type eventType, final String data) {
		if (!JobRegistry.getInstance().isShutdown(jobName) && (isInstanceChange(eventType, path) || isServerChange(path))) {
			shardingService.setReshardingFlag();
		}
	}
	// isInstancePath: jobname/instances
	private boolean isInstanceChange(final Type eventType, final String path) {
		return instanceNode.isInstancePath(path) && Type.NODE_CHANGED != eventType; // NODE_CREATED  NODE_DELETED
	}
	
	private boolean isServerChange(final String path) {
		return serverNode.isServerPath(path);
	}
}

 

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值