@@ -2919,8 +2919,8 @@ module Hardfork_config = struct
29192919
29202920 (* * Generate the tar file and runtime ledger config for the given root
29212921 database, and close and delete the database *)
2922- let generate_tar_and_config ~get_directory ~get_root_hash ~close_root ~ logger
2923- ~target_dir ~ ledger_name_prefix root =
2922+ let generate_tar_and_config ~get_directory ~get_root_hash ~logger ~ target_dir
2923+ ~ledger_name_prefix root =
29242924 let open Deferred.Or_error.Let_syntax in
29252925 let root_hash = get_root_hash root in
29262926 let ledger_dirname =
@@ -2935,31 +2935,45 @@ module Hardfork_config = struct
29352935 Genesis_ledger_helper. sha3_hash tar_path
29362936 |> Deferred. map ~f: Or_error. return
29372937 in
2938- let config =
2939- Runtime_config. ledger_of_hashes
2940- ~root_hash: (Mina_base.Ledger_hash. to_base58_check root_hash)
2941- ~s3_data_hash ()
2938+ Runtime_config. ledger_of_hashes
2939+ ~root_hash: (Mina_base.Ledger_hash. to_base58_check root_hash)
2940+ ~s3_data_hash ()
2941+
2942+ (* * Bracket to close the temporary root ledger connections opened by
2943+ [copy_genesis_roots_and_diffs]. The underlying databases on disk are
2944+ created in a temporary build directory that will be automatically cleaned
2945+ up in [dump_reference_config]. *)
2946+ let with_root_close ledgers f =
2947+ let open Deferred.Or_error.Let_syntax in
2948+ let close () =
2949+ let genesis_ledger, genesis_staking_ledger, genesis_next_epoch_ledger =
2950+ ledgers
2951+ in
2952+ Ledger.Root. close genesis_ledger ;
2953+ Ledger.Root. close genesis_staking_ledger ;
2954+ Ledger.Root. close genesis_next_epoch_ledger
29422955 in
2943- close_root root ;
2944- Mina_stdlib_unix.File_system. rmrf ledger_dirname ;
2945- config
2956+ try
2957+ let % map result = f () in
2958+ close () ; result
2959+ with exn -> close () ; raise exn
29462960
2947- let generate_tars_and_configs ~get_directory ~get_root_hash ~close_root
2948- ~logger ~ target_dir genesis_ledger genesis_staking_ledger
2961+ let generate_tars_and_configs ~get_directory ~get_root_hash ~logger
2962+ ~target_dir genesis_ledger genesis_staking_ledger
29492963 genesis_next_epoch_ledger =
29502964 let open Deferred.Or_error.Let_syntax in
29512965 Core.Unix. mkdir_p target_dir ;
29522966 let % bind genesis_ledger_config =
2953- generate_tar_and_config ~get_directory ~get_root_hash ~close_root ~logger
2954- ~target_dir ~ ledger_name_prefix:" genesis_ledger" genesis_ledger
2967+ generate_tar_and_config ~get_directory ~get_root_hash ~logger ~target_dir
2968+ ~ledger_name_prefix: " genesis_ledger" genesis_ledger
29552969 in
29562970 let % bind genesis_staking_ledger_config =
2957- generate_tar_and_config ~get_directory ~get_root_hash ~close_root ~logger
2958- ~target_dir ~ ledger_name_prefix:" epoch_ledger" genesis_staking_ledger
2971+ generate_tar_and_config ~get_directory ~get_root_hash ~logger ~target_dir
2972+ ~ledger_name_prefix: " epoch_ledger" genesis_staking_ledger
29592973 in
29602974 let % map genesis_next_epoch_ledger_config =
2961- generate_tar_and_config ~get_directory ~get_root_hash ~close_root ~logger
2962- ~target_dir ~ ledger_name_prefix:" epoch_ledger" genesis_next_epoch_ledger
2975+ generate_tar_and_config ~get_directory ~get_root_hash ~logger ~target_dir
2976+ ~ledger_name_prefix: " epoch_ledger" genesis_next_epoch_ledger
29632977 in
29642978 ( genesis_ledger_config
29652979 , genesis_staking_ledger_config
@@ -2993,9 +3007,8 @@ module Hardfork_config = struct
29933007 let genesis_dir = config_dir ^/ " genesis" in
29943008 let % bind genesis_config =
29953009 generate_tars_and_configs ~get_directory: Ledger.Db. get_directory
2996- ~get_root_hash: Ledger.Db. merkle_root ~close_root: Ledger.Db. close ~logger
2997- ~target_dir: genesis_dir genesis_ledger genesis_staking_ledger
2998- genesis_next_epoch_ledger
3010+ ~get_root_hash: Ledger.Db. merkle_root ~logger ~target_dir: genesis_dir
3011+ genesis_ledger genesis_staking_ledger genesis_next_epoch_ledger
29993012 in
30003013 write_config_file
30013014 ~filename: (config_dir ^/ " daemon.json" )
@@ -3014,9 +3027,9 @@ module Hardfork_config = struct
30143027 let genesis_dir = config_dir ^/ " genesis" in
30153028 let % bind genesis_config =
30163029 generate_tars_and_configs ~get_directory: Ledger.Hardfork_db. get_directory
3017- ~get_root_hash: Ledger.Hardfork_db. merkle_root
3018- ~close_root: Ledger.Hardfork_db. close ~logger ~ target_dir: genesis_dir
3019- genesis_ledger genesis_staking_ledger genesis_next_epoch_ledger
3030+ ~get_root_hash: Ledger.Hardfork_db. merkle_root ~logger
3031+ ~target_dir: genesis_dir genesis_ledger genesis_staking_ledger
3032+ genesis_next_epoch_ledger
30203033 in
30213034 write_config_file
30223035 ~filename: (config_dir ^/ " daemon.json" )
@@ -3061,6 +3074,11 @@ module Hardfork_config = struct
30613074 , genesis_next_epoch_ledger_data ) =
30623075 copy_genesis_roots_and_diffs ~source_ledgers build_dir
30633076 in
3077+ with_root_close
3078+ ( fst genesis_ledger_data
3079+ , fst genesis_staking_ledger_data
3080+ , fst genesis_next_epoch_ledger_data )
3081+ @@ fun () ->
30643082 let % bind.Deferred genesis_ledger_legacy, genesis_ledger_migrated =
30653083 migrate_and_apply genesis_ledger_data
30663084 in
0 commit comments