From e5a5da35ebcd625f224715a35e242d64d6cdde3a Mon Sep 17 00:00:00 2001 From: Martin Sumner Date: Tue, 29 Jan 2019 13:06:00 +0000 Subject: [PATCH] Level Zero constructor to get close Allows for the L0 constructor to be closed (even though not yet in the manifest) on shutdown --- src/leveled_penciller.erl | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/src/leveled_penciller.erl b/src/leveled_penciller.erl index 302b1ed..584974d 100644 --- a/src/leveled_penciller.erl +++ b/src/leveled_penciller.erl @@ -923,13 +923,13 @@ handle_call(close, _From, State) -> leveled_log:log("P0010", [StatusTuple]) end, - shutdown_manifest(State#state.manifest), + shutdown_manifest(State#state.manifest, State#state.levelzero_constructor), {stop, normal, ok, State}; handle_call(doom, _From, State) -> leveled_log:log("P0030", []), ok = leveled_pclerk:clerk_close(State#state.clerk), - shutdown_manifest(State#state.manifest), + shutdown_manifest(State#state.manifest, State#state.levelzero_constructor), ManifestFP = State#state.root_path ++ "/" ++ ?MANIFEST_FP ++ "/", FilesFP = State#state.root_path ++ "/" ++ ?FILES_FP ++ "/", @@ -1183,21 +1183,34 @@ start_from_file(PCLopts) -> {ok, State0}. --spec shutdown_manifest(leveled_pmanifest:manifest()) -> ok. +-spec shutdown_manifest(leveled_pmanifest:manifest(), pid()|undefined) -> ok. %% @doc %% Shutdown all the SST files within the manifest -shutdown_manifest(Manifest)-> +shutdown_manifest(Manifest, L0Constructor) -> EntryCloseFun = fun(ME) -> - case is_record(ME, manifest_entry) of - true -> - ok = leveled_sst:sst_close(ME#manifest_entry.owner); - false -> - {_SK, ME0} = ME, - ok = leveled_sst:sst_close(ME0#manifest_entry.owner) - end + Owner = + case is_record(ME, manifest_entry) of + true -> + ME#manifest_entry.owner; + false -> + case ME of + {_SK, ME0} -> + ME0#manifest_entry.owner; + ME -> + ME + end + end, + ok = + case is_pid(Owner) of + true -> + leveled_sst:sst_close(Owner); + false -> + ok + end end, - leveled_pmanifest:close_manifest(Manifest, EntryCloseFun). + leveled_pmanifest:close_manifest(Manifest, EntryCloseFun), + EntryCloseFun(L0Constructor). -spec archive_files(list(), list()) -> ok.