I am  trying to come up with a locking hierarchy document for all the locks
used in HBase.  Any details/feedback anybody can share to make this document
better
would be much appreciated. This heirarchy can be used to interpreted as: a
thread that has a lock C cannot acquire A or B, and so on.

A. HRegionServer.lock
  This lock protects the list of regions maintained by a region server.
  The lock protects a data structure called onlineRegions that mantains a
  map of region names to HRegion.
  Question:  what is region quiesce?

B. HRegion.newScannerLock
   This lock ensures that puts and deletes are atomic. Also, one cannot
close
   a region unless all puts, deletes and scans are completed.
              put gets a writelock
              delete gets a writelock
              scanner gets a readlock
              regionclose gets a writelock
              flushcache gets a writelock to switch between memstore
                         and new store files

C. HRegion.splitsAndClosesLock
   This lock ensures that compactions and flshCaches are completed before
   a region close is successful. I do not yet understand why put and delete
   have to acquire this lock.
              put gets a readlock to check if record already exists
              delete gets a readlock
              compaction gets a readlock
              flushCache gets a readlock
              regionclose gets a writelock

D. RowLock
   This is for atomic updates of a row.
              put gets a rowlock

E. HRegion.updatesLock
              put gets a readlock to insert entire key into memstore and
hlog
              delete gets a readlock
              interalFlushCache gets a writelock to snapshot memstore and
hlog

F. HRegion.synchronized_splitLock
G. HRegion.synchronized_writestate

H. MemStore.lock

I. Store.compactLock
             compaction gets a writelock: allows only 1 compaction at a time
J. Store.lock
              add(KeyValue) gets a readlock
              delete(KeyValue) gets a readlock
              get(KeyValue) gets a readlock
              close gets a writelock
              completeCompaction gets a writelock

---------------------------------------------
One posible problem lock hierarchy violation:
HRegion.flushcache holds the splitsAndClosesLock.readlock and then invokes
internalFlushCache. internalFlushCache  acquires the netScannerLock to
switch
between memstore and new store files. could this cause a problem?


-- 
Connect to me at http://www.facebook.com/dhruba

Reply via email to