Thanks for the doc JD. i will go through it. Jonathan: yes, i think there is a possible lock order violation with the put and flushCache.
thanks, dhruba On Fri, Mar 5, 2010 at 10:35 AM, Jean-Daniel Cryans <jdcry...@apache.org>wrote: > Jim Kellerman wrote this a while ago, not sure how accurate it is > right now tho... > > http://wiki.apache.org/hadoop/Hbase/HRSLocking > > J-D > > On Fri, Mar 5, 2010 at 12:40 AM, Dhruba Borthakur <dhr...@gmail.com> > wrote: > > 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 > > > -- Connect to me at http://www.facebook.com/dhruba