You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hbase.apache.org by "Wellington Chevreuil (Jira)" <ji...@apache.org> on 2022/11/29 14:59:00 UTC

[jira] [Created] (HBASE-27511) Lock contention when doing multiple parallel preads due to StoreFileReader reuse

Wellington Chevreuil created HBASE-27511:
--------------------------------------------

             Summary: Lock contention when doing multiple parallel preads due to StoreFileReader reuse
                 Key: HBASE-27511
                 URL: https://issues.apache.org/jira/browse/HBASE-27511
             Project: HBase
          Issue Type: Bug
            Reporter: Wellington Chevreuil
            Assignee: Wellington Chevreuil
         Attachments: rs-stack-lock-contention

In HStoreFile, we reuse the StoreFileReader created during HStoreFile initialization when creating a StoreFileScanner for preads:

[https://github.com/apache/hbase/blob/master/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStoreFile.java#L545]

When using S3 as hbase storage, we noticed this caused lock contention when multiple clients were doing preads in parallel:
{noformat}
...
"RpcServer.default.FPBQ.Fifo.handler=38,queue=8,port=16020" #125 daemon prio=5 os_prio=0 tid=0x00007fc11d83c000 nid=0x73f2 waiting for monitor entry [0x00007fc1154e6000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at org.apache.hadoop.fs.FSInputStream.read(FSInputStream.java:73)
        - waiting to lock <0x00007fc4c2769660> (a org.apache.hadoop.fs.s3a.S3AInputStream)
...
"RpcServer.default.FPBQ.Fifo.handler=37,queue=7,port=16020" #124 daemon prio=5 os_prio=0 tid=0x00007fc11d83a000 nid=0x73f1 waiting for monitor entry [0x00007fc1155e7000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at org.apache.hadoop.fs.FSInputStream.read(FSInputStream.java:73)
        - waiting to lock <0x00007fc4c2769660> (a org.apache.hadoop.fs.s3a.S3AInputStream)
...
"RpcServer.default.FPBQ.Fifo.handler=36,queue=6,port=16020" #123 daemon prio=5 os_prio=0 tid=0x00007fc11d838000 nid=0x73f0 runnable [0x00007fc1156e8000]
   java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
...
at org.apache.hadoop.fs.s3a.S3AInputStream.reopen(S3AInputStream.java:216)
        - locked <0x00007fc4c2769660> (a org.apache.hadoop.fs.s3a.S3AInputStream)
... {noformat}
 We should create a new instance of StoreFileReader for each StoreFileScanner when doing preads, instead,



--
This message was sent by Atlassian Jira
(v8.20.10#820010)