diff options
| author | Matthew Sackman <matthew@lshift.net> | 2009-08-21 17:23:19 +0100 |
|---|---|---|
| committer | Matthew Sackman <matthew@lshift.net> | 2009-08-21 17:23:19 +0100 |
| commit | 3ecada5db2976cf44b777a1ac1a0e4693fa74e86 (patch) | |
| tree | 3c6cf34288df789f5549adf6dee3c6a5e46a28d8 /src | |
| parent | 7d3a1dc92ad46b07269900880e5defd76905bb29 (diff) | |
| parent | e9f81f2abcfa4c51410904bf9b01f1c5d5f9dd77 (diff) | |
| download | rabbitmq-server-git-3ecada5db2976cf44b777a1ac1a0e4693fa74e86.tar.gz | |
merging from bug 21429
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_mnesia.erl | 16 |
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, |
