diff options
author | Daniil Fedotov <hairyhum@gmail.com> | 2019-05-15 12:09:21 -0400 |
---|---|---|
committer | Daniil Fedotov <hairyhum@gmail.com> | 2019-05-15 12:09:21 -0400 |
commit | 7dd47cb7f3f49b25171d1ce860e431d8fab22175 (patch) | |
tree | cc0066e7e5fe092dbad4499d35e0cd8f84cc7a5f | |
parent | 29935dbcdd786a22d327f65857eda16a8fd5804a (diff) | |
download | rabbitmq-server-git-rabbit_data_dir.tar.gz |
Create rabbit_data module to extract data dir configuration.rabbit_data_dir
-rw-r--r-- | src/rabbit.erl | 6 | ||||
-rw-r--r-- | src/rabbit_data.erl | 61 | ||||
-rw-r--r-- | src/rabbit_disk_monitor.erl | 7 | ||||
-rw-r--r-- | src/rabbit_guid.erl | 2 | ||||
-rw-r--r-- | src/rabbit_mnesia.erl | 5 | ||||
-rw-r--r-- | src/rabbit_mnesia_rename.erl | 20 | ||||
-rw-r--r-- | src/rabbit_msg_store.erl | 4 | ||||
-rw-r--r-- | src/rabbit_node_monitor.erl | 6 | ||||
-rw-r--r-- | src/rabbit_plugins.erl | 22 | ||||
-rw-r--r-- | src/rabbit_policy.erl | 3 | ||||
-rw-r--r-- | src/rabbit_queue_index.erl | 10 | ||||
-rw-r--r-- | src/rabbit_recovery_terms.erl | 9 | ||||
-rw-r--r-- | src/rabbit_upgrade.erl | 10 | ||||
-rw-r--r-- | src/rabbit_variable_queue.erl | 13 | ||||
-rw-r--r-- | src/rabbit_version.erl | 4 | ||||
-rw-r--r-- | src/rabbit_vhost.erl | 3 | ||||
-rw-r--r-- | test/per_vhost_msg_store_SUITE.erl | 2 | ||||
-rw-r--r-- | test/unit_inbroker_non_parallel_SUITE.erl | 2 |
18 files changed, 118 insertions, 71 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl index 4a974fd682..d51da892a5 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -852,7 +852,8 @@ status() -> {enabled_plugin_file, rabbit_plugins:enabled_plugins_file()}], S6 = [{config_files, config_files()}, {log_files, log_locations()}, - {data_directory, rabbit_mnesia:dir()}], + %% TODO: list all dirs + {data_directory, rabbit_data:dir()}], Totals = case rabbit:is_running() of true -> [{virtual_host_count, rabbit_vhost:count()}, @@ -1196,7 +1197,8 @@ log_banner() -> {"cookie hash", rabbit_nodes:cookie_hash()}, {"log(s)", FirstLog}] ++ OtherLogs ++ - [{"database dir", rabbit_mnesia:dir()}], + %% TODO: list all dirs + [{"database dir", rabbit_data:dir()}], DescrLen = 1 + lists:max([length(K) || {K, _V} <- Settings]), Format = fun (K, V) -> rabbit_misc:format( diff --git a/src/rabbit_data.erl b/src/rabbit_data.erl new file mode 100644 index 0000000000..2af8d871ee --- /dev/null +++ b/src/rabbit_data.erl @@ -0,0 +1,61 @@ +-module(rabbit_data). + +-export([dir/0, + mnesia_dir/0, + metadata_dir/0, + message_store_dir/0, + vhosts_store_dir/0, + quorum_queues_dir/0]). +-export([metadata_file/1]). +-export([plugins_expand_dir/0, plugins_dir/0, enabled_plugins_file/0]). + +dir() -> + mnesia_dir(). + +mnesia_dir() -> + mnesia:system_info(directory). + +metadata_dir() -> + mnesia_dir(). + +message_store_dir() -> + filename:join(mnesia_dir(), "msg_stores"). + +vhosts_store_dir() -> + filename:join(message_store_dir(), "vhosts"). + +quorum_queues_dir() -> + filename:join(mnesia_dir(), "quorum"). + +metadata_file(FileName) when is_list(FileName); is_binary(FileName) -> + filename:join(metadata_dir(), FileName). + +upper_level_file(FileName) -> + filename:join(dir(), FileName). + +-spec plugins_expand_dir() -> file:filename(). +plugins_expand_dir() -> + case application:get_env(rabbit, plugins_expand_dir) of + {ok, ExpandDir} -> + ExpandDir; + _ -> + upper_level_file("plugins_expand_dir") + end. + +-spec plugins_dir() -> file:filename(). +plugins_dir() -> + case application:get_env(rabbit, plugins_dir) of + {ok, PluginsDistDir} -> + PluginsDistDir; + _ -> + upper_level_file("plugins_dir_stub") + end. + +-spec enabled_plugins_file() -> file:filename(). +enabled_plugins_file() -> + case application:get_env(rabbit, enabled_plugins_file) of + {ok, Val} -> + Val; + _ -> + upper_level_file("enabled_plugins") + end. diff --git a/src/rabbit_disk_monitor.erl b/src/rabbit_disk_monitor.erl index 4e5e3d2a28..c92a7bf05a 100644 --- a/src/rabbit_disk_monitor.erl +++ b/src/rabbit_disk_monitor.erl @@ -130,7 +130,9 @@ start_link(Args) -> gen_server:start_link({local, ?SERVER}, ?MODULE, [Args], []). init([Limit]) -> - Dir = dir(), + % the partition / drive containing this directory will be monitored + %% TODO: use multiple dirs + Dir = rabbit_data:dir(), {ok, Retries} = application:get_env(rabbit, disk_monitor_failure_retries), {ok, Interval} = application:get_env(rabbit, disk_monitor_failure_retry_interval), State = #state{dir = Dir, @@ -202,9 +204,6 @@ code_change(_OldVsn, State, _Extra) -> %% Server Internals %%---------------------------------------------------------------------------- -% the partition / drive containing this directory will be monitored -dir() -> rabbit_mnesia:dir(). - set_disk_limits(State, Limit0) -> Limit = interpret_limit(Limit0), State1 = State#state { limit = Limit }, diff --git a/src/rabbit_guid.erl b/src/rabbit_guid.erl index e0c16d572c..6458934f0c 100644 --- a/src/rabbit_guid.erl +++ b/src/rabbit_guid.erl @@ -51,7 +51,7 @@ start_link() -> -spec filename() -> string(). filename() -> - filename:join(rabbit_mnesia:dir(), ?SERIAL_FILENAME). + rabbit_data:metadata_file(?SERIAL_FILENAME). update_disk_serial() -> Filename = filename(), diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index 162badc33d..c0a294feb9 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -34,7 +34,6 @@ is_registered_process_alive/1, cluster_nodes/1, node_type/0, - dir/0, cluster_status_from_mnesia/0, %% Operations on the db and utils, mainly used in `rabbit_upgrade' and `rabbit' @@ -516,8 +515,8 @@ node_type() -> end. -spec dir() -> file:filename(). - -dir() -> mnesia:system_info(directory). +%% TODO: check usages of this function to separate mnesia specific cases +dir() -> rabbit_data:mnesia_dir(). %%---------------------------------------------------------------------------- %% Operations on the db diff --git a/src/rabbit_mnesia_rename.erl b/src/rabbit_mnesia_rename.erl index 0fc0d3364f..519f88e31e 100644 --- a/src/rabbit_mnesia_rename.erl +++ b/src/rabbit_mnesia_rename.erl @@ -82,7 +82,7 @@ rename(Node, NodeMapList) -> prepare(Node, NodeMapList) -> %% If we have a previous rename and haven't started since, give up. - case rabbit_file:is_dir(dir()) of + case rabbit_file:is_dir(rename_dir()) of true -> exit({rename_in_progress, "Restart node under old name to roll back"}); false -> ok = rabbit_file:ensure_dir(mnesia_copy_dir()) @@ -156,9 +156,9 @@ finish(FromNode, ToNode, AllNodes) -> "Abandoning rename from ~s to ~s since we are still ~s~n", [FromNode, ToNode, FromNode]), [{ok, _} = file:copy(backup_of_conf(F), F) || F <- config_files()], - ok = rabbit_file:recursive_delete([rabbit_mnesia:dir()]), + ok = rabbit_file:recursive_delete([rabbit_data:dir()]), ok = rabbit_file:recursive_copy( - mnesia_copy_dir(), rabbit_mnesia:dir()), + mnesia_copy_dir(), rabbit_data:dir()), delete_rename_files(); _ -> %% Boot will almost certainly fail but we might as @@ -182,13 +182,13 @@ finish_secondary(FromNode, ToNode, AllNodes) -> delete_rename_files(), ok. -dir() -> rabbit_mnesia:dir() ++ "-rename". -before_backup_name() -> dir() ++ "/backup-before". -after_backup_name() -> dir() ++ "/backup-after". -rename_config_name() -> dir() ++ "/pending.config". -mnesia_copy_dir() -> dir() ++ "/mnesia-copy". +rename_dir() -> rabbit_data:dir() ++ "-rename". +before_backup_name() -> rename_dir() ++ "/backup-before". +after_backup_name() -> rename_dir() ++ "/backup-after". +rename_config_name() -> rename_dir() ++ "/pending.config". +mnesia_copy_dir() -> rename_dir() ++ "/mnesia-copy". -delete_rename_files() -> ok = rabbit_file:recursive_delete([dir()]). +delete_rename_files() -> ok = rabbit_file:recursive_delete([rename_dir()]). start_mnesia() -> rabbit_misc:ensure_ok(mnesia:start(), cannot_start_mnesia), rabbit_table:force_load(), @@ -211,7 +211,7 @@ config_files() -> rabbit_node_monitor:cluster_status_filename()]. backup_of_conf(Path) -> - filename:join([dir(), filename:basename(Path)]). + filename:join([rename_dir(), filename:basename(Path)]). convert_config_files(NodeMap) -> [convert_config_file(NodeMap, Path) || Path <- config_files()]. diff --git a/src/rabbit_msg_store.erl b/src/rabbit_msg_store.erl index e3b23cfbca..5271d503eb 100644 --- a/src/rabbit_msg_store.erl +++ b/src/rabbit_msg_store.erl @@ -1971,7 +1971,7 @@ cleanup_after_file_deletion(File, %%---------------------------------------------------------------------------- -spec combine_files(non_neg_integer(), non_neg_integer(), gc_state()) -> - {ok, deletion_thunk()} | {defer, non_neg_integer()}. + {ok, deletion_thunk()} | {defer, [non_neg_integer()]}. combine_files(Source, Destination, State = #gc_state { file_summary_ets = FileSummaryEts }) -> @@ -2073,7 +2073,7 @@ do_combine_files(SourceSummary, DestinationSummary, gen_server2:cast(Server, {combine_files, Source, Destination, Reclaimed}), safe_file_delete_fun(Source, Dir, FileHandlesEts). --spec delete_file(non_neg_integer(), gc_state()) -> {ok, deletion_thunk()} | {defer, non_neg_integer()}. +-spec delete_file(non_neg_integer(), gc_state()) -> {ok, deletion_thunk()} | {defer, [non_neg_integer()]}. delete_file(File, State = #gc_state { file_summary_ets = FileSummaryEts, file_handles_ets = FileHandlesEts, diff --git a/src/rabbit_node_monitor.erl b/src/rabbit_node_monitor.erl index 9a47c4030e..2088f46575 100644 --- a/src/rabbit_node_monitor.erl +++ b/src/rabbit_node_monitor.erl @@ -74,15 +74,15 @@ start_link() -> gen_server:start_link({local, ?SERVER}, ?MODULE, [], []). -spec running_nodes_filename() -> string(). running_nodes_filename() -> - filename:join(rabbit_mnesia:dir(), "nodes_running_at_shutdown"). + rabbit_data:metadata_file("nodes_running_at_shutdown"). -spec cluster_status_filename() -> string(). cluster_status_filename() -> - filename:join(rabbit_mnesia:dir(), "cluster_nodes.config"). + rabbit_data:metadata_file("cluster_nodes.config"). quorum_filename() -> - filename:join(rabbit_mnesia:dir(), "quorum"). + rabbit_data:quorum_queues_dir(). -spec prepare_cluster_status_files() -> 'ok' | no_return(). diff --git a/src/rabbit_plugins.erl b/src/rabbit_plugins.erl index 7757b5229e..d03b83e787 100644 --- a/src/rabbit_plugins.erl +++ b/src/rabbit_plugins.erl @@ -83,33 +83,19 @@ ensure1(FileJustChanged0) -> -spec plugins_expand_dir() -> file:filename(). plugins_expand_dir() -> - case application:get_env(rabbit, plugins_expand_dir) of - {ok, ExpandDir} -> - ExpandDir; - _ -> - filename:join([rabbit_mnesia:dir(), "plugins_expand_dir"]) - end. + rabbit_data:plugins_expand_dir(). -spec plugins_dir() -> file:filename(). plugins_dir() -> - case application:get_env(rabbit, plugins_dir) of - {ok, PluginsDistDir} -> - PluginsDistDir; - _ -> - filename:join([rabbit_mnesia:dir(), "plugins_dir_stub"]) - end. + rabbit_data:plugins_dir(). -spec enabled_plugins_file() -> file:filename(). enabled_plugins_file() -> - case application:get_env(rabbit, enabled_plugins_file) of - {ok, Val} -> - Val; - _ -> - filename:join([rabbit_mnesia:dir(), "enabled_plugins"]) - end. + rabbit_data:enabled_plugins_file(). -spec enabled_plugins() -> [atom()]. enabled_plugins() -> + %% TODO: why not enabled_plugins_file/0 ? case application:get_env(rabbit, enabled_plugins_file) of {ok, EnabledFile} -> read_enabled(EnabledFile); diff --git a/src/rabbit_policy.erl b/src/rabbit_policy.erl index ff07bfa8ee..26c3c0691b 100644 --- a/src/rabbit_policy.erl +++ b/src/rabbit_policy.erl @@ -223,7 +223,8 @@ recover0() -> ok. invalid_file() -> - filename:join(rabbit_mnesia:dir(), "policies_are_invalid"). + %% TODO: is this file related to mnesia data dir? + rabbit_data:metadata_file("policies_are_invalid"). %%---------------------------------------------------------------------------- diff --git a/src/rabbit_queue_index.erl b/src/rabbit_queue_index.erl index 9de86ee232..11a3eec367 100644 --- a/src/rabbit_queue_index.erl +++ b/src/rabbit_queue_index.erl @@ -582,9 +582,6 @@ queue_name_to_dir_name_legacy(Name = #resource { kind = queue }) -> <<Num:128>> = erlang:md5(term_to_binary_compat:term_to_binary_1(Name)), rabbit_misc:format("~.36B", [Num]). -queues_base_dir() -> - rabbit_mnesia:dir(). - blank_state_name_dir_funs(Name, Dir, OnSyncFun, OnSyncMsgFun) -> {ok, MaxJournal} = application:get_env(rabbit, queue_index_max_journal_entries), @@ -1469,7 +1466,7 @@ drive_transform_fun(Fun, Hdl, Contents) -> end. move_to_per_vhost_stores(#resource{} = QueueName) -> - OldQueueDir = filename:join([queues_base_dir(), "queues", + OldQueueDir = filename:join([legacy_queues_base_dir(), queue_name_to_dir_name_legacy(QueueName)]), NewQueueDir = queue_dir(QueueName), rabbit_log_upgrade:info("About to migrate queue directory '~s' to '~s'", @@ -1513,10 +1510,13 @@ read_global_recovery_terms(DurableQueueNames) -> {OrderedTerms, {fun queue_index_walker/1, {start, DurableQueueNames}}}. cleanup_global_recovery_terms() -> - rabbit_file:recursive_delete([filename:join([queues_base_dir(), "queues"])]), + rabbit_file:recursive_delete([legacy_queues_base_dir()]), rabbit_recovery_terms:delete_global_table(), ok. +%% Legacy queues directory +legacy_queues_base_dir() -> + filename:join(rabbit_data:mnesia_dir(), "queues"). update_recovery_term(#resource{virtual_host = VHost} = QueueName, Term) -> Key = queue_name_to_dir_name(QueueName), diff --git a/src/rabbit_recovery_terms.erl b/src/rabbit_recovery_terms.erl index 41327147d0..0ddf229b96 100644 --- a/src/rabbit_recovery_terms.erl +++ b/src/rabbit_recovery_terms.erl @@ -109,7 +109,7 @@ start_link(VHost) -> upgrade_recovery_terms() -> open_global_table(), try - QueuesDir = filename:join(rabbit_mnesia:dir(), "queues"), + QueuesDir = filename:join(legacy_data_dir(), "queues"), Dirs = case rabbit_file:list_dir(QueuesDir) of {ok, Entries} -> Entries; {error, _} -> [] @@ -143,7 +143,7 @@ dets_upgrade(Fun)-> end. open_global_table() -> - File = filename:join(rabbit_mnesia:dir(), "recovery.dets"), + File = filename:join(legacy_data_dir(), "recovery.dets"), {ok, _} = dets:open_file(?MODULE, [{file, File}, {ram_file, true}, {auto_save, infinity}]), @@ -170,7 +170,10 @@ read_global(DirBaseName) -> end. delete_global_table() -> - file:delete(filename:join(rabbit_mnesia:dir(), "recovery.dets")). + file:delete(filename:join(legacy_data_dir(), "recovery.dets")). + +legacy_data_dir() -> + rabbit_data:mnesia_dir(). %%---------------------------------------------------------------------------- diff --git a/src/rabbit_upgrade.erl b/src/rabbit_upgrade.erl index 87029fad02..50ccd9ced1 100644 --- a/src/rabbit_upgrade.erl +++ b/src/rabbit_upgrade.erl @@ -22,7 +22,6 @@ -include("rabbit.hrl"). --define(VERSION_FILENAME, "schema_version"). -define(LOCK_FILENAME, "schema_upgrade_lock"). %% ------------------------------------------------------------------- @@ -303,11 +302,8 @@ apply_upgrade(Scope, {M, F}) -> %% ------------------------------------------------------------------- -dir() -> rabbit_mnesia:dir(). - -lock_filename() -> lock_filename(dir()). -lock_filename(Dir) -> filename:join(Dir, ?LOCK_FILENAME). -backup_dir() -> dir() ++ "-upgrade-backup". +lock_filename() -> rabbit_data:metadata_file(?LOCK_FILENAME). +backup_dir() -> rabbit_data:dir() ++ "-upgrade-backup". node_type_legacy() -> %% This is pretty ugly but we can't start Mnesia and ask it (will @@ -315,7 +311,7 @@ node_type_legacy() -> %% even if we're a disc node). We also can't use %% rabbit_mnesia:node_type/0 because that will give false %% positives on Rabbit up to 2.5.1. - case filelib:is_regular(filename:join(dir(), "rabbit_durable_exchange.DCD")) of + case filelib:is_regular(filename:join(rabbit_data:mnesia_dir(), "rabbit_durable_exchange.DCD")) of true -> disc; false -> ram end. diff --git a/src/rabbit_variable_queue.erl b/src/rabbit_variable_queue.erl index dfd55be1d0..52c5a7ec36 100644 --- a/src/rabbit_variable_queue.erl +++ b/src/rabbit_variable_queue.erl @@ -2809,9 +2809,12 @@ transform_storage(TransformFun) -> transform_store(?PERSISTENT_MSG_STORE, TransformFun), transform_store(?TRANSIENT_MSG_STORE, TransformFun). +legacy_message_store_base_dir() -> + rabbit_data:mnesia_dir(). + transform_store(Store, TransformFun) -> - rabbit_msg_store:force_recovery(rabbit_mnesia:dir(), Store), - rabbit_msg_store:transform_dir(rabbit_mnesia:dir(), Store, TransformFun). + rabbit_msg_store:force_recovery(legacy_message_store_base_dir(), Store), + rabbit_msg_store:transform_dir(legacy_message_store_base_dir(), Store, TransformFun). move_messages_to_vhost_store() -> case list_persistent_queues() of @@ -2965,7 +2968,7 @@ read_old_recovery_terms(Queues) -> run_old_persistent_store(Refs, StartFunState) -> OldStoreName = ?PERSISTENT_MSG_STORE, ok = rabbit_sup:start_child(OldStoreName, rabbit_msg_store, start_global_store_link, - [OldStoreName, rabbit_mnesia:dir(), + [OldStoreName, legacy_message_store_base_dir(), Refs, StartFunState]), OldStoreName. @@ -2992,10 +2995,10 @@ stop_new_store(NewStore) -> delete_old_store() -> log_upgrade("Removing the old message store data"), rabbit_file:recursive_delete( - [filename:join([rabbit_mnesia:dir(), ?PERSISTENT_MSG_STORE])]), + [filename:join([legacy_message_store_base_dir(), ?PERSISTENT_MSG_STORE])]), %% Delete old transient store as well rabbit_file:recursive_delete( - [filename:join([rabbit_mnesia:dir(), ?TRANSIENT_MSG_STORE])]), + [filename:join([legacy_message_store_base_dir(), ?TRANSIENT_MSG_STORE])]), ok. log_upgrade(Msg) -> diff --git a/src/rabbit_version.erl b/src/rabbit_version.erl index 3e9d7dad80..5c3504697b 100644 --- a/src/rabbit_version.erl +++ b/src/rabbit_version.erl @@ -201,9 +201,7 @@ categorise_by_scope(Version) when is_list(Version) -> rabbit_misc:maps_cons(Scope, Name, CatVersion) end, maps:new(), Categorised)). -dir() -> rabbit_mnesia:dir(). - -schema_filename() -> filename:join(dir(), ?VERSION_FILENAME). +schema_filename() -> rabbit_data:metadata_file(?VERSION_FILENAME). %% -------------------------------------------------------------------- diff --git a/src/rabbit_vhost.erl b/src/rabbit_vhost.erl index 8ab5a09725..05072c105f 100644 --- a/src/rabbit_vhost.erl +++ b/src/rabbit_vhost.erl @@ -314,8 +314,7 @@ msg_store_dir_wildcard() -> rabbit_data_coercion:to_list(filename:join([msg_store_dir_base(), "*"])). msg_store_dir_base() -> - Dir = rabbit_mnesia:dir(), - filename:join([Dir, "msg_stores", "vhosts"]). + rabbit_data:vhosts_store_dir(). %%---------------------------------------------------------------------------- diff --git a/test/per_vhost_msg_store_SUITE.erl b/test/per_vhost_msg_store_SUITE.erl index 5d1209dd96..f8dda0fd1f 100644 --- a/test/per_vhost_msg_store_SUITE.erl +++ b/test/per_vhost_msg_store_SUITE.erl @@ -202,7 +202,7 @@ folder_size(Dir) -> fun(F,Acc) -> filelib:file_size(F) + Acc end, 0). get_global_folder_size(Config) -> - BaseDir = rabbit_ct_broker_helpers:rpc(Config, 0, rabbit_mnesia, dir, []), + BaseDir = rabbit_ct_broker_helpers:rpc(Config, 0, rabbit_data, dir, []), folder_size(BaseDir). vhost_dir(Vhost, Config) -> diff --git a/test/unit_inbroker_non_parallel_SUITE.erl b/test/unit_inbroker_non_parallel_SUITE.erl index b9aa63ffaa..fabc587f0c 100644 --- a/test/unit_inbroker_non_parallel_SUITE.erl +++ b/test/unit_inbroker_non_parallel_SUITE.erl @@ -145,7 +145,7 @@ file_handle_cache1(_Config) -> %% test copying when there is just one spare handle Limit = file_handle_cache:get_limit(), ok = file_handle_cache:set_limit(5), %% 1 or 2 sockets, 2 msg_stores - TmpDir = filename:join(rabbit_mnesia:dir(), "tmp"), + TmpDir = filename:join(rabbit_data:dir(), "tmp"), ok = filelib:ensure_dir(filename:join(TmpDir, "nothing")), [Src1, Dst1, Src2, Dst2] = Files = [filename:join(TmpDir, Str) || Str <- ["file1", "file2", "file3", "file4"]], |