Vipshop saturn executor没有分片,JOB执行过程报executor is empty

阅读: 评论:0

Vipshop saturn executor没有分片,JOB执行过程报executor is empty

Vipshop saturn executor没有分片,JOB执行过程报executor is empty

Vipshop saturn 的开源文档中的错误还是不少,executor 没有分片还是由于文档说明不清楚,配置错误导致。

在按demo文件启动executor 及demo的job,发现job 一直没有执行,跟踪代码分析发现:
在类public abstract class AbstractElasticJob 中 的public final void execute(final Triggered triggered) 中的如下代码就返回了

if (ShardingItems() == null || ShardingItems().isEmpty()) {LogUtils.debug(log, jobName, "{} 's items of the executor is empty, do nothing about business.",jobName);callbackWhenShardingItemIsEmpty(shardingContext);return;}

在如上代码说executor 是empty的,导致没有执行,再跟踪分析发现是在类public class ExecutionContextService的

public List<Integer> getShardingItems() {List<Integer> shardingItems = ShardingService().getLocalHostShardingItems();boolean isEnabledReport = configService.isEnabledReport();if (configService.isFailover() && isEnabledReport) {List<Integer> failoverItems = LocalHostFailoverItems();if (!failoverItems.isEmpty()) {return failoverItems;} else {LocalHostTakeOffItems());return shardingItems;}} else {return shardingItems;}}

的第一行的getLocalHostShardingItems就返回了空,getLocalHostShardingItems实际获取zookeeper的信息

public static String getShardingNode(final String executorName) {return String.format(SERVER_SHARDING, executorName);}

同时发现出现问题时候console 中dashboard的executor 数量也始终为0,于是转头去分析console 的配置,猜想是否是CONSOLE_ZK_CLUSTER_MAPPING配置有问题,初始配置是按文档说明配置为:default:/192.168.157.130,其中"192.168.157.130"是zk cluster name,分析代码发现关键类:public class RegistryCenterServiceImpl,判断是否console 是否管理zookeeper信息代码如下:

/**
* 判断该集群是否能被本计算
*/
private boolean isZKClusterCanBeComputed(String clusterKey) {
if (CollectionUtils.isEmpty(restrictComputeZkClusterKeys)) {
return false
}
ains(clusterKey);
}

配置信息导入代码如下:

private void refreshRestrictComputeZkClusters() throws SaturnJobConsoleException {// clear 当前可计算的zkCluster集群列表restrictComputeZkClusterKeys.clear();String allMappingStr = ValueDirectly(SystemConfigProperties.CONSOLE_ZK_CLUSTER_MAPPING);if (StringUtils.isBlank(allMappingStr)) {log.info("CONSOLE_ZK_CLUSTER_MAPPING is not configured in sys_config, so all zk clusters can be computed by this console");restrictComputeZkClusterKeys.addAll(getZkClusterKeys());return;}allMappingStr = StringUtils.deleteWhitespace(allMappingStr);String[] singleConsoleMappingArray = allMappingStr.split(";");for (String singleConsoleMappingStr : singleConsoleMappingArray) {String[] consoleAndClusterKeyArray = singleConsoleMappingStr.split(":");if (consoleAndClusterKeyArray.length != 2) {throw new SaturnJobConsoleException("the CONSOLE_ZK_CLUSTER_MAPPING(" + String(consoleAndClusterKeyArray)+ ") format is not correct, should be like console_cluster_id:zk_cluster_id");}String tempConsoleClusterId = consoleAndClusterKeyArray[0];String zkClusterKeyStr = consoleAndClusterKeyArray[1];if (consoleClusterId.equals(tempConsoleClusterId)) {String[] zkClusterKeyArray = im().split(",");restrictComputeZkClusterKeys.addAll(Arrays.asList(zkClusterKeyArray));log.info("the current console cluster:{} can do sharding and dashboard to zk clusters:{}",consoleClusterId, restrictComputeZkClusterKeys);return;}}}

发现没有处理"/"的代码(唯品会内部zk cluster命名都是/开头?),将配置修改为default:192.168.157.130,再次跟踪代码,发现有一段关键代码也顺利执行了:
public class RegistryCenterServiceImpl 的private void createNamespaceShardingManager()

然后job也被正确执行。

截图庆祝一下:

本文发布于:2024-01-28 15:58:11,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064286978564.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:p
标签:分片   过程   saturn   Vipshop   executor
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23