diff --git a/etherlink/CHANGES_NODE.md b/etherlink/CHANGES_NODE.md index 07c24698f5d6931939a78e456dba750f5c1ff508..548364a4fd37195a3399aba9614387274ea1464b 100644 --- a/etherlink/CHANGES_NODE.md +++ b/etherlink/CHANGES_NODE.md @@ -46,6 +46,7 @@ - The simulation can be called by not taking into account DA fees in the gas computation. (!13729) - Simulation supports mainnet after the security upgrade. (!14006) +- Speed up init from rollup node command. (!14173) ## Version for ec7c3b349624896b269e179384d0a45cf39e1145 diff --git a/etherlink/bin_node/lib_dev/evm_context.ml b/etherlink/bin_node/lib_dev/evm_context.ml index fcca79ce8154c16bd31760b708ffec2232f35fb6..cf6a09f3bb04a1bd5355dac689766dcbf6fbb822 100644 --- a/etherlink/bin_node/lib_dev/evm_context.ml +++ b/etherlink/bin_node/lib_dev/evm_context.ml @@ -1357,22 +1357,28 @@ let init_context_from_rollup_node ~data_dir ~rollup_node_data_dir = let rollup_node_context_dir = Filename.Infix.(rollup_node_data_dir // "context") in - let* rollup_node_index = - Irmin_context.load ~cache_size:100_000 Read_only rollup_node_context_dir - in let evm_context_dir = State.store_path ~data_dir in - let*! () = Lwt_utils_unix.create_dir evm_context_dir in let* () = - Progress_bar.Lwt.with_background_spinner - ~message: - (Format.sprintf - "Exporting context for %ld in %s" - final_level - evm_context_dir) - @@ Irmin_context.export_snapshot - rollup_node_index - checkpoint - ~path:evm_context_dir + Format.eprintf "Acquiring rollup node locks@." ; + Lwt_lock_file.with_lock + ~when_locked:`Block + ~filename:(Filename.concat rollup_node_data_dir "gc_lock") + @@ fun () -> + Lwt_lock_file.with_lock + ~when_locked:`Block + ~filename:(Filename.concat rollup_node_data_dir "processing_lock") + @@ fun () -> + let message = + Format.sprintf + "Exporting context for %ld in %s" + final_level + evm_context_dir + in + Tezos_stdlib_unix.Utils.copy_dir + ~progress:(message, Terminal.Color.(rgb 255 153 51)) + rollup_node_context_dir + evm_context_dir ; + return_unit in let* evm_node_index = Irmin_context.load ~cache_size:100_000 Read_write evm_context_dir