]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/commitdiff
Wed Apr 4 19:14:09 BST 2012 Brian Warner <warner@lothar.com>
authorDaira Hopwood <daira@jacaranda.org>
Thu, 5 Sep 2013 16:59:15 +0000 (17:59 +0100)
committerDaira Hopwood <daira@jacaranda.org>
Thu, 5 Sep 2013 16:59:15 +0000 (17:59 +0100)
  * make IServer instances retain identity in copy() and deepcopy()

src/allmydata/storage_client.py
src/allmydata/test/no_network.py

index 8a78100cf80eb1cbcb6b5786d7357cf186b3d3d3..8cd43d7e658da8619da83a7350e82849163bf67d 100644 (file)
@@ -182,6 +182,15 @@ class NativeStorageServer:
         self._reconnector = None
         self._trigger_cb = None
 
+    # Special methods used by copy.copy() and copy.deepcopy(). When those are
+    # used in allmydata.immutable.filenode to copy CheckResults during
+    # repair, we want it to treat the IServer instances as singletons, and
+    # not attempt to duplicate them..
+    def __copy__(self):
+        return self
+    def __deepcopy__(self, memodict):
+        return self
+
     def __repr__(self):
         return "<NativeStorageServer for %s>" % self.get_name()
     def get_serverid(self):
index ffb6708a41ab106ecbfa6076ebe0e77c4e965388..ae294d895c6767e4a9aedc6773adcf64c8677d68 100644 (file)
@@ -26,7 +26,7 @@ from allmydata.storage.server import StorageServer, storage_index_to_dir
 from allmydata.util import fileutil, idlib, hashutil
 from allmydata.util.hashutil import sha1
 from allmydata.test.common_web import HTTPClientGETFactory
-from allmydata.interfaces import IStorageBroker
+from allmydata.interfaces import IStorageBroker, IServer
 from allmydata.test.common import TEST_RSA_KEY_SIZE
 
 
@@ -122,11 +122,19 @@ def wrap_storage_server(original):
     return wrapper
 
 class NoNetworkServer:
+    implements(IServer)
     def __init__(self, serverid, rref):
         self.serverid = serverid
         self.rref = rref
     def __repr__(self):
         return "<NoNetworkServer for %s>" % self.get_name()
+    # Special method used by copy.copy() and copy.deepcopy(). When those are
+    # used in allmydata.immutable.filenode to copy CheckResults during
+    # repair, we want it to treat the IServer instances as singletons.
+    def __copy__(self):
+        return self
+    def __deepcopy__(self, memodict):
+        return self
     def get_serverid(self):
         return self.serverid
     def get_permutation_seed(self):