views:

44

answers:

1

I have a set of resources each of which has a unique identifier, and each resource element must be locked before it is used, and unlocked afterwards. The logic of the application is:

lock any one element;
if (none locked) then 
   exit with error;
else
   get resource-id from lock
   use resource
   unlock resource
end

Zookeeper looks like a good candidate for managing these locks, being fast and resilient, and it seems quite simple to recover from client failure.

Can anyone think how I could use Zookeeper to achieve this ?

+1  A: 

Hi Martin, How about this-

you have resources in the a directory (say /locks)

each process which needs to lock, lists all the children of this directory and then creates an ephemeral node called /locks/resource1/lock depending on which resource it wants to lock. It could be randomized on the set of resources.

This ephemeral node will be deleted by the process as soon as its done using the resource. A process should only use to resource_{i} if its been able to create /locks/resource_{i}/locks.

Would that work?

Thanks mahadev

mahadev
Thanks Mahadev, I think that could well do the trick.
Martin