From 6ba2b5402c3dea5b765034436ae9e6b3ca4e2ce5 Mon Sep 17 00:00:00 2001 From: Dan Gudmundsson Date: Wed, 27 Aug 2014 09:00:14 +0200 Subject: Avoid timing issue in schema transaction when node is stopping By doing an abort, the create_table can be restarted if a node go down during the transaction. {badarg, [{erlang,link,[undefined],[]}, {mnesia_controller, wait_for_schema_commit_lock,0, [{file,"mnesia_controller.erl"}, {line,303}]}, {mnesia_schema,prepare_commit,3, [{file,"mnesia_schema.erl"}, {line,1838}]}, {mnesia_tm,commit_participant,6, [{file,"mnesia_tm.erl"}, {line,1669}]}]}}}, --- lib/mnesia/src/mnesia_controller.erl | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'lib/mnesia') diff --git a/lib/mnesia/src/mnesia_controller.erl b/lib/mnesia/src/mnesia_controller.erl index fe2fd67d71..5a9bae54da 100644 --- a/lib/mnesia/src/mnesia_controller.erl +++ b/lib/mnesia/src/mnesia_controller.erl @@ -300,8 +300,13 @@ mnesia_down(Node) -> end. wait_for_schema_commit_lock() -> - link(whereis(?SERVER_NAME)), - unsafe_call(wait_for_schema_commit_lock). + try + Pid = whereis(?SERVER_NAME), + link(Pid), %% Keep the link until release_schema_commit_lock + gen_server:call(Pid, wait_for_schema_commit_lock, infinity) + catch _:_ -> + mnesia:abort({node_not_running, node()}) + end. block_controller() -> call(block_controller). @@ -557,12 +562,6 @@ cast(Msg) -> abcast(Nodes, Msg) -> gen_server:abcast(Nodes, ?SERVER_NAME, Msg). -unsafe_call(Msg) -> - case whereis(?SERVER_NAME) of - undefined -> {error, {node_not_running, node()}}; - Pid -> gen_server:call(Pid, Msg, infinity) - end. - call(Msg) -> case whereis(?SERVER_NAME) of undefined -> -- cgit v1.2.3 From cf22dd093ea92b396884e46e10e62b26793655ac Mon Sep 17 00:00:00 2001 From: Erlang/OTP Date: Fri, 29 Aug 2014 09:34:44 +0200 Subject: Prepare release --- lib/mnesia/doc/src/notes.xml | 18 +++++++++++++++++- lib/mnesia/vsn.mk | 2 +- 2 files changed, 18 insertions(+), 2 deletions(-) (limited to 'lib/mnesia') diff --git a/lib/mnesia/doc/src/notes.xml b/lib/mnesia/doc/src/notes.xml index 08212dfede..df2c27afba 100644 --- a/lib/mnesia/doc/src/notes.xml +++ b/lib/mnesia/doc/src/notes.xml @@ -38,7 +38,23 @@ thus constitutes one section in this document. The title of each section is the version number of Mnesia.

-
Mnesia 4.12.1 +
Mnesia 4.12.2 + +
Fixed Bugs and Malfunctions + + +

+ Fixed a race which could make create_table fail if a node + was going down during the transaction.

+

+ Own Id: OTP-12124 Aux Id: seq12694

+
+
+
+ +
+ +
Mnesia 4.12.1
Fixed Bugs and Malfunctions diff --git a/lib/mnesia/vsn.mk b/lib/mnesia/vsn.mk index 173c46898b..d16d501103 100644 --- a/lib/mnesia/vsn.mk +++ b/lib/mnesia/vsn.mk @@ -1 +1 @@ -MNESIA_VSN = 4.12.1 +MNESIA_VSN = 4.12.2 -- cgit v1.2.3