cloudstack-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jeff Hair <j...@greenqloud.com>
Subject Re: Database locking code
Date Tue, 03 Feb 2015 11:11:22 GMT
Hi,

I've tried this and from our testing thus far it appears to do the
job. In fact the synchronization code I wrote didn't really do the job
(was storing a bunch of single-threaded ExecutorServices, one per
user--but still noticed conflicts at the end).

One concern I have though is the management server and running out of
threads. Let's say 10 of these operations are submitted. They all get
blocked and execute one at a time, per user. If enough users submit
enough of these requests, what will happen to other requests that
don't need to be locked? I assume we can configure the management
server's thread pool size somewhere?

Jeff

On Thu, Jan 29, 2015 at 2:34 PM, Mike Tutkowski
<mike.tutkowski@solidfire.com> wrote:
> Like this:
>
>             GlobalLock lock = GlobalLock.getInternLock(
> someStringYouMadeUpThatIsUniqueForThisPurpose);
>
>             if (!lock.lock(timeoutInSeconds)) {
>
>                 s_logger.debug("Couldn't lock the db on the string " +
> someStringYouMadeUpThatIsUniqueForThisPurpose);
>
>                 throw new CloudRuntimeException("Couldn't acquire DB lock");
>
>             }
>             try {
>
>                 // do your work
>
>             }
>
>             finally {
>
>                 lock.unlock();
>
>                 lock.releaseRef();
>
>             }
>
> On Thu, Jan 29, 2015 at 7:32 AM, Mike Tutkowski <
> mike.tutkowski@solidfire.com> wrote:
>
>> I wrote that example code from memory, but now that I think about it, you
>> wouldn't call the lock method in the try block.
>>
>> Call lock and if you're successful, entry a try block to do your work and
>> have a finally to unlock and release the lock.
>>
>> On Thu, Jan 29, 2015 at 7:27 AM, Mike Tutkowski <
>> mike.tutkowski@solidfire.com> wrote:
>>
>>> Does this work for you?
>>>
>>>             GlobalLock lock = GlobalLock.getInternLock(
>>> someStringYouMadeUpThatIsUniqueForThisPurpose);
>>>
>>>             try {
>>>
>>>                 if (!lock.lock(timeoutInSeconds)) {
>>>
>>>                     s_logger.debug("Couldn't lock the db on the string
>>> " + someStringYouMadeUpThatIsUniqueForThisPurpose);
>>>
>>>                     throw new CloudRuntimeException("Couldn't acquire DB
>>> lock");
>>>
>>>                 }
>>>
>>>                 // do your work
>>>
>>>             }
>>>
>>>             finally {
>>>
>>>                 lock.unlock();
>>>
>>>                 lock.releaseRef();
>>>
>>>             }
>>>
>>> On Thu, Jan 29, 2015 at 3:32 AM, Jeff Hair <jeff@greenqloud.com> wrote:
>>>
>>>> I have some code I've added to CloudStack that I am currently
>>>> synchronizing on in the traditional manner (synchronized block,
>>>> ExecutorService, etc). I'm currently running a single instance of
>>>> CloudStack so I don't have to deal with clustering.
>>>>
>>>> I've read the Data Access Layer documentation and am wondering if the
>>>> database locks are the actual appropriate solution rather than what
>>>> I'm doing.
>>>>
>>>> Basically my issue is that I need to lock access to an IP address
>>>> reserved to the account and perform some long operations on it. I also
>>>> need to guarantee that no other IPs on the account are manipulated
>>>> while performing this task. Synchronization accomplishes this because
>>>> I can force the IP operations through an ExecutorService, but I'm
>>>> really looking for a better solution that will also work with
>>>> clustered management servers.
>>>>
>>>> Thanks,
>>>>
>>>> Jeff
>>>>
>>>
>>>
>>>
>>> --
>>> *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>*™*



-- 
Jeff Hair
Core Systems Developer

Tel: (+354) 415 0200
jeff@greenqloud.com
www.greenqloud.com

Mime
View raw message