@@ -1309,51 +1309,55 @@ where
1309
1309
check_existing_conn : bool ,
1310
1310
) {
1311
1311
info ! ( "Started refreshing connections to {:?}" , addresses) ;
1312
- let connections_container = inner. conn_lock . read ( ) . await ;
1313
- let cluster_params = & inner. cluster_params ;
1314
- let subscriptions_by_address = & inner. subscriptions_by_address ;
1315
- let glide_connection_optons = & inner. glide_connection_options ;
1312
+ let mut tasks = FuturesUnordered :: new ( ) ;
1313
+ let inner = inner. clone ( ) ;
1316
1314
1317
- stream:: iter ( addresses. into_iter ( ) )
1318
- . fold (
1319
- & * connections_container,
1320
- |connections_container, address| async move {
1321
- let node_option = if check_existing_conn {
1322
- connections_container. remove_node ( & address)
1323
- } else {
1324
- None
1325
- } ;
1315
+ for address in addresses. into_iter ( ) {
1316
+ let inner = inner. clone ( ) ;
1326
1317
1327
- // override subscriptions for this connection
1328
- let mut cluster_params = cluster_params. clone ( ) ;
1329
- let subs_guard = subscriptions_by_address. read ( ) . await ;
1330
- cluster_params. pubsub_subscriptions = subs_guard. get ( & address) . cloned ( ) ;
1331
- drop ( subs_guard) ;
1332
- let node = get_or_create_conn (
1333
- & address,
1334
- node_option,
1335
- & cluster_params,
1336
- conn_type,
1337
- glide_connection_optons. clone ( ) ,
1338
- )
1339
- . await ;
1340
- match node {
1341
- Ok ( node) => {
1342
- connections_container
1343
- . replace_or_add_connection_for_address ( address, node) ;
1344
- }
1345
- Err ( err) => {
1346
- warn ! (
1347
- "Failed to refresh connection for node {}. Error: `{:?}`" ,
1348
- address, err
1349
- ) ;
1350
- }
1351
- }
1352
- connections_container
1353
- } ,
1354
- )
1355
- . await ;
1356
- info ! ( "refresh connections completed" ) ;
1318
+ tasks. push ( async move {
1319
+ let node_option = if check_existing_conn {
1320
+ let connections_container = inner. conn_lock . read ( ) . await ;
1321
+ connections_container. remove_node ( & address)
1322
+ } else {
1323
+ None
1324
+ } ;
1325
+
1326
+ // Override subscriptions for this connection
1327
+ let mut cluster_params = inner. cluster_params . clone ( ) ;
1328
+ let subs_guard = inner. subscriptions_by_address . read ( ) . await ;
1329
+ cluster_params. pubsub_subscriptions = subs_guard. get ( & address) . cloned ( ) ;
1330
+ drop ( subs_guard) ;
1331
+
1332
+ let node = get_or_create_conn (
1333
+ & address,
1334
+ node_option,
1335
+ & cluster_params,
1336
+ conn_type,
1337
+ inner. glide_connection_options . clone ( ) ,
1338
+ )
1339
+ . await ;
1340
+
1341
+ ( address, node)
1342
+ } ) ;
1343
+ }
1344
+
1345
+ // Poll connection tasks as soon as each one finishes
1346
+ while let Some ( result) = tasks. next ( ) . await {
1347
+ match result {
1348
+ ( address, Ok ( node) ) => {
1349
+ let connections_container = inner. conn_lock . read ( ) . await ;
1350
+ connections_container. replace_or_add_connection_for_address ( address, node) ;
1351
+ }
1352
+ ( address, Err ( err) ) => {
1353
+ warn ! (
1354
+ "Failed to refresh connection for node {}. Error: `{:?}`" ,
1355
+ address, err
1356
+ ) ;
1357
+ }
1358
+ }
1359
+ }
1360
+ debug ! ( "refresh connections completed" ) ;
1357
1361
}
1358
1362
1359
1363
async fn aggregate_results (
0 commit comments