Skip to content

Commit

Permalink
Imitate mnesia_rocksdb more closely
Browse files Browse the repository at this point in the history
  • Loading branch information
Mikaka27 committed Dec 4, 2024
1 parent 344eb47 commit cc6036d
Showing 1 changed file with 54 additions and 8 deletions.
62 changes: 54 additions & 8 deletions lib/mnesia/test/ext_test.erl
Original file line number Diff line number Diff line change
Expand Up @@ -74,66 +74,94 @@ init_backend() ->
backend_init_marker() ->
{test, ext_test, backend_init}.

error_if_not_initialized() ->
?DBG(),
case try ets:lookup_element(mnesia_gvar, backend_init_marker(), 2) catch _:_ -> error end of
error ->
error({backend_not_initialized, {?MODULE, error}});
_Other ->
ok
end.

add_aliases(_As) ->
?DBG(_As),
error_if_not_initialized(),
true = mnesia_lib:val(backend_init_marker()),
ok.

remove_aliases(_) ->
remove_aliases(_As) ->
?DBG(_As),
error_if_not_initialized(),
ok.


%% Table operations

check_definition(ext_ram_copies, _Tab, _Nodes, _Props) ->
?DBG("~p ~p ~p~n", [ext_test_server:tab_to_list(_Tab), _Nodes, _Props]),
ok;
check_definition(ext_disc_only_copies, _Tab, _Nodes, _Props) ->
?DBG("~p ~p ~p~n", [ext_test_server:tab_to_list(_Tab), _Nodes, _Props]),
check_definition(_Alias, _Tab, _Nodes, _Props) ->
?DBG("~p ~p ~p ~p~n", [_Alias, ext_test_server:tab_to_list(_Tab), _Nodes, _Props]),
ok.

create_table(Alias, Tab, Props) ->
?DBG({Alias, ext_test_server:tab_to_list(Tab), Props}),
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Alias, Tab, Props}).
try error_if_not_initialized() of
ok ->
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Alias, Tab, Props})
catch error : {backend_not_initialized, _} = Reason ->
{aborted, Reason}
end.

delete_table(Alias, Tab) ->
?DBG({Alias, ext_test_server:tab_to_list(Tab)}),
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Alias, Tab}).
try error_if_not_initialized() of
ok ->
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Alias, Tab})
catch error : {backend_not_initialized, _} = Reason ->
ok
end.

load_table(Alias, Tab, LoadReason, Cs) ->
?DBG({Alias, ext_test_server:tab_to_list(Tab), LoadReason, Cs}),
error_if_not_initialized(),
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Alias, Tab, LoadReason, Cs}).

sender_init(Alias, Tab, RemoteStorage, Pid) ->
?DBG({Alias, ext_test_server:tab_to_list(Tab), RemoteStorage, Pid}),
error_if_not_initialized(),
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Alias, Tab, RemoteStorage, Pid}).

receiver_first_message(Sender, {first, Size}, _Alias, Tab) ->
?DBG({Sender, {first, Size}, _Alias, ext_test_server:tab_to_list(Tab)}),
error_if_not_initialized(),
{Size, {Tab, Sender}}.

receive_data(Data, Alias, Name, Sender, State) ->
?DBG({Data, Alias, ext_test_server:tab_to_list(Name), Sender, State}),
error_if_not_initialized(),
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Data, Alias, Name, Sender, State}).

receive_done(_Alias, _Tab, _Sender, _State) ->
?DBG({_Alias, ext_test_server:tab_to_list(_Tab), _Sender, _State}),
error_if_not_initialized(),
ok.

close_table(Alias, Tab) ->
?DBG({Alias, ext_test_server:tab_to_list(Tab)}),
error_if_not_initialized(),
sync_close_table(Alias, Tab).

sync_close_table(Alias, Tab) ->
?DBG({Alias, ext_test_server:tab_to_list(Tab)}),
error_if_not_initialized(),
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Alias, Tab}).

fixtable(Alias, Tab, Bool) ->
?DBG({Alias, ext_test_server:tab_to_list(Tab), Bool}),
error_if_not_initialized(),
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Alias, Tab, Bool}).

