@@ -19,10 +19,11 @@ use futures::{future::join_all, FutureExt as _, StreamExt};
1919use linera_base:: ensure;
2020use scylla:: {
2121 batch:: BatchStatement ,
22+ load_balancing:: DefaultPolicy ,
2223 prepared_statement:: PreparedStatement ,
23- statement:: batch:: BatchType ,
24+ statement:: { batch:: BatchType , Consistency } ,
2425 transport:: errors:: { DbError , QueryError } ,
25- Session , SessionBuilder ,
26+ ExecutionProfile , Session , SessionBuilder ,
2627} ;
2728use serde:: { Deserialize , Serialize } ;
2829use thiserror:: Error ;
@@ -54,8 +55,8 @@ const MAX_MULTI_KEYS: usize = 99;
5455/// So, we set up the maximal size of 16 MB - 10 KB for the values and 10 KB for the keys
5556/// We also arbitrarily decrease the size by 4000 bytes because an amount of size is
5657/// taken internally by the database.
57- const RAW_MAX_VALUE_SIZE : usize = 16762976 ;
58- const MAX_KEY_SIZE : usize = 10240 ;
58+ const RAW_MAX_VALUE_SIZE : usize = 16 * 1024 * 1024 ;
59+ const MAX_KEY_SIZE : usize = 10 * 1024 ;
5960const MAX_BATCH_TOTAL_SIZE : usize = RAW_MAX_VALUE_SIZE + MAX_KEY_SIZE ;
6061
6162/// The `RAW_MAX_VALUE_SIZE` is the maximum size on the ScyllaDB storage.
@@ -132,13 +133,13 @@ impl ScyllaDbClient {
132133 async fn new ( session : Session , namespace : & str ) -> Result < Self , ScyllaDbStoreInternalError > {
133134 let namespace = namespace. to_string ( ) ;
134135 let query = format ! (
135- "SELECT v FROM kv.{} WHERE root_key = ? AND k = ? ALLOW FILTERING " ,
136+ "SELECT v FROM kv.{} WHERE root_key = ? AND k = ?" ,
136137 namespace
137138 ) ;
138139 let read_value = session. prepare ( query) . await ?;
139140
140141 let query = format ! (
141- "SELECT root_key FROM kv.{} WHERE root_key = ? AND k = ? ALLOW FILTERING " ,
142+ "SELECT root_key FROM kv.{} WHERE root_key = ? AND k = ?" ,
142143 namespace
143144 ) ;
144145 let contains_key = session. prepare ( query) . await ?;
@@ -159,23 +160,23 @@ impl ScyllaDbClient {
159160 let write_batch_insertion = session. prepare ( query) . await ?. into ( ) ;
160161
161162 let query = format ! (
162- "SELECT k FROM kv.{} WHERE root_key = ? AND k >= ? ALLOW FILTERING " ,
163+ "SELECT k FROM kv.{} WHERE root_key = ? AND k >= ?" ,
163164 namespace
164165 ) ;
165166 let find_keys_by_prefix_unbounded = session. prepare ( query) . await ?;
166167 let query = format ! (
167- "SELECT k FROM kv.{} WHERE root_key = ? AND k >= ? AND k < ? ALLOW FILTERING " ,
168+ "SELECT k FROM kv.{} WHERE root_key = ? AND k >= ? AND k < ?" ,
168169 namespace
169170 ) ;
170171 let find_keys_by_prefix_bounded = session. prepare ( query) . await ?;
171172
172173 let query = format ! (
173- "SELECT k,v FROM kv.{} WHERE root_key = ? AND k >= ? ALLOW FILTERING " ,
174+ "SELECT k,v FROM kv.{} WHERE root_key = ? AND k >= ?" ,
174175 namespace
175176 ) ;
176177 let find_key_values_by_prefix_unbounded = session. prepare ( query) . await ?;
177178 let query = format ! (
178- "SELECT k,v FROM kv.{} WHERE root_key = ? AND k >= ? AND k < ? ALLOW FILTERING " ,
179+ "SELECT k,v FROM kv.{} WHERE root_key = ? AND k >= ? AND k < ?" ,
179180 namespace
180181 ) ;
181182 let find_key_values_by_prefix_bounded = session. prepare ( query) . await ?;
@@ -244,7 +245,7 @@ impl ScyllaDbClient {
244245 let mut group_query = "?" . to_string ( ) ;
245246 group_query. push_str ( & ",?" . repeat ( num_unique_keys - 1 ) ) ;
246247 let query = format ! (
247- "SELECT k,v FROM kv.{} WHERE root_key = ? AND k IN ({}) ALLOW FILTERING " ,
248+ "SELECT k,v FROM kv.{} WHERE root_key = ? AND k IN ({})" ,
248249 self . namespace, group_query
249250 ) ;
250251
@@ -291,7 +292,7 @@ impl ScyllaDbClient {
291292 let mut group_query = "?" . to_string ( ) ;
292293 group_query. push_str ( & ",?" . repeat ( num_unique_keys - 1 ) ) ;
293294 let query = format ! (
294- "SELECT k FROM kv.{} WHERE root_key = ? AND k IN ({}) ALLOW FILTERING " ,
295+ "SELECT k FROM kv.{} WHERE root_key = ? AND k IN ({})" ,
295296 self . namespace, group_query
296297 ) ;
297298
@@ -725,7 +726,7 @@ impl AdminKeyValueStore for ScyllaDbStoreInternal {
725726 . build ( )
726727 . boxed ( )
727728 . await ?;
728- let query = format ! ( "SELECT root_key FROM kv.{} ALLOW FILTERING " , namespace) ;
729+ let query = format ! ( "SELECT root_key FROM kv.{}" , namespace) ;
729730
730731 // Execute the query
731732 let rows = session. query_iter ( query, & [ ] ) . await ?;
@@ -764,10 +765,7 @@ impl AdminKeyValueStore for ScyllaDbStoreInternal {
764765 . boxed ( )
765766 . await ?;
766767 // We check the way the test can fail. It can fail in different ways.
767- let query = format ! (
768- "SELECT root_key FROM kv.{} LIMIT 1 ALLOW FILTERING" ,
769- namespace
770- ) ;
768+ let query = format ! ( "SELECT root_key FROM kv.{} LIMIT 1" , namespace) ;
771769
772770 // Execute the query
773771 let result = session. prepare ( & * query) . await ;
@@ -811,20 +809,23 @@ impl AdminKeyValueStore for ScyllaDbStoreInternal {
811809 . boxed ( )
812810 . await ?;
813811 // Create a keyspace if it doesn't exist
812+ // TODO(#3754): Increase the replication factor to at least 3 before mainnet
814813 let query = "CREATE KEYSPACE IF NOT EXISTS kv WITH REPLICATION = { \
815814 'class' : 'SimpleStrategy', \
816- 'replication_factor' : 1 \
815+ 'replication_factor' : 3 \
817816 }";
818817
819818 // Execute the query
820819 let prepared = session. prepare ( query) . await ?;
821820 session. execute_unpaged ( & prepared, & [ ] ) . await ?;
822821
823- // Create a table if it doesn't exist
824- // The schema appears too complicated for non-trivial reasons.
825- // See TODO(#1069).
826822 let query = format ! (
827- "CREATE TABLE kv.{} (root_key blob, k blob, v blob, primary key (root_key, k))" ,
823+ "CREATE TABLE kv.{} (
824+ root_key blob,
825+ k blob,
826+ v blob,
827+ PRIMARY KEY (root_key, k)
828+ )" ,
828829 namespace
829830 ) ;
830831
0 commit comments