[Zope3-checkins] CVS: ZODB4/src/zodb/storage - file.py:1.8.4.2
Barry Warsaw
barry@wooz.org
Mon, 10 Mar 2003 14:36:52 -0500
Update of /cvs-repository/ZODB4/src/zodb/storage
In directory cvs.zope.org:/tmp/cvs-serv14790
Modified Files:
Tag: opaque-pickles-branch
file.py
Log Message:
More implementation efforts toward fragrance-free pickles.
This doesn't work yet.
=== ZODB4/src/zodb/storage/file.py 1.8.4.1 => 1.8.4.2 === (929/1029 lines abridged)
--- ZODB4/src/zodb/storage/file.py:1.8.4.1 Mon Feb 10 18:12:47 2003
+++ ZODB4/src/zodb/storage/file.py Mon Mar 10 14:36:51 2003
@@ -19,7 +19,7 @@
In this section, the first two bytes are the characters F and S.
- The next two bytes are a storage format version id, currently "01".
+ The next two bytes are a storage format version id, currently "42".
The next section is a four-byte database version string, encoded as
byte 0: major version number
@@ -67,6 +67,8 @@
- 2-byte version length
+ - 4-byte number of object references (oids)
+
- 8-byte data length
? 8-byte position of non-version data
@@ -75,11 +77,11 @@
? 8-byte position of previous record in this version
(if version length > 0)
- ? version string
- (if version length > 0)
+ ? version string (if version length > 0)
- ? data
- (data length > 0)
+ ? reference oids (length == # of oids * 8)
+
+ ? data (if data length > 0)
? 8-byte position of data record containing data
(data length == 0)
@@ -146,11 +148,10 @@
fsync = None
import zodb.db
-from zodb.storage.base import BaseStorage
+from zodb.storage.base import BaseStorage, splitrefs
from zodb import conflict
from zodb import interfaces
from zodb.interfaces import UndoError, POSKeyError, MultipleUndoErrors
-from zodb.serialize import findrefs
from zodb.timestamp import TimeStamp, newTimeStamp, timeStampFromTime
from zodb.lockfile import lock_file
from zodb.utils import p64, u64, cp
@@ -161,11 +162,11 @@
[-=- -=- -=- 929 lines omitted -=- -=- -=-]
-
- def __init__(self, *args):
- self.oid, self.serial, self.version, self.data, self.data_txn = args
+
+ def __init__(self, oid, serial, version, data, data_txn, refs):
+ self.oid = oid
+ self.serial = serial
+ self.version = version
+ self.data = data
+ self.data_txn = data_txn
+ self.refs = refs
class UndoSearch:
@@ -2446,19 +2168,21 @@
class DataHeader:
"""Header for a data record."""
- __slots__ = ("oid", "serial", "prev", "tloc", "vlen", "plen", "back",
- # These three attributes are only defined when vlen > 0
- "pnv", "vprev", "version")
+ __slots__ = (
+ "oid", "serial", "prev", "tloc", "vlen", "plen", "nrefs", "back",
+ # These three attributes are only defined when vlen > 0
+ "pnv", "vprev", "version")
version = ""
back = 0
- def __init__(self, oid, serial, prev, tloc, vlen, plen):
+ def __init__(self, oid, serial, prev, tloc, vlen, nrefs, plen):
self.oid = oid
self.serial = serial
self.prev = prev
self.tloc = tloc
self.vlen = vlen
+ self.nrefs = nrefs
self.plen = plen
def fromString(cls, s):
@@ -2469,6 +2193,9 @@
def parseVersion(self, buf):
self.pnv, self.vprev = struct.unpack(">QQ", buf[:16])
self.version = buf[16:]
+
+ def datalen(self):
+ return DATA_HDR_LEN + (self.nrefs * 8) + (self.plen or 8)
def cleanup(filename):