|
@@ -162,7 +162,9 @@ class Keyring(object):
|
|
|
def remove_deferreds(res, server_name, group_id):
|
|
|
server_to_gids[server_name].discard(group_id)
|
|
|
if not server_to_gids[server_name]:
|
|
|
- server_to_deferred.pop(server_name).callback(None)
|
|
|
+ d = server_to_deferred.pop(server_name, None)
|
|
|
+ if d:
|
|
|
+ d.callback(None)
|
|
|
return res
|
|
|
|
|
|
for g_id, deferred in deferreds.items():
|
|
@@ -200,8 +202,15 @@ class Keyring(object):
|
|
|
else:
|
|
|
break
|
|
|
|
|
|
- for server_name, deferred in server_to_deferred:
|
|
|
- self.key_downloads[server_name] = ObservableDeferred(deferred)
|
|
|
+ for server_name, deferred in server_to_deferred.items():
|
|
|
+ d = ObservableDeferred(deferred)
|
|
|
+ self.key_downloads[server_name] = d
|
|
|
+
|
|
|
+ def rm(r, server_name):
|
|
|
+ self.key_downloads.pop(server_name, None)
|
|
|
+ return r
|
|
|
+
|
|
|
+ d.addBoth(rm, server_name)
|
|
|
|
|
|
def get_server_verify_keys(self, group_id_to_group, group_id_to_deferred):
|
|
|
"""Takes a dict of KeyGroups and tries to find at least one key for
|
|
@@ -220,9 +229,8 @@ class Keyring(object):
|
|
|
merged_results = {}
|
|
|
|
|
|
missing_keys = {
|
|
|
- group.server_name: key_id
|
|
|
+ group.server_name: set(group.key_ids)
|
|
|
for group in group_id_to_group.values()
|
|
|
- for key_id in group.key_ids
|
|
|
}
|
|
|
|
|
|
for fn in key_fetch_fns:
|
|
@@ -279,16 +287,15 @@ class Keyring(object):
|
|
|
def get_keys_from_store(self, server_name_and_key_ids):
|
|
|
res = yield defer.gatherResults(
|
|
|
[
|
|
|
- self.store.get_server_verify_keys(server_name, key_ids)
|
|
|
+ self.store.get_server_verify_keys(
|
|
|
+ server_name, key_ids
|
|
|
+ ).addCallback(lambda ks, server: (server, ks), server_name)
|
|
|
for server_name, key_ids in server_name_and_key_ids
|
|
|
],
|
|
|
consumeErrors=True,
|
|
|
).addErrback(unwrapFirstError)
|
|
|
|
|
|
- defer.returnValue(dict(zip(
|
|
|
- [server_name for server_name, _ in server_name_and_key_ids],
|
|
|
- res
|
|
|
- )))
|
|
|
+ defer.returnValue(dict(res))
|
|
|
|
|
|
@defer.inlineCallbacks
|
|
|
def get_keys_from_perspectives(self, server_name_and_key_ids):
|