Compare commits

..

1 Commits

Author SHA1 Message Date
Ulf Wiger
b97b727605 Fix dialyzer issues (also for test) 2025-08-01 21:14:56 +02:00
14 changed files with 49 additions and 144 deletions

View File

@ -26,7 +26,10 @@
, {meck, "0.9.2"} , {meck, "0.9.2"}
, {trace_runner, {git, "https://github.com/uwiger/trace_runner.git", , {trace_runner, {git, "https://github.com/uwiger/trace_runner.git",
{ref, "2e56677"}}} {ref, "2e56677"}}}
]} ]},
{dialyzer, [{plt_apps, all_deps},
{base_plt_apps, [erts, kernel, stdlib, mnesia, runtime_tools, eunit,
proper, trace_runner, common_test]}]}
]}, ]},
{edown, {edown,
%% Use as `rebar3 as edown do edoc` %% Use as `rebar3 as edown do edoc`

View File

@ -78,7 +78,7 @@
| {add_aliases, [alias()]} | {add_aliases, [alias()]}
| {write_table_property, tabname(), tuple()} | {write_table_property, tabname(), tuple()}
| {remove_aliases, [alias()]} | {remove_aliases, [alias()]}
| {migrate, [{tabname(), map()}], rpt()} | {migrate, [tabname() | {tabname(), map()}], rpt()}
| {prep_close, table()} | {prep_close, table()}
| {close_table, table()} | {close_table, table()}
| {clear_table, table() | cf() }. | {clear_table, table() | cf() }.
@ -272,9 +272,16 @@ delete_info_(Ref, Tab, K) ->
write_table_property(Alias, Tab, Prop) when is_tuple(Prop), size(Prop) >= 1 -> write_table_property(Alias, Tab, Prop) when is_tuple(Prop), size(Prop) >= 1 ->
call(Alias, {write_table_property, Tab, Prop}). call(Alias, {write_table_property, Tab, Prop}).
-spec migrate_standalone(alias(), Tabs) -> Res when
Tabs :: [tabname() | {tabname(),map()}],
Res :: [{tabname(), {ok,any()} | {error, any()}}].
migrate_standalone(Alias, Tabs) -> migrate_standalone(Alias, Tabs) ->
migrate_standalone(Alias, Tabs, undefined). migrate_standalone(Alias, Tabs, undefined).
-spec migrate_standalone(alias(), Tabs, Rpt) -> Res when
Tabs :: [tabname() | {tabname(),map()}],
Rpt :: 'undefined' | pid() | atom(),
Res :: [{tabname(), {ok,any()} | {error, any()}}].
migrate_standalone(Alias, Tabs, Rpt0) -> migrate_standalone(Alias, Tabs, Rpt0) ->
Rpt = case Rpt0 of Rpt = case Rpt0 of
undefined -> undefined; undefined -> undefined;

View File

@ -132,14 +132,15 @@
| sync_dirty. | sync_dirty.
-type tx_options() :: #{ retries => retries() -type tx_options() :: #{ retries => retries()
, no_snapshot => boolean() }. , no_snapshot => boolean()
, mnesia_compatible => boolean() }.
-type mrdb_activity_type() :: tx | {tx, tx_options()} | batch. -type mrdb_activity_type() :: tx | {tx, tx_options()} | batch.
-type activity_type() :: mrdb_activity_type() | mnesia_activity_type(). -type activity_type() :: mrdb_activity_type() | mnesia_activity_type().
-type key() :: any(). -type key() :: any().
-type obj() :: tuple(). -type obj() :: tuple().
-type index_position() :: atom() | pos(). -type index_position() :: atom() | pos() | plugin_ix_pos().
-type db_handle() :: rocksdb:db_handle(). -type db_handle() :: rocksdb:db_handle().
-type cf_handle() :: rocksdb:cf_handle(). -type cf_handle() :: rocksdb:cf_handle().
@ -155,10 +156,14 @@
-type activity() :: tx_activity() | batch_activity(). -type activity() :: tx_activity() | batch_activity().
-type pos() :: non_neg_integer(). -type pos() :: non_neg_integer().
-type plugin_ix_pos() :: {atom()}.
-type propkey() :: any().
-type propvalue() :: any().
-type properties() :: #{ record_name := atom() -type properties() :: #{ record_name := atom()
, attributes := [atom()] , attributes := [atom()]
, index := [{pos(), bag | ordered}] , index := [{pos(), bag | ordered}]
, user_properties => #{propkey() => propvalue()}
}. }.
-type semantics() :: bag | set. -type semantics() :: bag | set.
-type key_encoding() :: 'raw' | 'sext' | 'term'. -type key_encoding() :: 'raw' | 'sext' | 'term'.

