de-terminate cdb
This commit is contained in:
parent
293bd8fb78
commit
45ec837813
1 changed files with 42 additions and 17 deletions
|
@ -595,6 +595,7 @@ reader({direct_fetch, PositionList, Info}, _From, State) ->
|
||||||
end,
|
end,
|
||||||
{reply, Reply, reader, State};
|
{reply, Reply, reader, State};
|
||||||
reader(cdb_complete, _From, State) ->
|
reader(cdb_complete, _From, State) ->
|
||||||
|
leveled_log:log("CDB05", [State#state.filename, reader, cdb_ccomplete]),
|
||||||
ok = file:close(State#state.handle),
|
ok = file:close(State#state.handle),
|
||||||
{stop, normal, {ok, State#state.filename}, State#state{handle=undefined}};
|
{stop, normal, {ok, State#state.filename}, State#state{handle=undefined}};
|
||||||
reader(check_hashtable, _From, State) ->
|
reader(check_hashtable, _From, State) ->
|
||||||
|
@ -642,6 +643,9 @@ delete_pending(timeout, State=#state{delete_point=ManSQN}) when ManSQN > 0 ->
|
||||||
case leveled_inker:ink_confirmdelete(State#state.inker, ManSQN) of
|
case leveled_inker:ink_confirmdelete(State#state.inker, ManSQN) of
|
||||||
true ->
|
true ->
|
||||||
leveled_log:log("CDB04", [State#state.filename, ManSQN]),
|
leveled_log:log("CDB04", [State#state.filename, ManSQN]),
|
||||||
|
close_pendingdelete(State#state.handle,
|
||||||
|
State#state.filename,
|
||||||
|
State#state.waste_path),
|
||||||
{stop, normal, State};
|
{stop, normal, State};
|
||||||
false ->
|
false ->
|
||||||
{next_state,
|
{next_state,
|
||||||
|
@ -650,9 +654,17 @@ delete_pending(timeout, State=#state{delete_point=ManSQN}) when ManSQN > 0 ->
|
||||||
?DELETE_TIMEOUT}
|
?DELETE_TIMEOUT}
|
||||||
end;
|
end;
|
||||||
false ->
|
false ->
|
||||||
|
leveled_log:log("CDB04", [State#state.filename, ManSQN]),
|
||||||
|
close_pendingdelete(State#state.handle,
|
||||||
|
State#state.filename,
|
||||||
|
State#state.waste_path),
|
||||||
{stop, normal, State}
|
{stop, normal, State}
|
||||||
end;
|
end;
|
||||||
delete_pending(destroy, State) ->
|
delete_pending(destroy, State) ->
|
||||||
|
leveled_log:log("CDB05", [State#state.filename, delete_pending, destroy]),
|
||||||
|
close_pendingdelete(State#state.handle,
|
||||||
|
State#state.filename,
|
||||||
|
State#state.waste_path),
|
||||||
{stop, normal, State}.
|
{stop, normal, State}.
|
||||||
|
|
||||||
|
|
||||||
|
@ -713,7 +725,16 @@ handle_sync_event(cdb_firstkey, _From, StateName, State) ->
|
||||||
{reply, FirstKey, StateName, State};
|
{reply, FirstKey, StateName, State};
|
||||||
handle_sync_event(cdb_filename, _From, StateName, State) ->
|
handle_sync_event(cdb_filename, _From, StateName, State) ->
|
||||||
{reply, State#state.filename, StateName, State};
|
{reply, State#state.filename, StateName, State};
|
||||||
handle_sync_event(cdb_close, _From, _StateName, State) ->
|
handle_sync_event(cdb_close, _From, delete_pending, State) ->
|
||||||
|
leveled_log:log("CDB05",
|
||||||
|
[State#state.filename, delete_pending, cdb_close]),
|
||||||
|
close_pendingdelete(State#state.handle,
|
||||||
|
State#state.filename,
|
||||||
|
State#state.waste_path),
|
||||||
|
{stop, normal, ok, State};
|
||||||
|
handle_sync_event(cdb_close, _From, StateName, State) ->
|
||||||
|
leveled_log:log("CDB05", [State#state.filename, StateName, cdb_close]),
|
||||||
|
file:close(State#state.handle),
|
||||||
{stop, normal, ok, State}.
|
{stop, normal, ok, State}.
|
||||||
|
|
||||||
handle_event(_Msg, StateName, State) ->
|
handle_event(_Msg, StateName, State) ->
|
||||||
|
@ -722,22 +743,10 @@ handle_event(_Msg, StateName, State) ->
|
||||||
handle_info(_Msg, StateName, State) ->
|
handle_info(_Msg, StateName, State) ->
|
||||||
{next_state, StateName, State}.
|
{next_state, StateName, State}.
|
||||||
|
|
||||||
terminate(Reason, StateName, State) ->
|
terminate(_Reason, _StateName, _State) ->
|
||||||
leveled_log:log("CDB05", [State#state.filename, StateName, Reason]),
|
ok.
|
||||||
case {State#state.handle, StateName, State#state.waste_path} of
|
|
||||||
{undefined, _, _} ->
|
|
||||||
ok;
|
|
||||||
{Handle, delete_pending, undefined} ->
|
|
||||||
ok = file:close(Handle),
|
|
||||||
ok = file:delete(State#state.filename);
|
|
||||||
{Handle, delete_pending, WasteFP} ->
|
|
||||||
file:close(Handle),
|
|
||||||
Components = filename:split(State#state.filename),
|
|
||||||
NewName = WasteFP ++ lists:last(Components),
|
|
||||||
file:rename(State#state.filename, NewName);
|
|
||||||
{Handle, _, _} ->
|
|
||||||
file:close(Handle)
|
|
||||||
end.
|
|
||||||
|
|
||||||
code_change(_OldVsn, StateName, State, _Extra) ->
|
code_change(_OldVsn, StateName, State, _Extra) ->
|
||||||
{ok, StateName, State}.
|
{ok, StateName, State}.
|
||||||
|
@ -747,6 +756,22 @@ code_change(_OldVsn, StateName, State, _Extra) ->
|
||||||
%%%============================================================================
|
%%%============================================================================
|
||||||
|
|
||||||
|
|
||||||
|
-spec close_pendingdelete(file:io_device(), list(), list()|undefined) -> ok.
|
||||||
|
%% @doc
|
||||||
|
%% If delete is pending - thent he close behaviour needs to actuallly delete
|
||||||
|
%% the file
|
||||||
|
close_pendingdelete(Handle, Filename, WasteFP) ->
|
||||||
|
case WasteFP of
|
||||||
|
undefined ->
|
||||||
|
ok = file:close(Handle),
|
||||||
|
ok = file:delete(Filename);
|
||||||
|
WasteFP ->
|
||||||
|
file:close(Handle),
|
||||||
|
Components = filename:split(Filename),
|
||||||
|
NewName = WasteFP ++ lists:last(Components),
|
||||||
|
file:rename(Filename, NewName)
|
||||||
|
end.
|
||||||
|
|
||||||
-spec set_writeops(sync|riak_sync|none) -> {list(), sync|riak_sync|none}.
|
-spec set_writeops(sync|riak_sync|none) -> {list(), sync|riak_sync|none}.
|
||||||
%% Assumption is that sync should be used - it is a transaction log.
|
%% Assumption is that sync should be used - it is a transaction log.
|
||||||
%%
|
%%
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue