shelve, segfault and bsddb.db.DBPageNotFoundError: (-30987, 'DB_PAGE_NOTFOUND: Requested page not found')

Gabriel Rossetti gabriel.rossetti at arimaz.com
Wed Oct 14 06:40:43 EDT 2009


Hello everyone, I get the following error with the shelve module (python 
2.5.2) sometimes :

 >>> s = shelve.open("save.dat", writeback=True)
 >>> s
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.5/UserDict.py", line 167, in __repr__
    return repr(dict(self.iteritems()))
  File "/usr/lib/python2.5/UserDict.py", line 105, in iteritems
    for k in self:
  File "/usr/lib/python2.5/UserDict.py", line 92, in __iter__
    for k in self.keys():
  File "/usr/lib/python2.5/shelve.py", line 92, in keys
    return self.dict.keys()
  File "/usr/lib/python2.5/bsddb/__init__.py", line 252, in keys
    return _DeadlockWrap(self.db.keys)
  File "/usr/lib/python2.5/bsddb/dbutils.py", line 62, in DeadlockWrap
    return function(*_args, **_kwargs)
bsddb.db.DBPageNotFoundError: (-30987, 'DB_PAGE_NOTFOUND: Requested page 
not found')

This must mean that my file is currupt, correct? If I do the following I 
get a segfault :

 >>> len(s)
Segmentation fault

Is this a bug? So as a workaround I must do something like this :

s = shelve.open("save.dat", writeback=True)
try:
    s.keys()
except bsddb.db.DBPageNotFoundError, e:
    os.remove("save.dat")
    s = shelve.open("save.dat", writeback=True)

Any other ideas/comments? Does anyone else have this problem?

Thanks,
Gabriel




More information about the Python-list mailing list