You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Erdinc Bereketoglu (JIRA)" <ji...@apache.org> on 2015/04/28 18:19:07 UTC

[jira] [Commented] (HBASE-9810) Global memstore size will be calculated wrongly if replaying recovered edits throws exception

    [ https://issues.apache.org/jira/browse/HBASE-9810?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14517319#comment-14517319 ] 

Erdinc Bereketoglu commented on HBASE-9810:
-------------------------------------------

I got the same error with version 1.0.0

2015-04-28 16:09:57,343 ERROR [RS_OPEN_REGION-ip-172-30-0-249:53414-0] handler.OpenRegionHandler: Failed open of region=tsdb,\x00\x00AU \x0B,1429656370760.9ae2dbabd3a304a60f1e976fdba1aa15., starting to roll back the global memstore size.
org.apache.hadoop.hbase.DroppedSnapshotException: region: tsdb,\x00\x00AU \x0B,1429656370760.9ae2dbabd3a304a60f1e976fdba1aa15.
        at org.apache.hadoop.hbase.regionserver.HRegion.internalFlushcache(HRegion.java:1999)
        at org.apache.hadoop.hbase.regionserver.HRegion.replayRecoveredEdits(HRegion.java:3692)
        at org.apache.hadoop.hbase.regionserver.HRegion.replayRecoveredEditsIfAny(HRegion.java:3497)
        at org.apache.hadoop.hbase.regionserver.HRegion.initializeRegionStores(HRegion.java:887)
        at org.apache.hadoop.hbase.regionserver.HRegion.initializeRegionInternals(HRegion.java:767)
        at org.apache.hadoop.hbase.regionserver.HRegion.initialize(HRegion.java:740)
        at org.apache.hadoop.hbase.regionserver.HRegion.openHRegion(HRegion.java:4908)
        at org.apache.hadoop.hbase.regionserver.HRegion.openHRegion(HRegion.java:4874)
        at org.apache.hadoop.hbase.regionserver.HRegion.openHRegion(HRegion.java:4845)
        at org.apache.hadoop.hbase.regionserver.HRegion.openHRegion(HRegion.java:4801)
        at org.apache.hadoop.hbase.regionserver.HRegion.openHRegion(HRegion.java:4752)
        at org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler.openRegion(OpenRegionHandler.java:356)
        at org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler.process(OpenRegionHandler.java:126)
        at org.apache.hadoop.hbase.executor.EventHandler.run(EventHandler.java:128)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NegativeArraySizeException
        at org.apache.hadoop.hbase.CellComparator.getMinimumMidpointArray(CellComparator.java:490)
        at org.apache.hadoop.hbase.CellComparator.getMidpoint(CellComparator.java:448)
        at org.apache.hadoop.hbase.io.hfile.HFileWriterV2.finishBlock(HFileWriterV2.java:165)
        at org.apache.hadoop.hbase.io.hfile.HFileWriterV2.checkBlockBoundary(HFileWriterV2.java:146)
        at org.apache.hadoop.hbase.io.hfile.HFileWriterV2.append(HFileWriterV2.java:263)
        at org.apache.hadoop.hbase.io.hfile.HFileWriterV3.append(HFileWriterV3.java:87)
        at org.apache.hadoop.hbase.regionserver.StoreFile$Writer.append(StoreFile.java:932)
        at org.apache.hadoop.hbase.regionserver.StoreFlusher.performFlush(StoreFlusher.java:121)
        at org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher.flushSnapshot(DefaultStoreFlusher.java:71)
        at org.apache.hadoop.hbase.regionserver.HStore.flushCache(HStore.java:879)
        at org.apache.hadoop.hbase.regionserver.HStore$StoreFlusherImpl.flushCache(HStore.java:2128)
        at org.apache.hadoop.hbase.regionserver.HRegion.internalFlushcache(HRegion.java:1953)
        ... 16 more


> Global memstore size will be calculated wrongly if replaying recovered edits throws exception
> ---------------------------------------------------------------------------------------------
>
>                 Key: HBASE-9810
>                 URL: https://issues.apache.org/jira/browse/HBASE-9810
>             Project: HBase
>          Issue Type: Bug
>    Affects Versions: 0.98.0, 0.96.1
>            Reporter: chunhui shen
>            Assignee: chunhui shen
>            Priority: Critical
>             Fix For: 0.98.0, 0.96.1
>
>         Attachments: hbase-9810-trunk.patch
>
>
> Recently we encountered such a case in 0.94-version:
> Flush is triggered frequently because:
> {noformat}DEBUG org.apache.hadoop.hbase.regionserver.MemStoreFlusher: Flush thread woke up because memory above low water=14.4g
> {noformat}
> But, the real global memstore size is about 1g.
> It seems the global memstore size has been calculated wrongly.
> Through the logs, I find the following root cause log:
> {noformat}
> ERROR org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler: Failed open of region=notifysub2_index,\x83\xDC^\xCD\xA3\x8A<\x
> E2\x8E\xE6\xAD!\xDC\xE8t\xED,1379148697072.46be7c2d71c555379278a7494df3015e., starting to roll back the global memstore size.
> java.lang.NegativeArraySizeException
>         at org.apache.hadoop.hbase.KeyValue.getFamily(KeyValue.java:1096)
>         at org.apache.hadoop.hbase.regionserver.HRegion.replayRecoveredEdits(HRegion.java:2933)
>         at org.apache.hadoop.hbase.regionserver.HRegion.replayRecoveredEditsIfAny(HRegion.java:2811)
>         at org.apache.hadoop.hbase.regionserver.HRegion.initializeRegionInternals(HRegion.java:583)
>         at org.apache.hadoop.hbase.regionserver.HRegion.initialize(HRegion.java:499)
>         at org.apache.hadoop.hbase.regionserver.HRegion.openHRegion(HRegion.java:3939)
>         at org.apache.hadoop.hbase.regionserver.HRegion.openHRegion(HRegion.java:3887)
>         at org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler.openRegion(OpenRegionHandler.java:332)
>         at org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler.process(OpenRegionHandler.java:108)
>         at org.apache.hadoop.hbase.executor.EventHandler.run(EventHandler.java:169)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>         at java.lang.Thread.run(Thread.java:662)
> {noformat}
> Browse the code of this part, seems a critial bug about global memstore size when replaying recovered edits.
> (RegionServerAccounting#clearRegionReplayEditsSize is called  for each edit file, it means the roll back size is smaller than actual when calling RegionServerAccounting#rollbackRegionReplayEditsSize)
> Anyway,  the solution is easy as the patch.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)