diff --git a/docs/doc_gen/node_helpers.ml b/docs/doc_gen/node_helpers.ml index 136e3a2152a93a3adaa7fc168a0ce2bc0f9aa55f..c51ee26a54bc720f9d394401bc2cc461e5902ade 100644 --- a/docs/doc_gen/node_helpers.ml +++ b/docs/doc_gen/node_helpers.ml @@ -46,7 +46,7 @@ let with_node f = Distributed_db_version.Name.of_string "SANDBOXED_TEZOS_DOCGEN"; user_activated_upgrades = []; user_activated_protocol_overrides = []; - operation_metadata_size_limit = None; + operation_metadata_size_limit = Unlimited; patch_context = None; data_dir = dir; store_root = dir / "store"; diff --git a/src/lib_node_config/node_config_file.mli b/src/lib_node_config/node_config_file.mli index 85a61ddbf6fe194d1b5ca532526e211856204496..b998828ad0ca2be4deb85e5fd68492386d60f955 100644 --- a/src/lib_node_config/node_config_file.mli +++ b/src/lib_node_config/node_config_file.mli @@ -130,7 +130,7 @@ val update : ?allow_all_rpc:P2p_point.Id.addr_port_id list -> ?media_type:Media_type.Command_line.t -> ?metrics_addr:string list -> - ?operation_metadata_size_limit:int option -> + ?operation_metadata_size_limit:Shell_limits.operation_metadata_size_limit -> ?private_mode:bool -> ?disable_mempool:bool -> ?disable_mempool_precheck:bool -> diff --git a/src/lib_node_config/node_shared_arg.ml b/src/lib_node_config/node_shared_arg.ml index b89711dd163d51fc0470f4c54453132450a67b66..508903606889462352017909fda1fc765822d1b1 100644 --- a/src/lib_node_config/node_shared_arg.ml +++ b/src/lib_node_config/node_shared_arg.ml @@ -64,7 +64,8 @@ type t = { allow_all_rpc : P2p_point.Id.addr_port_id list; media_type : Media_type.Command_line.t; metrics_addr : string list; - operation_metadata_size_limit : int option option; + operation_metadata_size_limit : + Shell_limits.operation_metadata_size_limit option; } type error += @@ -399,15 +400,16 @@ module Term = struct let operation_metadata_size_limit = let converter = let parse s = - if String.(equal (lowercase_ascii s) "unlimited") then `Ok None + if String.(equal (lowercase_ascii s) "unlimited") then + `Ok Shell_limits.Unlimited else match int_of_string_opt s with | None -> `Error s - | Some i -> `Ok (Some i) + | Some i -> `Ok (Limited i) in let pp fmt = function - | None -> Format.fprintf fmt "unlimited" - | Some i -> Format.pp_print_int fmt i + | Shell_limits.Unlimited -> Format.fprintf fmt "unlimited" + | Limited i -> Format.pp_print_int fmt i in ((fun arg -> parse arg), pp) in @@ -417,8 +419,8 @@ module Term = struct Shell_limits.default_limits.block_validator_limits .operation_metadata_size_limit with - | None -> "$(i,unlimited)" - | Some i -> Format.sprintf "$(i,%d) bytes" i + | Shell_limits.Unlimited -> "$(i,unlimited)" + | Limited i -> Format.sprintf "$(i,%d) bytes" i in Format.sprintf "Size limit (in bytes) for operation's metadata to be stored on disk. \ diff --git a/src/lib_node_config/node_shared_arg.mli b/src/lib_node_config/node_shared_arg.mli index 99ea3ef61397f96cbc8c1c98fcb9aef5bb26fe6e..b29c05e4b19b1900ee8580aae74ecd0cac60d4af 100644 --- a/src/lib_node_config/node_shared_arg.mli +++ b/src/lib_node_config/node_shared_arg.mli @@ -75,7 +75,8 @@ type t = { access should be granted *) media_type : Media_type.Command_line.t; metrics_addr : string list; - operation_metadata_size_limit : int option option; + operation_metadata_size_limit : + Shell_limits.operation_metadata_size_limit option; (** maximum operation metadata size allowed to be stored on disk *) } diff --git a/src/lib_shell/block_validator_process.ml b/src/lib_shell/block_validator_process.ml index 190384bb613cce1434fe51e8b57d5228db0c56b8..130112b79aa7e367b007bc259e58be056d98ede3 100644 --- a/src/lib_shell/block_validator_process.ml +++ b/src/lib_shell/block_validator_process.ml @@ -28,7 +28,7 @@ type validator_environment = { user_activated_upgrades : User_activated.upgrades; user_activated_protocol_overrides : User_activated.protocol_overrides; - operation_metadata_size_limit : int option; + operation_metadata_size_limit : Shell_limits.operation_metadata_size_limit; } type validator_kind = @@ -149,7 +149,7 @@ module Internal_validator_process = struct chain_store : Store.chain_store; user_activated_upgrades : User_activated.upgrades; user_activated_protocol_overrides : User_activated.protocol_overrides; - operation_metadata_size_limit : int option; + operation_metadata_size_limit : Shell_limits.operation_metadata_size_limit; (* The cache must be updated by the component that owns the context, i.e., the component that has the writing permissions @@ -521,7 +521,7 @@ module External_validator_process = struct protocol_root : string; user_activated_upgrades : User_activated.upgrades; user_activated_protocol_overrides : User_activated.protocol_overrides; - operation_metadata_size_limit : int option; + operation_metadata_size_limit : Shell_limits.operation_metadata_size_limit; process_path : string; mutable validator_process : process_status; lock : Lwt_mutex.t; diff --git a/src/lib_shell/block_validator_process.mli b/src/lib_shell/block_validator_process.mli index be584d8e2631955d218e5db8512a391a9a28fb45..d2316afe52e2d69e5aa38338531a4ff3167f3025 100644 --- a/src/lib_shell/block_validator_process.mli +++ b/src/lib_shell/block_validator_process.mli @@ -35,7 +35,7 @@ type validator_environment = { (** user activated upgrades *) user_activated_protocol_overrides : User_activated.protocol_overrides; (** user activated protocol overrides *) - operation_metadata_size_limit : int option; + operation_metadata_size_limit : Shell_limits.operation_metadata_size_limit; (** size limit for operation metadata that should be written on disk *) } diff --git a/src/lib_shell/node.ml b/src/lib_shell/node.ml index 464e5ff37ff3374aaeb95bbf81896a68e255b141..96601f6134ed606a24a1424b87f13a1278b2d537 100644 --- a/src/lib_shell/node.ml +++ b/src/lib_shell/node.ml @@ -68,7 +68,7 @@ type t = { p2p : Distributed_db.p2p; user_activated_upgrades : User_activated.upgrades; user_activated_protocol_overrides : User_activated.protocol_overrides; - operation_metadata_size_limit : int option; + operation_metadata_size_limit : Shell_limits.operation_metadata_size_limit; (* For P2P RPCs *) shutdown : unit -> unit Lwt.t; } @@ -122,7 +122,7 @@ type config = { sandboxed_chain_name : Distributed_db_version.Name.t; user_activated_upgrades : User_activated.upgrades; user_activated_protocol_overrides : User_activated.protocol_overrides; - operation_metadata_size_limit : int option; + operation_metadata_size_limit : Shell_limits.operation_metadata_size_limit; data_dir : string; store_root : string; context_root : string; diff --git a/src/lib_shell/node.mli b/src/lib_shell/node.mli index 22f48d7b1142b6ea95be3e8c661dbf3f8e7c804b..dce5627d2c6eab117909d955fda62fdbf4235d93 100644 --- a/src/lib_shell/node.mli +++ b/src/lib_shell/node.mli @@ -32,7 +32,7 @@ type config = { sandboxed_chain_name : Distributed_db_version.Name.t; user_activated_upgrades : User_activated.upgrades; user_activated_protocol_overrides : User_activated.protocol_overrides; - operation_metadata_size_limit : int option; + operation_metadata_size_limit : Shell_limits.operation_metadata_size_limit; data_dir : string; store_root : string; context_root : string; diff --git a/src/lib_shell/test/test_node.ml b/src/lib_shell/test/test_node.ml index 5c5d32025073d0a922f8f8fe0884a4e6a29af791..80eece8e3f46d1e610360b18c03378b4433955a9 100644 --- a/src/lib_shell/test/test_node.ml +++ b/src/lib_shell/test/test_node.ml @@ -48,7 +48,7 @@ let init_config (* (f : 'a -> unit -> unit Lwt.t) *) f test_dir switch () : sandboxed_chain_name = Distributed_db_version.Name.zero; user_activated_upgrades = []; user_activated_protocol_overrides = []; - operation_metadata_size_limit = None; + operation_metadata_size_limit = Unlimited; data_dir = test_dir; store_root = test_dir // "store"; context_root = test_dir // "context"; diff --git a/src/lib_shell/test/test_peer_validator.ml b/src/lib_shell/test/test_peer_validator.ml index 1d96dc874dbd506f4e2460c00fe433eb5a63d7ca..c308bedaa1fd5e7055ffe75672af620c14f5e171 100644 --- a/src/lib_shell/test/test_peer_validator.ml +++ b/src/lib_shell/test/test_peer_validator.ml @@ -73,7 +73,7 @@ let wrap { Block_validator_process.user_activated_upgrades = []; user_activated_protocol_overrides = []; - operation_metadata_size_limit = None; + operation_metadata_size_limit = Unlimited; } in let* block_validator_processs = diff --git a/src/lib_shell/test/test_validator.ml b/src/lib_shell/test/test_validator.ml index 291fdc1f6ec0f3170d4572f6b7fd42c8dc2c6fc8..8698a9b6a589fda84ee6ee05278023b9abe6885e 100644 --- a/src/lib_shell/test/test_validator.ml +++ b/src/lib_shell/test/test_validator.ml @@ -54,7 +54,7 @@ let init_validator { Block_validator_process.user_activated_upgrades = []; user_activated_protocol_overrides = []; - operation_metadata_size_limit = None; + operation_metadata_size_limit = Unlimited; } in let* block_validator = diff --git a/src/lib_shell_services/shell_limits.ml b/src/lib_shell_services/shell_limits.ml index 04c561aa96fe5f86b871847df4a5ebadf4c2f49a..127063ab2bfedc3845c664e488ee0cf97716b0b9 100644 --- a/src/lib_shell_services/shell_limits.ml +++ b/src/lib_shell_services/shell_limits.ml @@ -25,14 +25,43 @@ let timeout_encoding = Time.System.Span.encoding +type operation_metadata_size_limit = Unlimited | Limited of int + +let operation_metadata_size_limit_encoding = + let open Data_encoding in + def + "operation_metadata_size_limit" + ~title:"operation_metadata_size_limit" + ~description:"The operation metadata size limit" + (union + ~tag_size:`Uint8 + [ + case + ~title:"unlimited" + ~description:"The metadata size is unlimited." + (Tag 0) + (constant "unlimited") + (function Unlimited -> Some () | _ -> None) + (fun () -> Unlimited); + case + ~title:"limited" + ~description: + "The metadata size is limited to the given integer's value (in \ + bytes)." + (Tag 1) + int31 + (function Limited i -> Some i | _ -> None) + (fun i -> Limited i); + ]) + type block_validator_limits = { protocol_timeout : Time.System.Span.t; - operation_metadata_size_limit : int option; + operation_metadata_size_limit : operation_metadata_size_limit; } (* [default_operation_metadata_size_limit] is used to filter and potentially discard a given metadata if its size exceed the cap. *) -let default_operation_metadata_size_limit = Some 10_000_000 +let default_operation_metadata_size_limit = Limited 10_000_000 let default_block_validator_limits = { @@ -54,21 +83,7 @@ let block_validator_limits_encoding = default_block_validator_limits.protocol_timeout) (dft "operation_metadata_size_limit" - (union - [ - case - ~title:"unlimited" - (Tag 0) - (constant "unlimited") - (function None -> Some () | _ -> None) - (fun () -> None); - case - ~title:"limited" - (Tag 1) - int31 - (function Some i -> Some i | None -> None) - (fun i -> Some i); - ]) + operation_metadata_size_limit_encoding default_block_validator_limits.operation_metadata_size_limit)) type prevalidator_limits = { diff --git a/src/lib_shell_services/shell_limits.mli b/src/lib_shell_services/shell_limits.mli index 69e89a23d7468534974c8353e3f42684460909e5..8b8e600218b28947a950dd0bc88d60f826d160d9 100644 --- a/src/lib_shell_services/shell_limits.mli +++ b/src/lib_shell_services/shell_limits.mli @@ -26,16 +26,23 @@ (** The configurable constants used by shell components as maximum, with their encodings and default values. *) +(** States whether or not the operation metadata size must be caped + and potentially discard if the given size limit is exceeded. *) +type operation_metadata_size_limit = Unlimited | Limited of int + +val operation_metadata_size_limit_encoding : + operation_metadata_size_limit Data_encoding.t + type block_validator_limits = { protocol_timeout : Time.System.Span.t; - operation_metadata_size_limit : int option; + operation_metadata_size_limit : operation_metadata_size_limit; } val default_block_validator_limits : block_validator_limits val block_validator_limits_encoding : block_validator_limits Data_encoding.t -(** This record contains the differents limits and settings that can be updated +(** This record contains the different limits and settings that can be updated from a node configuration for a prevalidator *) type prevalidator_limits = { max_refused_operations : int; diff --git a/src/lib_store/unix/reconstruction.mli b/src/lib_store/unix/reconstruction.mli index b393d3f4bcb15f496982fbfa4f239aaa6545e87b..05a3b296ca49d53aadbe946c0d675683b21c42c9 100644 --- a/src/lib_store/unix/reconstruction.mli +++ b/src/lib_store/unix/reconstruction.mli @@ -74,6 +74,6 @@ val reconstruct : Genesis.t -> user_activated_upgrades:User_activated.upgrades -> user_activated_protocol_overrides:User_activated.protocol_overrides -> - operation_metadata_size_limit:int option -> + operation_metadata_size_limit:Shell_limits.operation_metadata_size_limit -> progress_display_mode:Animation.progress_display_mode -> unit tzresult Lwt.t diff --git a/src/lib_store/unix/snapshots.ml b/src/lib_store/unix/snapshots.ml index 31f09c2223b5c1ed1ba19c28d0f4046c447977d1..a5c6cb9a65d51622f458c72dd152662ffeede610 100644 --- a/src/lib_store/unix/snapshots.ml +++ b/src/lib_store/unix/snapshots.ml @@ -3333,7 +3333,7 @@ module type Snapshot_importer = sig configured_history_mode:History_mode.t option -> user_activated_upgrades:User_activated.upgrades -> user_activated_protocol_overrides:User_activated.protocol_overrides -> - operation_metadata_size_limit:int option -> + operation_metadata_size_limit:Shell_limits.operation_metadata_size_limit -> in_memory:bool -> progress_display_mode:Animation.progress_display_mode -> Genesis.t -> diff --git a/src/lib_store/unix/snapshots.mli b/src/lib_store/unix/snapshots.mli index 33f94bd962e1be6bd8e8b5adad527516509fef3a..ab0a00270ffe3679d494a9209a1fd0b0fc238ccd 100644 --- a/src/lib_store/unix/snapshots.mli +++ b/src/lib_store/unix/snapshots.mli @@ -211,7 +211,7 @@ val import : configured_history_mode:History_mode.t option -> user_activated_upgrades:User_activated.upgrades -> user_activated_protocol_overrides:User_activated.protocol_overrides -> - operation_metadata_size_limit:int option -> + operation_metadata_size_limit:Shell_limits.operation_metadata_size_limit -> in_memory:bool -> progress_display_mode:Animation.progress_display_mode -> Genesis.t -> diff --git a/src/lib_store/unix/test/test_reconstruct.ml b/src/lib_store/unix/test/test_reconstruct.ml index e00924756b73354160b5fef2fe6fdbd08f2d55ac..d94678861a722954cb00baebd6b8d3e17157536e 100644 --- a/src/lib_store/unix/test/test_reconstruct.ml +++ b/src/lib_store/unix/test/test_reconstruct.ml @@ -83,7 +83,7 @@ let test_from_bootstrapped ~descr (store_dir, context_dir) store genesis ~user_activated_upgrades:[] ~user_activated_protocol_overrides:[] - ~operation_metadata_size_limit:None + ~operation_metadata_size_limit:Unlimited ~progress_display_mode:Animation.Auto in return_false) @@ -227,7 +227,7 @@ let test_from_snapshot ~descr:_ (store_dir, context_dir) store ~configured_history_mode:None ~user_activated_upgrades:[] ~user_activated_protocol_overrides:[] - ~operation_metadata_size_limit:None + ~operation_metadata_size_limit:Unlimited ~in_memory:true ~progress_display_mode:Animation.Auto genesis @@ -240,7 +240,7 @@ let test_from_snapshot ~descr:_ (store_dir, context_dir) store genesis ~user_activated_upgrades:[] ~user_activated_protocol_overrides:[] - ~operation_metadata_size_limit:None + ~operation_metadata_size_limit:Unlimited ~progress_display_mode:Animation.Auto in return_false) diff --git a/src/lib_store/unix/test/test_snapshots.ml b/src/lib_store/unix/test/test_snapshots.ml index 93bdfc01571a1580fe3129e6b4d16b98e849bdde..0c78b00724c065aecac31bc16a2830d928565749 100644 --- a/src/lib_store/unix/test/test_snapshots.ml +++ b/src/lib_store/unix/test/test_snapshots.ml @@ -136,7 +136,7 @@ let export_import ~test_descr ~previously_baked_blocks ?exported_block_hash ~configured_history_mode:None ~user_activated_upgrades:[] ~user_activated_protocol_overrides:[] - ~operation_metadata_size_limit:None + ~operation_metadata_size_limit:Unlimited ~in_memory:false ~progress_display_mode:Animation.Auto genesis @@ -524,7 +524,7 @@ let test_rolling () = ~configured_history_mode:None ~user_activated_upgrades:[] ~user_activated_protocol_overrides:[] - ~operation_metadata_size_limit:None + ~operation_metadata_size_limit:Unlimited ~in_memory:false ~progress_display_mode:Animation.Auto genesis @@ -649,7 +649,7 @@ let test_drag_after_import () = ~configured_history_mode:None ~user_activated_upgrades:[] ~user_activated_protocol_overrides:[] - ~operation_metadata_size_limit:None + ~operation_metadata_size_limit:Unlimited ~block:export_block_hash ~in_memory:false ~progress_display_mode:Animation.Auto diff --git a/src/lib_validation/block_validation.ml b/src/lib_validation/block_validation.ml index b3b0abf5f7790caf785e9a4a9ce5dba97ff71d48..76654d0fcfb6f3ab3aa0e21c66d032f869ccf631 100644 --- a/src/lib_validation/block_validation.ml +++ b/src/lib_validation/block_validation.ml @@ -461,8 +461,8 @@ module Make (Proto : Registered_protocol.T) = struct in let metadata = match operation_metadata_size_limit with - | None -> Metadata bytes - | Some size_limit -> + | Shell_limits.Unlimited -> Metadata bytes + | Limited size_limit -> if Bytes.length bytes < size_limit then Metadata bytes else Too_large_metadata in @@ -774,7 +774,7 @@ module Make (Proto : Registered_protocol.T) = struct validation_result in compute_metadata - ~operation_metadata_size_limit:None + ~operation_metadata_size_limit:Unlimited new_protocol_env_version block_metadata ops_metadata @@ -1217,7 +1217,7 @@ type apply_environment = { predecessor_ops_metadata_hash : Operation_metadata_list_list_hash.t option; user_activated_upgrades : User_activated.upgrades; user_activated_protocol_overrides : User_activated.protocol_overrides; - operation_metadata_size_limit : int option; + operation_metadata_size_limit : Shell_limits.operation_metadata_size_limit; } let recompute_metadata chain_id ~predecessor_block_header ~predecessor_context diff --git a/src/lib_validation/block_validation.mli b/src/lib_validation/block_validation.mli index b5ecdd53c071780c222633c84599206ad05b9e34..13681d7a4e433a5057c77bdb3cbf250d69e3d0fd 100644 --- a/src/lib_validation/block_validation.mli +++ b/src/lib_validation/block_validation.mli @@ -113,7 +113,7 @@ type apply_environment = { (** user activated upgrades *) user_activated_protocol_overrides : User_activated.protocol_overrides; (** user activated protocol overrides *) - operation_metadata_size_limit : int option; + operation_metadata_size_limit : Shell_limits.operation_metadata_size_limit; (** size limit for operation metadata that should be written on disk *) } @@ -159,7 +159,7 @@ val preapply : chain_id:Chain_id.t -> user_activated_upgrades:Tezos_base.User_activated.upgrades -> user_activated_protocol_overrides:Tezos_base.User_activated.protocol_overrides -> - operation_metadata_size_limit:int option -> + operation_metadata_size_limit:Shell_limits.operation_metadata_size_limit -> timestamp:Time.Protocol.t -> protocol_data:bytes -> live_blocks:Block_hash.Set.t -> diff --git a/src/lib_validation/external_validation.ml b/src/lib_validation/external_validation.ml index 73a970381984fc5d4d08d44a1674daf859553ab0..c988ea53c5cdaf60ee5612d24976723d34afbb3c 100644 --- a/src/lib_validation/external_validation.ml +++ b/src/lib_validation/external_validation.ml @@ -31,7 +31,7 @@ type parameters = { sandbox_parameters : Data_encoding.json option; user_activated_upgrades : User_activated.upgrades; user_activated_protocol_overrides : User_activated.protocol_overrides; - operation_metadata_size_limit : int option; + operation_metadata_size_limit : Shell_limits.operation_metadata_size_limit; } type request = @@ -167,7 +167,9 @@ let parameters_encoding = (req "user_activated_protocol_overrides" User_activated.protocol_overrides_encoding) - (opt "operation_metadata_size_limit" int31) + (req + "operation_metadata_size_limit" + Shell_limits.operation_metadata_size_limit_encoding) (opt "sandbox_parameters" json)) let case_validate tag = diff --git a/src/lib_validation/external_validation.mli b/src/lib_validation/external_validation.mli index 40ed62151a1ae9c6b4d42e22523146a97db6f2b1..7cd454befaa8c6bc523387f825b0e7964bbe4bf5 100644 --- a/src/lib_validation/external_validation.mli +++ b/src/lib_validation/external_validation.mli @@ -31,7 +31,7 @@ type parameters = { sandbox_parameters : Data_encoding.json option; user_activated_upgrades : User_activated.upgrades; user_activated_protocol_overrides : User_activated.protocol_overrides; - operation_metadata_size_limit : int option; + operation_metadata_size_limit : Shell_limits.operation_metadata_size_limit; } type request =