[Zodb-checkins] CVS: StandaloneZODB/bsddb3Storage/bsddb3Storage - BerkeleyBase.py:1.9

Barry Warsaw barry@wooz.org
Thu, 4 Oct 2001 13:00:37 -0400


Update of /cvs-repository/StandaloneZODB/bsddb3Storage/bsddb3Storage
In directory cvs.zope.org:/tmp/cvs-serv3646

Modified Files:
	BerkeleyBase.py 
Log Message:
__init__(): Argument env must now be either None or a string.  It did
    not work to pass in a DBEnv object, and that isn't the right way
    to increase the lock size anyway (should use a DB_CONFIG file as
    per the BerkeleyDB specs).


=== StandaloneZODB/bsddb3Storage/bsddb3Storage/BerkeleyBase.py 1.8 => 1.9 ===
     """Base storage for Minimal and Full Berkeley implementations."""
 
-    def __init__(self, name, env=None, prefix="zodb_"):
+    def __init__(self, name, env=None, prefix='zodb_'):
         """Create a new storage.
 
         name is an arbitrary name for this storage.  It is returned by the
         getName() method.
 
-        env is the database environment name, used to handle more advanced
-        BSDDB functionality such as transactions.  If env is a non-empty
-        string, it is passed directly to DbEnv().open(), which in turn is
-        passed to the BSDDB function DBEnv->open() as the db_home parameter.
-
-        If env is not a string, it must be an already existing DbEnv()
-        object.
-
-        prefix is the string to prepend to name when passed to DB.open() as
-        the dbname parameter.  IOW, prefix+name is passed to the BSDDB
-        function DB->open() as the database parameter.  It defaults to
-        "zodb_".
+        Optional env is the database environment name, essentially the name of
+        a directory into which BerkeleyDB will store all its supporting files.
+        If env is a non-empty string, it is passed directly to DbEnv().open(),
+        which in turn is passed to the BerkeleyDB function
+        DBEnv->open() as the db_home parameter.
+
+        Optional prefix is the string to prepend to name when passed to
+        DB.open() as the dbname parameter.  IOW, prefix+name is passed to the
+        BerkeleyDb function DB->open() as the database parameter.  It defaults
+        to "zodb_".
         """
 
         # sanity check arguments
@@ -60,17 +58,21 @@
         if env is None:
             env = name
 
-        if isinstance(env, StringType):
-            if env == '':
-                raise TypeError, 'environment name is empty'
-            env = env_from_string(env)
-        elif not isinstance(env, db.DBEnv):
-            raise TypeError, 'env must be a string or DBEnv instance: %s' % env
+        if env == '':
+            raise TypeError, 'environment name is empty'
+        elif not isinstance(env, StringType):
+            # We used to test isinstance(env, db.DBEnv) but that isn't a valid
+            # test since db.DBEnv() is a factory function, not a class.
+            # AFAIK, there's no way to pass an existing DBEnv into this
+            # constructor.  Note that the most likely reason for wanting to do
+            # this is to increase the lock size of the environment.  Use a
+            # DB_CONFIG file for that instead (see www.sleepycat.com).
+            raise TypeError, 'env must be a string: %s' % env
 
         BaseStorage.__init__(self, name)
 
         # Initialize a few other things
-        self._env = env
+        self._env = env_from_string(env)
         self._prefix = prefix
         self._commitlog = None
         # Give the subclasses a chance to interpose into the database setup
@@ -85,8 +87,8 @@
             # JF: unlinking might be too inefficient.  JH: might use mmap
             # files.  BAW: maybe just truncate the file, or write a length
             # into the headers and just zero out the length.
-            self._commitlog.close(unlink=1)
-            self._commitlog = None
+##            self._commitlog.close(unlink=1)
+##            self._commitlog = None
         
     def _setupDB(self, name, flags=0):
         """Open an individual database with the given flags.