[Zodb-checkins] SVN: ZODB/trunk/src/ Bug fixed:

Jim Fulton jim at zope.com
Fri Sep 10 13:38:02 EDT 2010


Log message for revision 116296:
  Bug fixed:
  
  - ZEO extension methods failed when a client reconnected to a
    storage. (https://bugs.launchpad.net/zodb/+bug/143344)
  

Changed:
  U   ZODB/trunk/src/CHANGES.txt
  U   ZODB/trunk/src/ZEO/ClientStorage.py
  U   ZODB/trunk/src/ZEO/tests/testZEO.py
  U   ZODB/trunk/src/ZODB/FileStorage/FileStorage.py

-=-
Modified: ZODB/trunk/src/CHANGES.txt
===================================================================
--- ZODB/trunk/src/CHANGES.txt	2010-09-10 16:03:27 UTC (rev 116295)
+++ ZODB/trunk/src/CHANGES.txt	2010-09-10 17:38:01 UTC (rev 116296)
@@ -15,6 +15,8 @@
   The objects' _p_oid and _p_jar variables weren't cleared, leading to
   surprizing errors.
 
+- ZEO extension methods failed when a client reconnected to a
+  storage. (https://bugs.launchpad.net/zodb/+bug/143344)
 
 3.10.0b6 (2010-09-08)
 =====================

Modified: ZODB/trunk/src/ZEO/ClientStorage.py
===================================================================
--- ZODB/trunk/src/ZEO/ClientStorage.py	2010-09-10 16:03:27 UTC (rev 116295)
+++ ZODB/trunk/src/ZEO/ClientStorage.py	2010-09-10 17:38:01 UTC (rev 116296)
@@ -664,7 +664,10 @@
     def _handle_extensions(self):
         for name in self.getExtensionMethods().keys():
             if not hasattr(self, name):
-                setattr(self, name, self._server.extensionMethod(name))
+                def mklambda(mname):
+                    return (lambda *args, **kw:
+                            self._server.rpc.call(mname, *args, **kw))
+                setattr(self, name, mklambda(name))
 
     def set_server_addr(self, addr):
         # Normalize server address and convert to string

Modified: ZODB/trunk/src/ZEO/tests/testZEO.py
===================================================================
--- ZODB/trunk/src/ZEO/tests/testZEO.py	2010-09-10 16:03:27 UTC (rev 116295)
+++ ZODB/trunk/src/ZEO/tests/testZEO.py	2010-09-10 17:38:01 UTC (rev 116296)
@@ -1568,6 +1568,31 @@
     >>> ZEO.zrpc.client.ConnectThread = ConnectThread
     """
 
+def lp143344_extension_methods_not_lost_on_server_restart():
+    r"""
+Make sure we don't lose exension methods on server restart.
+
+    >>> addr, adminaddr = start_server(keep=True)
+    >>> conn = ZEO.connection(addr)
+    >>> conn.root.x = 1
+    >>> transaction.commit()
+    >>> conn.db().storage.answer_to_the_ultimate_question()
+    42
+
+    >>> stop_server(adminaddr)
+    >>> wait_until('not connected',
+    ...            lambda : not conn.db().storage.is_connected())
+    >>> _ = start_server(addr=addr)
+    >>> wait_until('connected', conn.db().storage.is_connected)
+
+    >>> conn.root.x
+    1
+    >>> conn.db().storage.answer_to_the_ultimate_question()
+    42
+
+    >>> conn.close()
+    """
+
 slow_test_classes = [
     BlobAdaptedFileStorageTests, BlobWritableCacheTests,
     MappingStorageTests, DemoStorageTests,

Modified: ZODB/trunk/src/ZODB/FileStorage/FileStorage.py
===================================================================
--- ZODB/trunk/src/ZODB/FileStorage/FileStorage.py	2010-09-10 16:03:27 UTC (rev 116295)
+++ ZODB/trunk/src/ZODB/FileStorage/FileStorage.py	2010-09-10 17:38:01 UTC (rev 116296)
@@ -1275,7 +1275,15 @@
 
         return oid, tid, data, next_oid
 
+    ######################################################################
+    # The following 2 methods are for testing a ZEO extension mechanism
+    def getExtensionMethods(self):
+        return dict(answer_to_the_ultimate_question=None)
 
+    def answer_to_the_ultimate_question(self):
+        return 42
+    #
+    ######################################################################
 
 def shift_transactions_forward(index, tindex, file, pos, opos):
     """Copy transactions forward in the data file



More information about the Zodb-checkins mailing list