[Checkins] SVN: gocept.zeoraid/trunk/src/gocept/zeoraid/ added tests for temporaryDirectory

Thomas Lotze tl at gocept.com
Tue Jan 29 09:07:37 EST 2008


Log message for revision 83293:
  added tests for temporaryDirectory

Changed:
  U   gocept.zeoraid/trunk/src/gocept/zeoraid/compatibility.py
  U   gocept.zeoraid/trunk/src/gocept/zeoraid/component.xml
  U   gocept.zeoraid/trunk/src/gocept/zeoraid/datatypes.py
  U   gocept.zeoraid/trunk/src/gocept/zeoraid/storage.py
  U   gocept.zeoraid/trunk/src/gocept/zeoraid/tests/test_basics.py

-=-
Modified: gocept.zeoraid/trunk/src/gocept/zeoraid/compatibility.py
===================================================================
--- gocept.zeoraid/trunk/src/gocept/zeoraid/compatibility.py	2008-01-29 13:34:38 UTC (rev 83292)
+++ gocept.zeoraid/trunk/src/gocept/zeoraid/compatibility.py	2008-01-29 14:07:36 UTC (rev 83293)
@@ -10,6 +10,7 @@
 import zope.proxy.decorator
 
 import ZODB.utils
+import ZODB.FileStorage
 import ZEO.ClientStorage
 
 import gocept.zeoraid.interfaces
@@ -39,6 +40,14 @@
         return lt
 
 
+ at zope.interface.implementer(gocept.zeoraid.interfaces.IRAIDCompatibleStorage)
+ at zope.component.adapter(ZODB.FileStorage.FileStorage)
+def make_filestorage_compatible(fs):
+    zope.interface.directlyProvides(
+        fs, gocept.zeoraid.interfaces.IRAIDCompatibleStorage)
+    return fs
+
+
 compatibility_initialized = False
 
 
@@ -47,4 +56,5 @@
     if compatibility_initialized:
         return
     zope.component.provideAdapter(ClientStorage38)
+    zope.component.provideAdapter(factory=make_filestorage_compatible)
     compatibility_initialized = True

Modified: gocept.zeoraid/trunk/src/gocept/zeoraid/component.xml
===================================================================
--- gocept.zeoraid/trunk/src/gocept/zeoraid/component.xml	2008-01-29 13:34:38 UTC (rev 83292)
+++ gocept.zeoraid/trunk/src/gocept/zeoraid/component.xml	2008-01-29 14:07:36 UTC (rev 83293)
@@ -7,6 +7,7 @@
 %import gocept.zeoraid
 <zodb>
     <raidstorage>
+        blob-dir /foo/bar
         <zeoclient>
             server localhost:8100
             storage 1
@@ -30,6 +31,14 @@
         implements="ZODB.storage"
         datatype=".Storage">
 
+        <key name="blob-dir" required="no">
+            <description>
+                Path name to the area where uploaded blobs are temporarily
+                stored. Must be on the same partition as each of the back-end
+                storages' blob directories.
+            </description>
+        </key>
+
         <multisection 
             type="ZODB.storage" 
             name="+"

Modified: gocept.zeoraid/trunk/src/gocept/zeoraid/datatypes.py
===================================================================
--- gocept.zeoraid/trunk/src/gocept/zeoraid/datatypes.py	2008-01-29 13:34:38 UTC (rev 83292)
+++ gocept.zeoraid/trunk/src/gocept/zeoraid/datatypes.py	2008-01-29 14:07:36 UTC (rev 83293)
@@ -6,5 +6,7 @@
     def open(self):
         # Ensure that compatibility is set up.
         gocept.zeoraid.compatibility.setup()
-        return gocept.zeoraid.storage.RAIDStorage(self.name,
-                                                  self.config.storages)
+        return gocept.zeoraid.storage.RAIDStorage(
+            self.name,
+            self.config.storages,
+            blob_dir=self.config.blob_dir)

Modified: gocept.zeoraid/trunk/src/gocept/zeoraid/storage.py
===================================================================
--- gocept.zeoraid/trunk/src/gocept/zeoraid/storage.py	2008-01-29 13:34:38 UTC (rev 83292)
+++ gocept.zeoraid/trunk/src/gocept/zeoraid/storage.py	2008-01-29 14:07:36 UTC (rev 83293)
@@ -21,6 +21,7 @@
 import persistent.TimeStamp
 import transaction
 import transaction.interfaces
+import ZODB.blob
 
 import gocept.zeoraid.interfaces
 import gocept.zeoraid.compatibility
@@ -106,11 +107,16 @@
     # for generating new TIDs.
     _last_tid = None
 
-    def __init__(self, name, openers, read_only=False):
+    def __init__(self, name, openers, read_only=False, blob_dir=None):
         self.__name__ = name
         self.read_only = read_only
         self.storages = {}
 
+        if blob_dir is not None:
+            self.blob_fshelper = ZODB.blob.FilesystemHelper(blob_dir)
+            self.blob_fshelper.create()
+            self.blob_fshelper.checkSecure()
+
         # Allocate locks
         # The write lock must be acquired when:
         # a) performing write operations on the backends
@@ -387,7 +393,7 @@
     def temporaryDirectory(self):
         """Return a directory that should be used for uncommitted blob data.
         """
-        # XXX
+        return self.blob_fshelper.temp_dir
 
     # IStorageUndoable
 

Modified: gocept.zeoraid/trunk/src/gocept/zeoraid/tests/test_basics.py
===================================================================
--- gocept.zeoraid/trunk/src/gocept/zeoraid/tests/test_basics.py	2008-01-29 13:34:38 UTC (rev 83292)
+++ gocept.zeoraid/trunk/src/gocept/zeoraid/tests/test_basics.py	2008-01-29 14:07:36 UTC (rev 83293)
@@ -8,6 +8,7 @@
 import tempfile
 import os
 import time
+import shutil
 
 import zope.interface.verify
 
@@ -26,6 +27,7 @@
 
 import ZODB.interfaces
 import ZEO.interfaces
+import ZODB.config
 
 # Uncomment this to get helpful logging from the ZEO servers on the console
 #import logging
@@ -796,7 +798,25 @@
                           self._storage.loadBlob, oid, last_transaction)
         self.assertEquals('failed', self._storage.raid_status())
 
+    def test_temporaryDirectory(self):
+        working_dir = tempfile.mkdtemp()
+        storage = ZODB.config.storageFromString("""
+        %%import gocept.zeoraid
+        <raidstorage>
+          blob-dir %(wd)s/blobs
+          <filestorage foo>
+            path %(wd)s/Data.fs
+          </filestorage>
+        </raidstorage>
+        """ % {'wd': working_dir})
+        self.assertEquals(os.path.join(working_dir, 'blobs', 'tmp'),
+                          storage.temporaryDirectory())
+        self.assert_(os.path.isdir(storage.temporaryDirectory()))
+        self.assert_(storage.blob_fshelper.isSecure(
+            storage.temporaryDirectory()))
+        shutil.rmtree(working_dir)
 
+
 class ZEOReplicationStorageTests(ZEOStorageBackendTests,
                                  ReplicationStorageTests,
                                  ThreadTests.ThreadTests):



More information about the Checkins mailing list