[Zope-dev] Re: [Zope] Bi-directional update of Data.fs
Steve Alexander
steve@cat-box.net
Thu, 27 Jul 2000 12:59:41 +0100
Chris Withers wrote:
>
> Steve Alexander wrote:
> > Don't see why not. When an object is changed, the new object is just
> > appended to the end of Data.fs. Unless you use undo, or you pack the
> > Data.fs.
>
> You missed the problem ;-)
>
> Technically, there is no problem...
>
> Logically, what happens if one user updates and object on one machien
> and another user on another machines, after which you merge the
> data.fs's?
>
> I'm thinkthing of the things which result in Notes Replication/Save
> conflicts...
What does Lotus Notes offer to do if you get such a conflict?
I'm probably talking rubbish in what follows, because I don't have much
of an idea how these things really work...
----
The server has a data.original.
You take a copy of this, called data.chris. You use this for a while,
and data gets appended to data.chris.
Someone else is using the server, and data.original gets appended to.
Later, you want to recombine the changes, so you do as follows:
Create a data.original.before_fork that is the data.original just before
you took the copy data.chris. (You can work this out by looking at the
modified data.original and data.chris).
Create a list of the combined transactions (in order of time, I guess)
that happened on the server, and to data.chris. Within one monsterous
transaction, apply the list of combined transactions using the usual
under-the-hood ZODB machinery. Use Jim's new conflict resolution
algorithm to try to settle conflicts. If a conflict can't be settled,
ask interactively, or apply some sort of policy (like "chris always
wins" for example) and log the lost changes.
----
--
Steve Alexander
Software Engineer
Cat-Box limited
http://www.cat-box.net