View File

@ -1,64 +0,0 @@
%% -------------------------------------------------------------------
%%
%% basho_bench: Benchmarking Suite
%%
%% Copyright (c) 2009-2010 Basho Techonologies
%%
%% This file is provided to you under the Apache License,
%% Version 2.0 (the "License"); you may not use this file
%% except in compliance with the License. You may obtain
%% a copy of the License at
%%
%% http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing,
%% software distributed under the License is distributed on an
%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
%% KIND, either express or implied. See the License for the
%% specific language governing permissions and limitations
%% under the License.
%%
%% -------------------------------------------------------------------
-module(basho_bench_driver_mnesia_rocksdb).
-export([new/1,
run/4]).
-include("mnesia_rocksdb_basho_bench.hrl").
%% ====================================================================
%% API
%% ====================================================================
new(_Id) ->
Type = basho_bench_config:get(backend, ram_copies),
Tab = basho_bench_config:get(mnesia_table, t),
ok = bootstrap_mnesia(Tab, Type),
{ok, Tab}.
bootstrap_mnesia(Tab, Type) ->
ok = mnesia:create_schema([node()],
[{backend_types,
[{rocksdb_copies, mnesia_rocksdb}]}]),
ok = mnesia:start(),
{atomic,ok} = mnesia:create_table(Tab, [{Type, [node()]}]),
mnesia:wait_for_tables([Tab], 10000).
run(get, KeyGen, _ValueGen, State) ->
Tab = State,
Key = KeyGen(),
case mnesia:dirty_read({Tab, Key}) of
[] ->
{ok, State};
[{_, Key, _}] ->
{ok, State}
end;
run(put, KeyGen, ValueGen, State) ->
Tab = State,
ok = mnesia:dirty_write({Tab, KeyGen(), ValueGen()}),
{ok, State};
run(delete, KeyGen, _ValueGen, State) ->
Tab = State,
ok = mnesia:dirty_delete({Tab, KeyGen()}),
{ok, State}.

View File

@ -216,6 +216,7 @@ mrdb_transactions_(Config) ->
delete_tabs(Created), delete_tabs(Created),
ok. ok.
-dialyzer(no_return).
mrdb_abort_reasons(_Config) -> mrdb_abort_reasons(_Config) ->
Prev = mnesia_rocksdb_admin:set_and_cache_env(mnesia_compatible_aborts, true), Prev = mnesia_rocksdb_admin:set_and_cache_env(mnesia_compatible_aborts, true),
X = some_value, X = some_value,

View File

@ -1,15 +0,0 @@
-define(FAIL_MSG(Str, Args), ?ERROR(Str, Args), basho_bench_app:halt_or_kill()).
-define(STD_ERR(Str, Args), io:format(standard_error, Str, Args)).
-define(CONSOLE(Str, Args), lager:info(Str, Args)).
-define(DEBUG(Str, Args), lager:debug(Str, Args)).
-define(INFO(Str, Args), lager:info(Str, Args)).
-define(WARN(Str, Args), lager:warning(Str, Args)).
-define(ERROR(Str, Args), lager:error(Str, Args)).
-define(FMT(Str, Args), lists:flatten(io_lib:format(Str, Args))).
-define(VAL_GEN_BLOB_CFG, value_generator_blob_file).
-define(VAL_GEN_SRC_SIZE, value_generator_source_size).

View File

@ -1,18 +0,0 @@
{mode, max}.
{duration, 10}.
{concurrent, 1}.
{driver, basho_bench_driver_mnesia_rocksdb}.
{key_generator, {int_to_bin,{uniform_int, 5000000}}}.
{value_generator, {fixed_bin, 10000}}.
{operations, [{get, 2}, {put, 2}, {delete, 1}]}.
{code_paths, []}.
{mnesia_table, doc}.
{backend, disc_only_copies}.

View File

@ -1,19 +0,0 @@
{mode, max}.
{duration, 10}.
{concurrent, 1}.
{driver, basho_bench_driver_mnesia_rocksdb}.
{key_generator, {int_to_bin,{uniform_int, 5000000}}}.
{value_generator, {fixed_bin, 10000}}.
{operations, [{get, 2}, {put, 2}, {delete, 1}]}.
{code_paths, ["/Users/uwiger/git/rocksdb",
"/Users/uwiger/git/mnesia_rocksdb"]}.
{mnesia_table, rdb}.
{backend, rocksdb_copies}.

