improvement: more efficient /claim

This commit is contained in:
Timo Kösters 2022-10-12 10:42:59 +02:00
parent cd835fc7a8
commit 0290f1f355
No known key found for this signature in database
GPG key ID: 24DA7517711A2BA4

View file

@ -440,13 +440,16 @@ pub(crate) async fn claim_keys_helper(
let mut failures = BTreeMap::new(); let mut failures = BTreeMap::new();
for (server, vec) in get_over_federation { let mut futures: FuturesUnordered<_> = get_over_federation
.into_iter()
.map(|(server, vec)| async move {
let mut one_time_keys_input_fed = BTreeMap::new(); let mut one_time_keys_input_fed = BTreeMap::new();
for (user_id, keys) in vec { for (user_id, keys) in vec {
one_time_keys_input_fed.insert(user_id.clone(), keys.clone()); one_time_keys_input_fed.insert(user_id.clone(), keys.clone());
} }
// Ignore failures (
if let Ok(keys) = services() server,
services()
.sending .sending
.send_federation_request( .send_federation_request(
server, server,
@ -454,13 +457,20 @@ pub(crate) async fn claim_keys_helper(
one_time_keys: one_time_keys_input_fed, one_time_keys: one_time_keys_input_fed,
}, },
) )
.await .await,
{ )
}).collect();
while let Some((server, response)) = futures.next().await {
match response {
Ok(keys) => {
one_time_keys.extend(keys.one_time_keys); one_time_keys.extend(keys.one_time_keys);
} else { }
Err(_e) => {
failures.insert(server.to_string(), json!({})); failures.insert(server.to_string(), json!({}));
} }
} }
}
Ok(claim_keys::v3::Response { Ok(claim_keys::v3::Response {
failures, failures,