On Thu, 2009-01-08 at 10:49 +0100, Patrick Ohly wrote: > On Thu, 2009-01-08 at 10:10 +0530, Suman Manjunath wrote: > > On Wed, Jan 7, 2009 at 17:15, Patrick Ohly <patrick.o...@gmx.de> wrote: > > > The plan for change tracking is to get rid of the dependency on > > > e_book_get_changes(). I already stopped using e_cal_get_changes() > > > because it was too inflexible. Instead I'll rely on the REV resp. > > > LAST-MODIFIED properties: the backend must update these each time an > > > item is modified. This seems to be supported by most backends. Are there > > > backends which are known to not support this? > > > > a) Looking at [1], I can't find what a REV property is. Did you mean > > to use [2] ? > > REV is part of vCard 3.0. It would be used in ebook. ecal would use > LAST-MODIFIED instead. Does the GroupWise server update REV when > contacts are modified? > > > > The problem with concurrent modifications is two-fold. > > > Stale data in UI: > > > * user opens an item in Evolution > > > * synchronization starts in the background > > > * updates the item in EDS > > > * => When the user saves his changes, will he overwrite the more > > > recent data in EDS? Will he be warned? With Evolution the user > > > is not warned and his changes overwrite the ones in EDS (tested > > > with contacts). Evolution should listen for change signals and > > > warn the user as soon as he has stale data in the edit dialog. > > > The user then can cancel and reopen the item to redo his > > > changes. This is unlikely to happen often, so more elaborate > > > solutions (merging changes, additional buttons to copy from EDS) > > > should not be necessary. Should I file a bug for this? Anyone > > > able and willing to work on it? > > > > Not so for calendars. > > I only tested with a contact. There the problem occurs as described > above.
As suman had mentioned, this is not a problem for calendar as the modifications are notified to the UI by matching the live queries in place. > > > > Stale data in sync: > > > * when the sync starts, it builds a list of new/updated/deleted > > > items > > > * user modifies data in EDS > > > * this leads to conflicts, f.i. sync modifies item that was > > > modified by user > > > > > > Both cases need to be handled by the program which wants to make changes > > > to EDS data (Evolution, sync engine). To avoid race conditions, support > > > by EDS would be needed which currently doesn't exist. As a workaround > > > the following method would reduce the time window in which conflicts can > > > occur: > > > * get revstring before starting to make modifications (when > > > opening item in UI; when starting sync) > > > * before modifying the item, check the revstring again > > > * if the same as before, do the modification > > > * if different, handle conflict > > > > The GroupWise server updates the 'modified' property of the item when > > it actually gets modified on the server. For newly created items, it > > also adds the 'created' property at the same time. > > > > This behavior invalidates all the 'handle-at-backend' approaches to > > fix the apparent bug, > > "the apparent bug" = > https://bugzilla.novell.com/show_bug.cgi?id=184554 ? > > Or do you mean the problem with overwriting more recent changes? > > I'm not sure I understood how the GroupWise server and backend work. > What you are saying is that locally cached data might get out of sync > with the server and thus checks in the Evolution backend cannot be > implemented 100% accurately, right? > > That sounds like a real problem, but I still see room for improvement. > For example, the backend could implement the workaround that I described > in my email. A client can't do that because without changes in the > backend it might read stale data, compare successfully, then push an > update which overwrites modifications on the server. > > > > A secure solution would have to put the revision check into EDS itself > > > to make the check and update atomic. The proposal is to add this check > > > to e_book_commit_contact() and e_cal_modify_object(): > > > * The caller is expected to include REV resp. LAST-MODIFIED as > > > read from EDS earlier. > > > * The EDS backend compares against the current value before > > > updating the item. If there is a mismatch, the update is > > > rejected with a suitable error code. > > > * If the values are unset, the update is always executed. > > > > A backend may not have a LAST-MODIFIED property for a particular event > > in this use case: > > a) create a new appointment in the GW calendar (while online) > > b) open the same appointment (before the refresh timeout) > > That's because the local copy of the appointment is not identical to the > one on the server, right? Perhaps the backend could force an immediate > refresh of this particular appointment to get the server's > LAST-MODIFIED? You are right. This is a problem in groupwise backend and not common to all backends. We should be storing the last modified time stored in server as soon as the item is created. There is a problem in the groupwise soap interface that it does not return the created/last-modified time stored on server after creating the item. May be the item has to be fetched again to get these fields. But this is a problem only to groupwise and should be fixed in the backend. thanks, Chenthill. _______________________________________________ Evolution-hackers mailing list Evolution-hackers@gnome.org http://mail.gnome.org/mailman/listinfo/evolution-hackers