From 545d88ac5b1a6bb6fe219c3175e1cafd716f1581 Mon Sep 17 00:00:00 2001 From: Dan Gudmundsson Date: Tue, 19 Jan 2016 16:08:08 +0100 Subject: mnesia_ext: Create table/data containers from mnesia monitor not temporary processes Tables or data containers should be owned and monitored by mnesia_monitor and should thus be created by that process. Always create_table before loading it We need to create tables for ram_copies at least before loading them as they are intermittent. It is also needed to get mnesia monitor as the parent and supervisor of the data storage. --- lib/mnesia/src/mnesia_loader.erl | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'lib/mnesia/src/mnesia_loader.erl') diff --git a/lib/mnesia/src/mnesia_loader.erl b/lib/mnesia/src/mnesia_loader.erl index 93660007f1..67afef6f8c 100644 --- a/lib/mnesia/src/mnesia_loader.erl +++ b/lib/mnesia/src/mnesia_loader.erl @@ -150,11 +150,17 @@ do_get_disc_copy2(Tab, Reason, Storage, Type) when Storage == disc_only_copies - end; do_get_disc_copy2(Tab, Reason, Storage = {ext, Alias, Mod}, _Type) -> - ok = ext_load_table(Mod, Alias, Tab, Reason), - mnesia_index:init_index(Tab, Storage), - set({Tab, load_node}, node()), - set({Tab, load_reason}, Reason), - {loaded, ok}. + Cs = val({Tab, cstruct}), + case mnesia_monitor:unsafe_create_external(Tab, Alias, Mod, Cs) of + ok -> + ok = ext_load_table(Mod, Alias, Tab, Reason), + mnesia_index:init_index(Tab, Storage), + set({Tab, load_node}, node()), + set({Tab, load_reason}, Reason), + {loaded, ok}; + Other -> + {not_loaded, Other} + end. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Load a table from a remote node -- cgit v1.2.3