durusmail: durus-users: Duplicate object ID in transaction
Duplicate object ID in transaction
2005-07-13
2005-07-15
Duplicate object ID in transaction
A.M. Kuchling
2005-07-13
One of the programmers here managed to corrupt a Durus database in a
novel way.  On opening the FileStorage, the _build_index() method dies
with the following exception:

Traceback (most recent call last):
  File "t.py", line 4, in ?
    fs = file_storage.FileStorage('bad.models.durus')
  File "/usr/lib/python2.3/site-packages/durus/file_storage.py", line 107, in
__init__
    self._build_index()
  File "/usr/lib/python2.3/site-packages/durus/file_storage.py", line 139, in
_build_index
    raise ValueError("Object OID %r duplicated" % oid)
ValueError: Object OID '\x00\x00\x00\x00\x00\x01Z\x03' duplicated

(I added a %r to the 'raise' statement to display the OID.)  Adding a
debugging printout of transaction ID and OID provides some more
detail:

'\x00\x00\x00\x00\x00\x00Cu' '\x00\x00\x00\x00\x00\x01R{'
'\x00\x00\x00\x00\x00\x00Cu' '\x00\x00\x00\x00\x00\x01Rz'
'\x00\x00\x00\x00\x00\x00Cu' '\x00\x00\x00\x00\x00\x01Ry'
'\x00\x00\x00\x00\x00\x00Cu' '\x00\x00\x00\x00\x00\x01Rx'
 ...
'\x00\x00\x00\x00\x00\x00Cu' '\x00\x00\x00\x00\x00\x01Z\x0e'
'\x00\x00\x00\x00\x00\x00Cu' '\x00\x00\x00\x00\x00\x01Z\x03'  << first
occurrence of ID
'\x00\x00\x00\x00\x00\x00Cu' '\x00\x00\x00\x00\x00\x01Z\x02'
'\x00\x00\x00\x00\x00\x00Cu' '\x00\x00\x00\x00\x00\x01Z\x01'
'\x00\x00\x00\x00\x00\x00Cu' '\x00\x00\x00\x00\x00\x01Z\x00'

 ...
'\x00\x00\x00\x00\x00\x00Cu' '\x00\x00\x00\x00\x00\x01X\x07'
'\x00\x00\x00\x00\x00\x00Cu' '\x00\x00\x00\x00\x00\x01VG'
'\x00\x00\x00\x00\x00\x00Cu' '\x00\x00\x00\x00\x00\x01Z\x03'  << duplicate ID

The database in question doesn't have any valuable information, so we
could just delete it and start from scratch.  It's also possible that
this is due to a Reiserfs problem; I've noticed that crashes will
occasionally cause blocks from one file to appear in another; perhaps
a chunk of one transaction got duplicated like this.  On the other
hand, maybe this is a symptom of a Durus bug.  Should this problem be
analyzed further, or should I just delete the bad FileStorage and get
on with life?

--amk
reply