Hi,
I have a set of resources each of which has a unique identifier. Each
resource element must be locked before it is used, and unlocked afterwards.
The logic of the application is something like:
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.
However, I cannot think of a good way to implement this sort of one-of-many
locking.
I could create a directory called "available" and another called "locked".
Available would have one entry for each resource id ( or one entry
containing a list of the resource-ids). For locking, I could loop through
the available ids, attempting to create a lock for that in the locked
directory. However this seems a bit clumsy and slow. Also, the locks are
held for a relatively short time (1 second on average), and by time I have
blundered through all the possible locks, ids that were locked at the start
might be available by time I finished.
Can anyone think of a more elegant and efficient way of doing this ?
regards,
Martin
|