FW: [Mondrian] deadlock in MemberCacheHelper

Will Gorman wgorman at pentaho.com
Fri Apr 4 01:15:29 EDT 2008

Hi Julian,

I've investigated this a bit.  The issue is related to the two caches
RolapCubeHierarchy.RolapCubeHierarchyMemberReader manages.  The
inherited cacheHelper (A) from SmartMemberReader is used to store cube
specific RolapMembers, and the rolapCubeCacheHelper (B) which stores
cube specific RolapCubeMember wrappers.  In the first stack trace,
SqlTupleReader.readTuple locks cache B, and then locks cache A.  In the
second stack trace, RolapSchemaReader locks cache A, and then locks
cache B.

Now that I know what is going on, I'll need to write a unit test that
simulates this deadlock... it shouldn't be too difficult.  In the mean
time, setting the enableCache option to false that you added should
remove the deadlock.


On Thu, 2008-04-03 at 10:53 -0700, Julian Hyde wrote:
> Will,
> The deadlock is a cyclic wait between two MemberCacheHelper objects.
> One thread holds A and waits for B, another holds B and waits for A.
> Usually deadlocks can be solved by agreeing a locking order by object
> type (e.g. first lock the RolapSchema then lock the MemberCacheHelper)
> but that won't work in this case, because both locked objects are the
> same type.
> We need to figure out what operation would ever need to lock two
> different MCHs. Thoughts on this?
> Julian
> PS Nicely formatted stack trace is attached.
> ______________________________________________________________________
> From: mondrian-bounces at pentaho.org
> [mailto:mondrian-bounces at pentaho.org] On Behalf Of Julian Hyde
> Sent: Wednesday, April 02, 2008 9:45 PM
> To: 'Mondrian developer mailing list'
> Subject: RE: [Mondrian] deadlock in MemberCacheHelper
> Logged bug 1932920 Deadlock in MemberCacheHelper. Will take a look
> tomorrow.
> > -----Original Message-----
> > From: mondrian-bounces at pentaho.org
> > [mailto:mondrian-bounces at pentaho.org] On Behalf Of John V. Sichi
> > Sent: Wednesday, April 02, 2008 5:31 PM
> > To: mondrian at pentaho.org
> > Subject: [Mondrian] deadlock in MemberCacheHelper
> >
> > A concurrency scenario for LucidEra perf tests (run as part of
> > validating the mainline Mondrian codebase for integration)
> > ran into the
> > deadlock below.  The code being tested was fairly recent (I
> > can dig up
> > the change number if any line numbers don't match).
> >
>  <snip> 

More information about the Mondrian mailing list