From 93fb047ab1b9e8a5d167264033480e3a345c34b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Fri, 13 May 2022 15:14:56 +0200 Subject: [PATCH] Shell: Remove testchain support --- src/lib_shell/block_validator.ml | 14 +- src/lib_shell/block_validator.mli | 11 +- src/lib_shell/chain_validator.ml | 192 ++------------------------- src/lib_shell/chain_validator.mli | 1 - src/lib_shell/node.ml | 13 +- src/lib_shell/test/test_validator.ml | 1 - src/lib_shell/validator.ml | 12 +- src/lib_shell/validator.mli | 1 - 8 files changed, 22 insertions(+), 223 deletions(-) diff --git a/src/lib_shell/block_validator.ml b/src/lib_shell/block_validator.ml index 0f4ce272137b..a75e43ead5f7 100644 --- a/src/lib_shell/block_validator.ml +++ b/src/lib_shell/block_validator.ml @@ -64,11 +64,10 @@ module Types = struct protocol_validator : Protocol_validator.t; validation_process : Block_validator_process.t; limits : limits; - start_testchain : bool; invalid_blocks_after_precheck : error trace Block_hash_ring.t; } - type parameters = limits * bool * Distributed_db.t * Block_validator_process.t + type parameters = limits * Distributed_db.t * Block_validator_process.t end module Request = struct @@ -331,7 +330,7 @@ let on_request : type r. t -> r Request.t -> r tzresult Lwt.t = let metrics = Shell_metrics.Block_validator.init Name.base -let on_launch _ _ (limits, start_testchain, db, validation_process) = +let on_launch _ _ (limits, db, validation_process) = let protocol_validator = Protocol_validator.create db in let invalid_blocks_after_precheck = Block_hash_ring.create 50 in Lwt.return_ok @@ -339,7 +338,6 @@ let on_launch _ _ (limits, start_testchain, db, validation_process) = Types.protocol_validator; validation_process; limits; - start_testchain; invalid_blocks_after_precheck; } @@ -425,7 +423,7 @@ let on_close w = let table = Worker.create_table Queue -let create limits db validation_process ~start_testchain = +let create limits db validation_process = let module Handlers = struct type self = t @@ -441,11 +439,7 @@ let create limits db validation_process ~start_testchain = let on_no_request _ = Lwt_result_syntax.return_unit end in - Worker.launch - table - () - (limits, start_testchain, db, validation_process) - (module Handlers) + Worker.launch table () (limits, db, validation_process) (module Handlers) let shutdown = Worker.shutdown diff --git a/src/lib_shell/block_validator.mli b/src/lib_shell/block_validator.mli index 589b1d7166c9..5c0b7ed5d7a3 100644 --- a/src/lib_shell/block_validator.mli +++ b/src/lib_shell/block_validator.mli @@ -33,7 +33,7 @@ type limits = { operation_metadata_size_limit : int option; } -(** [create limits ddb bvp start_testchain] creates a +(** [create limits ddb bvp] creates a [Block_validator]. - [limits] contains various [timeout] limits. @@ -45,17 +45,10 @@ type limits = { a proxy between the shell and the validation part related to the economic protocol (See [Block_validator_process]). - - [start_testchain] if set to true allows to run the [testchain]. - - This function is not supposed to fail. It is implemented this way because of the interface implemented by the [Worker] module. *) val create : - limits -> - Distributed_db.t -> - Block_validator_process.t -> - start_testchain:bool -> - t tzresult Lwt.t + limits -> Distributed_db.t -> Block_validator_process.t -> t tzresult Lwt.t type block_validity = | Valid diff --git a/src/lib_shell/chain_validator.ml b/src/lib_shell/chain_validator.ml index 370e8022eb14..145a71bf65ca 100644 --- a/src/lib_shell/chain_validator.ml +++ b/src/lib_shell/chain_validator.ml @@ -119,24 +119,6 @@ let table = Worker.create_table Queue let shutdown w = Worker.shutdown w -let shutdown_child nv active_chains = - let open Lwt_syntax in - Option.iter_s - (fun ({parameters = {chain_store; global_chains_input; _}; _}, shutdown) -> - let test_chain_id = Store.Chain.chain_id chain_store in - Lwt_watcher.notify global_chains_input (test_chain_id, false) ; - Chain_id.Table.remove active_chains test_chain_id ; - let* r = Store.Chain.shutdown_testchain nv.parameters.chain_store in - match r with - | Error _err -> - (* FIXME *) - Lwt.return_unit - | Ok () -> - let* () = shutdown () in - nv.child <- None ; - Lwt.return_unit) - nv.child - (* Update the synchronisation state and if it is relevant, set the bootstrapped flag to true. Assume: @@ -214,125 +196,6 @@ let may_update_protocol_level chain_store ~block = (block, new_protocol) else return_unit -let may_switch_test_chain w active_chains spawn_child block = - let open Lwt_result_syntax in - let nv = Worker.state w in - let may_create_child block test_protocol expiration forking_block_hash = - let block_header = Store.Block.header block in - let genesis_hash = Context.compute_testchain_genesis forking_block_hash in - let testchain_id = Context.compute_testchain_chain_id genesis_hash in - let*! activated = - match nv.child with - | None -> Lwt.return_false - | Some (child, _) -> - let child_chain_store = child.parameters.chain_store in - let child_genesis = Store.Chain.genesis child_chain_store in - Lwt.return (Block_hash.equal child_genesis.block genesis_hash) - in - let expired = expiration < block_header.shell.timestamp in - if expired && activated then - let*! () = shutdown_child nv active_chains in - return_unit - else - let chain_store = nv.parameters.chain_store in - let allow_forked_chains = - Store.allow_testchains (Store.Chain.global_store chain_store) - in - if (not allow_forked_chains) || activated || expired then return_unit - else - let* testchain_store = - let*! o = - Store.get_chain_store_opt - (Store.Chain.global_store nv.parameters.chain_store) - testchain_id - in - match o with - | Some test_chain_store -> return test_chain_store - | None -> - let try_init_test_chain cont = - let* forking_block = - Store.Block.read_block chain_store forking_block_hash - in - let bvp = nv.parameters.block_validator_process in - let*! r = - Block_validator_process.init_test_chain bvp forking_block - in - match r with - | Ok genesis_header -> - let* testchain = - Store.Chain.fork_testchain - chain_store - ~testchain_id - ~forked_block:forking_block - ~genesis_hash - ~genesis_header - ~expiration - ~test_protocol - in - let testchain_store = - Store.Chain.testchain_store testchain - in - let*! new_genesis_block = - Store.Chain.current_head testchain_store - in - Lwt_watcher.notify - nv.parameters.global_valid_block_input - new_genesis_block ; - Lwt_watcher.notify nv.valid_block_input new_genesis_block ; - return testchain_store - | Error - (Block_validator_errors.Missing_test_protocol - missing_protocol - :: _) -> - let* _ = - Block_validator.fetch_and_compile_protocol - nv.parameters.block_validator - missing_protocol - in - cont () - | Error _ as error -> Lwt.return error - in - try_init_test_chain @@ fun () -> - try_init_test_chain @@ fun () -> - failwith "Could not retrieve test protocol" - in - (* [spawn_child] is a callback to [create_node]. Thus, it takes care of - global initialization boilerplate (e.g. notifying [global_chains_input], - adding the chain to the correct tables, ...) *) - let* child = - spawn_child - ~parent:(Store.Chain.chain_id chain_store) - nv.parameters.start_prevalidator - nv.parameters.peer_validator_limits - nv.parameters.prevalidator_limits - nv.parameters.block_validator - nv.parameters.global_valid_block_input - nv.parameters.global_chains_input - nv.parameters.db - testchain_store - nv.parameters.limits - (* TODO: different limits main/test ? *) - in - nv.child <- Some child ; - return_unit - in - let*! r = - let* v = Store.Block.testchain_status nv.parameters.chain_store block in - match v with - | (Not_running, _) -> - let*! () = shutdown_child nv active_chains in - return_unit - | ((Forking _ | Running _), None) -> return_unit (* only for snapshots *) - | ( (Forking {protocol; expiration; _} | Running {protocol; expiration; _}), - Some forking_block_hash ) -> - may_create_child block protocol expiration forking_block_hash - in - match r with - | Ok () -> Lwt.return_unit - | Error err -> - Worker.record_event w (Could_not_switch_testchain err) ; - Lwt.return_unit - let broadcast_head w ~previous block = let open Lwt_syntax in let nv = Worker.state w in @@ -424,8 +287,7 @@ let may_flush_or_update_prevalidator parameters event prevalidator chain_db live_blocks live_operations -let on_validation_request w peer start_testchain active_chains spawn_child block - = +let on_validation_request w peer block = let open Lwt_result_syntax in let*! () = Option.iter_s @@ -452,11 +314,6 @@ let on_validation_request w peer start_testchain active_chains spawn_child block | Some previous -> let*! () = broadcast_head w ~previous block in let* () = may_update_protocol_level chain_store ~block in - let*! () = - if start_testchain then - may_switch_test_chain w active_chains spawn_child block - else Lwt.return_unit - in Lwt_watcher.notify nv.new_head_input block ; let is_branch_switch = Block_hash.equal head_hash block_header.shell.predecessor @@ -517,17 +374,9 @@ let on_disconnection w peer_id = let*! () = Peer_validator.shutdown pv in return_unit -let on_request (type a) w start_testchain active_chains spawn_child - (req : a Request.t) : a tzresult Lwt.t = +let on_request (type a) w (req : a Request.t) : a tzresult Lwt.t = match req with - | Request.Validated {peer; block} -> - on_validation_request - w - peer - start_testchain - active_chains - spawn_child - block + | Request.Validated {peer; block} -> on_validation_request w peer block | Request.Notify_branch (peer_id, locator) -> on_notify_branch w peer_id locator | Request.Notify_head (peer_id, hash, header, mempool) -> @@ -723,38 +572,17 @@ let on_launch w _ parameters = let metrics = Shell_metrics.Chain_validator.init Name.base -let rec create ~start_testchain ~active_chains ?parent ~block_validator_process - start_prevalidator (peer_validator_limits : Peer_validator.limits) +let create ~active_chains ?parent ~block_validator_process start_prevalidator + (peer_validator_limits : Peer_validator.limits) (prevalidator_limits : Prevalidator.limits) block_validator global_valid_block_input global_chains_input db chain_store limits = let open Lwt_result_syntax in - let spawn_child ~parent enable_prevalidator peer_validator_limits - prevalidator_limits block_validator global_valid_block_input - global_chains_input ddb chain_store limits = - let* w = - create - ~start_testchain - ~active_chains - ~parent - ~block_validator_process - enable_prevalidator - peer_validator_limits - prevalidator_limits - block_validator - global_valid_block_input - global_chains_input - ddb - chain_store - limits - in - return (Worker.state w, fun () -> Worker.shutdown w) - in let module Handlers = struct type self = t let on_launch = on_launch - let on_request w = on_request w start_testchain active_chains spawn_child + let on_request w = on_request w let on_close = on_close @@ -815,13 +643,11 @@ let rec create ~start_testchain ~active_chains ?parent ~block_validator_process (** Current block computation *) -let create ~start_prevalidator ~start_testchain ~active_chains - ~block_validator_process peer_validator_limits prevalidator_limits - block_validator global_valid_block_input global_chains_input global_db state - limits = +let create ~start_prevalidator ~active_chains ~block_validator_process + peer_validator_limits prevalidator_limits block_validator + global_valid_block_input global_chains_input global_db state limits = (* hide the optional ?parent *) create - ~start_testchain ~active_chains ~block_validator_process start_prevalidator diff --git a/src/lib_shell/chain_validator.mli b/src/lib_shell/chain_validator.mli index 558562c50207..1e6aa573d04b 100644 --- a/src/lib_shell/chain_validator.mli +++ b/src/lib_shell/chain_validator.mli @@ -44,7 +44,6 @@ type limits = {synchronisation : synchronisation_limits} val create : start_prevalidator:bool -> - start_testchain:bool -> active_chains:t Chain_id.Table.t -> block_validator_process:Block_validator_process.t -> Peer_validator.limits -> diff --git a/src/lib_shell/node.ml b/src/lib_shell/node.ml index ecd280db49b9..bbe12d361b50 100644 --- a/src/lib_shell/node.ml +++ b/src/lib_shell/node.ml @@ -231,14 +231,12 @@ let create ?(sandboxed = false) ?sandbox_parameters ~singleprocess p2p = p2p_params; target; disable_mempool; - enable_testchain; + enable_testchain = _; } peer_validator_limits block_validator_limits prevalidator_limits chain_validator_limits history_mode = let open Lwt_result_syntax in - let (start_prevalidator, start_testchain) = - match p2p_params with - | Some _ -> (not disable_mempool, enable_testchain) - | None -> (true, true) + let start_prevalidator = + match p2p_params with Some _ -> not disable_mempool | None -> true in let* p2p = init_p2p @@ -263,7 +261,7 @@ let create ?(sandboxed = false) ?sandbox_parameters ~singleprocess ?history_mode ~store_dir:store_root ~context_dir:context_root - ~allow_testchains:start_testchain + ~allow_testchains:false genesis in let main_chain_store = Store.main_chain_store store in @@ -295,7 +293,7 @@ let create ?(sandboxed = false) ?sandbox_parameters ~singleprocess ~commit_genesis ~store_dir:store_root ~context_dir:context_root - ~allow_testchains:start_testchain + ~allow_testchains:false genesis in return (validator_process, store) @@ -318,7 +316,6 @@ let create ?(sandboxed = false) ?sandbox_parameters ~singleprocess validator_process prevalidator_limits chain_validator_limits - ~start_testchain in let* mainchain_validator = Validator.activate diff --git a/src/lib_shell/test/test_validator.ml b/src/lib_shell/test/test_validator.ml index d264da378273..73f5ba962756 100644 --- a/src/lib_shell/test/test_validator.ml +++ b/src/lib_shell/test/test_validator.ml @@ -71,7 +71,6 @@ let init_validator block_validator Node.default_prevalidator_limits Node.default_chain_validator_limits - ~start_testchain:false in Lwt.return_ok (block_validator, validator, Store.main_chain_store store) in diff --git a/src/lib_shell/validator.ml b/src/lib_shell/validator.ml index 84978c94ab03..ed36e4a55a44 100644 --- a/src/lib_shell/validator.ml +++ b/src/lib_shell/validator.ml @@ -32,22 +32,16 @@ type t = { peer_validator_limits : Peer_validator.limits; block_validator_limits : Block_validator.limits; prevalidator_limits : Prevalidator.limits; - start_testchain : bool; valid_block_input : Store.Block.t Lwt_watcher.input; chains_input : (Chain_id.t * bool) Lwt_watcher.input; active_chains : Chain_validator.t Chain_id.Table.t; } let create state db peer_validator_limits block_validator_limits - block_validator_kind prevalidator_limits chain_validator_limits - ~start_testchain = + block_validator_kind prevalidator_limits chain_validator_limits = let open Lwt_result_syntax in let* block_validator = - Block_validator.create - block_validator_limits - db - block_validator_kind - ~start_testchain + Block_validator.create block_validator_limits db block_validator_kind in let valid_block_input = Lwt_watcher.create_input () in let chains_input = Lwt_watcher.create_input () in @@ -55,7 +49,6 @@ let create state db peer_validator_limits block_validator_limits { state; db; - start_testchain; block_validator; block_validator_limits; prevalidator_limits; @@ -75,7 +68,6 @@ let activate v ~start_prevalidator ~validator_process chain_store = | None -> Chain_validator.create ~start_prevalidator - ~start_testchain:v.start_testchain ~active_chains:v.active_chains ~block_validator_process:validator_process v.peer_validator_limits diff --git a/src/lib_shell/validator.mli b/src/lib_shell/validator.mli index 0823298aa307..0828762b7210 100644 --- a/src/lib_shell/validator.mli +++ b/src/lib_shell/validator.mli @@ -36,7 +36,6 @@ val create : Block_validator_process.t -> Prevalidator.limits -> Chain_validator.limits -> - start_testchain:bool -> t tzresult Lwt.t val shutdown : t -> unit Lwt.t -- GitLab