You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Anoop Sam John (JIRA)" <ji...@apache.org> on 2014/05/11 00:15:06 UTC

[jira] [Assigned] (HBASE-11145) Issue with HLog sync

     [ https://issues.apache.org/jira/browse/HBASE-11145?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Anoop Sam John reassigned HBASE-11145:
--------------------------------------

    Assignee: stack

Assigning to Stack as per our offline discussion.

> Issue with HLog sync
> --------------------
>
>                 Key: HBASE-11145
>                 URL: https://issues.apache.org/jira/browse/HBASE-11145
>             Project: HBase
>          Issue Type: Bug
>            Reporter: Anoop Sam John
>            Assignee: stack
>             Fix For: 0.99.0
>
>
> Got the below Exceptions Log in case of a write heavy test
> {code}
> 2014-05-07 11:29:56,417 ERROR [main.append-pool1-t1] wal.FSHLog$RingBufferEventHandler(1882): UNEXPECTED!!!
> java.lang.IllegalStateException: Queue full
>  at java.util.AbstractQueue.add(Unknown Source)
>  at org.apache.hadoop.hbase.regionserver.wal.FSHLog$SyncRunner.offer(FSHLog.java:1227)
>  at org.apache.hadoop.hbase.regionserver.wal.FSHLog$RingBufferEventHandler.onEvent(FSHLog.java:1878)
>  at org.apache.hadoop.hbase.regionserver.wal.FSHLog$RingBufferEventHandler.onEvent(FSHLog.java:1)
>  at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:133)
>  at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
>  at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
>  at java.lang.Thread.run(Unknown Source)
> 2014-05-07 11:29:56,418 ERROR [main.append-pool1-t1] wal.FSHLog$RingBufferEventHandler(1882): UNEXPECTED!!!
> java.lang.ArrayIndexOutOfBoundsException: 5
>  at org.apache.hadoop.hbase.regionserver.wal.FSHLog$RingBufferEventHandler.onEvent(FSHLog.java:1838)
>  at org.apache.hadoop.hbase.regionserver.wal.FSHLog$RingBufferEventHandler.onEvent(FSHLog.java:1)
>  at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:133)
>  at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
>  at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
>  at java.lang.Thread.run(Unknown Source)
> 2014-05-07 11:29:56,419 ERROR [main.append-pool1-t1] wal.FSHLog$RingBufferEventHandler(1882): UNEXPECTED!!!
> java.lang.ArrayIndexOutOfBoundsException: 6
>  at org.apache.hadoop.hbase.regionserver.wal.FSHLog$RingBufferEventHandler.onEvent(FSHLog.java:1838)
>  at org.apache.hadoop.hbase.regionserver.wal.FSHLog$RingBufferEventHandler.onEvent(FSHLog.java:1)
>  at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:133)
>  at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
>  at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
>  at java.lang.Thread.run(Unknown Source)
> 2014-05-07 11:29:56,419 ERROR [main.append-pool1-t1] wal.FSHLog$RingBufferEventHandler(1882): UNEXPECTED!!!
> java.lang.ArrayIndexOutOfBoundsException: 7
>  at org.apache.hadoop.hbase.regionserver.wal.FSHLog$RingBufferEventHandler.onEvent(FSHLog.java:1838)
>  at org.apache.hadoop.hbase.regionserver.wal.FSHLog$RingBufferEventHandler.onEvent(FSHLog.java:1)
>  at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:133)
>  at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
>  at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
>  at java.lang.Thread.run(Unknown Source)
>  {code}
> In FSHLog$SyncRunner.offer we do BlockingQueue.add() which throws Exception as it is full. The problem is the below shown catch() we do not do any cleanup.
> {code}
> this.syncRunners[index].offer(sequence, this.syncFutures, this.syncFuturesCount);
>         attainSafePoint(sequence);
>         this.syncFuturesCount = 0;
>       } catch (Throwable t) {
>         LOG.error("UNEXPECTED!!!", t);
>       }
> {code}
> syncFuturesCount is not getting reset to 0 and so the subsequent onEvent() handling throws ArrayIndexOutOfBoundsException.
> I think we should do the below 
> 1. Handle the Exception and call cleanupOutstandingSyncsOnException() as in other cases of Exception handling
> 2. Instead of BlockingQueue.add() use offer() (?)



--
This message was sent by Atlassian JIRA
(v6.2#6252)