Casey Duncan wrote:
> I am posting this here to get reactions here for something that we have been
> discussing on zope-dev that pertains to the ZODB.
> Dieter M. discovered that bobobase_modification_time (henceforth referred to
> as b_m_t) is not always an accurate representation of an object's
> modification time, especially when an object has been modified in a
> transaction that has not been commited. This is a problem when doing things
> like cataloging an object in the same transaction that it is modified.
> I thought this issue created an opprotunity to solve two problems. The above
> problem and the anachronistic b_m_t API itself, which is always good for a
> laugh in Zope classes. The idea is to create a new method in PersistentExtra
> "getModificationTime" which returns the actual modification time of an object
> based on the time the change is registered if it has been changed and not
> commited and then the last commit time if no change has been made. I also
> propose we add a second method "getLastCommitTime" or some-such which behaves
> the same as the current b_m_t method. At the same time we would deprecate
> b_m_t.
> Kapil Thangavelu prototyped a couple of ideas. I think his latest code is
> simple and straighforward enough to be incorporated, although it does not yet
> replace and deprecate b_m_t, which I think is important.
> He posted sample code to zope-dev yesterday, here is a (rather long) link:
> Thoughts anyone?

The basic problem is that b_m_t is a database modification time, not
an application-meaningful time. You pointed out that there are 
application-meaningful times that are not captured by the database time.
In addition, there are database modifications that are not meaningful
to the application.  Operations like export/import (copy/paste), 
version commit/abort, transactional undo, etc. cause the database times
to change without making application-meaningful changes.

Also, there could be state changes in an object that are not meaningful
to the application.

I think that a much better approach, if modification time is important
to your application, is to store the application modification time in the
object as a data attribute.


Jim Fulton           mailto:[EMAIL PROTECTED]       Python Powered!        
CTO                  (888) 344-4332    
Zope Corporation

Zope-Dev maillist  -  [EMAIL PROTECTED]
**  No cross posts or HTML encoding!  **
(Related lists - )

Reply via email to