introducer: remove PeerCountObserver, tests are managing with purely poll-for-connect...
authorBrian Warner <warner@allmydata.com>
Tue, 5 Feb 2008 21:15:49 +0000 (14:15 -0700)
committerBrian Warner <warner@allmydata.com>
Tue, 5 Feb 2008 21:15:49 +0000 (14:15 -0700)
src/allmydata/introducer.py

index 33319864ff57281ef05b9f5a1064cf65149bb37c..1bdae85a0ae62c6a119d5ccb0173f1d7be251984 100644 (file)
@@ -3,12 +3,11 @@ import re, time, sha
 from base64 import b32decode
 from zope.interface import implements
 from twisted.application import service
-from twisted.internet import defer
 from foolscap import Referenceable
 from allmydata import node
 from allmydata.interfaces import RIIntroducerPublisherAndSubscriberService, \
      RIIntroducerSubscriberClient, IIntroducerClient
-from allmydata.util import observer, log, idlib
+from allmydata.util import log, idlib
 
 class IntroducerNode(node.Node):
     PORTNUMFILE = "introducer.port"
@@ -83,95 +82,6 @@ class IntroducerService(service.MultiService, Referenceable):
                                 self._encoding_parameters)
 
 
-class PeerCountObserver:
-    # This is used by unit test code to wait until peer connections have been
-    # established.
-
-    def __init__(self):
-        # The N'th element of _observers_of_enough_peers is None if nobody has
-        # asked to be informed when N peers become connected, it is a
-        # OneShotObserverList if someone has asked to be informed, and that list
-        # is fired when N peers next become connected (or immediately if N peers
-        # are already connected when they asked), and the N'th element is
-        # replaced by None when the number of connected peers falls below N.
-        # _observers_of_enough_peers is always just long enough to hold the
-        # highest-numbered N that anyone is interested in (i.e., there are never
-        # trailing Nones in _observers_of_enough_peers).
-        self._observers_of_enough_peers = []
-        # The N'th element of _observers_of_fewer_than_peers is None if nobody
-        # has asked to be informed when we become connected to fewer than N
-        # peers, it is a OneShotObserverList if someone has asked to be
-        # informed, and that list is fired when we become connected to fewer
-        # than N peers (or immediately if we are already connected to fewer than
-        # N peers when they asked).  _observers_of_fewer_than_peers is always
-        # just long enough to hold the highest-numbered N that anyone is
-        # interested in (i.e., there are never trailing Nones in
-        # _observers_of_fewer_than_peers).
-        self._observers_of_fewer_than_peers = []
-        self.connection_observers = observer.ObserverList()
-
-    def _notify_observers_of_enough_peers(self, numpeers):
-        if len(self._observers_of_enough_peers) > numpeers:
-            osol = self._observers_of_enough_peers[numpeers]
-            if osol:
-                osol.fire(None)
-
-    def _remove_observers_of_enough_peers(self, numpeers):
-        if len(self._observers_of_enough_peers) > numpeers:
-            self._observers_of_enough_peers[numpeers] = None
-            while self._observers_of_enough_peers and (not self._observers_of_enough_peers[-1]):
-                self._observers_of_enough_peers.pop()
-
-    def _notify_observers_of_fewer_than_peers(self, numpeers):
-        if len(self._observers_of_fewer_than_peers) > numpeers:
-            osol = self._observers_of_fewer_than_peers[numpeers]
-            if osol:
-                osol.fire(None)
-                self._observers_of_fewer_than_peers[numpeers] = None
-                while len(self._observers_of_fewer_than_peers) > numpeers and (not self._observers_of_fewer_than_peers[-1]):
-                    self._observers_of_fewer_than_peers.pop()
-
-    def when_enough_peers(self, numpeers):
-        """
-        I return a deferred that fires the next time that at least
-        numpeers are connected, or fires immediately if numpeers are
-        currently connected.
-        """
-        self._observers_of_enough_peers.extend([None]*(numpeers+1-len(self._observers_of_enough_peers)))
-        if not self._observers_of_enough_peers[numpeers]:
-            self._observers_of_enough_peers[numpeers] = observer.OneShotObserverList()
-            if len(self.connections) >= numpeers:
-                self._observers_of_enough_peers[numpeers].fire(self)
-        return self._observers_of_enough_peers[numpeers].when_fired()
-
-    def when_fewer_than_peers(self, numpeers):
-        """
-        I return a deferred that fires the next time that fewer than numpeers
-        are connected, or fires immediately if fewer than numpeers are currently
-        connected.
-        """
-        if len(self.connections) < numpeers:
-            return defer.succeed(None)
-        else:
-            self._observers_of_fewer_than_peers.extend([None]*(numpeers+1-len(self._observers_of_fewer_than_peers)))
-            if not self._observers_of_fewer_than_peers[numpeers]:
-                self._observers_of_fewer_than_peers[numpeers] = observer.OneShotObserverList()
-            return self._observers_of_fewer_than_peers[numpeers].when_fired()
-
-    def notify_on_new_connection(self, cb):
-        """Register a callback that will be fired (with nodeid, rref) when
-        a new connection is established."""
-        self.connection_observers.subscribe(cb)
-
-    def add_peer(self, ann):
-        self._notify_observers_of_enough_peers(len(self.connections))
-        self._notify_observers_of_fewer_than_peers(len(self.connections))
-
-    def remove_peer(self, ann):
-        self._remove_observers_of_enough_peers(len(self.connections))
-        self._notify_observers_of_fewer_than_peers(len(self.connections)+1)
-
-
 
 class RemoteServiceConnector:
     """I hold information about a peer service that we want to connect to. If
@@ -277,7 +187,6 @@ class IntroducerClient(service.Service, Referenceable):
         # self._connections is a set of (peerid, service_name, rref) tuples
         self._connections = set()
 
-        #self.counter = PeerCountObserver()
         self.counter = 0 # incremented each time we change state, for tests
         self.encoding_parameters = None