[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