hbase-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jim Kellerman (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HBASE-810) Prevent temporary deadlocks when, during a scan with write operations, the region splits
Date Wed, 20 Aug 2008 21:10:46 GMT

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

Jim Kellerman commented on HBASE-810:
-------------------------------------

I have attached two screenshots to this issue.

locking-compatibility shows what operations are compatible and how they are protected from
each other

lock-sequencing shows how locking should work. There are a couple of changes from the current
state of affairs:

- StoreFileScanner constructor takes out a read lock on the HStore. This is not necessary
as a read lock is already held in HStore.

- HRegion.get(byte [] row, byte [] column, long timestamp,  int numVersions) (which all the
other variants of get call) and HRegion.compactStores() should take out splitsAndClosesLock.readLock().lock()
at the start of the method, and release it at the end, using try - finally



> Prevent temporary deadlocks when, during a scan with write operations, the region splits
> ----------------------------------------------------------------------------------------
>
>                 Key: HBASE-810
>                 URL: https://issues.apache.org/jira/browse/HBASE-810
>             Project: Hadoop HBase
>          Issue Type: Bug
>    Affects Versions: 0.2.0
>            Reporter: Jean-Daniel Cryans
>            Priority: Blocker
>             Fix For: 0.2.1, 0.3.0
>
>         Attachments: lock-sequencing.jpg, locking-compatibility.jpg
>
>
> HBASE-804 was not about the good problem, this one is. Anyone that iterates through the
results of a scanner and that rewrites data back into the row at each iteration will hit a
UnknownScannerException if a split occurs. See the stack in the referred jira. Timeline :
> Split occurs, acquires a write lock and waits for scanners to finish
> The scanner in the custom code iterates and writes data until the write is blocked by
the lock
> deadlock
> The scanner timeouts thus the region splits but the USE will be thrown when next() is
called
> Inside a Map, the task will simply be retried when the first one fails. Elsewhere, it
becomes more complicated.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message