[Zope-Checkins] CVS: ZODB3/ZODB - Transaction.py:1.39.16.5

Jeremy Hylton jeremy@zope.com
Fri, 1 Nov 2002 17:33:35 -0500


Update of /cvs-repository/ZODB3/ZODB
In directory cvs.zope.org:/tmp/cvs-serv10571/ZODB

Modified Files:
      Tag: ZODB3-deadlock-debug-branch
	Transaction.py 
Log Message:
Fallback to id() if jar doesn't define sortKey().

We can't prevent deadlock in these cases, but it's better to have
transacted and lost than never to have transacted at all.


=== ZODB3/ZODB/Transaction.py 1.39.16.4 => 1.39.16.5 ===
--- ZODB3/ZODB/Transaction.py:1.39.16.4	Fri Nov  1 17:07:34 2002
+++ ZODB3/ZODB/Transaction.py	Fri Nov  1 17:33:35 2002
@@ -19,7 +19,7 @@
 import time, sys, struct, POSException
 from struct import pack
 from string import split, strip, join
-from zLOG import LOG, ERROR, PANIC, INFO, BLATHER
+from zLOG import LOG, ERROR, PANIC, INFO, BLATHER, WARNING
 from POSException import ConflictError
 from ZODB import utils
 
@@ -33,7 +33,19 @@
 def jar_cmp(j1, j2):
     # Call sortKey() every time, because a ZEO client could reconnect
     # to a different server at any time.
-    return cmp(j1.sortKey(), j2.sortKey())
+    try:
+        k1 = j1.sortKey()
+    except:
+        LOG("TM", WARNING, "jar missing sortKey() method: %s" % j1)
+        k1 = id(j1)
+
+    try:
+        k2 = j2.sortKey()
+    except:
+        LOG("TM", WARNING, "jar missing sortKey() method: %s" % j2)
+        k2 = id(j2)
+        
+    return cmp(k1, k2)
 
 class Transaction:
     'Simple transaction objects for single-threaded applications.'