[ZODB-Dev] funky _p_mtime values

Dieter Maurer dieter at handshake.de
Thu Sep 27 15:24:38 EDT 2007


Thomas Clement Mogensen wrote at 2007-9-27 12:43 +0200:
> ...
>Within the last few days something very strange has happened: All  
>newly created or modified objects get a _p_mtime that is clearly  
>incorrect and too big for DataTime to consider it a valid timestamp.  
>(ie. int(obj._p_mtime) returns a long).
>
>Values I get for _p_mtime on these newly altered objects are  
>something like:
>8078347503.108635
>with only the last few decimals differing among all affected objects.
>Objects changed at the same time appear to get the same stamp.

Looks interesting....

When I see such unexplainable things, I tend to speak of alpha rays....
Computers are quite reliable -- but not completely. Every now
and then a bit is changing which should not change.
In my current life, I have seen things like this 3 times -- usually
in the form that the content of a file changed without that
any application touched it.

When you accept such a wieldy explanation, then, maybe, I can
give one:

  FileStorage must ensure that all transaction ids (they are
  essentially timestamps) are strictly increasing.

  To this end, it maintains a "current transaction id".
  When a new transaction id is needed, it tries to construct
  one from the current time. But if this is smaller than
  the "current transaction id", then it increments that a little
  and uses it as new transaction id.

  Thus, if for some reasons, once a bit changed in the 
  current transaction id (or in the file that maintains it
  persistently), then you may no longer get away with it.

On Plone.org, someone asked today how to fix the
effects on the ZODB of an administrator changing the system time to 2008.
If he finds a solution, then your problem may be tackled the same way.



-- 
Dieter


More information about the ZODB-Dev mailing list