View File

@ -22,6 +22,7 @@
-record(t, {k, i, v}). -record(t, {k, i, v}).
-dialyzer({nowarn_function, run/1}).
run(Sz) -> run(Sz) ->
mnesia:stop(), mnesia:stop(),
init(), init(),

View File

@ -79,20 +79,20 @@ cleanup() ->
os:cmd("rm *.BUP"). os:cmd("rm *.BUP").
mods(0) -> mods(0) ->
[]; [].
mods(1) -> %% mods(1) ->
[ %% [
{l, mnesia_rocksdb}, %% {l, mnesia_rocksdb},
{g, rocksdb} %% {g, rocksdb}
]; %% ];
mods(2) -> %% mods(2) ->
[ %% [
%% {l, mnesia_monitor}, %% %% {l, mnesia_monitor},
{g, mnesia_rocksdb}, %% {g, mnesia_rocksdb},
{l, mnesia_bup}, %% {l, mnesia_bup},
{g, mnesia_lib}, %% {g, mnesia_lib},
{g, mnesia_schema}, %% {g, mnesia_schema},
%% {g, mnesia_loader}, %% %% {g, mnesia_loader},
{g, mnesia_index}, %% {g, mnesia_index},
{l, mnesia_tm} %% {l, mnesia_tm}
]. %% ].

View File

@ -152,8 +152,8 @@ end_per_testcase(_, _) ->
%% ====================================================================== %% ======================================================================
cfg([Tab, Type, IxType], Config) -> cfg([Tab, Type, IxType], Config) ->
[{my_config, #{tab => Tab, type => Type, ixtype => IxType}} | Config]; [{my_config, #{tab => Tab, type => Type, ixtype => IxType}} | Config].
cfg(Cfg, Config) when is_map(Cfg) -> [{my_config, Cfg} | Config]. %% cfg(Cfg, Config) when is_map(Cfg) -> [{my_config, Cfg} | Config].
cfg(Config) -> ?config(my_config, Config). cfg(Config) -> ?config(my_config, Config).

View File

@ -48,14 +48,18 @@
-record(st, {}). -record(st, {}).
-define(KEYS, [a,b,c]). -define(KEYS, [a,b,c]).
-dialyzer({no_return, [basic_test_/0, test/1, prop_seq/0]}).
basic_test_() -> basic_test_() ->
{timeout, 60000, [fun() -> test(100) end]}. {timeout, 60000, [fun() -> test(100) end]}.
-dialyzer({no_opaque, test/1}).
test(N) -> test(N) ->
setup_mnesia(), setup_mnesia(),
true = proper:quickcheck(?MODULE:prop_seq(), N), true = proper:quickcheck(?MODULE:prop_seq(), N),
ok. ok.
-dialyzer({no_opaque, prop_seq/0}).
prop_seq() -> prop_seq() ->
?FORALL(Cmds, proper_statem:commands(?MODULE), ?FORALL(Cmds, proper_statem:commands(?MODULE),
begin begin

View File

@ -260,10 +260,10 @@ plain_transform1(Fun, [F|Fs]) when is_atom(element(1,F)) ->
continue -> continue ->
[list_to_tuple(plain_transform1(Fun, tuple_to_list(F))) | [list_to_tuple(plain_transform1(Fun, tuple_to_list(F))) |
plain_transform1(Fun, Fs)]; plain_transform1(Fun, Fs)];
{done, NewF} -> %% {done, NewF} ->
[NewF | Fs]; %% [NewF | Fs];
{error, Reason} -> %% {error, Reason} ->
io:format("Error: ~p (~p)~n", [F,Reason]); %% io:format("Error: ~p (~p)~n", [F,Reason]);
NewF when is_tuple(NewF) -> NewF when is_tuple(NewF) ->
[NewF | plain_transform1(Fun, Fs)] [NewF | plain_transform1(Fun, Fs)]
end; end;

View File

@ -90,7 +90,7 @@ mk_tab(G) ->
end. end.
tab_name(fold ) -> r; tab_name(fold ) -> r;
tab_name(select ) -> r; %% tab_name(select ) -> r;
tab_name(rdb_fold) -> t. tab_name(rdb_fold) -> t.
create_tab(T) -> create_tab(T) ->