I don't recall that any of the pack bugs that we fixed caused this sort of error. My first guess would be that the file is a bit damaged, perhaps in a way that the old pack did not check. Can you run fsdump.py and see if that output sheds any light. It will give you a detailed text summary of all the transactions and data records. You could use the dump to figure out if, for example, the two numbers in the error message are indeed transaction header locations. Jeremy
-----Original Message----- From: Anthony Baxter [mailto:anthony@interlink.com.au] Sent: Tuesday, August 12, 2003 4:18 AM To: zope-dev@zope.org Subject: [Zope-dev] Packing (still) hosed in 2.6.2?
I remember that 2.6 had issues with packing, but I was under the impression that they'd been fixed...
However, attempting to pack a Data.fs in 2.6-current-cvs fails for me:
File "/export/01/zope/dev_csr_code/lib/python/ZODB/DB.py", line 526, in pack try: self._storage.pack(t,referencesf) File "/export/01/zope/dev_csr_code/lib/python/ZODB/FileStorage.py", line 1503, in pack opos = p.pack() File "/export/01/zope/dev_csr_code/lib/python/ZODB/fspack.py", line 680, in pack self.gc.findReachable() File "/export/01/zope/dev_csr_code/lib/python/ZODB/fspack.py", line 464, in findReachable self.buildPackIndex() File "/export/01/zope/dev_csr_code/lib/python/ZODB/fspack.py", line 486, in buildPackIndex self.checkData(th, tpos, dh, pos) File "/export/01/zope/dev_csr_code/lib/python/ZODB/fspack.py", line 189, in checkData ": %d != %d", dh.tloc, tpos) File "/export/01/zope/dev_csr_code/lib/python/ZODB/fspack.py", line 170, in fail raise CorruptedError(s) ZODB.fspack.CorruptedError: /app/zope/dev_csr_server/var/Data.fs.packtest:9200838:data record does not point to transaction header: 17391715 != 9200760
This is reproducible. The particular Zope that uses this file was shut down cleanly before attempting to pack the DB. The code that fails to pack is:
import ZODB from ZODB import FileStorage filename='/app/zope/dev_csr_server/var/Data.fs.packtest' store = FileStorage.FileStorage(filename) db = ZODB.DB(store) db.pack() # boom.
Help? I'm using the ZODB that's in the current 2.6 branch of CVS - according to ZODB/__init__.py it's version 3.1.2. Is a newer version of ZODB going to help here?
Anthony