On Thu, Dec 22, 2005 at 08:33:43AM +0800, Syan Tan wrote: > a client could > be operating on stale data, send an update based on the stale data, and > then later receive a delayed notify message > to update it's stale data, and it would not see the same total order as > other clients. > > or the client must check xmin with each update, just in case it is > overwriting > a delayed update from elsewhere. That's what we do.
On each write (sql-update in save_payload()) we - "select for update" to check whether someone else is writing *right now* - "update ... where xmin=old_xmin" to see whether someone else changed/deleted our row while we were away In case of the former we retry with a timeout. In case of the latter - which is likely to happen after the former occurred - we offer all three versions - the original data we saw when reading it - the new data we were about to write to the backend - the modified data as is currently in the backend written by someone else to the caller for use in a merge widget. Karsten -- GPG key ID E4071346 @ wwwkeys.pgp.net E167 67FD A291 2BEA 73BD 4537 78B9 A9F9 E407 1346 _______________________________________________ Gnumed-devel mailing list [email protected] http://lists.gnu.org/mailman/listinfo/gnumed-devel
