[Zope3-checkins] CVS: ZODB4/src/zodb/storage - mapping.py:1.3.4.3
Barry Warsaw
barry@wooz.org
Wed, 12 Mar 2003 16:44:17 -0500
Update of /cvs-repository/ZODB4/src/zodb/storage
In directory cvs.zope.org:/tmp/cvs-serv30539
Modified Files:
Tag: opaque-pickles-branch
mapping.py
Log Message:
Resolve conflicts from HEAD merge
=== ZODB4/src/zodb/storage/mapping.py 1.3.4.2 => 1.3.4.3 ===
--- ZODB4/src/zodb/storage/mapping.py:1.3.4.2 Wed Feb 12 16:05:42 2003
+++ ZODB4/src/zodb/storage/mapping.py Wed Mar 12 16:44:11 2003
@@ -1,6 +1,6 @@
##############################################################################
#
-# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# Copyright (c) 2001 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
@@ -18,105 +18,33 @@
It is meant to illustrate the simplest possible storage.
-The Mapping storage uses a single data structure to map
-object ids to data.
-
-The Demo storage serves two purposes:
-
- - Provide an example implementation of a full storage without
- distracting storage details,
-
- - Provide a volatile storage that is useful for giving demonstrations.
-
-The demo strorage can have a "base" storage that is used in a
-read-only fashion. The base storage must not not to contain version
+The Mapping storage uses a single data structure to map object ids to
data.
-There are three main data structures:
-
- _data -- Transaction logging information necessary for undo
-
- This is a mapping from transaction id to transaction, where
- a transaction is simply a 4-tuple:
-
- packed, user, description, extension_data, records
-
- where extension_data is a dictionary or None and records are the
- actual records in chronological order. Packed is a flag
- indicating whethe the transaction has been packed or not
-
- _index -- A mapping from oid to record
-
- _vindex -- A mapping from version name to version data
-
- where version data is a mapping from oid to record
-
-A record is a tuple:
-
- oid, serial, pre, vdata, p,
-
-where:
-
- oid -- object id
-
- serial -- object serial number
-
- pre -- The previous record for this object (or None)
-
- vdata -- version data
-
- None if not a version, ortherwise:
- version, non-version-record
-
- p -- the pickle data or None
-
-The pickle data will be None for a record for an object created in
-an aborted version.
-
-It is instructive to watch what happens to the internal data structures
-as changes are made. Foe example, in Zope, you can create an external
-method::
-
- import Zope
-
- def info(RESPONSE):
- RESPONSE['Content-type']= 'text/plain'
-
- return Zope.DB._storage._splat()
-
-and call it to minotor the storage.
-
$Id$
"""
import zodb.db
from zodb import interfaces, utils
-from zodb.interfaces import ZERO
-from zodb.storage import base
+from zodb.storage.base import BaseStorage
from zodb.storage.interfaces import *
from zodb.timestamp import TimeStamp
-def DB(name="Mapping Storage", pool_size=7, cache_size=400):
- ms = MappingStorage(name)
- db = zodb.db.DB(ms, pool_size, cache_size)
- return db
-
-
-class MappingStorage(base.BaseStorage):
+class MappingStorage(BaseStorage):
__implements__ = IStorage
- def __init__(self, name='Mapping Storage'):
-
- base.BaseStorage.__init__(self, name)
+ def __init__(self, name="Mapping Storage"):
+ BaseStorage.__init__(self, name)
+ self._index = {}
+ self._tindex = []
+ self._ltid = None
- self._index={}
- self._tindex=[]
+ def close(self):
+ pass
- # Note:
- # If you subclass this and use a persistent mapping facility
- # (e.g. a dbm file), you will need to get the maximum key and
- # save it as self._oid. See dbmStorage.
+ def cleanup(self):
+ pass
def load(self, oid, version):
self._lock_acquire()
@@ -152,6 +80,10 @@
def _finish(self, tid, user, desc, ext):
for oid, serial, data, refs in self._tindex:
self._index[oid] = serial, data, refs
+ self._ltid = self._serial
+
+ def lastTransaction(self):
+ return self._ltid
def pack(self, t):
self._lock_acquire()