info(Alias, Tab, Type) ->
?DBG({Alias, ext_test_server:tab_to_list(Tab), Type}),
error_if_not_initialized(),
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Alias, Tab, Type}).

real_suffixes() ->
Expand All @@ -146,73 +174,91 @@ tmp_suffixes() ->

index_is_consistent(_Alias, _Ix, _Bool) ->
?DBG({_Alias, ext_test_server:tab_to_list(_Ix), _Bool}),
error_if_not_initialized(),
ok. % Ignore for now
is_index_consistent(_Alias, _Ix) ->
?DBG({_Alias, ext_test_server:tab_to_list(_Ix)}),
error_if_not_initialized(),
false. % Always rebuild

%% Record operations

validate_record(_Alias, _Tab, RecName, Arity, Type, _Obj) ->
?DBG({_Alias, ext_test_server:tab_to_list(_Tab), RecName, Arity, Type, _Obj}),
error_if_not_initialized(),
{RecName, Arity, Type}.

validate_key(_Alias, _Tab, RecName, Arity, Type, _Key) ->
?DBG({_Alias, ext_test_server:tab_to_list(_Tab), RecName, Arity, Type, _Key}),
error_if_not_initialized(),
{RecName, Arity, Type}.

insert(Alias, Tab, Obj) ->
?DBG({Alias, ext_test_server:tab_to_list(Tab), Obj}),
error_if_not_initialized(),
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Alias, Tab, Obj}).

lookup(Alias, Tab, Obj) ->
?DBG({Alias, ext_test_server:tab_to_list(Tab), Obj}),
error_if_not_initialized(),
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Alias, Tab, Obj}).

delete(Alias, Tab, Key) ->
?DBG({Alias, ext_test_server:tab_to_list(Tab), Key}),
error_if_not_initialized(),
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Alias, Tab, Key}).

match_delete(Alias, Tab, Pat) ->
?DBG({Alias, ext_test_server:tab_to_list(Tab), Pat}),
error_if_not_initialized(),
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Alias, Tab, Pat}).

first(Alias, Tab) ->
?DBG({Alias, ext_test_server:tab_to_list(Tab)}),
error_if_not_initialized(),
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Alias, Tab}).

last(Alias, Tab) ->
?DBG({Alias, ext_test_server:tab_to_list(Tab)}),
error_if_not_initialized(),
first(Alias, Tab).

next(Alias, Tab, Key) ->
?DBG({Alias, ext_test_server:tab_to_list(Tab), Key}),
error_if_not_initialized(),
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Alias, Tab, Key}).

prev(Alias, Tab, Key) ->
?DBG({Alias, ext_test_server:tab_to_list(Tab), Key}),
error_if_not_initialized(),
next(Alias, Tab, Key).

slot(Alias, Tab, Pos) ->
?DBG({Alias, ext_test_server:tab_to_list(Tab), Pos}),
error_if_not_initialized(),
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Alias, Tab, Pos}).

update_counter(Alias, Tab, C, Val) ->
?DBG({Alias, ext_test_server:tab_to_list(Tab), C, Val}),
error_if_not_initialized(),
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Alias, Tab, C, Val}).

select(Continuation) ->
?DBG(Continuation),
error_if_not_initialized(),
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Continuation}).

select(Alias, Tab, Ms) ->
?DBG({Alias, ext_test_server:tab_to_list(Tab), Ms}),
error_if_not_initialized(),
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Alias, Tab, Ms}).

select(Alias, Tab, Ms, Limit) ->
?DBG({Alias, ext_test_server:tab_to_list(Tab), Ms, Limit}),
error_if_not_initialized(),
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Alias, Tab, Ms, Limit}).

repair_continuation(Cont, Ms) ->
?DBG({Cont, Ms}),
error_if_not_initialized(),
gen_server:call({global, mnesia_test_lib:get_ext_test_server_name()}, {?FUNCTION_NAME, Cont, Ms}).

0 comments on commit cc6036d

Please sign in to comment.