Skip to content

Commit 9f4f92b

Browse files
committed
Fix database cleanup during fork config generation
1 parent f0cbc6f commit 9f4f92b

File tree

1 file changed

+41
-23
lines changed

1 file changed

+41
-23
lines changed

src/lib/mina_lib/mina_lib.ml

Lines changed: 41 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)