diff options
| author | Daniil Fedotov <dfedotov@pivotal.io> | 2016-04-04 17:19:00 +0100 |
|---|---|---|
| committer | Daniil Fedotov <dfedotov@pivotal.io> | 2016-04-04 17:19:00 +0100 |
| commit | 9b23813646904e149a33a848a36d9341547fb3dd (patch) | |
| tree | 3907dd21b7b1b1480536cb0283e41956028bb604 /src | |
| parent | 47baba044ae832b9e3bb7c3862e54ffdcda48d28 (diff) | |
| download | rabbitmq-server-git-9b23813646904e149a33a848a36d9341547fb3dd.tar.gz | |
Log invalid plugins during startup
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_plugins.erl | 46 | ||||
| -rw-r--r-- | src/rabbit_plugins_main.erl | 26 |
2 files changed, 38 insertions, 34 deletions
diff --git a/src/rabbit_plugins.erl b/src/rabbit_plugins.erl index bb09be3370..054ec1cf91 100644 --- a/src/rabbit_plugins.erl +++ b/src/rabbit_plugins.erl @@ -22,9 +22,9 @@ -export([ensure/1]). -export([extract_schemas/1]). -export([version_support/2]). +-export([validate_plugins/1, format_invalid_plugins/1]). %%---------------------------------------------------------------------------- --compile(export_all). -ifdef(use_specs). -type(plugin_name() :: atom()). @@ -252,43 +252,65 @@ prepare_plugins(Enabled) -> Wanted = dependencies(false, Enabled, AllPlugins), WantedPlugins = lookup_plugins(Wanted, AllPlugins), {ValidPlugins, Problems} = validate_plugins(WantedPlugins), - %TODO: do not enable invalid plugins + %TODO: error message formatting + rabbit_log:warning(format_invalid_plugins(Problems)), case filelib:ensure_dir(ExpandDir ++ "/") of ok -> ok; {error, E2} -> throw({error, {cannot_create_plugins_expand_dir, [ExpandDir, E2]}}) end, - [prepare_plugin(Plugin, ExpandDir) || Plugin <- WantedPlugins], + [prepare_plugin(Plugin, ExpandDir) || Plugin <- ValidPlugins], [prepare_dir_plugin(PluginAppDescPath) || PluginAppDescPath <- filelib:wildcard(ExpandDir ++ "/*/ebin/*.app")], Wanted. -validate_plugins(WantedPlugins) -> +format_invalid_plugins(InvalidPlugins) -> + lists:flatten(["Failed to enable some plugins: \r\n" + | [format_invalid_plugin(Plugin) + || Plugin <- InvalidPlugins]]). + +format_invalid_plugin({Name, Errors}) -> + [io_lib:format(" ~p:~n", [Name]) + | [format_invalid_plugin_error(Err) || Err <- Errors]]. + +format_invalid_plugin_error({missing_dependency, Dep}) -> + io_lib:format(" Dependency is missing or invalid: ~p~n", [Dep]); +format_invalid_plugin_error({version_mismatch, {Version, Required}}) -> + io_lib:format(" Broker version is invalid." + " Current version: ~p Required: ~p~n", [Version, Required]); +format_invalid_plugin_error({{version_mismatch, {Version, Required}}, Name}) -> + io_lib:format(" ~p plugin version is invalid." + " Current version: ~p Required: ~p~n", + [Name, Version, Required]); +format_invalid_plugin_error(Err) -> + io_lib:format(" Unknown error ~p~n", [Err]). + +validate_plugins(Plugins) -> application:load(rabbit), RabbitVersion = RabbitVersion = case application:get_key(rabbit, vsn) of undefined -> "0.0.0"; {ok, Val} -> Val end, - validate_plugins(WantedPlugins, RabbitVersion). + validate_plugins(Plugins, RabbitVersion). -validate_plugins(WantedPlugins, RabbitVersion) -> +validate_plugins(Plugins, RabbitVersion) -> lists:foldl( fun(#plugin{name = Name, rabbitmq_versions = RabbitmqVersions, plugins_versions = PluginsVersions} = Plugin, - {Plugins, Errors}) -> + {Plugins0, Errors}) -> case version_support(RabbitVersion, RabbitmqVersions) of - {error, Err} -> {Plugins, [{Name, [Err]} | Errors]}; + {error, Err} -> {Plugins0, [{Name, [Err]} | Errors]}; ok -> - case check_plugins_versions(Plugins, PluginsVersions) of - ok -> {[Plugin | Plugins], Errors}; - {error, Err} -> {Plugins, [{Name, Err} | Errors]} + case check_plugins_versions(Plugins0, PluginsVersions) of + ok -> {[Plugin | Plugins0], Errors}; + {error, Err} -> {Plugins0, [{Name, Err} | Errors]} end end end, {[],[]}, - WantedPlugins). + Plugins). check_plugins_versions(AllPlugins, RequiredVersions) -> ExistingVersions = [{Name, Vsn} diff --git a/src/rabbit_plugins_main.erl b/src/rabbit_plugins_main.erl index 18cb9b8ce7..d4df931f64 100644 --- a/src/rabbit_plugins_main.erl +++ b/src/rabbit_plugins_main.erl @@ -102,7 +102,8 @@ action(enable, Node, ToEnable0, Opts, State = #cli{all = All, Invalid = validate_plugins(NewEnabled, State), case Invalid of [] -> ok; - _ -> throw({error_string, fmt_invalid(Invalid)}) + _ -> throw({error_string, + rabbit_plugins:format_invalid_plugins(Invalid)}) end, NewImplicit = write_enabled_plugins(NewEnabled, State), case NewEnabled -- Implicit of @@ -123,7 +124,8 @@ action(set, Node, NewEnabled0, Opts, State = #cli{all = All, Invalid = validate_plugins(NewEnabled, State), case Invalid of [] -> ok; - _ -> throw({error_string, fmt_invalid(Invalid)}) + _ -> throw({error_string, + rabbit_plugins:format_invalid_plugins(Invalid)}) end, NewImplicit = write_enabled_plugins(NewEnabled, State), case NewImplicit of @@ -175,26 +177,6 @@ validate_plugins(Names, #cli{all = All}) -> {_, Errors} = rabbit_plugins:validate_plugins(DepsPlugins), Errors. -fmt_invalid(InvalidPlugins) -> - lists:flatten(["Failed to enable some plugins: \r\n" - | [fmt_invalid_plugin(Plugin) || Plugin <- InvalidPlugins]]). - -fmt_invalid_plugin({Name, Errors}) -> - [io_lib:format(" ~p:~n", [Name]) - | [fmt_invalid_plugin_error(Err) || Err <- Errors]]. - -fmt_invalid_plugin_error({missing_dependency, Dep}) -> - io_lib:format(" Dependency is missing or invalid: ~p~n", [Dep]); -fmt_invalid_plugin_error({version_mismatch, {Version, Required}}) -> - io_lib:format(" Broker version is invalid." - " Current version: ~p Required: ~p~n", [Version, Required]); -fmt_invalid_plugin_error({{version_mismatch, {Version, Required}}, Name}) -> - io_lib:format(" ~p plugin version is invalid." - " Current version: ~p Required: ~p~n", - [Name, Version, Required]); -fmt_invalid_plugin_error(Err) -> - io_lib:format(" Unknown error ~p~n", [Err]). - %% Pretty print a list of plugins. format_plugins(Node, Pattern, Opts, #cli{all = All, enabled = Enabled, |
