@@ -17,11 +17,16 @@ use async_lock::{Semaphore, SemaphoreGuard};
17
17
use futures:: { future:: join_all, FutureExt as _, StreamExt } ;
18
18
use linera_base:: ensure;
19
19
use scylla:: {
20
- batch:: BatchStatement ,
21
- prepared_statement:: PreparedStatement ,
22
- statement:: batch:: BatchType ,
23
- transport:: errors:: { DbError , QueryError } ,
24
- Session , SessionBuilder ,
20
+ client:: { session:: Session , session_builder:: SessionBuilder } ,
21
+ deserialize:: { DeserializationError , TypeCheckError } ,
22
+ errors:: {
23
+ DbError , ExecutionError , IntoRowsResultError , NewSessionError , NextPageError , NextRowError ,
24
+ PagerExecutionError , PrepareError , RequestAttemptError , RequestError , RowsError ,
25
+ } ,
26
+ statement:: {
27
+ batch:: { BatchStatement , BatchType } ,
28
+ prepared:: PreparedStatement ,
29
+ } ,
25
30
} ;
26
31
use serde:: { Deserialize , Serialize } ;
27
32
use thiserror:: Error ;
@@ -465,27 +470,27 @@ pub enum ScyllaDbStoreInternalError {
465
470
466
471
/// A deserialization error in ScyllaDB
467
472
#[ error( transparent) ]
468
- DeserializationError ( #[ from] scylla :: deserialize :: DeserializationError ) ,
473
+ DeserializationError ( #[ from] DeserializationError ) ,
469
474
470
475
/// A row error in ScyllaDB
471
476
#[ error( transparent) ]
472
- RowsError ( #[ from] scylla :: transport :: query_result :: RowsError ) ,
477
+ RowsError ( #[ from] RowsError ) ,
473
478
474
479
/// A type error in the accessed data in ScyllaDB
475
480
#[ error( transparent) ]
476
- IntoRowsResultError ( #[ from] scylla :: transport :: query_result :: IntoRowsResultError ) ,
481
+ IntoRowsResultError ( #[ from] IntoRowsResultError ) ,
477
482
478
483
/// A type check error in ScyllaDB
479
484
#[ error( transparent) ]
480
- TypeCheckError ( #[ from] scylla :: deserialize :: TypeCheckError ) ,
485
+ TypeCheckError ( #[ from] TypeCheckError ) ,
481
486
482
487
/// A query error in ScyllaDB
483
488
#[ error( transparent) ]
484
- ScyllaDbQueryError ( #[ from] scylla :: transport :: errors :: QueryError ) ,
489
+ PagerExecutionError ( #[ from] PagerExecutionError ) ,
485
490
486
491
/// A query error in ScyllaDB
487
492
#[ error( transparent) ]
488
- ScyllaDbNewSessionError ( #[ from] scylla :: transport :: errors :: NewSessionError ) ,
493
+ ScyllaDbNewSessionError ( #[ from] NewSessionError ) ,
489
494
490
495
/// Namespace contains forbidden characters
491
496
#[ error( "Namespace contains forbidden characters" ) ]
@@ -498,6 +503,18 @@ pub enum ScyllaDbStoreInternalError {
498
503
/// The batch is too long to be written
499
504
#[ error( "The batch is too long to be written" ) ]
500
505
BatchTooLong ,
506
+
507
+ /// A prepare error in ScyllaDB
508
+ #[ error( transparent) ]
509
+ PrepareError ( #[ from] PrepareError ) ,
510
+
511
+ /// An execution error in ScyllaDB
512
+ #[ error( transparent) ]
513
+ ExecutionError ( #[ from] ExecutionError ) ,
514
+
515
+ /// A next row error in ScyllaDB
516
+ #[ error( transparent) ]
517
+ NextRowError ( #[ from] NextRowError ) ,
501
518
}
502
519
503
520
impl KeyValueStoreError for ScyllaDbStoreInternalError {
@@ -689,16 +706,16 @@ impl AdminKeyValueStore for ScyllaDbStoreInternal {
689
706
let result = match result {
690
707
Ok ( result) => result,
691
708
Err ( error) => {
692
- let invalid_or_not_found = match & error {
693
- QueryError :: DbError ( db_error , msg ) => {
694
- * db_error == DbError :: Invalid && msg. as_str ( ) == miss_msg
695
- }
709
+ let invalid_or_keyspace_not_found = match & error {
710
+ PagerExecutionError :: NextPageError ( NextPageError :: RequestFailure (
711
+ RequestError :: LastAttemptError ( RequestAttemptError :: DbError ( db_error , msg) ) ,
712
+ ) ) => * db_error == DbError :: Invalid && msg . as_str ( ) == miss_msg ,
696
713
_ => false ,
697
714
} ;
698
- if invalid_or_not_found {
715
+ if invalid_or_keyspace_not_found {
699
716
return Ok ( Vec :: new ( ) ) ;
700
717
} else {
701
- return Err ( ScyllaDbStoreInternalError :: ScyllaDbQueryError ( error) ) ;
718
+ return Err ( ScyllaDbStoreInternalError :: PagerExecutionError ( error) ) ;
702
719
}
703
720
}
704
721
} ;
@@ -780,7 +797,9 @@ impl AdminKeyValueStore for ScyllaDbStoreInternal {
780
797
return Ok ( true ) ;
781
798
} ;
782
799
let missing_table = match & error {
783
- QueryError :: DbError ( db_error, msg) => {
800
+ PrepareError :: AllAttemptsFailed {
801
+ first_attempt : RequestAttemptError :: DbError ( db_error, msg) ,
802
+ } => {
784
803
if * db_error != DbError :: Invalid {
785
804
false
786
805
} else {
@@ -794,7 +813,7 @@ impl AdminKeyValueStore for ScyllaDbStoreInternal {
794
813
if missing_table {
795
814
Ok ( false )
796
815
} else {
797
- Err ( ScyllaDbStoreInternalError :: ScyllaDbQueryError ( error) )
816
+ Err ( ScyllaDbStoreInternalError :: PrepareError ( error) )
798
817
}
799
818
}
800
819
0 commit comments