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 <[email protected]> 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: [email protected]
o: 303.746.7302
Advancing the way the world uses the cloud
<http://solidfire.com/solution/overview/?video=play>*™*