[ZODB-Dev] Conflict resolving persistent queue?
Gary Poster
gary at zope.com
Fri Mar 24 09:30:55 EST 2006
On Mar 23, 2006, at 3:21 PM, Chris Withers wrote:
> Hi All,
>
> I was wondering whether anyone had implemented a FIFO persistent
> queue class which has the following conflict resolution strategy:
>
> two concurrent adds: adds both new items to the end of the queue in
> a time-based order
>
> one add and one remove happening concurrently: add the new item and
> remove the removed item
>
> two concurrent removes: re-raise the conflict error.
http://svn.zope.org/Sandbox/poster/zope.zasync/queue.py?
rev=41465&view=auto
Slight differences:
- if you use the bucket-based one (better for potentially large
queues) then it's not reliably time based order; if you use the
simpler one then you get what you want.
- it only pukes if you remove the same one (since, though it defaults
to FIFO, it allows you to remove ones later down the queue if desired).
>
> I can't imagine it'd be hard to knock one up in python if not, in
> which case:
>
> - is there any similar python code I can look at for examples?
>
> - how would I write unit tests for the above 3 cases?
This was the approach I preferred:
http://svn.zope.org/Sandbox/poster/zope.zasync/queue.txt?
rev=41464&view=auto
I want to put this in the ZODB release (though time is running out).
When I proposed it, Florent suggested that it go in persistent and
that the tests no longer rely on ZODB, but test the conflict
resolution code with artificial entries. This makes sense in that
context, and it's what I plan/hope to do. That said, the approach I
took in the doctest is also useful, since it is more real-world.
Gary
More information about the ZODB-Dev
mailing list