@@ -35,7 +35,7 @@ use crate::transport::connection::{Connection, NonErrorQueryResponse, QueryRespo
3535use crate :: transport:: load_balancing:: { self , RoutingInfo } ;
3636use crate :: transport:: metrics:: Metrics ;
3737use crate :: transport:: retry_policy:: { QueryInfo , RetryDecision , RetrySession } ;
38- use crate :: transport:: { Node , NodeRef } ;
38+ use crate :: transport:: NodeRef ;
3939use tracing:: { trace, trace_span, warn, Instrument } ;
4040use uuid:: Uuid ;
4141
@@ -160,8 +160,6 @@ impl RowIterator {
160160 let worker_task = async move {
161161 let query_ref = & query;
162162
163- let choose_connection = |node : Arc < Node > | async move { node. random_connection ( ) . await } ;
164-
165163 let page_query = |connection : Arc < Connection > ,
166164 consistency : Consistency ,
167165 paging_state : Option < Bytes > | {
@@ -187,7 +185,6 @@ impl RowIterator {
187185
188186 let worker = RowIteratorWorker {
189187 sender : sender. into ( ) ,
190- choose_connection,
191188 page_query,
192189 statement_info : routing_info,
193190 query_is_idempotent : query. config . is_idempotent ,
@@ -259,13 +256,6 @@ impl RowIterator {
259256 is_confirmed_lwt : config. prepared . is_confirmed_lwt ( ) ,
260257 } ;
261258
262- let choose_connection = |node : Arc < Node > | async move {
263- match token {
264- Some ( token) => node. connection_for_token ( token) . await ,
265- None => node. random_connection ( ) . await ,
266- }
267- } ;
268-
269259 let page_query = |connection : Arc < Connection > ,
270260 consistency : Consistency ,
271261 paging_state : Option < Bytes > | async move {
@@ -290,7 +280,7 @@ impl RowIterator {
290280 config
291281 . cluster_data
292282 . get_token_endpoints_iter ( keyspace, token)
293- . cloned ( )
283+ . map ( | ( node , shard ) | ( node . clone ( ) , shard ) )
294284 . collect ( ) ,
295285 )
296286 } else {
@@ -311,7 +301,6 @@ impl RowIterator {
311301
312302 let worker = RowIteratorWorker {
313303 sender : sender. into ( ) ,
314- choose_connection,
315304 page_query,
316305 statement_info,
317306 query_is_idempotent : config. prepared . config . is_idempotent ,
@@ -496,13 +485,9 @@ type PageSendAttemptedProof = SendAttemptedProof<Result<ReceivedPage, QueryError
496485
497486// RowIteratorWorker works in the background to fetch pages
498487// RowIterator receives them through a channel
499- struct RowIteratorWorker < ' a , ConnFunc , QueryFunc , SpanCreatorFunc > {
488+ struct RowIteratorWorker < ' a , QueryFunc , SpanCreatorFunc > {
500489 sender : ProvingSender < Result < ReceivedPage , QueryError > > ,
501490
502- // Closure used to choose a connection from a node
503- // AsyncFn(Arc<Node>) -> Result<Arc<Connection>, QueryError>
504- choose_connection : ConnFunc ,
505-
506491 // Closure used to perform a single page query
507492 // AsyncFn(Arc<Connection>, Option<Bytes>) -> Result<QueryResponse, QueryError>
508493 page_query : QueryFunc ,
@@ -524,11 +509,8 @@ struct RowIteratorWorker<'a, ConnFunc, QueryFunc, SpanCreatorFunc> {
524509 span_creator : SpanCreatorFunc ,
525510}
526511
527- impl < ConnFunc , ConnFut , QueryFunc , QueryFut , SpanCreator >
528- RowIteratorWorker < ' _ , ConnFunc , QueryFunc , SpanCreator >
512+ impl < QueryFunc , QueryFut , SpanCreator > RowIteratorWorker < ' _ , QueryFunc , SpanCreator >
529513where
530- ConnFunc : Fn ( Arc < Node > ) -> ConnFut ,
531- ConnFut : Future < Output = Result < Arc < Connection > , QueryError > > ,
532514 QueryFunc : Fn ( Arc < Connection > , Consistency , Option < Bytes > ) -> QueryFut ,
533515 QueryFut : Future < Output = Result < QueryResponse , QueryError > > ,
534516 SpanCreator : Fn ( ) -> RequestSpan ,
@@ -546,12 +528,13 @@ where
546528
547529 self . log_query_start ( ) ;
548530
549- ' nodes_in_plan: for node in query_plan {
531+ ' nodes_in_plan: for ( node, shard ) in query_plan {
550532 let span =
551533 trace_span ! ( parent: & self . parent_span, "Executing query" , node = %node. address) ;
552534 // For each node in the plan choose a connection to use
553535 // This connection will be reused for same node retries to preserve paging cache on the shard
554- let connection: Arc < Connection > = match ( self . choose_connection ) ( node. clone ( ) )
536+ let connection: Arc < Connection > = match node
537+ . connection_for_shard ( shard)
555538 . instrument ( span. clone ( ) )
556539 . await
557540 {
0 commit comments