package com.vip.saturn.job.sharding.listener;
import org.apache.curator.framework.recipes.cache.TreeCacheEvent;
import org.apache.curator.framework.recipes.cache.TreeCacheEvent.Type;
import com.vip.saturn.job.sharding.node.SaturnExecutorsNode;
import com.vip.saturn.job.sharding.service.NamespaceShardingService;
/**
*
* @author chembo.huang
*
*/
public class JobConfigTriggerShardingListener extends AbstractTreeCacheListener {
private String jobName;
private NamespaceShardingService namespaceShardingService;
private String enabledPath;
private String forceShardPath;
public JobConfigTriggerShardingListener(String jobName, NamespaceShardingService namespaceShardingService) {
this.jobName = jobName;
this.namespaceShardingService = namespaceShardingService;
this.enabledPath = SaturnExecutorsNode.getJobConfigEnableNodePath(jobName);
this.forceShardPath = SaturnExecutorsNode.getJobConfigForceShardNodePath(jobName);
}
@Override
public void childEvent(Type type, String path, String nodeData) throws Exception {
if(isJobEnabledPath(type, path)) {
if(Boolean.valueOf(nodeData)) {
namespaceShardingService.asyncShardingWhenJobEnable(jobName);
} else {
namespaceShardingService.asyncShardingWhenJobDisable(jobName);
}
} else if (isForceShardJob(type, path)) {
namespaceShardingService.asyncShardingWhenJobForceShard(jobName);
}
}
private boolean isJobEnabledPath(TreeCacheEvent.Type type, String path) {
return type == TreeCacheEvent.Type.NODE_UPDATED && path.equals(enabledPath);
}
private boolean isForceShardJob(TreeCacheEvent.Type type, String path) {
return type == TreeCacheEvent.Type.NODE_ADDED && path.equals(forceShardPath);
}
}