[Zodb-checkins] CVS: ZODB3/ZODB/FileStorage - format.py:1.1.2.2
Jeremy Hylton
jeremy at zope.com
Thu Oct 9 12:10:40 EDT 2003
Update of /cvs-repository/ZODB3/ZODB/FileStorage
In directory cvs.zope.org:/tmp/cvs-serv18299
Modified Files:
Tag: ZODB3-mvcc-2-branch
format.py
Log Message:
Update for use of struct code Q instead of 8s.
=== ZODB3/ZODB/FileStorage/format.py 1.1.2.1 => 1.1.2.2 ===
--- ZODB3/ZODB/FileStorage/format.py:1.1.2.1 Tue Oct 7 14:16:34 2003
+++ ZODB3/ZODB/FileStorage/format.py Thu Oct 9 12:10:39 2003
@@ -117,8 +117,9 @@
import struct
+from ZODB.POSException import POSKeyError
from ZODB.referencesf import referencesf
-from ZODB.utils import p64, u64, z64, oid_repr
+from ZODB.utils import p64, u64, z64, oid_repr, t32
from zLOG import LOG, BLATHER, WARNING, ERROR, PANIC
class CorruptedError(Exception):
@@ -142,8 +143,8 @@
return msg
# the struct formats for the headers
-TRANS_HDR = ">8s8scHHH"
-DATA_HDR = ">8s8s8s8sH8s"
+TRANS_HDR = ">8sQcHHH"
+DATA_HDR = ">8s8sQQHQ"
# constants to support various header sizes
TRANS_HDR_LEN = 23
DATA_HDR_LEN = 42
@@ -204,12 +205,12 @@
h.ext = self._file.read(h.elen)
return h
- def _loadBack_impl(self, oid, back, fail):
+ def _loadBack_impl(self, oid, back, fail=True):
# shared implementation used by various _loadBack methods
#
# If the backpointer ultimately resolves to 0:
- # If fail is 1, raise KeyError for zero backpointer.
- # If fail is 0, return the empty data from the record
+ # If fail is True, raise KeyError for zero backpointer.
+ # If fail is False, return the empty data from the record
# with no backpointer.
while 1:
if not back:
@@ -222,7 +223,7 @@
return None, h.serial, back, h.tloc
back = h.back
- def _loadBackTxn(self, oid, back, fail=1):
+ def _loadBackTxn(self, oid, back, fail=True):
"""Return data, serial, and txn id for backpointer."""
data, serial, old, tloc = self._loadBack_impl(oid, back, fail)
self._file.seek(tloc)
@@ -287,23 +288,16 @@
self.version = "" # default
self.oid = oid
self.serial = serial
- if isinstance(prev, str):
- prev = u64(prev)
- if isinstance(tloc, str):
- tloc = u64(tloc)
self.prev = prev
self.tloc = tloc
-
self.vlen = vlen
- if isinstance(plen, str):
- plen = u64(plen)
self.plen = plen
def asString(self):
- s = struct.pack(DATA_HDR, self.oid, self.serial, p64(self.prev),
- p64(self.tloc), self.vlen, p64(self.plen))
+ s = struct.pack(DATA_HDR, self.oid, self.serial, self.prev,
+ self.tloc, self.vlen, self.plen)
if self.version:
- v = struct.pack(">8s8s", p64(self.pnv), p64(self.vprev))
+ v = struct.pack(">QQ", self.pnv, self.vprev)
return s + v + self.version
else:
return s
@@ -315,9 +309,9 @@
self.vprev = vprev
def parseVersion(self, buf):
- pnv, vprev = struct.unpack(">8s8s", buf[:16])
- self.pnv = u64(pnv)
- self.vprev = u64(vprev)
+ pnv, vprev = struct.unpack(">QQ", buf[:16])
+ self.pnv = pnv
+ self.vprev = vprev
self.version = buf[16:]
def recordlen(self):
@@ -337,18 +331,18 @@
def __init__(self, tid, tlen, status, ulen, dlen, elen):
self.tid = tid
- self.tlen = u64(tlen)
+ self.tlen = tlen
self.status = status
self.ulen = ulen
self.dlen = dlen
self.elen = elen
+ if elen < 0:
+ self.elen = t32 - elen
def asString(self):
- s = struct.pack(TRANS_HDR, self.tid, p64(self.tlen), self.status,
+ s = struct.pack(TRANS_HDR, self.tid, self.tlen, self.status,
self.ulen, self.dlen, self.elen)
return "".join([s, self.user, self.descr, self.ext])
def headerlen(self):
return TRANS_HDR_LEN + self.ulen + self.dlen + self.elen
-
-
More information about the Zodb-checkins
mailing list