>If Jim is not right (and "DemoStorage" does not support "undo"),
>then it would not be difficult to derive a "RamFileStorage" from
>"FileStorage" that exactly works like "FileStorage" but have its
>file implemented as a "StringIO" (rather than a file on the file system).

Thanks for the clever suggestion! I have implemented a StringIOStorage
with apparent success.

On another note, a problem appeared however when changing
the objects that were persisted and I assumed it to be the fault of
my StringIOStorage but when I tried reverting abd using a FileStorage
the same error occurred.

  File "C:\Documents and Settings\user\Desktop\smarttree-2.5\database.py", line 
25, in commit
  File "C:\python25\Lib\site-packages\transaction\_manager.py", line 99, in 
    return self.get().commit(sub, deprecation_wng=False)
  File "C:\Python25\Lib\site-packages\transaction\_transaction.py", line 407, 
in commit
  File "C:\Python25\Lib\site-packages\transaction\_transaction.py", line 506, 
in _commitResources
  File "C:\Python25\Lib\site-packages\transaction\_transaction.py", line 642, 
in commit
    self.manager.commit(o, txn)
  File "C:\Python25\Lib\site-packages\ZODB\DB.py", line 747, in commit
    tid, oids = self._db._storage.undo(self._tid, t)
  File "C:\python25\Lib\site-packages\ZODB\FileStorage\FileStorage.py", line 
1117, in undo
    return self._txn_undo(transaction_id)
  File "C:\python25\Lib\site-packages\ZODB\FileStorage\FileStorage.py", line 
1126, in _txn_undo
    tindex = self._txn_undo_write(tpos)
  File "C:\python25\Lib\site-packages\ZODB\FileStorage\FileStorage.py", line 
1205, in _txn_undo_write
    raise MultipleUndoErrors(failures.items())
MultipleUndoErrors: Undo error 0x15e1: Undo error 0x15e1: _loadBack() failed

The actual line in FileStorage.py in _txn_undo_write that is raising the 
exception is:
        p, prev, v, snv, ipos = self._transactionalUndoRecord(h.oid, pos, 
h.tid, h.prev, h.version)

Since there is an error for this and the errors are put into a
dictionary and such, I assume this is not all that rare to
occur. Is there a common reason this happens that anyone might
be able to clue me in on?

For more information about ZODB, see the ZODB Wiki:

ZODB-Dev mailing list  -  ZODB-Dev@zope.org

Reply via email to