是只要一跑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两个线程进了死循环,似乎是丢失了数据?

Reply via email to