From f860086c7c28db71c610c6185ffd5b2c4e8900df Mon Sep 17 00:00:00 2001 From: samuel orji Date: Tue, 17 Oct 2023 16:08:20 +0100 Subject: [PATCH] review feedback --- scylla-cql/src/errors.rs | 14 +++++++------- scylla/src/transport/load_balancing/default.rs | 2 +- scylla/src/transport/session.rs | 12 ++++++++---- scylla/src/transport/session_test.rs | 5 +---- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/scylla-cql/src/errors.rs b/scylla-cql/src/errors.rs index 957696ed1d..b93d4520db 100644 --- a/scylla-cql/src/errors.rs +++ b/scylla-cql/src/errors.rs @@ -46,9 +46,9 @@ pub enum QueryError { #[error("Request timeout: {0}")] RequestTimeout(String), - /// No known node found to perform query - #[error("No known node found: {0}")] - NoKnownNodeFoundError(String), + /// Empty Query Plan + #[error("Load balancing policy returned empty query plan. It can happen when the driver is provided with non-existing datacenter name")] + EmptyQueryPlan, /// Address translation failed #[error("Address translation failed: {0}")] @@ -408,9 +408,9 @@ pub enum NewSessionError { #[error("Client timeout: {0}")] RequestTimeout(String), - /// No known node found to perform query - #[error("No known node found: {0}")] - NoKnownNodeFoundError(String), + /// Empty Query Plan + #[error("Load balancing policy returned empty query plan. It can happen when the driver is provided with non-existing datacenter name")] + EmptyQueryPlan, /// Address translation failed #[error("Address translation failed: {0}")] @@ -490,7 +490,7 @@ impl From for NewSessionError { QueryError::UnableToAllocStreamId => NewSessionError::UnableToAllocStreamId, QueryError::RequestTimeout(msg) => NewSessionError::RequestTimeout(msg), QueryError::TranslationError(e) => NewSessionError::TranslationError(e), - QueryError::NoKnownNodeFoundError(e) => NewSessionError::NoKnownNodeFoundError(e), + QueryError::EmptyQueryPlan => NewSessionError::EmptyQueryPlan, } } } diff --git a/scylla/src/transport/load_balancing/default.rs b/scylla/src/transport/load_balancing/default.rs index e125f0ce34..a915890c26 100644 --- a/scylla/src/transport/load_balancing/default.rs +++ b/scylla/src/transport/load_balancing/default.rs @@ -2414,7 +2414,7 @@ mod latency_awareness { | QueryError::IoError(_) | QueryError::ProtocolError(_) | QueryError::TimeoutError - | QueryError::NoKnownNodeFoundError(_) + | QueryError::EmptyQueryPlan | QueryError::RequestTimeout(_) => true, } } diff --git a/scylla/src/transport/session.rs b/scylla/src/transport/session.rs index cf66fda436..5a8670018b 100644 --- a/scylla/src/transport/session.rs +++ b/scylla/src/transport/session.rs @@ -1661,15 +1661,15 @@ impl Session { QueryFut: Future>, ResT: AllowedRunQueryResTType, { - // set default error as no known found as the query plan returns an empty iterator if there are no nodes in the plan - let mut last_error: Option = Some(QueryError::NoKnownNodeFoundError( - "Please confirm the supplied datacenters exists".to_string(), - )); + let mut last_error: Option = None; let mut current_consistency: Consistency = context .consistency_set_on_statement .unwrap_or(execution_profile.consistency); + let mut query_plan_is_empty = true; + 'nodes_in_plan: for node in query_plan { + query_plan_is_empty = false; let span = trace_span!("Executing query", node = %node.address); 'same_node_retries: loop { trace!(parent: &span, "Execution started"); @@ -1772,6 +1772,10 @@ impl Session { } } + if query_plan_is_empty { + return Some(Err(QueryError::EmptyQueryPlan)); + } + last_error.map(Result::Err) } diff --git a/scylla/src/transport/session_test.rs b/scylla/src/transport/session_test.rs index e2e7fc14b3..dcf8dce03e 100644 --- a/scylla/src/transport/session_test.rs +++ b/scylla/src/transport/session_test.rs @@ -2886,8 +2886,5 @@ async fn test_non_existent_dc_return_correct_error() { let ks_stmt = format!("CREATE KEYSPACE IF NOT EXISTS {} WITH replication = {{'class': 'NetworkTopologyStrategy', '{}': 1}}", ks, dc); let query_result = session.query(ks_stmt, &[]).await; - assert_matches!( - query_result.unwrap_err(), - QueryError::NoKnownNodeFoundError(_) - ) + assert_matches!(query_result.unwrap_err(), QueryError::EmptyQueryPlan) }