是只要一跑checkAndPut就必现吗?还是跑着跑着就会出错?这个看着就是某次写wal完了(不一定写成功)没有推MVCC
凡尔 <xiaozhang0...@163.com> 于2020年12月16日周三 下午9:25写道: > 问题现象 > > 在使用kylin2.6.6+hbase2.2.3中 > > 服务端出现大量如下警告: > > TRACE [handler=88] ipc.RpcServer: called: 165045 service :ClientService > methodName: Mutate size…… > > > > > WARN[handler=88] regionserver.MultiVersionConcurrencyControl: STUCK: > MultiVersionConcurrencyControl{readPoint=1090,writePoint=1093} > > > > > 之后持续打印上述WARN STUCK 日志几个小时,执行多次后jstack后重启了rs。 > > > > > 在jstack中 > AsyncFSWAL-0 线程 > > State: WAITING > > at > Java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442) > > > > > handler88线程 > > State: TIME_WAITING > > at > org.apache.hadoop.hbase.regionservser.MultiVersionConcurrencyControl.waitForRead(MultiVersionConcurrencyControl.java:232) > > > > > 在客服端-kylin > 发起请求第一次报错 > > CallTimeoutException: Call id=165045 > > at org.apache.hadoop.hbase.client.HTable.checkAndPut(Table.java:1261) > > 客户端重试报错 > > ioexception: Timed out waiting for lock for row:xxx in region xxxxxxx > > at > org.apache.hadoop.hbase.regionserver.HRegion.getRowLockInternal(Region.java:5937) > > 之后多次重试报同样的错误 > > > > > > > > 我的理解 > > 从Jstack中可知,AsyncFSWAL线程阻塞在LinkedBlockingQueue.take方法,队列应该为空 > > 从客户端重试日志和jstack可知,handler88线程并未释放行锁,并且阻塞在MultiVersionConcurrencyControl.waitForRead方法上,写入操作似乎没有完成写WAL,与1矛盾! > MVCC readpoint长时间卡在1090,是否可以反证想法1? > Kylin使用hbase-client-1.4.9.jar,并且每次出现上述问题均是从checkAndPut方法进入,版本兼容性? > > > > > > > > 疑惑 > > AsyncFSWAL与handler两个线程进了死循环,似乎是丢失了数据?