From e360b97cfb362707816dcdc055ed94caa85e5fe8 Mon Sep 17 00:00:00 2001 From: Martin Sumner Date: Thu, 23 May 2019 10:16:15 +0100 Subject: [PATCH] GC manifest files when numbers skipped Otherwise list of old files perpetually grows --- src/leveled_pmanifest.erl | 8 ++++++++ test/end_to_end/basic_SUITE.erl | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/src/leveled_pmanifest.erl b/src/leveled_pmanifest.erl index 17469b6..031ba8a 100644 --- a/src/leveled_pmanifest.erl +++ b/src/leveled_pmanifest.erl @@ -208,6 +208,13 @@ save_manifest(Manifest, RootPath) -> % delete the previous one straight away. Retain until enough have been % kept to make the probability of all being independently corrupted % through separate events negligible + ok = remove_manifest(RootPath, GC_SQN), + % Sometimes we skip a SQN, so to GC all may need to clear up previous + % as well + ok = remove_manifest(RootPath, GC_SQN - 1). + +-spec remove_manifest(string(), integer()) -> ok. +remove_manifest(RootPath, GC_SQN) -> LFP = filepath(RootPath, GC_SQN, current_manifest), ok = case filelib:is_file(LFP) of @@ -217,6 +224,7 @@ save_manifest(Manifest, RootPath) -> ok end. + -spec replace_manifest_entry(manifest(), integer(), integer(), list()|manifest_entry(), list()|manifest_entry()) -> manifest(). diff --git a/test/end_to_end/basic_SUITE.erl b/test/end_to_end/basic_SUITE.erl index 7cd0d64..9591fee 100644 --- a/test/end_to_end/basic_SUITE.erl +++ b/test/end_to_end/basic_SUITE.erl @@ -618,6 +618,14 @@ load_and_count(JournalSize, BookiesMemSize, PencillerMemSize) -> {ok, Bookie2} = leveled_bookie:book_start(StartOpts1), {_, 300000} = testutil:check_bucket_stats(Bookie2, "Bucket"), ok = leveled_bookie:book_close(Bookie2), + ManifestFP = + leveled_pmanifest:filepath(filename:join(RootPath, ?LEDGER_FP), + manifest), + IsManifest = fun(FN) -> filename:extension(FN) == ".man" end, + {ok, RawManList} = file:list_dir(ManifestFP), + ManList = lists:filter(IsManifest, RawManList), + io:format("Length of manifest file list ~w~n", [length(ManList)]), + true = length(ManList) =< 5, testutil:reset_filestructure(). load_and_count_withdelete(_Config) ->