Make StorageFarmBroker use specified or default handler

This commit is contained in:
David Stainton
2016-08-26 11:17:56 +00:00
parent de61cd260c
commit 140c9a92cd
3 changed files with 12 additions and 6 deletions

View File

@ -377,8 +377,11 @@ class Client(node.Node, pollmixin.PollMixin):
# utilize the loaded static server specifications # utilize the loaded static server specifications
for key, server in self.connections_config['servers'].items(): for key, server in self.connections_config['servers'].items():
handlers = None
if server.haskey("transport_handlers"):
handlers = server["transport_handlers"]
eventually(self.storage_broker.got_static_announcement, eventually(self.storage_broker.got_static_announcement,
key, server['announcement']) key, server['announcement'], handlers)
sb.use_introducer(self.introducer_client) sb.use_introducer(self.introducer_client)

View File

@ -134,17 +134,20 @@ class StorageFarmBroker(service.MultiService):
remaining.append( (threshold, d) ) remaining.append( (threshold, d) )
self._threshold_listeners = remaining self._threshold_listeners = remaining
def got_static_announcement(self, key_s, ann): def got_static_announcement(self, key_s, ann, handlers):
server_id = get_serverid_from_furl(ann["anonymous-storage-FURL"]) server_id = get_serverid_from_furl(ann["anonymous-storage-FURL"])
assert server_id not in self.static_servers # XXX assert server_id not in self.static_servers # XXX
self.static_servers.append(server_id) self.static_servers.append(server_id)
self._got_announcement(key_s, ann) self._got_announcement(key_s, ann, handlers=handlers)
def _got_announcement(self, key_s, ann): def _got_announcement(self, key_s, ann, handlers=None):
precondition(isinstance(key_s, str), key_s) precondition(isinstance(key_s, str), key_s)
precondition(key_s.startswith("v0-"), key_s) precondition(key_s.startswith("v0-"), key_s)
precondition(ann["service-name"] == "storage", ann["service-name"]) precondition(ann["service-name"] == "storage", ann["service-name"])
s = NativeStorageServer(key_s, ann, self._tub_options, self._tub_handlers) if handlers is not None:
s = NativeStorageServer(key_s, ann, self._tub_options, handlers)
else:
s = NativeStorageServer(key_s, ann, self._tub_options, self._tub_handlers)
s.on_status_changed(lambda _: self._got_connection()) s.on_status_changed(lambda _: self._got_connection())
server_id = s.get_serverid() server_id = s.get_serverid()
old = self.servers.get(server_id) old = self.servers.get(server_id)

View File

@ -47,7 +47,7 @@ class TestStorageFarmBroker(unittest.TestCase):
"anonymous-storage-FURL": "pb://{}@nowhere/fake".format(base32.b2a(str(1))), "anonymous-storage-FURL": "pb://{}@nowhere/fake".format(base32.b2a(str(1))),
"permutation-seed-base32": "aaaaaaaaaaaaaaaaaaaaaaaa", "permutation-seed-base32": "aaaaaaaaaaaaaaaaaaaaaaaa",
} }
broker.got_static_announcement(key_s, ann) broker.got_static_announcement(key_s, ann, None)
self.failUnlessEqual(len(broker.static_servers), 1) self.failUnlessEqual(len(broker.static_servers), 1)
self.failUnlessEqual(broker.servers['1'].announcement, ann) self.failUnlessEqual(broker.servers['1'].announcement, ann)
self.failUnlessEqual(broker.servers['1'].key_s, key_s) self.failUnlessEqual(broker.servers['1'].key_s, key_s)