解决AlluxioProperties#merge方法的一个小并发问题

一、问题描述:

使用测试工具对新开发的一个Alluxio功能进行读数据性能压测,启动了50线程进行并发读数据,结果客户端侧总是抛出找不到配置项的错误或者是配置项读取错乱的错误,类似如下:

解决AlluxioProperties#merge方法的一个小并发问题

看到异常栈说没有给alluxio.ns1.zookeeper.enabled这个属性设置值,于是首先去检查配置文件中是否配置了alluxio.ns1.zookeeper.enabled这个属性,经检查配置文件没有问题,接着修改为单线程用shell脚本循环多此执行,发现不会报这个错误,所以可以初步判定是发生了线程并发修改问题。

二、问题解决

解决这个问题我主要是分了三步:

① 顺着异常栈去源码中寻找抛出异常的位置以及相关联的重要源码片段,以本文的问题举例:异常栈中说没有给alluxio.ns1.zookeeper.enabled属性设置值,且栈的调用关系表明是在create方法中调用getBoolean时发现属性没有value然后抛出异常的。那我们就根据异常栈中的方法名和代码行数去MasterInquireClient中的110行看看。如下图所示:

解决AlluxioProperties#merge方法的一个小并发问题

是通过conf.getBoolean拿的,这就说明传进来的conf中没有alluxio.ns1.zookeeper.enable

上一篇:Linux 海康华为SDK头文件冲突解决


下一篇:反射与依赖注入