improvement: more efficient /claim
@@ -440,13 +440,16 @@ pub(crate) async fn claim_keys_helper(
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();
for (user_id, keys) in vec {
one_time_keys_input_fed.insert(user_id.clone(), keys.clone());
}
- // Ignore failures
- if let Ok(keys) = services()
+ (
+ server,
+ services()
.sending
.send_federation_request(
server,
@@ -454,13 +457,20 @@ pub(crate) async fn claim_keys_helper(
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);
- } else {
+ }
+ Err(_e) => {
failures.insert(server.to_string(), json!({}));
}
}
+ }
Ok(claim_keys::v3::Response {
failures,
