summaryrefslogtreecommitdiff
path: root/lib/mnesia
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mnesia')
-rw-r--r--lib/mnesia/src/mnesia.app.src2
-rw-r--r--lib/mnesia/src/mnesia_checkpoint.erl5
-rw-r--r--lib/mnesia/src/mnesia_tm.erl13
-rw-r--r--lib/mnesia/test/mnesia_trans_access_test.erl28
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).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%