[Zope] Re: Zeo and conflict resolution (was "suddenly confused")
chrism at plope.com
Wed Jan 30 16:39:01 EST 2008
Ricardo Newbery wrote:
> On Jan 30, 2008, at 12:59 PM, Tres Seaver wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>> Ricardo Newbery wrote:
>>> Has anyone given thought to maybe providing a more general class with
>>> conflict resolution in the core distribution? The Length class works
>>> for simple counters and I guess it can also be used for just simple
>>> assignments, but what about something more complicated, perhaps with
>>> some sort of factory defined at the moment of instantiation?
>>> Assuming this is even possible, having such a general purpose
>>> conflict resolution class defined in the Zope products directory
>>> might make it easier to distribute a third-party product that needs a
>>> little conflict resolution. Just a thought.
>> Custom CR code is *hard* to get right: most people would be better off
>> using stock code (e.g., on of the tree types defined in the BTrees
>> package, or Length). Those who can get it right aren't likely to need
>> their hands held. ;)
> I meant easier for the end user, not the developer. It's kind of
> complicated right now to explain how to set up a ZEO configuration to
> work with your third-party product. Makes it a bit of hurdle to
> distribute such a thing for general use.
> Oops, I just realized that Length won't work for simple assignments as
> the conflict resolution assumes it's trying to resolve a counter (which
> should have been obvious, I know). Is there zope core class I can use
> for a simple assignment, that maybe resolves conflicts by just picking
> the last value assigned?
There is no such thing as the "last value" during a conflict (only three states:
what's in the database, and the two conflicting states: what connection1 says,
and what connection2 says). If the values are always going to have a __cmp__
method or if they can be otherwise compared (like integers), and if you're
willing to accept the "highest" of the three states, you might use the conflict
resolution policy of Products.Transience.Transience.py.Increaser.
More information about the Zope