tidy up DeadReferenceError handling, ignore them in add_lease calls
authorBrian Warner <warner@lothar.com>
Tue, 12 Jan 2010 00:07:23 +0000 (16:07 -0800)
committerBrian Warner <warner@lothar.com>
Tue, 12 Jan 2010 00:07:23 +0000 (16:07 -0800)
Stop checking separately for ConnectionDone/ConnectionLost, since those have
been folded into DeadReferenceError since foolscap-0.3.1 . Write
rrefutil.trap_deadref() in terms of rrefutil.trap_and_discard() to improve
code coverage.

src/allmydata/immutable/checker.py
src/allmydata/mutable/servermap.py
src/allmydata/stats.py
src/allmydata/test/test_system.py
src/allmydata/util/rrefutil.py

index b8642c35dd5d35da4601fc354f148a65b627278a..cbb8637d1102c30923e787a3bd53d27a1f25ab57 100644 (file)
@@ -104,6 +104,8 @@ class Checker(log.PrefixingLogMixin):
         # particular we want to log any local errors caused by coding
         # problems.
 
+        if f.check(DeadReferenceError):
+            return
         if f.check(RemoteException):
             if f.value.failure.check(KeyError, IndexError, NameError):
                 # this may ignore a bit too much, but that only hurts us
index 716b1b47776131f280c4361e6583208e0592cbf2..ccc586b6f6a756c8ec6b5fc936c29f1b316e4e79 100644 (file)
@@ -756,6 +756,8 @@ class ServermapUpdater:
         # particular we want to log any local errors caused by coding
         # problems.
 
+        if f.check(DeadReferenceError):
+            return
         if f.check(RemoteException):
             if f.value.failure.check(KeyError, IndexError, NameError):
                 # this may ignore a bit too much, but that only hurts us
index 2ae63dbfccbc3da9ff52af2c9e7c65f5040819f0..5c1cdb3d87b8b8fb034cea38acefc8587aae264c 100644 (file)
@@ -10,7 +10,6 @@ from twisted.application import service
 from twisted.application.internet import TimerService
 from zope.interface import implements
 from foolscap.api import eventually, DeadReferenceError, Referenceable, Tub
-from twisted.internet.error import ConnectionDone, ConnectionLost
 
 from allmydata.util import log
 from allmydata.interfaces import RIStatsProvider, RIStatsGatherer, IStatsProducer
@@ -218,7 +217,7 @@ class StatsGatherer(Referenceable, service.MultiService):
         # this is called lazily, when a get_stats request fails
         del self.clients[tubid]
         del self.nicknames[tubid]
-        f.trap(DeadReferenceError, ConnectionDone, ConnectionLost)
+        f.trap(DeadReferenceError)
 
     def log_client_error(self, f, tubid):
         log.msg("StatsGatherer: error in get_stats(), peerid=%s" % tubid,
index f5c5c91e9b60b93bc0dc83bbc786208de76e0e9c..8988ab3edc02294ee2fb083b1a7e2c6f2610c988 100644 (file)
@@ -4,7 +4,6 @@ from cStringIO import StringIO
 from twisted.trial import unittest
 from twisted.internet import defer
 from twisted.internet import threads # CLI tests use deferToThread
-from twisted.internet.error import ConnectionDone, ConnectionLost
 import allmydata
 from allmydata import uri
 from allmydata.storage.mutable import MutableShareFile
@@ -262,7 +261,7 @@ class SystemTest(SystemTestMixin, unittest.TestCase):
                 self.fail("interrupted upload should have failed, not finished"
                           " with result %s" % (res,))
             def _interrupted(f):
-                f.trap(ConnectionLost, ConnectionDone, DeadReferenceError)
+                f.trap(DeadReferenceError)
 
                 # make sure we actually interrupted it before finishing the
                 # file
index 8d2d6c2a562d38904aa0a9d3a899ead45d0c8566..fd2259b65a2bf5b9af6deb5206fe96b2b4ced161 100644 (file)
@@ -22,5 +22,4 @@ def trap_and_discard(f, *errorTypes):
     pass
 
 def trap_deadref(f):
-    f.trap(DeadReferenceError)
-    pass
+    return trap_and_discard(f, DeadReferenceError)