[ZODB-Dev] FileStorage database unrecoverable?

Greg Czajkowski gregczajkowski@yahoo.com
Mon, 24 Mar 2003 13:53:10 -0800 (PST)


Hi all, I would appreciate any help.

my database grew over 2GB on NT causing it to become
corrupted. I am running ZODB 3.1.1 on NT.
ZODB.FileStorage.packed_version = 'FS21'

I am using FileStorage because it packs python
strings,lists,dict,ints in the least amount of space.
How can I prevent issues when my database grows larger
than 2GB with the ZEO client/server dying? Should I
use DirectoryStorage instead? Does it pack the data
just as efficiently? 

Also any way to recover my data?

Committing, packing and fsrecovering all fail:

Commit
-------------------------------------
get_transaction().commit()
  File "C:\Python21\ZODB\Transaction.py", line 246, in
commit
    vote(self)
  File "C:\Python21\ZODB\Connection.py", line 631, in
tpc_vote
    s = vote(transaction)
  File "C:\Python21\ZEO\ClientStorage.py", line 599,
in tpc_vote
    self._server.vote(self._serial)
  File "C:\Python21\ZEO\ServerStub.py", line 82, in
vote
    return self.rpc.call('vote', trans_id)
  File "C:\Python21\ZEO\zrpc\connection.py", line 330,
in call
    raise inst # error raised by server
OverflowError: long int too large to convert

Loading the storage fails:
------------------------------------------
storages = {'1' :
FileStorage(r"C:\ZODB_BACKUP\data.fs")}
Traceback (most recent call last):
  File "<interactive input>", line 1, in ?
  File "C:\Python21\ZODB\FileStorage.py", line 272, in
__init__
    r = self._restore_index()
  File "C:\Python21\ZODB\FileStorage.py", line 473, in
_restore_index
    tid=self._sane(index, pos)
  File "C:\Python21\ZODB\FileStorage.py", line 374, in
_sane
    if file.tell() < pos:
IOError: (0, 'Error')

packing error:

fsrecover also doesn't work:
-------------------------------
C:\ZODB_BACKUP>python C:\Python21\ZODB\fsrecover.py
data.fs data.fs.new
Recovering data.fs into data.fs.new
Traceback (most recent call last):
  File "C:\Python21\ZODB\fsrecover.py", line 329, in ?
    if __name__=='__main__': recover()
  File "C:\Python21\ZODB\fsrecover.py", line 223, in
recover
    file_size=file.tell()
IOError: (0, 'Error')

Regards,
--Greg

__________________________________________________
Do you Yahoo!?
Yahoo! Platinum - Watch CBS' NCAA March Madness, live on your desktop!
http://platinum.yahoo.com