cloudstack-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mike Tutkowski <mike.tutkow...@solidfire.com>
Subject Re: [QUESTION] Synchronizing across management servers
Date Wed, 28 Jan 2015 02:18:48 GMT
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.tutkowski@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.Mehta@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.tutkowski@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.tutkowski@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.tutkowski@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.tutkowski@solidfire.com
o: 303.746.7302
Advancing the way the world uses the cloud
<http://solidfire.com/solution/overview/?video=play>*™*

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message