FYI: It appears this GlobalLock class is used pretty frequently in the codebase. I went ahead and replaced my synchronized logic with GlobalLock logic.
On Tue, Jan 13, 2015 at 8:54 PM, Mike Tutkowski < mike.tutkow...@solidfire.com> wrote: > The use case is that I have access control lists on my SAN that I > dynamically update as a given volume is attached to or detached from a VM > in a cluster. > > Let's say multiple "attach" commands come in for VMs in the same cluster > (I use one ACL per compute cluster). This leads to the storage framework > calling grantAccess on my plug-in from different threads at the same time > (which leads to the plug-in "losing" one of the volumes that is supposed to > be in the ACL). > > If I use only one management server and protect grantAccess with a > synchronized block, the problem goes away (the ACL is always correct). > > I was looking to extend this synchronization across grantAccess calls that > are running in multiple management servers at the same time. > > On Tue, Jan 13, 2015 at 6:45 PM, Nitin Mehta <nitin.me...@citrix.com> > wrote: > >> Yes, it should do it for you. Please check for the references of this >> method and ensure there are other logic pieces using this. >> It might help if you can you give some context of of your use case ? >> >> Thanks, >> -Nitin >> >> On 13/01/15 4:12 PM, "Mike Tutkowski" <mike.tutkow...@solidfire.com> >> wrote: >> >> >Hi, >> > >> >I have code in my plug-in that I'd like to make sure doesn't run in >> >multiple threads at the same time. >> > >> >Of course if there were only the possibility of one management server >> ever >> >running at a time, then I could just use synchronized. >> > >> >What is the recommended CloudStack approach? >> > >> >I see code like this in places (in a try block): >> > >> > GlobalLock lock = >> >GlobalLock.getInternLock(templateIdPoolIdString); >> > >> > if (!lock.lock(5)) { >> > >> > s_logger.debug("Couldn't lock the db on the string " >> + >> >templateIdPoolIdString); >> > >> > return null; >> > >> > } >> > >> >Then the finally block has this: >> > >> >lock.unlock(); >> > >> >lock.releaseRef(); >> >Does this achieve what I'm looking for? >> > >> >Thanks! >> > >> >-- >> >*Mike Tutkowski* >> >*Senior CloudStack Developer, SolidFire Inc.* >> >e: mike.tutkow...@solidfire.com >> >o: 303.746.7302 >> >Advancing the way the world uses the cloud >> ><http://solidfire.com/solution/overview/?video=play>* * >> >> > > > -- > *Mike Tutkowski* > *Senior CloudStack Developer, SolidFire Inc.* > e: mike.tutkow...@solidfire.com > o: 303.746.7302 > Advancing the way the world uses the cloud > <http://solidfire.com/solution/overview/?video=play>*™* > -- *Mike Tutkowski* *Senior CloudStack Developer, SolidFire Inc.* e: mike.tutkow...@solidfire.com o: 303.746.7302 Advancing the way the world uses the cloud <http://solidfire.com/solution/overview/?video=play>*™*