summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@lshift.net>2009-08-21 17:23:19 +0100
committerMatthew Sackman <matthew@lshift.net>2009-08-21 17:23:19 +0100
commit3ecada5db2976cf44b777a1ac1a0e4693fa74e86 (patch)
tree3c6cf34288df789f5549adf6dee3c6a5e46a28d8 /src
parent7d3a1dc92ad46b07269900880e5defd76905bb29 (diff)
parente9f81f2abcfa4c51410904bf9b01f1c5d5f9dd77 (diff)
downloadrabbitmq-server-git-3ecada5db2976cf44b777a1ac1a0e4693fa74e86.tar.gz
merging from bug 21429
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_mnesia.erl16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index d901ba65d8..b36bce78ff 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -279,7 +279,7 @@ init_db(ClusterNodes) ->
IsDiskNode = ClusterNodes == [] orelse
lists:member(node(), ClusterNodes),
ok = wait_for_replicated_tables(),
- ok = create_local_table_copy(schema, disc_copies),
+ ok = create_local_table_copy(schema, false, disc_copies),
ok = create_local_table_copies(case IsDiskNode of
true -> disc;
false -> ram
@@ -340,6 +340,12 @@ table_has_copy_type(TabDef, DiscType) ->
{value, {DiscType, List}} -> lists:member(node(), List)
end.
+is_local_content_table(TabDef) ->
+ case lists:keysearch(local_content, 1, TabDef) of
+ false -> false;
+ {value, {local_content, Bool}} -> Bool
+ end.
+
create_local_table_copies(Type) ->
lists:foreach(
fun({Tab, TabDef}) ->
@@ -363,18 +369,20 @@ create_local_table_copies(Type) ->
ram ->
ram_copies
end,
- ok = create_local_table_copy(Tab, StorageType)
+ IsLocalTab = is_local_content_table(TabDef),
+ ok = create_local_table_copy(Tab, IsLocalTab, StorageType)
end,
table_definitions()),
ok.
-create_local_table_copy(Tab, Type) ->
+create_local_table_copy(Tab, IsLocal, Type) ->
StorageType = mnesia:table_info(Tab, storage_type),
{atomic, ok} =
if
StorageType == unknown ->
mnesia:add_table_copy(Tab, node(), Type);
- StorageType /= Type ->
+ StorageType /= Type andalso
+ ((not IsLocal) orelse (Type /= ram_copies))->
mnesia:change_table_copy_type(Tab, node(), Type);
true -> {atomic, ok}
end,