diff options
Diffstat (limited to 'lib/mnesia')
-rw-r--r-- | lib/mnesia/src/mnesia.app.src | 2 | ||||
-rw-r--r-- | lib/mnesia/src/mnesia_checkpoint.erl | 5 | ||||
-rw-r--r-- | lib/mnesia/src/mnesia_tm.erl | 13 | ||||
-rw-r--r-- | lib/mnesia/test/mnesia_trans_access_test.erl | 28 |
4 files changed, 42 insertions, 6 deletions
diff --git a/lib/mnesia/src/mnesia.app.src b/lib/mnesia/src/mnesia.app.src index 77bd1a7816..dfb5e82c93 100644 --- a/lib/mnesia/src/mnesia.app.src +++ b/lib/mnesia/src/mnesia.app.src @@ -51,4 +51,4 @@ ]}, {applications, [kernel, stdlib]}, {mod, {mnesia_app, []}}, - {runtime_dependencies, ["stdlib-3.4","kernel-5.3","erts-9.0"]}]}. + {runtime_dependencies, ["stdlib-@OTP-18490@","kernel-5.3","erts-9.0"]}]}. diff --git a/lib/mnesia/src/mnesia_checkpoint.erl b/lib/mnesia/src/mnesia_checkpoint.erl index fce588444b..ed1c0df605 100644 --- a/lib/mnesia/src/mnesia_checkpoint.erl +++ b/lib/mnesia/src/mnesia_checkpoint.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1996-2021 +%% Copyright Ericsson AB 1996-2023 %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -632,7 +632,8 @@ init(Cp) -> catch error:Reason -> %% system limit Msg = "Cannot create an ets table for pending transactions", Error = {error, {system_limit, Name, Msg, Reason}}, - proc_lib:init_ack(Cp#checkpoint_args.supervisor, Error) + proc_lib:init_fail( + Cp#checkpoint_args.supervisor, Error, {exit, normal}) end. prepare_tab(Cp, R) -> diff --git a/lib/mnesia/src/mnesia_tm.erl b/lib/mnesia/src/mnesia_tm.erl index 9827ef97ad..d7b123d1e5 100644 --- a/lib/mnesia/src/mnesia_tm.erl +++ b/lib/mnesia/src/mnesia_tm.erl @@ -32,6 +32,7 @@ do_update_op/3, get_info/1, get_transactions/0, + get_transactions_count/0, info/1, mnesia_down/1, prepare_checkpoint/2, @@ -423,6 +424,10 @@ doit_loop(#state{coordinators=Coordinators,participants=Participants,supervisor= reply(From, {info, gb_trees:values(Participants), gb_trees:to_list(Coordinators)}, State); + {From, transactions_count} -> + reply(From, {transactions_count, gb_trees:size(Participants), + gb_trees:size(Coordinators)}, State); + {mnesia_down, N} -> verbose("Got mnesia_down from ~p, reconfiguring...~n", [N]), reconfigure_coordinators(N, gb_trees:to_list(Coordinators)), @@ -2163,6 +2168,14 @@ tr_status(Tid,Participant) -> false -> coordinator end. +get_transactions_count() -> + case req(transactions_count) of + {transactions_count, ParticipantsCount, CoordinatorsCount} -> + {ParticipantsCount, CoordinatorsCount}; + Error -> + Error + end. + get_info(Timeout) -> case whereis(?MODULE) of undefined -> diff --git a/lib/mnesia/test/mnesia_trans_access_test.erl b/lib/mnesia/test/mnesia_trans_access_test.erl index b33b807bfc..f1901b38f5 100644 --- a/lib/mnesia/test/mnesia_trans_access_test.erl +++ b/lib/mnesia/test/mnesia_trans_access_test.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1996-2021. All Rights Reserved. +%% Copyright Ericsson AB 1996-2023. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -28,7 +28,7 @@ -export([write/1, read/1, wread/1, delete/1, delete_object_bag/1, delete_object_set/1, - match_object/1, select/1, select14/1, all_keys/1, transaction/1, + match_object/1, select/1, select14/1, all_keys/1, transaction/1, transaction_counters/1, basic_nested/1, mix_of_nested_activities/1, nested_trans_both_ok/1, nested_trans_child_dies/1, nested_trans_parent_dies/1, nested_trans_both_dies/1, @@ -65,7 +65,7 @@ end_per_testcase(Func, Conf) -> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% all() -> [write, read, wread, delete, delete_object_bag, delete_object_set, - match_object, select, select14, all_keys, transaction, + match_object, select, select14, all_keys, transaction, transaction_counters, {group, nested_activities}, {group, index_tabs}, {group, index_lifecycle}]. @@ -546,6 +546,28 @@ transaction(Config) when is_list(Config) -> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +transaction_counters(suite) -> []; +transaction_counters(Config) -> + Nodes = ?acquire_nodes(1, Config), + + {atomic, {{Participants1, Coordinators1}, {Participants2, Coordinators2}}} = + mnesia:transaction(fun get_transactions_counters/0), + + ?match(Coordinators1, Coordinators2), + ?match(Coordinators1, 1), + ?match(Participants1, Participants2), + ?match(Participants1, 0), + + ?verify_mnesia(Nodes, []). + +get_transactions_counters() -> + {count_sides(mnesia_tm:get_transactions()), mnesia_tm:get_transactions_count()}. + +count_sides(TransactionsList) -> + lists:foldl( + fun({_Tid, _Pid, participant}, {Participants, Coordinators}) -> {Participants + 1, Coordinators}; + ({_Tid, _Pid, coordinator}, {Participants, Coordinators}) -> {Participants, Coordinators + 1} + end, {0, 0}, TransactionsList). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |