[ZODB-Dev] ZODB's strange bahavior when undoing transactions
Stefan Milenkovic
smilenko at gmail.com
Thu Apr 21 05:35:50 EDT 2005
Hello!
I have a problem with ZODB's transactions undo. The code I give you
below is written for undoing all the transactions until a given time.
It is the following:
### START CODE
if __name__ == "__main__":
import getopt
from datetime import datetime
try:
opts, args = getopt.getopt(sys.argv[1:], '', ['year=',
'month=', 'day=', 'hour=', 'minute='])
if len(opts)!=5 or len(args)>0:
raise Exception, "Usage: undo.py --year YYYY --month MM
--day DD --hour HH --minute MM"
year = None
month = None
day = None
hour = None
minute = None
for o, a in opts:
if o == '--year':
year = a
if o == '--month':
month = a
if o == '--day':
day = a
if o == '--hour':
hour = a
if o == '--minute':
minute = a
dt = datetime(int(year), int(month), int(day), int(hour), int(minute))
if dt > datetime.now():
raise Exception, "This date belongs to the future."
Initialization of variable db goes here.
# Undo the transaction(s):
i = 0
while datetime.fromtimestamp(db.undoInfo(i,i+1)[0]['time']) > dt:
db.undo(db.undoInfo(i,i+1)[0]['id'])
i += 1
Here goes the commit.
print "Successfully undone."
except Exception, msg:
print msg
Here goes the abort.
### END CODE
The problem is that sometimes it works fine, but sometimes (even for
the same date and time input as when it worked) there are errors. For
example, for one given date and time input, successive runs of the
script give a successful undo, then an error, then a succes again, and
again and then an error... Really bizarre. Errors are like:
Undo error 0x1fa291: Undo error 0x1fa291: no previous record
Undo error 0x1fa290: Undo error 0x1fa290: no previous record
Undo error 0x1fa3b2: Undo error 0x1fa3b2: _loadBack() failed
Undo error 0x1fa3b3: Undo error 0x1fa3b3: _loadBack() failed
Undo error 0x1fa3b0: Undo error 0x1fa3b0: _loadBack() failed
Undo error 0x1fa3b1: Undo error 0x1fa3b1: _loadBack() failed
Undo error 0x1fa3b6: Undo error 0x1fa3b6: _loadBack() failed
...
...
...
Do someone know what's wrong? Is it the code or maybe a problem with
ZODB itself?
Thanks in advance,
Stefan
More information about the ZODB-Dev
mailing list