[
https://issues.apache.org/jira/browse/HBASE-14632?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14961548#comment-14961548
]
stack commented on HBASE-14632:
-------------------------------
bq. The exception happened due to concurrent table disablement and
tryRegionServerReport() call.
Do you know how?
If reader can be null legitimately, then I'd say don't even log at DEBUG.
Otherwise, if its an error, what Elliott said... WARN or ERROR if a real prob.
> Region server aborts due to unguarded dereference of Reader
> -----------------------------------------------------------
>
> Key: HBASE-14632
> URL: https://issues.apache.org/jira/browse/HBASE-14632
> Project: HBase
> Issue Type: Bug
> Reporter: Ted Yu
> Assignee: Ted Yu
> Attachments: 14632-v1.txt
>
>
> I noticed the following in one run of
> org.apache.hadoop.hbase.regionserver.TestSplitTransactionOnCluster-output.txt
> :
> {code}
> 2015-10-16 09:46:33,108 INFO [main] client.HBaseAdmin$10(1233): Started
> disable of testStoreFileReferenceCreationWhenSplitPolicySaysToSkipRangeCheck
> 2015-10-16 09:46:33,108 INFO
> [B.defaultRpcServer.handler=4,queue=0,port=38813] master.HMaster(1908):
> Client=hbase/null disable
> testStoreFileReferenceCreationWhenSplitPolicySaysToSkipRangeCheck
> 2015-10-16 09:46:33,223 DEBUG
> [B.defaultRpcServer.handler=4,queue=0,port=38813]
> procedure2.ProcedureExecutor(654): Procedure DisableTableProcedure
>
> (table=testStoreFileReferenceCreationWhenSplitPolicySaysToSkipRangeCheck)
> id=24 owner=hbase state=RUNNABLE:DISABLE_TABLE_PREPARE added to the store.
> 2015-10-16 09:46:33,225 DEBUG
> [B.defaultRpcServer.handler=1,queue=0,port=38813]
> master.MasterRpcServices(1057): Checking to see if procedure is done procId=24
> 2015-10-16 09:46:33,230 DEBUG [ProcedureExecutor-22]
> lock.ZKInterProcessLockBase(226): Acquired a lock for /hbase/table-lock/
>
> testStoreFileReferenceCreationWhenSplitPolicySaysToSkipRangeCheck/write-master:388130000000001
> 2015-10-16 09:46:33,320 WARN [RS:0;cn012:53683] regionserver.HStore(1910):
> StoreFile
> hdfs://localhost:40022/user/hbase/test-data/f09d7163-94f7-4218-b1b0-43dfc733a37b/data/
>
> default/testStoreFileReferenceCreationWhenSplitPolicySaysToSkipRangeCheck/dc90661cebac678ac508ed98093fc3e9/f/fffae6d1a0234c1791d8098cbcdb2c5e
> has a null Reader
> 2015-10-16 09:46:33,320 WARN [RS:0;cn012:53683] regionserver.HStore(1924):
> StoreFile
> hdfs://localhost:40022/user/hbase/test-data/f09d7163-94f7-4218-b1b0-43dfc733a37b/data/
>
> default/testStoreFileReferenceCreationWhenSplitPolicySaysToSkipRangeCheck/dc90661cebac678ac508ed98093fc3e9/f/fffae6d1a0234c1791d8098cbcdb2c5e
> has a null Reader
> 2015-10-16 09:46:33,321 WARN [RS:0;cn012:53683] regionserver.HStore(1924):
> StoreFile
> hdfs://localhost:40022/user/hbase/test-data/f09d7163-94f7-4218-b1b0-43dfc733a37b/data/
>
> default/testStoreFileReferenceCreationWhenSplitPolicySaysToSkipRangeCheck/dc90661cebac678ac508ed98093fc3e9/f/fffae6d1a0234c1791d8098cbcdb2c5e
> has a null Reader
> 2015-10-16 09:46:33,321 FATAL [RS:0;cn012:53683]
> regionserver.HRegionServer(2078): ABORTING region server
> cn012.l42scl.hortonworks.com,53683,1445013948320: Unhandled: null
> java.lang.NullPointerException
> at
> org.apache.hadoop.hbase.regionserver.HStore.getTotalStaticIndexSize(HStore.java:1936)
> at
> org.apache.hadoop.hbase.regionserver.HRegionServer.createRegionLoad(HRegionServer.java:1470)
> at
> org.apache.hadoop.hbase.regionserver.HRegionServer.buildServerLoad(HRegionServer.java:1206)
> at
> org.apache.hadoop.hbase.regionserver.HRegionServer.tryRegionServerReport(HRegionServer.java:1149)
> at
> org.apache.hadoop.hbase.regionserver.HRegionServer.run(HRegionServer.java:965)
> at
> org.apache.hadoop.hbase.MiniHBaseCluster$MiniHBaseClusterRegionServer.runRegionServer(MiniHBaseCluster.java:156)
> at
> org.apache.hadoop.hbase.MiniHBaseCluster$MiniHBaseClusterRegionServer.access$000(MiniHBaseCluster.java:108)
> at
> org.apache.hadoop.hbase.MiniHBaseCluster$MiniHBaseClusterRegionServer$1.run(MiniHBaseCluster.java:140)
> at java.security.AccessController.doPrivileged(Native Method)
> at javax.security.auth.Subject.doAs(Subject.java:356)
> at
> org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1637)
> at
> org.apache.hadoop.hbase.security.User$SecureHadoopUser.runAs(User.java:302)
> at
> org.apache.hadoop.hbase.MiniHBaseCluster$MiniHBaseClusterRegionServer.run(MiniHBaseCluster.java:138)
> at java.lang.Thread.run(Thread.java:745)
> {code}
> Here is related code:
> {code}
> public long getTotalStaticIndexSize() {
> long size = 0;
> for (StoreFile s :
> this.storeEngine.getStoreFileManager().getStorefiles()) {
> size += s.getReader().getUncompressedDataIndexSize();
> }
> return size;
> }
> {code}
> Some methods, such as getStorefilesIndexSize(), guard against null Reader by
> checking r against null.
> Same practice should be followed in other getters.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)