diff --git a/src/allmydata/introducer/common.py b/src/allmydata/introducer/common.py index 9337d4bbc..699408ece 100644 --- a/src/allmydata/introducer/common.py +++ b/src/allmydata/introducer/common.py @@ -100,20 +100,18 @@ class SubscriberDescriptor: .nickname: their self-provided nickname, or "?" (unicode) .version: their self-provided version (string) .app_versions: versions of each library they use (dict str->str) - .advertised_addresses: what hosts they listen on (list of strings) .remote_address: the external address from which they connected (string) .tubid: for subscribers connecting with Foolscap, their tubid (string) """ def __init__(self, service_name, when, nickname, version, app_versions, - advertised_addresses, remote_address, tubid): + remote_address, tubid): self.service_name = service_name self.when = when self.nickname = nickname self.version = version self.app_versions = app_versions - self.advertised_addresses = advertised_addresses self.remote_address = remote_address self.tubid = tubid @@ -133,9 +131,9 @@ class AnnouncementDescriptor: .nickname: their self-provided nickname, or "" (unicode) .serverid: the server identifier. This is a pubkey (for V2 clients), or a tubid (for V1 clients). - .advertised_addresses: which hosts they listen on (list of strings) - if the announcement included a key for - 'anonymous-storage-FURL', else an empty list. + .connection_hints: where they listen (list of strings) if the + announcement included a key for + 'anonymous-storage-FURL', else an empty list. """ def __init__(self, when, index, canary, ann_d): @@ -150,6 +148,6 @@ class AnnouncementDescriptor: self.serverid = key_s or tubid_s furl = ann_d.get("anonymous-storage-FURL") if furl: - self.advertised_addresses = rrefutil.hosts_for_furl(furl) + self.connection_hints = rrefutil.connection_hints_for_furl(furl) else: - self.advertised_addresses = [] + self.connection_hints = [] diff --git a/src/allmydata/introducer/old.py b/src/allmydata/introducer/old.py index 702969f0f..3c2fcb712 100644 --- a/src/allmydata/introducer/old.py +++ b/src/allmydata/introducer/old.py @@ -405,13 +405,11 @@ class IntroducerService_v1(service.MultiService, Referenceable): for service_name, subscribers in self._subscribers.items(): for rref, when in subscribers.items(): tubid = rref.getRemoteTubID() or "?" - advertised_addresses = rrefutil.hosts_for_rref(rref) remote_address = rrefutil.stringify_remote_address(rref) nickname, version, app_versions = u"?", u"?", {} sd = SubscriberDescriptor(service_name, when, nickname, version, app_versions, - advertised_addresses, remote_address, - tubid) + remote_address, tubid) s.append(sd) return s diff --git a/src/allmydata/introducer/server.py b/src/allmydata/introducer/server.py index 7031c3af6..92c2497e4 100644 --- a/src/allmydata/introducer/server.py +++ b/src/allmydata/introducer/server.py @@ -175,7 +175,6 @@ class IntroducerService(service.MultiService, Referenceable): # tubid will be None. Also, subscribers do not tell us which # pubkey they use; only publishers do that. tubid = rref.getRemoteTubID() or "?" - advertised_addresses = rrefutil.hosts_for_rref(rref) remote_address = rrefutil.stringify_remote_address(rref) # these three assume subscriber_info["version"]==0, but # should tolerate other versions @@ -188,8 +187,7 @@ class IntroducerService(service.MultiService, Referenceable): # 'when' is the time they subscribed sd = SubscriberDescriptor(service_name, when, nickname, version, app_versions, - advertised_addresses, remote_address, - tubid) + remote_address, tubid) s.append(sd) return s diff --git a/src/allmydata/test/test_introducer.py b/src/allmydata/test/test_introducer.py index 475b04dba..be7d05ddc 100644 --- a/src/allmydata/test/test_introducer.py +++ b/src/allmydata/test/test_introducer.py @@ -877,8 +877,8 @@ class SystemTest(SystemTestMixin, unittest.TestCase): class FakeRemoteReference: def notifyOnDisconnect(self, *args, **kwargs): pass def getRemoteTubID(self): return "62ubehyunnyhzs7r6vdonnm2hpi52w6y" - def getLocationHints(self): return [("ipv4", "here.example.com", "1234"), - ("ipv4", "there.example.com", "2345")] + def getLocationHints(self): return ["tcp:here.example.com:1234", + "tcp:there.example.com2345"] def getPeer(self): return address.IPv4Address("TCP", "remote.example.com", 3456) diff --git a/src/allmydata/test/test_system.py b/src/allmydata/test/test_system.py index 4ffbb29ce..1887c7e28 100644 --- a/src/allmydata/test/test_system.py +++ b/src/allmydata/test/test_system.py @@ -812,8 +812,6 @@ class SystemTest(SystemTestMixin, RunBinTahoeMixin, unittest.TestCase): {"storage": 5}) self.failUnlessEqual(data["announcement_summary"], {"storage": 5}) - self.failUnlessEqual(data["announcement_distinct_hosts"], - {"storage": 1}) except unittest.FailTest: print print "GET %s?t=json output was:" % self.introweb_url diff --git a/src/allmydata/util/rrefutil.py b/src/allmydata/util/rrefutil.py index a14d15f13..6481cabc9 100644 --- a/src/allmydata/util/rrefutil.py +++ b/src/allmydata/util/rrefutil.py @@ -27,30 +27,18 @@ def trap_deadref(f): return trap_and_discard(f, DeadReferenceError) -def hosts_for_rref(rref, ignore_localhost=True): - # actually, this only returns hostnames - advertised = [] - for hint in rref.getLocationHints(): - # Foolscap-0.2.5 and earlier used strings in .locationHints, but we - # require a newer version that uses tuples of ("ipv4", host, port) - assert not isinstance(hint, str), hint - if hint[0] == "ipv4": - host = hint[1] - if ignore_localhost and host == "127.0.0.1": - continue - advertised.append(host) - return advertised - -def hosts_for_furl(furl, ignore_localhost=True): - advertised = [] - for hint in SturdyRef(furl).locationHints: - assert not isinstance(hint, str), hint - if hint[0] == "ipv4": - host = hint[1] - if ignore_localhost and host == "127.0.0.1": - continue - advertised.append(host) - return advertised +def connection_hints_for_furl(furl): + hints = [] + for h in SturdyRef(furl).locationHints: + # Foolscap-0.2.5 and earlier used strings in .locationHints, 0.2.6 + # through 0.6.4 used tuples of ("ipv4",host,port), 0.6.5 through + # 0.8.0 used tuples of ("tcp",host,port), and >=0.9.0 uses strings + # again. Tolerate them all. + if isinstance(h, tuple): + hints.append(":".join([str(s) for s in h])) + else: + hints.append(h) + return hints def stringify_remote_address(rref): remote = rref.getPeer() diff --git a/src/allmydata/web/introducer.xhtml b/src/allmydata/web/introducer.xhtml index e89e88c3b..f64f7e092 100644 --- a/src/allmydata/web/introducer.xhtml +++ b/src/allmydata/web/introducer.xhtml @@ -30,7 +30,6 @@