From 6e842d3687789abb302954568b937f1e2441955a Mon Sep 17 00:00:00 2001 From: phink Date: Thu, 28 Nov 2024 16:18:59 +0100 Subject: [PATCH 1/7] DAL/Node: move Dal_store_sqlite3.sqlite_file_name definition to module top --- src/lib_dal_node/dal_store_sqlite3.ml | 4 ++-- src/lib_dal_node/dal_store_sqlite3.mli | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/lib_dal_node/dal_store_sqlite3.ml b/src/lib_dal_node/dal_store_sqlite3.ml index da1069fab6e5..612296e7e0c8 100644 --- a/src/lib_dal_node/dal_store_sqlite3.ml +++ b/src/lib_dal_node/dal_store_sqlite3.ml @@ -11,6 +11,8 @@ include Sqlite open Caqti_request.Infix open Caqti_type.Std +let sqlite_file_name = "store.sqlite" + module Q = struct let table_exists = (string ->! bool) @@ -251,8 +253,6 @@ module Skip_list_cells = struct end end -let sqlite_file_name = "store.sqlite" - let init ~data_dir ~perm () = let open Lwt_result_syntax in let path = data_dir // sqlite_file_name in diff --git a/src/lib_dal_node/dal_store_sqlite3.mli b/src/lib_dal_node/dal_store_sqlite3.mli index d84f8630c826..a2cc2c2b58e6 100644 --- a/src/lib_dal_node/dal_store_sqlite3.mli +++ b/src/lib_dal_node/dal_store_sqlite3.mli @@ -6,6 +6,9 @@ (* *) (*****************************************************************************) +(** Name of the SQLite3 file. *) +val sqlite_file_name : string + (** A handler to the DAL node's SQLite3 database. *) type t = Sqlite.t @@ -24,8 +27,6 @@ val use : t -> (conn -> 'a tzresult Lwt.t) -> 'a tzresult Lwt.t val init : data_dir:string -> perm:[`Read_only | `Read_write] -> unit -> t tzresult Lwt.t -(** Name of the SQLite3 file. *) -val sqlite_file_name : string module Schemas : sig (** [get_all conn] returns the list of SQL statements allowing to recreate -- GitLab From dc2871096b05e8b37badb2f86f2e0080a58b78d9 Mon Sep 17 00:00:00 2001 From: phink Date: Thu, 28 Nov 2024 16:25:39 +0100 Subject: [PATCH 2/7] DAL/Node: move init function to Skip_list_cells submodule --- src/bin_dal_node/main.ml | 4 +- src/bin_dal_node/store.ml | 10 ++- src/lib_dal_node/dal_store_sqlite3.ml | 92 +++++++++++++------------- src/lib_dal_node/dal_store_sqlite3.mli | 22 +++--- src/lib_dal_node/test/test_storage.ml | 8 ++- 5 files changed, 74 insertions(+), 62 deletions(-) diff --git a/src/bin_dal_node/main.ml b/src/bin_dal_node/main.ml index da755e5e0e63..ac8946ce30da 100644 --- a/src/bin_dal_node/main.ml +++ b/src/bin_dal_node/main.ml @@ -109,7 +109,9 @@ let run subcommand cli_options = Lwt_main.run @@ wrap_with_error @@ Lwt_utils_unix.with_tempdir "store" @@ fun data_dir -> - let* store = Dal_store_sqlite3.init ~data_dir ~perm:`Read_write () in + let* store = + Dal_store_sqlite3.Skip_list_cells.init ~data_dir ~perm:`Read_write () + in let* schemas = Dal_store_sqlite3.(use store Schemas.get_all) in let output = String.concat ";\n\n" schemas in Format.printf "%s\n" output ; diff --git a/src/bin_dal_node/store.ml b/src/bin_dal_node/store.ml index 5c04a8041b1c..eeae22732c5b 100644 --- a/src/bin_dal_node/store.ml +++ b/src/bin_dal_node/store.ml @@ -696,7 +696,10 @@ let upgrade_from_v1_to_v2 ~base_dir = (* Initialize both stores and migrate. *) let* kvs_store = init_skip_list_cells_store base_dir in let* sql_store = - Dal_store_sqlite3.init ~data_dir:base_dir ~perm:`Read_write () + Dal_store_sqlite3.Skip_list_cells.init + ~data_dir:base_dir + ~perm:`Read_write + () in let* storage_backend_store = Storage_backend.init ~root_dir:base_dir in let*! res = Store_migrations.migrate_skip_list_store kvs_store sql_store in @@ -800,7 +803,10 @@ let init config = in let* sqlite3 = let*! () = Event.(emit dal_node_sqlite3_store_init ()) in - Dal_store_sqlite3.init ~data_dir:base_dir ~perm:`Read_write () + Dal_store_sqlite3.Skip_list_cells.init + ~data_dir:base_dir + ~perm:`Read_write + () in let*! () = Event.(emit store_is_ready ()) in return diff --git a/src/lib_dal_node/dal_store_sqlite3.ml b/src/lib_dal_node/dal_store_sqlite3.ml index 612296e7e0c8..f9b63fccb6c4 100644 --- a/src/lib_dal_node/dal_store_sqlite3.ml +++ b/src/lib_dal_node/dal_store_sqlite3.ml @@ -230,9 +230,52 @@ module Skip_list_cells = struct Sqlite.Db.exec conn Q.insert_skip_list_cell (cell_hash, cell)) items - module Internal_for_tests = struct - open Types + let init ~data_dir ~perm () = + let open Lwt_result_syntax in + let path = data_dir // sqlite_file_name in + let*! exists = Lwt_unix.file_exists path in + let migration conn = + Sqlite.assert_in_transaction conn ; + let* () = + if not exists then + let* () = Migrations.create_table conn in + return_unit + else + let* table_exists = Migrations.table_exists conn in + let* () = + when_ (not table_exists) (fun () -> + failwith "A store already exists, but its content is incorrect.") + in + return_unit + in + let* migrations = Migrations.missing_migrations conn in + let*? () = + match (perm, migrations) with + | `Read_only, _ :: _ -> + error_with + "The store has %d missing migrations but was opened in read-only \ + mode." + (List.length migrations) + | _, _ -> Ok () + in + let* () = + List.iter_es + (fun (i, ((module M : Dal_node_migrations.S) as mig)) -> + let start_time = Unix.gettimeofday () in + let* () = Migrations.apply_migration conn i mig in + let end_time = Unix.gettimeofday () in + let duration = end_time -. start_time in + let*! () = + Dal_store_sqlite3_events.applied_migration ~name:M.name ~duration + in + return_unit) + migrations + in + return_unit + in + Sqlite.init ~path ~perm migration + module Internal_for_tests = struct module Q = struct open Dal_proto_types @@ -252,48 +295,3 @@ module Skip_list_cells = struct Sqlite.Db.find conn Q.skip_list_hash_exists skip_list_hash end end - -let init ~data_dir ~perm () = - let open Lwt_result_syntax in - let path = data_dir // sqlite_file_name in - let*! exists = Lwt_unix.file_exists path in - let migration conn = - Sqlite.assert_in_transaction conn ; - let* () = - if not exists then - let* () = Migrations.create_table conn in - return_unit - else - let* table_exists = Migrations.table_exists conn in - let* () = - when_ (not table_exists) (fun () -> - failwith "A store already exists, but its content is incorrect.") - in - return_unit - in - let* migrations = Migrations.missing_migrations conn in - let*? () = - match (perm, migrations) with - | `Read_only, _ :: _ -> - error_with - "The store has %d missing migrations but was opened in read-only \ - mode." - (List.length migrations) - | _, _ -> Ok () - in - let* () = - List.iter_es - (fun (i, ((module M : Dal_node_migrations.S) as mig)) -> - let start_time = Unix.gettimeofday () in - let* () = Migrations.apply_migration conn i mig in - let end_time = Unix.gettimeofday () in - let duration = end_time -. start_time in - let*! () = - Dal_store_sqlite3_events.applied_migration ~name:M.name ~duration - in - return_unit) - migrations - in - return_unit - in - Sqlite.init ~path ~perm migration diff --git a/src/lib_dal_node/dal_store_sqlite3.mli b/src/lib_dal_node/dal_store_sqlite3.mli index a2cc2c2b58e6..4d565ec9ecf7 100644 --- a/src/lib_dal_node/dal_store_sqlite3.mli +++ b/src/lib_dal_node/dal_store_sqlite3.mli @@ -18,16 +18,6 @@ type conn = Sqlite.conn (** [use db k] executes [k] with a fresh connection to [db]. *) val use : t -> (conn -> 'a tzresult Lwt.t) -> 'a tzresult Lwt.t -(** [init ~data_dir ~perm ()] returns a handler to the DAL node store - located under [data_dir]. If no store is located in [data_dir], an - empty store is created. - - If [perm] is [`Read_only], then SQL requests requiring write access will - fail. With [`Read_write], they will succeed as expected. *) -val init : - data_dir:string -> perm:[`Read_only | `Read_write] -> unit -> t tzresult Lwt.t - - module Schemas : sig (** [get_all conn] returns the list of SQL statements allowing to recreate the tables in the current store. *) @@ -37,6 +27,18 @@ end module Skip_list_cells : sig open Dal_proto_types + (** [init ~data_dir ~perm ()] returns a handler to the DAL node store + located under [data_dir]. If no store is located in [data_dir], an + empty store is created. + + If [perm] is [`Read_only], then SQL requests requiring write access will + fail. With [`Read_write], they will succeed as expected. *) + val init : + data_dir:string -> + perm:[`Read_only | `Read_write] -> + unit -> + t tzresult Lwt.t + (** [find ?conn store hash] returns the cell associated to [hash] in the [store], if any. Uses the [conn] if provided (defaults to [None]). *) diff --git a/src/lib_dal_node/test/test_storage.ml b/src/lib_dal_node/test/test_storage.ml index 32a95f9dde0a..ec91af2af6cc 100644 --- a/src/lib_dal_node/test/test_storage.ml +++ b/src/lib_dal_node/test/test_storage.ml @@ -386,7 +386,9 @@ let consistency_test = (* Initialize the KVS and the SQLite stores. *) let data_dir = Tezt.Temp.dir "data-dir" in let* kvs_store = init_skip_list_cells_store data_dir in - let* sql_store = Dal_store_sqlite3.init ~data_dir ~perm:`Read_write () in + let* sql_store = + Dal_store_sqlite3.Skip_list_cells.init ~data_dir ~perm:`Read_write () + in (* Run the actions both for the KVS and the SQL backends. *) let* () = run_kvs kvs_store actions in let* () = run_sqlite3 sql_store actions in @@ -426,7 +428,9 @@ let migration_skip_list_test {state; actions} = let data_dir = Tezt.Temp.dir "data-dir" in let* kvs_store = init_skip_list_cells_store data_dir in let* () = run_kvs kvs_store actions in - let* sql_store = Dal_store_sqlite3.init ~data_dir ~perm:`Read_write () in + let* sql_store = + Dal_store_sqlite3.Skip_list_cells.init ~data_dir ~perm:`Read_write () + in let* () = Store_migrations.migrate_skip_list_store kvs_store sql_store in let* () = handshake state kvs_store sql_store in Kvs_skip_list_cells_store.close kvs_store -- GitLab From b67032a04612b2acb63286dae66fda26eaf343a8 Mon Sep 17 00:00:00 2001 From: phink Date: Thu, 28 Nov 2024 16:47:32 +0100 Subject: [PATCH 3/7] DAL/Node: dedicated initialization for Store's SQLite skip list cells store --- src/bin_dal_node/main.ml | 5 +--- src/bin_dal_node/store.ml | 37 +++++++++++++++++--------- src/bin_dal_node/store.mli | 4 +++ src/lib_dal_node/dal_store_sqlite3.ml | 2 ++ src/lib_dal_node/dal_store_sqlite3.mli | 4 +++ src/lib_dal_node/test/test_storage.ml | 14 +++++----- 6 files changed, 43 insertions(+), 23 deletions(-) diff --git a/src/bin_dal_node/main.ml b/src/bin_dal_node/main.ml index ac8946ce30da..fe790857ac30 100644 --- a/src/bin_dal_node/main.ml +++ b/src/bin_dal_node/main.ml @@ -109,10 +109,7 @@ let run subcommand cli_options = Lwt_main.run @@ wrap_with_error @@ Lwt_utils_unix.with_tempdir "store" @@ fun data_dir -> - let* store = - Dal_store_sqlite3.Skip_list_cells.init ~data_dir ~perm:`Read_write () - in - let* schemas = Dal_store_sqlite3.(use store Schemas.get_all) in + let* schemas = Store.Skip_list_cells.sql_schemas data_dir in let output = String.concat ";\n\n" schemas in Format.printf "%s\n" output ; return_unit diff --git a/src/bin_dal_node/store.ml b/src/bin_dal_node/store.ml index eeae22732c5b..fa46097b7632 100644 --- a/src/bin_dal_node/store.ml +++ b/src/bin_dal_node/store.ml @@ -573,6 +573,23 @@ let slot_header_statuses {slot_header_statuses; _} = slot_header_statuses let slots {slots; _} = slots +let init_sqlite_skip_list_cells_store ?(perm = `Read_write) data_dir = + let open Lwt_result_syntax in + let open Filename.Infix in + let skip_list_cells_data_dir = data_dir // Stores_dirs.skip_list_cells in + let*! () = + (* This occurs when running the command: + ./octez-dal-node debug print store schemas *) + if not (Sys.file_exists skip_list_cells_data_dir) then + Lwt_utils_unix.create_dir (data_dir // Stores_dirs.skip_list_cells) + else Lwt.return_unit + in + let*! () = Event.(emit dal_node_sqlite3_store_init ()) in + Dal_store_sqlite3.Skip_list_cells.init + ~data_dir:skip_list_cells_data_dir + ~perm + () + module Skip_list_cells = struct let find t = match t.storage_backend with @@ -588,6 +605,11 @@ module Skip_list_cells = struct match t.storage_backend with | Legacy -> Kvs_skip_list_cells_store.remove t.skip_list_cells | SQLite3 -> Dal_store_sqlite3.Skip_list_cells.remove t.sqlite3 + + let schemas data_dir = + let open Lwt_result_syntax in + let* store = init_sqlite_skip_list_cells_store data_dir in + Dal_store_sqlite3.Skip_list_cells.schemas store end let init_skip_list_cells_store base_dir = @@ -695,12 +717,7 @@ let upgrade_from_v1_to_v2 ~base_dir = in (* Initialize both stores and migrate. *) let* kvs_store = init_skip_list_cells_store base_dir in - let* sql_store = - Dal_store_sqlite3.Skip_list_cells.init - ~data_dir:base_dir - ~perm:`Read_write - () - in + let* sql_store = init_sqlite_skip_list_cells_store base_dir in let* storage_backend_store = Storage_backend.init ~root_dir:base_dir in let*! res = Store_migrations.migrate_skip_list_store kvs_store sql_store in let* () = Kvs_skip_list_cells_store.close kvs_store in @@ -801,13 +818,7 @@ let init config = let sqlite3_backend = config.experimental_features.sqlite3_backend in Storage_backend.set store ~sqlite3_backend in - let* sqlite3 = - let*! () = Event.(emit dal_node_sqlite3_store_init ()) in - Dal_store_sqlite3.Skip_list_cells.init - ~data_dir:base_dir - ~perm:`Read_write - () - in + let* sqlite3 = init_sqlite_skip_list_cells_store base_dir in let*! () = Event.(emit store_is_ready ()) in return { diff --git a/src/bin_dal_node/store.mli b/src/bin_dal_node/store.mli index 0af3b9ddd408..41813b29a410 100644 --- a/src/bin_dal_node/store.mli +++ b/src/bin_dal_node/store.mli @@ -228,4 +228,8 @@ module Skip_list_cells : sig (** [remove store ~attested_level] removes any data related to [attested_level] from the [store]. *) val remove : t -> attested_level:int32 -> unit tzresult Lwt.t + + (** [schemas data_dir] returns the list of SQL statements allowing + to recreate the tables of the DAL skip list cells store. *) + val schemas : string -> string list tzresult Lwt.t end diff --git a/src/lib_dal_node/dal_store_sqlite3.ml b/src/lib_dal_node/dal_store_sqlite3.ml index f9b63fccb6c4..7db54b28b5be 100644 --- a/src/lib_dal_node/dal_store_sqlite3.ml +++ b/src/lib_dal_node/dal_store_sqlite3.ml @@ -275,6 +275,8 @@ module Skip_list_cells = struct in Sqlite.init ~path ~perm migration + let schemas t = use t Schemas.get_all + module Internal_for_tests = struct module Q = struct open Dal_proto_types diff --git a/src/lib_dal_node/dal_store_sqlite3.mli b/src/lib_dal_node/dal_store_sqlite3.mli index 4d565ec9ecf7..94e2a1b62eb5 100644 --- a/src/lib_dal_node/dal_store_sqlite3.mli +++ b/src/lib_dal_node/dal_store_sqlite3.mli @@ -61,6 +61,10 @@ module Skip_list_cells : sig (defaults to [None]). *) val remove : ?conn:conn -> t -> attested_level:int32 -> unit tzresult Lwt.t + (** [schemas t] returns the list of SQL statements + allowing to recreate the tables of the store [t]. *) + val schemas : t -> string list tzresult Lwt.t + (** Internal functions for testing purpose. *) module Internal_for_tests : sig val skip_list_hash_exists : diff --git a/src/lib_dal_node/test/test_storage.ml b/src/lib_dal_node/test/test_storage.ml index ec91af2af6cc..8bac24ea4934 100644 --- a/src/lib_dal_node/test/test_storage.ml +++ b/src/lib_dal_node/test/test_storage.ml @@ -372,6 +372,12 @@ let init_skip_list_cells_store node_store_dir = ~padded_encoded_cell_size ~encoded_hash_size +let init_sqlite_skip_list_cells_store ?(perm = `Read_write) data_dir = + Dal_store_sqlite3.Skip_list_cells.init + ~data_dir:(Filename.concat data_dir "skip_list_store") + ~perm + () + (* Required by the KVS store. *) let () = Value_size_hooks.set_number_of_slots number_of_slots @@ -386,9 +392,7 @@ let consistency_test = (* Initialize the KVS and the SQLite stores. *) let data_dir = Tezt.Temp.dir "data-dir" in let* kvs_store = init_skip_list_cells_store data_dir in - let* sql_store = - Dal_store_sqlite3.Skip_list_cells.init ~data_dir ~perm:`Read_write () - in + let* sql_store = init_sqlite_skip_list_cells_store data_dir in (* Run the actions both for the KVS and the SQL backends. *) let* () = run_kvs kvs_store actions in let* () = run_sqlite3 sql_store actions in @@ -428,9 +432,7 @@ let migration_skip_list_test {state; actions} = let data_dir = Tezt.Temp.dir "data-dir" in let* kvs_store = init_skip_list_cells_store data_dir in let* () = run_kvs kvs_store actions in - let* sql_store = - Dal_store_sqlite3.Skip_list_cells.init ~data_dir ~perm:`Read_write () - in + let* sql_store = init_sqlite_skip_list_cells_store data_dir in let* () = Store_migrations.migrate_skip_list_store kvs_store sql_store in let* () = handshake state kvs_store sql_store in Kvs_skip_list_cells_store.close kvs_store -- GitLab From 803d0d04847874811ab6042caa5cec4780ba22f9 Mon Sep 17 00:00:00 2001 From: phink Date: Thu, 28 Nov 2024 17:00:23 +0100 Subject: [PATCH 4/7] DAL/Node: don't remove entire directory during migration --- src/bin_dal_node/store.ml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/bin_dal_node/store.ml b/src/bin_dal_node/store.ml index fa46097b7632..99549a8c35f7 100644 --- a/src/bin_dal_node/store.ml +++ b/src/bin_dal_node/store.ml @@ -731,10 +731,10 @@ let upgrade_from_v1_to_v2 ~base_dir = ~force:true in (* Remove the Stores_dirs.skip_list_cells directory. *) - let*! () = - Lwt_utils_unix.remove_dir - Filename.Infix.(base_dir // Stores_dirs.skip_list_cells) - in + let open Filename.Infix in + let store_dir = base_dir // Stores_dirs.skip_list_cells in + let*! () = Lwt_utils_unix.remove_dir (store_dir // "hashes") in + let*! () = Lwt_utils_unix.remove_dir (store_dir // "cells") in (* The storage upgrade has been done. *) let*! () = Event.(emit store_upgraded (Version.make 1, Version.make 2)) in return_unit -- GitLab From ad7a6cf92d6374749fcf9dc4ba7e5c190dbbc3fd Mon Sep 17 00:00:00 2001 From: phink Date: Thu, 28 Nov 2024 17:06:37 +0100 Subject: [PATCH 5/7] DAL/Node: move SQLite skip list cells store if created with --sqlite3-backend --- src/bin_dal_node/store.ml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/bin_dal_node/store.ml b/src/bin_dal_node/store.ml index 99549a8c35f7..01ce8c01f213 100644 --- a/src/bin_dal_node/store.ml +++ b/src/bin_dal_node/store.ml @@ -584,6 +584,20 @@ let init_sqlite_skip_list_cells_store ?(perm = `Read_write) data_dir = Lwt_utils_unix.create_dir (data_dir // Stores_dirs.skip_list_cells) else Lwt.return_unit in + let*! () = + (* If a previous sqlite database has been created using the + `--sqlite3-backend` experimental flag. We simply move it to the + new destination path. *) + let previous_path = data_dir // Dal_store_sqlite3.sqlite_file_name in + if Sys.file_exists previous_path then ( + let new_path = + skip_list_cells_data_dir // Dal_store_sqlite3.sqlite_file_name + in + let*! () = Lwt_utils_unix.copy_file ~src:previous_path ~dst:new_path () in + Sys.remove previous_path ; + Lwt.return_unit) + else Lwt.return_unit + in let*! () = Event.(emit dal_node_sqlite3_store_init ()) in Dal_store_sqlite3.Skip_list_cells.init ~data_dir:skip_list_cells_data_dir -- GitLab From c03ba0b58c4af26dc9d0722df2de77f237ea6f5f Mon Sep 17 00:00:00 2001 From: phink Date: Thu, 28 Nov 2024 21:36:40 +0100 Subject: [PATCH 6/7] DAL/Node: abstract implementation over Dal_store_sqlite3.Skip_list_cells.t --- src/bin_dal_node/main.ml | 2 +- src/bin_dal_node/store.ml | 2 +- src/bin_dal_node/store.mli | 4 +++- src/lib_dal_node/dal_plugin.ml | 3 ++- src/lib_dal_node/dal_plugin.mli | 3 ++- src/lib_dal_node/dal_store_sqlite3.ml | 2 ++ src/lib_dal_node/dal_store_sqlite3.mli | 3 +++ src/lib_dal_node/store_migrations.mli | 4 +++- src/proto_020_PsParisC/lib_dal/RPC_directory.mli | 3 ++- src/proto_021_PsQuebec/lib_dal/RPC_directory.mli | 3 ++- src/proto_alpha/lib_dal/RPC_directory.mli | 3 ++- 11 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/bin_dal_node/main.ml b/src/bin_dal_node/main.ml index fe790857ac30..73d0c1911824 100644 --- a/src/bin_dal_node/main.ml +++ b/src/bin_dal_node/main.ml @@ -109,7 +109,7 @@ let run subcommand cli_options = Lwt_main.run @@ wrap_with_error @@ Lwt_utils_unix.with_tempdir "store" @@ fun data_dir -> - let* schemas = Store.Skip_list_cells.sql_schemas data_dir in + let* schemas = Store.Skip_list_cells.schemas data_dir in let output = String.concat ";\n\n" schemas in Format.printf "%s\n" output ; return_unit diff --git a/src/bin_dal_node/store.ml b/src/bin_dal_node/store.ml index 01ce8c01f213..da7723673eea 100644 --- a/src/bin_dal_node/store.ml +++ b/src/bin_dal_node/store.ml @@ -551,7 +551,7 @@ type t = { last_processed_level : Last_processed_level.t; first_seen_level : First_seen_level.t; storage_backend : Storage_backend.kind; - sqlite3 : Dal_store_sqlite3.t; + sqlite3 : Dal_store_sqlite3.Skip_list_cells.t; } let cache {cache; _} = cache diff --git a/src/bin_dal_node/store.mli b/src/bin_dal_node/store.mli index 41813b29a410..9f077b61e96c 100644 --- a/src/bin_dal_node/store.mli +++ b/src/bin_dal_node/store.mli @@ -164,7 +164,9 @@ val shards : t -> Shards.t [`SQLite3 store] depending on the current storage backend used by the store [t]. *) val skip_list_cells : - t -> [> `KVS of Kvs_skip_list_cells_store.t | `SQLite3 of Dal_store_sqlite3.t] + t -> + [> `KVS of Kvs_skip_list_cells_store.t + | `SQLite3 of Dal_store_sqlite3.Skip_list_cells.t ] (** [slot_header_statuses t] returns the statuses store associated with the store [t]. *) diff --git a/src/lib_dal_node/dal_plugin.ml b/src/lib_dal_node/dal_plugin.ml index 90c78b50f00d..02c07dad7cc4 100644 --- a/src/lib_dal_node/dal_plugin.ml +++ b/src/lib_dal_node/dal_plugin.ml @@ -174,7 +174,8 @@ module type T = sig module RPC : sig val directory : - [< `KVS of Kvs_skip_list_cells_store.t | `SQLite3 of Dal_store_sqlite3.t] -> + [< `KVS of Kvs_skip_list_cells_store.t + | `SQLite3 of Dal_store_sqlite3.Skip_list_cells.t ] -> unit Tezos_rpc.Directory.t end end diff --git a/src/lib_dal_node/dal_plugin.mli b/src/lib_dal_node/dal_plugin.mli index 92e4c4702f66..fc2fdff12bee 100644 --- a/src/lib_dal_node/dal_plugin.mli +++ b/src/lib_dal_node/dal_plugin.mli @@ -164,7 +164,8 @@ module type T = sig module RPC : sig (** RPCs directory of the protocol-related part of the DAL node. *) val directory : - [< `KVS of Kvs_skip_list_cells_store.t | `SQLite3 of Dal_store_sqlite3.t] -> + [< `KVS of Kvs_skip_list_cells_store.t + | `SQLite3 of Dal_store_sqlite3.Skip_list_cells.t ] -> unit Tezos_rpc.Directory.t end end diff --git a/src/lib_dal_node/dal_store_sqlite3.ml b/src/lib_dal_node/dal_store_sqlite3.ml index 7db54b28b5be..bfbd052a9ea8 100644 --- a/src/lib_dal_node/dal_store_sqlite3.ml +++ b/src/lib_dal_node/dal_store_sqlite3.ml @@ -153,6 +153,8 @@ let with_connection store conn = fun k -> Sqlite.use store @@ fun conn -> Sqlite.with_connection conn k module Skip_list_cells = struct + type nonrec t = t + open Types module Q = struct diff --git a/src/lib_dal_node/dal_store_sqlite3.mli b/src/lib_dal_node/dal_store_sqlite3.mli index 94e2a1b62eb5..7e5987c02ae7 100644 --- a/src/lib_dal_node/dal_store_sqlite3.mli +++ b/src/lib_dal_node/dal_store_sqlite3.mli @@ -27,6 +27,9 @@ end module Skip_list_cells : sig open Dal_proto_types + (** A handler to the DAL node's skip list cells SQLite3 database. *) + type t + (** [init ~data_dir ~perm ()] returns a handler to the DAL node store located under [data_dir]. If no store is located in [data_dir], an empty store is created. diff --git a/src/lib_dal_node/store_migrations.mli b/src/lib_dal_node/store_migrations.mli index 65ac43a673a3..c497fe85f98d 100644 --- a/src/lib_dal_node/store_migrations.mli +++ b/src/lib_dal_node/store_migrations.mli @@ -10,4 +10,6 @@ [kvs_store] and inserting the corresponding payload in the [sql_store]. *) val migrate_skip_list_store : - Kvs_skip_list_cells_store.t -> Dal_store_sqlite3.t -> unit tzresult Lwt.t + Kvs_skip_list_cells_store.t -> + Dal_store_sqlite3.Skip_list_cells.t -> + unit tzresult Lwt.t diff --git a/src/proto_020_PsParisC/lib_dal/RPC_directory.mli b/src/proto_020_PsParisC/lib_dal/RPC_directory.mli index 35f51811cd61..6dab8ab83655 100644 --- a/src/proto_020_PsParisC/lib_dal/RPC_directory.mli +++ b/src/proto_020_PsParisC/lib_dal/RPC_directory.mli @@ -8,5 +8,6 @@ (** The RPCs directory of the protocol part of DAL nodes. *) val directory : - [< `KVS of Kvs_skip_list_cells_store.t | `SQLite3 of Dal_store_sqlite3.t] -> + [< `KVS of Kvs_skip_list_cells_store.t + | `SQLite3 of Dal_store_sqlite3.Skip_list_cells.t ] -> unit Environment.RPC_directory.t diff --git a/src/proto_021_PsQuebec/lib_dal/RPC_directory.mli b/src/proto_021_PsQuebec/lib_dal/RPC_directory.mli index 35f51811cd61..6dab8ab83655 100644 --- a/src/proto_021_PsQuebec/lib_dal/RPC_directory.mli +++ b/src/proto_021_PsQuebec/lib_dal/RPC_directory.mli @@ -8,5 +8,6 @@ (** The RPCs directory of the protocol part of DAL nodes. *) val directory : - [< `KVS of Kvs_skip_list_cells_store.t | `SQLite3 of Dal_store_sqlite3.t] -> + [< `KVS of Kvs_skip_list_cells_store.t + | `SQLite3 of Dal_store_sqlite3.Skip_list_cells.t ] -> unit Environment.RPC_directory.t diff --git a/src/proto_alpha/lib_dal/RPC_directory.mli b/src/proto_alpha/lib_dal/RPC_directory.mli index 35f51811cd61..6dab8ab83655 100644 --- a/src/proto_alpha/lib_dal/RPC_directory.mli +++ b/src/proto_alpha/lib_dal/RPC_directory.mli @@ -8,5 +8,6 @@ (** The RPCs directory of the protocol part of DAL nodes. *) val directory : - [< `KVS of Kvs_skip_list_cells_store.t | `SQLite3 of Dal_store_sqlite3.t] -> + [< `KVS of Kvs_skip_list_cells_store.t + | `SQLite3 of Dal_store_sqlite3.Skip_list_cells.t ] -> unit Environment.RPC_directory.t -- GitLab From 70755197b2c426097aa2f76a5b9972a2c726cb2a Mon Sep 17 00:00:00 2001 From: phink Date: Thu, 28 Nov 2024 21:41:51 +0100 Subject: [PATCH 7/7] DAL/Node: remove Dal_store.sqlite3.t type definition --- src/lib_dal_node/dal_store_sqlite3.ml | 4 +++- src/lib_dal_node/dal_store_sqlite3.mli | 6 ------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/lib_dal_node/dal_store_sqlite3.ml b/src/lib_dal_node/dal_store_sqlite3.ml index bfbd052a9ea8..f923acc78f7c 100644 --- a/src/lib_dal_node/dal_store_sqlite3.ml +++ b/src/lib_dal_node/dal_store_sqlite3.ml @@ -7,12 +7,14 @@ (*****************************************************************************) open Filename.Infix -include Sqlite +open Sqlite open Caqti_request.Infix open Caqti_type.Std let sqlite_file_name = "store.sqlite" +type conn = Sqlite.conn + module Q = struct let table_exists = (string ->! bool) diff --git a/src/lib_dal_node/dal_store_sqlite3.mli b/src/lib_dal_node/dal_store_sqlite3.mli index 7e5987c02ae7..47a7178d50ec 100644 --- a/src/lib_dal_node/dal_store_sqlite3.mli +++ b/src/lib_dal_node/dal_store_sqlite3.mli @@ -9,15 +9,9 @@ (** Name of the SQLite3 file. *) val sqlite_file_name : string -(** A handler to the DAL node's SQLite3 database. *) -type t = Sqlite.t - (** A direct connection to the database, allowing to interact with it. *) type conn = Sqlite.conn -(** [use db k] executes [k] with a fresh connection to [db]. *) -val use : t -> (conn -> 'a tzresult Lwt.t) -> 'a tzresult Lwt.t - module Schemas : sig (** [get_all conn] returns the list of SQL statements allowing to recreate the tables in the current store. *) -- GitLab