Produce stacktraces unless mnesia_compatible
This commit is contained in:
+26
-1
@@ -297,14 +297,34 @@ do_activity(F, Alias, Ctxt) ->
|
||||
end.
|
||||
|
||||
try_f(F, Ctxt) ->
|
||||
try_f(mnesia_compatible_aborts(Ctxt), F, Ctxt).
|
||||
|
||||
try_f(false, F, Ctxt) ->
|
||||
try run_f(F, Ctxt) of
|
||||
Res ->
|
||||
commit_and_pop(Res)
|
||||
catch
|
||||
throw:Something ->
|
||||
abort_and_pop(throw, Something);
|
||||
Cat:Err:T ->
|
||||
%% Without capturing the stacktract here,
|
||||
%% debugging gets pretty difficult. Incompatible with mnesia, though.
|
||||
abort_and_pop(Cat, {Err, T})
|
||||
end;
|
||||
try_f(true, F, Ctxt) ->
|
||||
try run_f(F, Ctxt) of
|
||||
Res ->
|
||||
commit_and_pop(Res)
|
||||
catch
|
||||
throw:Something ->
|
||||
abort_and_pop(throw, Something);
|
||||
Cat:Err ->
|
||||
%% Without capturing the stacktract here,
|
||||
%% debugging gets pretty difficult
|
||||
abort_and_pop(Cat, Err)
|
||||
end.
|
||||
|
||||
|
||||
run_f(F, Ctxt) ->
|
||||
push_ctxt(Ctxt),
|
||||
F().
|
||||
@@ -411,7 +431,7 @@ apply_tx_opts(Opts0) when is_map(Opts0) ->
|
||||
check_tx_opts(maps:merge(default_tx_opts(), Opts0)).
|
||||
|
||||
check_tx_opts(Opts) ->
|
||||
case maps:without([no_snapshot, retries], Opts) of
|
||||
case maps:without([no_snapshot, retries, mnesia_compatible], Opts) of
|
||||
Other when map_size(Other) > 0 ->
|
||||
abort({invalid_tx_opts, maps:keys(Other)});
|
||||
_ ->
|
||||
@@ -523,6 +543,11 @@ re_throw(Cat, Err) ->
|
||||
mnesia_compatible_aborts() ->
|
||||
mnesia_rocksdb_admin:get_cached_env(mnesia_compatible_aborts, false).
|
||||
|
||||
mnesia_compatible_aborts(#{activity := #{mnesia_compatible := Bool}}) ->
|
||||
Bool;
|
||||
mnesia_compatible_aborts(_) ->
|
||||
mnesia_compatible_aborts().
|
||||
|
||||
fix_error({aborted, Err}) ->
|
||||
Err;
|
||||
fix_error(Err) ->
|
||||
|
||||
Reference in New Issue
Block a user