Make check that compaction not ongoing before accepting new compaction
Respond 'busy' if compaction is ongoing
This commit is contained in:
parent
c9bf43953b
commit
28d0aef5fe
3 changed files with 18 additions and 12 deletions
|
@ -1004,7 +1004,7 @@ book_snapshot(Pid, SnapType, Query, LongRunning) ->
|
||||||
gen_server:call(Pid, {snapshot, SnapType, Query, LongRunning}, infinity).
|
gen_server:call(Pid, {snapshot, SnapType, Query, LongRunning}, infinity).
|
||||||
|
|
||||||
|
|
||||||
-spec book_compactjournal(pid(), integer()) -> ok.
|
-spec book_compactjournal(pid(), integer()) -> ok|busy.
|
||||||
-spec book_islastcompactionpending(pid()) -> boolean().
|
-spec book_islastcompactionpending(pid()) -> boolean().
|
||||||
-spec book_trimjournal(pid()) -> ok.
|
-spec book_trimjournal(pid()) -> ok.
|
||||||
|
|
||||||
|
@ -1371,10 +1371,10 @@ handle_call({return_runner, QueryType}, _From, State) ->
|
||||||
fold_countdown = CountDown}};
|
fold_countdown = CountDown}};
|
||||||
handle_call({compact_journal, Timeout}, _From, State)
|
handle_call({compact_journal, Timeout}, _From, State)
|
||||||
when State#state.head_only == false ->
|
when State#state.head_only == false ->
|
||||||
ok = leveled_inker:ink_compactjournal(State#state.inker,
|
R = leveled_inker:ink_compactjournal(State#state.inker,
|
||||||
self(),
|
self(),
|
||||||
Timeout),
|
Timeout),
|
||||||
{reply, ok, State};
|
{reply, R, State};
|
||||||
handle_call(confirm_compact, _From, State)
|
handle_call(confirm_compact, _From, State)
|
||||||
when State#state.head_only == false ->
|
when State#state.head_only == false ->
|
||||||
{reply, leveled_inker:ink_compactionpending(State#state.inker), State};
|
{reply, leveled_inker:ink_compactionpending(State#state.inker), State};
|
||||||
|
|
|
@ -348,7 +348,7 @@ ink_loadpcl(Pid, MinSQN, FilterFun, Penciller) ->
|
||||||
as_ink},
|
as_ink},
|
||||||
infinity).
|
infinity).
|
||||||
|
|
||||||
-spec ink_compactjournal(pid(), pid(), integer()) -> ok.
|
-spec ink_compactjournal(pid(), pid(), integer()) -> ok|busy.
|
||||||
%% @doc
|
%% @doc
|
||||||
%% Trigger a compaction event. the compaction event will use a sqn check
|
%% Trigger a compaction event. the compaction event will use a sqn check
|
||||||
%% against the Ledger to see if a value can be compacted - if the penciller
|
%% against the Ledger to see if a value can be compacted - if the penciller
|
||||||
|
@ -605,14 +605,19 @@ handle_call({compact,
|
||||||
FilterFun,
|
FilterFun,
|
||||||
Timeout},
|
Timeout},
|
||||||
_From, State) ->
|
_From, State) ->
|
||||||
leveled_iclerk:clerk_compact(State#state.clerk,
|
case State#state.compaction_pending of
|
||||||
Checker,
|
true ->
|
||||||
InitiateFun,
|
{reply, busy, State};
|
||||||
CloseFun,
|
false ->
|
||||||
FilterFun,
|
leveled_iclerk:clerk_compact(State#state.clerk,
|
||||||
self(),
|
Checker,
|
||||||
Timeout),
|
InitiateFun,
|
||||||
{reply, ok, State#state{compaction_pending=true}};
|
CloseFun,
|
||||||
|
FilterFun,
|
||||||
|
self(),
|
||||||
|
Timeout),
|
||||||
|
{reply, ok, State#state{compaction_pending=true}}
|
||||||
|
end;
|
||||||
handle_call(compaction_complete, _From, State) ->
|
handle_call(compaction_complete, _From, State) ->
|
||||||
{reply, ok, State#state{compaction_pending=false}};
|
{reply, ok, State#state{compaction_pending=false}};
|
||||||
handle_call(compaction_pending, _From, State) ->
|
handle_call(compaction_pending, _From, State) ->
|
||||||
|
|
|
@ -300,6 +300,7 @@ journal_compaction_tester(Restart, WRP) ->
|
||||||
{sync_strategy, testutil:sync_strategy()}],
|
{sync_strategy, testutil:sync_strategy()}],
|
||||||
{ok, Bookie3} = leveled_bookie:book_start(StartOpts2),
|
{ok, Bookie3} = leveled_bookie:book_start(StartOpts2),
|
||||||
ok = leveled_bookie:book_compactjournal(Bookie3, 30000),
|
ok = leveled_bookie:book_compactjournal(Bookie3, 30000),
|
||||||
|
busy = leveled_bookie:book_compactjournal(Bookie3, 30000),
|
||||||
testutil:wait_for_compaction(Bookie3),
|
testutil:wait_for_compaction(Bookie3),
|
||||||
ok = leveled_bookie:book_close(Bookie3),
|
ok = leveled_bookie:book_close(Bookie3),
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue