From 31c4a188a57549693d696b749ac2d54960ea5805 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20El=20Siba=C3=AFe?= Date: Wed, 5 Jul 2023 10:40:39 +0200 Subject: [PATCH 1/3] RPC process: rename config into params --- src/lib_rpc_process/main.ml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/lib_rpc_process/main.ml b/src/lib_rpc_process/main.ml index 7623911c2f8c..c1b397f06dd7 100644 --- a/src/lib_rpc_process/main.ml +++ b/src/lib_rpc_process/main.ml @@ -66,15 +66,15 @@ let sanitize_cors_headers ~default headers = |> String.Set.(union (of_list default)) |> String.Set.elements -let launch_rpc_server (config : Parameters.t) (addr, port) = +let launch_rpc_server (params : Parameters.t) (addr, port) = let open Lwt_result_syntax in - let media_types = config.rpc.media_type in - let*! acl_policy = RPC_server.Acl.resolve_domain_names config.rpc.acl in + let media_types = params.rpc.media_type in + let*! acl_policy = RPC_server.Acl.resolve_domain_names params.rpc.acl in let host = Ipaddr.V6.to_string addr in let mode = - match config.rpc.tls with + match params.rpc.tls with | None -> `TCP (`Port port) - | Some {Config_file.cert; key} -> + | Some Config_file.{cert; key} -> `TLS (`Crt_file_path cert, `Key_file_path key, `No_password, `Port port) in let acl = @@ -84,19 +84,19 @@ let launch_rpc_server (config : Parameters.t) (addr, port) = in let*! () = Rpc_process_event.(emit starting_rpc_server) - (host, port, config.rpc.tls <> None, RPC_server.Acl.policy_type acl) + (host, port, params.rpc.tls <> None, RPC_server.Acl.policy_type acl) in let cors_headers = - sanitize_cors_headers ~default:["Content-Type"] config.rpc.cors_headers + sanitize_cors_headers ~default:["Content-Type"] params.rpc.cors_headers in let cors = Resto_cohttp.Cors. { - allowed_origins = config.rpc.cors_origins; + allowed_origins = params.rpc.cors_origins; allowed_headers = cors_headers; } in - let dir = Directory.build_rpc_directory config.node_version in + let dir = Directory.build_rpc_directory params.node_version in let server = RPC_server.init_server ~cors @@ -104,7 +104,7 @@ let launch_rpc_server (config : Parameters.t) (addr, port) = ~media_types:(Media_type.Command_line.of_command_line media_types) dir in - let callback = Forward_handler.callback server config.rpc_comm_socket_path in + let callback = Forward_handler.callback server params.rpc_comm_socket_path in Lwt.catch (fun () -> let*! () = RPC_server.launch ~host server ~callback mode in @@ -175,7 +175,7 @@ let run socket_dir = () in let* () = init_rpc parameters in - (* Send the config ack as synchronization barrier for the init_rpc + (* Send the params ack as synchronization barrier for the init_rpc phase. *) let* () = Socket.send init_socket_fd Data_encoding.unit () in let*! () = Lwt_unix.close init_socket_fd in -- GitLab From 2feb6e926690667d6ac15a92dc035540fdfc1883 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20El=20Siba=C3=AFe?= Date: Wed, 5 Jul 2023 11:19:10 +0200 Subject: [PATCH 2/3] Shell_limits: remove Json_only in encoding - it was preventing to write using Config_file.encoding to binary --- src/lib_shell_services/shell_limits.ml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib_shell_services/shell_limits.ml b/src/lib_shell_services/shell_limits.ml index 83843b9bf82d..56f4601c873a 100644 --- a/src/lib_shell_services/shell_limits.ml +++ b/src/lib_shell_services/shell_limits.ml @@ -220,7 +220,7 @@ let chain_validator_limits_encoding = [ case ~title:"synchronisation_heuristic_encoding" - Json_only + (Tag 0) (synchronisation_heuristic_encoding default_chain_validator_limits.synchronisation.latency default_chain_validator_limits.synchronisation.threshold) @@ -228,7 +228,7 @@ let chain_validator_limits_encoding = (fun x -> x); case ~title:"legacy_bootstrap_threshold_encoding" - Json_only + (Tag 1) (obj1 (dft "bootstrap_threshold" -- GitLab From 5ee7a24d800d8f60831a90d2f5cf8dee6da8108f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20El=20Siba=C3=AFe?= Date: Wed, 5 Jul 2023 10:47:14 +0200 Subject: [PATCH 3/3] RPC process: handle config rpc endpoint --- src/lib_rpc_process/directory.ml | 15 ++++++++++++-- src/lib_rpc_process/directory.mli | 8 +++++--- src/lib_rpc_process/main.ml | 25 ++++++++++++++--------- src/lib_rpc_process/parameters.ml | 12 +++++------ src/lib_rpc_process/parameters.mli | 2 +- src/lib_rpc_process/rpc_process_worker.ml | 2 +- src/lib_shell/config_directory.ml | 18 +++++++++++++--- src/lib_shell/config_directory.mli | 10 +++++++++ 8 files changed, 66 insertions(+), 26 deletions(-) diff --git a/src/lib_rpc_process/directory.ml b/src/lib_rpc_process/directory.ml index 204d51d062e3..6c838511f128 100644 --- a/src/lib_rpc_process/directory.ml +++ b/src/lib_rpc_process/directory.ml @@ -5,5 +5,16 @@ (* *) (*****************************************************************************) -let build_rpc_directory node_version = - Tezos_shell.Version_directory.rpc_directory node_version +let build_rpc_directory node_version config = + let dir = Tezos_shell.Version_directory.rpc_directory node_version in + let dir = + Tezos_shell.Config_directory.build_rpc_directory_for_rpc_process + ~user_activated_upgrades: + config.Config_file.blockchain_network.user_activated_upgrades + ~user_activated_protocol_overrides: + config.blockchain_network.user_activated_protocol_overrides + ~dal_config:config.blockchain_network.dal_config + dir + in + Tezos_rpc.Directory.register0 dir Node_services.S.config (fun () () -> + Lwt.return_ok config) diff --git a/src/lib_rpc_process/directory.mli b/src/lib_rpc_process/directory.mli index 6d11b76ba429..5eb62d0f40ec 100644 --- a/src/lib_rpc_process/directory.mli +++ b/src/lib_rpc_process/directory.mli @@ -5,8 +5,10 @@ (* *) (*****************************************************************************) -(** [build_rpc_directory ~node_version] builds the Tezos RPC directory for the - rpc process. RPCs handled here are not forwarded to the node. +(** [build_rpc_directory node_version config] builds the Tezos RPC directory for + the rpc process. RPCs handled here are not forwarded to the node. *) val build_rpc_directory : - Tezos_version.Node_version.t -> unit Tezos_rpc.Directory.t + Tezos_version.Node_version.t -> + Octez_node_config.Config_file.t -> + unit Tezos_rpc.Directory.t diff --git a/src/lib_rpc_process/main.ml b/src/lib_rpc_process/main.ml index c1b397f06dd7..5d51c230fb29 100644 --- a/src/lib_rpc_process/main.ml +++ b/src/lib_rpc_process/main.ml @@ -67,14 +67,17 @@ let sanitize_cors_headers ~default headers = |> String.Set.elements let launch_rpc_server (params : Parameters.t) (addr, port) = + let open Config_file in let open Lwt_result_syntax in - let media_types = params.rpc.media_type in - let*! acl_policy = RPC_server.Acl.resolve_domain_names params.rpc.acl in + let media_types = params.config.rpc.media_type in + let*! acl_policy = + RPC_server.Acl.resolve_domain_names params.config.rpc.acl + in let host = Ipaddr.V6.to_string addr in let mode = - match params.rpc.tls with + match params.config.rpc.tls with | None -> `TCP (`Port port) - | Some Config_file.{cert; key} -> + | Some {cert; key} -> `TLS (`Crt_file_path cert, `Key_file_path key, `No_password, `Port port) in let acl = @@ -84,19 +87,21 @@ let launch_rpc_server (params : Parameters.t) (addr, port) = in let*! () = Rpc_process_event.(emit starting_rpc_server) - (host, port, params.rpc.tls <> None, RPC_server.Acl.policy_type acl) + (host, port, params.config.rpc.tls <> None, RPC_server.Acl.policy_type acl) in let cors_headers = - sanitize_cors_headers ~default:["Content-Type"] params.rpc.cors_headers + sanitize_cors_headers + ~default:["Content-Type"] + params.config.rpc.cors_headers in let cors = Resto_cohttp.Cors. { - allowed_origins = params.rpc.cors_origins; + allowed_origins = params.config.rpc.cors_origins; allowed_headers = cors_headers; } in - let dir = Directory.build_rpc_directory params.node_version in + let dir = Directory.build_rpc_directory params.node_version params.config in let server = RPC_server.init_server ~cors @@ -121,7 +126,7 @@ let init_rpc parameters = let open Lwt_result_syntax in let* server = let* p2p_point = - match parameters.Parameters.rpc.Config_file.listen_addrs with + match parameters.Parameters.config.Config_file.rpc.listen_addrs with | [addr] -> Config_file.resolve_rpc_listening_addrs addr | _ -> (* We assume that the config contains only one listening @@ -171,7 +176,7 @@ let run socket_dir = let* parameters = Socket.recv init_socket_fd Parameters.parameters_encoding in let*! () = Tezos_base_unix.Internal_event_unix.init - ~config:parameters.internal_events + ~config:parameters.Parameters.internal_events () in let* () = init_rpc parameters in diff --git a/src/lib_rpc_process/parameters.ml b/src/lib_rpc_process/parameters.ml index fe24e9eaf28f..e4d66a582fa0 100644 --- a/src/lib_rpc_process/parameters.ml +++ b/src/lib_rpc_process/parameters.ml @@ -24,7 +24,7 @@ (*****************************************************************************) type t = { - rpc : Config_file.rpc; + config : Config_file.t; rpc_comm_socket_path : string; internal_events : Tezos_base.Internal_event_config.t; node_version : Tezos_version.Node_version.t; @@ -33,12 +33,12 @@ type t = { let parameters_encoding = let open Data_encoding in conv - (fun {rpc; rpc_comm_socket_path; internal_events; node_version} -> - (rpc, rpc_comm_socket_path, internal_events, node_version)) - (fun (rpc, rpc_comm_socket_path, internal_events, node_version) -> - {rpc; rpc_comm_socket_path; internal_events; node_version}) + (fun {config; rpc_comm_socket_path; internal_events; node_version} -> + (config, rpc_comm_socket_path, internal_events, node_version)) + (fun (config, rpc_comm_socket_path, internal_events, node_version) -> + {config; rpc_comm_socket_path; internal_events; node_version}) (obj4 - (req "rpc" Config_file.rpc_encoding) + (req "config" Config_file.encoding) (req "rpc_comm_socket_path" Data_encoding.string) (req "internal_events" Tezos_base.Internal_event_config.encoding) (req "node_version" Tezos_version.Node_version.encoding)) diff --git a/src/lib_rpc_process/parameters.mli b/src/lib_rpc_process/parameters.mli index 4c57506544c3..06f27b34e056 100644 --- a/src/lib_rpc_process/parameters.mli +++ b/src/lib_rpc_process/parameters.mli @@ -25,7 +25,7 @@ (** Type for the rpc process parameters received from the node *) type t = { - rpc : Config_file.rpc; + config : Config_file.t; rpc_comm_socket_path : string; internal_events : Tezos_base.Internal_event_config.t; node_version : Tezos_version.Node_version.t; diff --git a/src/lib_rpc_process/rpc_process_worker.ml b/src/lib_rpc_process/rpc_process_worker.ml index 83088174100f..89389e604936 100644 --- a/src/lib_rpc_process/rpc_process_worker.ml +++ b/src/lib_rpc_process/rpc_process_worker.ml @@ -127,7 +127,7 @@ let create ~comm_socket_path (config : Config_file.t) node_version events_config external_process_parameters = { internal_events = events_config; - rpc = config.rpc; + config; rpc_comm_socket_path = comm_socket_path; node_version; }; diff --git a/src/lib_shell/config_directory.ml b/src/lib_shell/config_directory.ml index 8111aa5ea903..99529af5c505 100644 --- a/src/lib_shell/config_directory.ml +++ b/src/lib_shell/config_directory.ml @@ -23,13 +23,13 @@ (* *) (*****************************************************************************) -let build_rpc_directory ~user_activated_upgrades - ~user_activated_protocol_overrides ~dal_config ~mainchain_validator store = +let build_rpc_directory_for_rpc_process ~user_activated_upgrades + ~user_activated_protocol_overrides ~dal_config dir = let open Lwt_result_syntax in let register endpoint f directory = Tezos_rpc.Directory.register directory endpoint f in - Tezos_rpc.Directory.empty + dir |> register Config_services.Network.user_activated_upgrades (fun () () () -> return user_activated_upgrades) |> register @@ -37,6 +37,18 @@ let build_rpc_directory ~user_activated_upgrades (fun () () () -> return user_activated_protocol_overrides) |> register Config_services.Network.dal_config (fun () () () -> return dal_config) + +let build_rpc_directory ~user_activated_upgrades + ~user_activated_protocol_overrides ~dal_config ~mainchain_validator store = + let open Lwt_result_syntax in + let register endpoint f directory = + Tezos_rpc.Directory.register directory endpoint f + in + build_rpc_directory_for_rpc_process + ~user_activated_upgrades + ~user_activated_protocol_overrides + ~dal_config + Tezos_rpc.Directory.empty |> register Config_services.history_mode (fun () () () -> let chain_store = Store.main_chain_store store in return (Store.Chain.history_mode chain_store)) diff --git a/src/lib_shell/config_directory.mli b/src/lib_shell/config_directory.mli index ec9a14966812..e234041dc17c 100644 --- a/src/lib_shell/config_directory.mli +++ b/src/lib_shell/config_directory.mli @@ -23,6 +23,16 @@ (* *) (*****************************************************************************) +(** [build_rpc_directory_for_rpc_process] builds a directory containing + read-only and store-independant related config for the rpc process *) +val build_rpc_directory_for_rpc_process : + user_activated_upgrades:User_activated.upgrades -> + user_activated_protocol_overrides:User_activated.protocol_overrides -> + dal_config:Dal_config.t -> + unit Tezos_rpc.Directory.t -> + unit Tezos_rpc.Directory.t + +(** [build_rpc_directory] builds the complete config directory *) val build_rpc_directory : user_activated_upgrades:User_activated.upgrades -> user_activated_protocol_overrides:User_activated.protocol_overrides -> -- GitLab