Correct the recording of excess work

This commit is contained in:
martinsumner 2016-11-05 15:10:21 +00:00
parent 376176eba3
commit a73c233154
2 changed files with 10 additions and 8 deletions

View file

@ -73,7 +73,7 @@
{info, "Rolling level zero to filename ~s"}}, {info, "Rolling level zero to filename ~s"}},
{"P0020", {"P0020",
{info, "Work at Level ~w to be scheduled for ~w with ~w " {info, "Work at Level ~w to be scheduled for ~w with ~w "
++ "queue items outstanding"}}, ++ "queue items outstanding at all levels"}},
{"P0021", {"P0021",
{info, "Allocation of work blocked as L0 pending"}}, {info, "Allocation of work blocked as L0 pending"}},
{"P0022", {"P0022",

View file

@ -787,15 +787,16 @@ return_work(State, From) ->
{WorkQ, BasementL} = assess_workqueue([], 0, State#state.manifest, 0), {WorkQ, BasementL} = assess_workqueue([], 0, State#state.manifest, 0),
case length(WorkQ) of case length(WorkQ) of
L when L > 0 -> L when L > 0 ->
[{SrcLevel, Manifest}|OtherWork] = WorkQ, Excess = lists:foldl(fun({_, _, OH}, Acc) -> Acc+OH end, 0, WorkQ),
leveled_log:log("P0020", [SrcLevel, From, length(OtherWork)]), [{SrcLevel, Manifest, _Overhead}|_OtherWork] = WorkQ,
leveled_log:log("P0020", [SrcLevel, From, Excess]),
IsBasement = if IsBasement = if
SrcLevel + 1 == BasementL -> SrcLevel + 1 == BasementL ->
true; true;
true -> true ->
false false
end, end,
Backlog = L >= ?WORKQUEUE_BACKLOG_TOLERANCE, Backlog = Excess >= ?WORKQUEUE_BACKLOG_TOLERANCE,
case State#state.levelzero_pending of case State#state.levelzero_pending of
true -> true ->
% Once the L0 file is completed there will be more work % Once the L0 file is completed there will be more work
@ -1095,8 +1096,9 @@ assess_workqueue(WorkQ, LevelToAssess, Man, BasementLevel) ->
maybe_append_work(WorkQ, Level, Manifest, maybe_append_work(WorkQ, Level, Manifest,
MaxFiles, FileCount) MaxFiles, FileCount)
when FileCount > MaxFiles -> when FileCount > MaxFiles ->
leveled_log:log("P0024", [FileCount - MaxFiles, Level]), Overhead = FileCount - MaxFiles,
lists:append(WorkQ, [{Level, Manifest}]); leveled_log:log("P0024", [Overhead, Level]),
lists:append(WorkQ, [{Level, Manifest, Overhead}]);
maybe_append_work(WorkQ, _Level, _Manifest, maybe_append_work(WorkQ, _Level, _Manifest,
_MaxFiles, _FileCount) -> _MaxFiles, _FileCount) ->
WorkQ. WorkQ.
@ -1246,7 +1248,7 @@ compaction_work_assessment_test() ->
{{o, "B2", "K3", null}, {o, "B4", "K4", null}, dummy_pid}], {{o, "B2", "K3", null}, {o, "B4", "K4", null}, dummy_pid}],
Manifest = [{0, L0}, {1, L1}], Manifest = [{0, L0}, {1, L1}],
{WorkQ1, 1} = assess_workqueue([], 0, Manifest, 0), {WorkQ1, 1} = assess_workqueue([], 0, Manifest, 0),
?assertMatch(WorkQ1, [{0, Manifest}]), ?assertMatch([{0, Manifest, 1}], WorkQ1),
L1Alt = lists:append(L1, L1Alt = lists:append(L1,
[{{o, "B5", "K0001", null}, {o, "B5", "K9999", null}, [{{o, "B5", "K0001", null}, {o, "B5", "K9999", null},
dummy_pid}, dummy_pid},
@ -1264,7 +1266,7 @@ compaction_work_assessment_test() ->
dummy_pid}]), dummy_pid}]),
Manifest3 = [{0, []}, {1, L1Alt}], Manifest3 = [{0, []}, {1, L1Alt}],
{WorkQ3, 1} = assess_workqueue([], 0, Manifest3, 0), {WorkQ3, 1} = assess_workqueue([], 0, Manifest3, 0),
?assertMatch(WorkQ3, [{1, Manifest3}]). ?assertMatch([{1, Manifest3, 1}], WorkQ3).
confirm_delete_test() -> confirm_delete_test() ->
Filename = 'test.sft', Filename = 'test.sft',