]> granicus.if.org Git - ejabberd/commitdiff
Don't retain module option on gen_mod supervisor
authorEvgeny Khramtsov <ekhramtsov@process-one.net>
Sun, 4 Aug 2019 18:46:18 +0000 (21:46 +0300)
committerEvgeny Khramtsov <ekhramtsov@process-one.net>
Sun, 4 Aug 2019 18:46:18 +0000 (21:46 +0300)
When module's options were updated (e.g. by reloading ejabberd.yml)
and, later, the module's process crashed, gen_mod supervisor
restarts the process with outdated options. This is now fixed.

20 files changed:
src/mod_announce.erl
src/mod_caps.erl
src/mod_delegation.erl
src/mod_fail2ban.erl
src/mod_http_fileserver.erl
src/mod_http_upload.erl
src/mod_http_upload_quota.erl
src/mod_mix.erl
src/mod_mqtt.erl
src/mod_muc.erl
src/mod_muc_log.erl
src/mod_muc_sup.erl
src/mod_multicast.erl
src/mod_ping.erl
src/mod_privilege.erl
src/mod_proxy65.erl
src/mod_proxy65_service.erl
src/mod_pubsub.erl
src/mod_shared_roster_ldap.erl
src/mod_vcard.erl

index dab1eb6f6875bd50879c279855c4d804ddf26c8d..7465b743888fd8dc3056c85db073593478dca0dc 100644 (file)
@@ -101,8 +101,9 @@ depends(_Host, _Opts) ->
 %%====================================================================
 %% gen_server callbacks
 %%====================================================================
-init([Host, Opts]) ->
+init([Host|_]) ->
     process_flag(trap_exit, true),
+    Opts = gen_mod:get_module_opts(Host, ?MODULE),
     Mod = gen_mod:db_mod(Opts, ?MODULE),
     Mod:init(Host, Opts),
     init_cache(Mod, Host, Opts),
index 44a517cdda537c196e1067f6c0b16a2a36e71d74..7a41d9ff2f09e5d0c823e040fd374df0dba4148b 100644 (file)
@@ -263,8 +263,9 @@ reload(Host, NewOpts, OldOpts) ->
     end,
     init_cache(NewMod, Host, NewOpts).
 
-init([Host, Opts]) ->
+init([Host|_]) ->
     process_flag(trap_exit, true),
+    Opts = gen_mod:get_module_opts(Host, ?MODULE),
     Mod = gen_mod:db_mod(Opts, ?MODULE),
     init_cache(Mod, Host, Opts),
     Mod:init(Host, Opts),
index 681f7c123f1ce221d4d5878f1fa396655add65b1..afbfa4280d9a4946a3639eeba50c9aa2721b12e0 100644 (file)
@@ -135,7 +135,7 @@ disco_sm_identity(Acc, From, To, Node, Lang) ->
 %%%===================================================================
 %%% gen_server callbacks
 %%%===================================================================
-init([Host, _Opts]) ->
+init([Host|_]) ->
     process_flag(trap_exit, true),
     catch ets:new(?MODULE,
                   [named_table, public,
index 9bf5ebfeba30e64dad3615c8c3810f7ea8f304d7..7c5cf374eb73974cc8f6de95ec74a657af545188 100644 (file)
@@ -128,7 +128,7 @@ depends(_Host, _Opts) ->
 %%%===================================================================
 %%% gen_server callbacks
 %%%===================================================================
-init([Host, _Opts]) ->
+init([Host|_]) ->
     process_flag(trap_exit, true),
     ejabberd_hooks:add(c2s_auth_result, Host, ?MODULE, c2s_auth_result, 100),
     ejabberd_hooks:add(c2s_stream_started, Host, ?MODULE, c2s_stream_started, 100),
index 556651ef8667d3144937c169e5acc80b23ac912f..2e6aa3358892ec1ff7be920df5bea8816c0f1f31 100644 (file)
@@ -110,7 +110,8 @@ depends(_Host, _Opts) ->
 %%                         {stop, Reason}
 %% Description: Initiates the server
 %%--------------------------------------------------------------------
-init([Host, Opts]) ->
+init([Host|_]) ->
+    Opts = gen_mod:get_module_opts(Host, ?MODULE),
     try initialize(Host, Opts) of
        State ->
            process_flag(trap_exit, true),
index 2bf3e0fccf07802c6f712961cbd2340f6ef44957..5aca8583a19c9386592efdd133821289d271c035 100644 (file)
@@ -230,8 +230,9 @@ depends(_Host, _Opts) ->
 %% gen_server callbacks.
 %%--------------------------------------------------------------------
 -spec init(list()) -> {ok, state()}.
-init([ServerHost, Opts]) ->
+init([ServerHost|_]) ->
     process_flag(trap_exit, true),
+    Opts = gen_mod:get_module_opts(ServerHost, ?MODULE),
     Hosts = gen_mod:get_opt_hosts(Opts),
     Name = mod_http_upload_opt:name(Opts),
     Access = mod_http_upload_opt:access(Opts),
index 4df799207d1e1c55e0880241557cef0dcfbe7e9a..0861351d3ec0707c1134d2202f1ef53cd270fe34 100644 (file)
@@ -100,8 +100,9 @@ depends(_Host, _Opts) ->
 %% gen_server callbacks.
 %%--------------------------------------------------------------------
 -spec init(list()) -> {ok, state()}.
-init([ServerHost, Opts]) ->
+init([ServerHost|_]) ->
     process_flag(trap_exit, true),
+    Opts = gen_mod:get_module_opts(ServerHost, ?MODULE),
     AccessSoftQuota = mod_http_upload_quota_opt:access_soft_quota(Opts),
     AccessHardQuota = mod_http_upload_quota_opt:access_hard_quota(Opts),
     MaxDays = mod_http_upload_quota_opt:max_days(Opts),
index a3f80d5ad140cf4c448e78210c26cc2a0dd9cede..156353b1b6418685f4db729634e48935022f5cc7 100644 (file)
@@ -251,8 +251,9 @@ process_mam_query(IQ) ->
 %%%===================================================================
 %%% gen_server callbacks
 %%%===================================================================
-init([Host, Opts]) ->
+init([Host|_]) ->
     process_flag(trap_exit, true),
+    Opts = gen_mod:get_module_opts(Host, ?MODULE),
     Mod = gen_mod:db_mod(Opts, ?MODULE),
     MyHosts = gen_mod:get_opt_hosts(Opts),
     case Mod:init(Host, gen_mod:set_opt(hosts, MyHosts, Opts)) of
index e0e0a58e3a90439e6a2cd3a1ce3cca1dcf772ec5..105ae3f2794755082b9b2f32ae05d69d1dc45dcb 100644 (file)
@@ -164,7 +164,8 @@ select_retained({_, S, _} = USR, TopicFilter, QoS, SubID) ->
 %%%===================================================================
 %%% gen_server callbacks
 %%%===================================================================
-init([Host, Opts]) ->
+init([Host|_]) ->
+    Opts = gen_mod:get_module_opts(Host, ?MODULE),
     Mod = gen_mod:db_mod(Opts, ?MODULE),
     RMod = gen_mod:ram_db_mod(Opts, ?MODULE),
     try
index d50e6552e31db3655a24daf13a106601d204ca50..36cebb664c63b3bcbded60635ccfc74a4e41ba7b 100644 (file)
@@ -34,7 +34,7 @@
 %% API
 -export([start/2,
         stop/1,
-        start_link/3,
+        start_link/2,
         reload/3,
         room_destroyed/4,
         store_room/4,
 %% API
 %%====================================================================
 start(Host, Opts) ->
-    case mod_muc_sup:start(Host, Opts) of
+    case mod_muc_sup:start(Host) of
        {ok, _} ->
            MyHosts = gen_mod:get_opt_hosts(Opts),
            Mod = gen_mod:db_mod(Opts, ?MODULE),
@@ -171,9 +171,9 @@ reload(ServerHost, NewOpts, OldOpts) ->
 depends(_Host, _Opts) ->
     [{mod_mam, soft}].
 
-start_link(Host, Opts, I) ->
+start_link(Host, I) ->
     Proc = procname(Host, I),
-    ?GEN_SERVER:start_link({local, Proc}, ?MODULE, [Host, Opts, I],
+    ?GEN_SERVER:start_link({local, Proc}, ?MODULE, [Host, I],
                           ejabberd_config:fsm_limit_opts([])).
 
 -spec procname(binary(), pos_integer() | {binary(), binary()}) -> atom().
@@ -365,8 +365,9 @@ get_online_rooms_by_user(ServerHost, LUser, LServer) ->
 %% gen_server callbacks
 %%====================================================================
 -spec init(list()) -> {ok, state()}.
-init([Host, Opts, Worker]) ->
+init([Host, Worker]) ->
     process_flag(trap_exit, true),
+    Opts = gen_mod:get_module_opts(Host, ?MODULE),
     MyHosts = gen_mod:get_opt_hosts(Opts),
     register_routes(Host, MyHosts, Worker),
     register_iq_handlers(MyHosts, Worker),
index 8c5af42c3f4d3483c24625bc23c9b46fb09a36be..676498724611c3544e458cf1455217095267f551 100644 (file)
@@ -96,8 +96,9 @@ depends(_Host, _Opts) ->
 %%====================================================================
 %% gen_server callbacks
 %%====================================================================
-init([Host, Opts]) ->
+init([Host|_]) ->
     process_flag(trap_exit, true),
+    Opts = gen_mod:get_module_opts(Host, ?MODULE),
     {ok, init_state(Host, Opts)}.
 
 handle_call({check_access_log, ServerHost, FromJID}, _From, State) ->
index 0e5e75cb81f2b9c48f67133532e0b6e78544953b..99c2620cecee52b067acc9ab75fbf11c4f993736 100644 (file)
 -behaviour(supervisor).
 
 %% API
--export([start/2, start_link/2, procname/1]).
+-export([start/1, start_link/1, procname/1]).
 %% Supervisor callbacks
 -export([init/1]).
 
 %%%===================================================================
 %%% API functions
 %%%===================================================================
-start(Host, Opts) ->
+start(Host) ->
     Spec = #{id => procname(Host),
-            start => {?MODULE, start_link, [Host, Opts]},
+            start => {?MODULE, start_link, [Host]},
             restart => permanent,
             shutdown => infinity,
             type => supervisor,
             modules => [?MODULE]},
     supervisor:start_child(ejabberd_gen_mod_sup, Spec).
 
-start_link(Host, Opts) ->
+start_link(Host) ->
     Proc = procname(Host),
-    supervisor:start_link({local, Proc}, ?MODULE, [Host, Opts]).
+    supervisor:start_link({local, Proc}, ?MODULE, [Host]).
 
 -spec procname(binary()) -> atom().
 procname(Host) ->
@@ -50,12 +50,12 @@ procname(Host) ->
 %%%===================================================================
 %%% Supervisor callbacks
 %%%===================================================================
-init([Host, Opts]) ->
+init([Host]) ->
     Cores = erlang:system_info(logical_processors),
     Specs = lists:foldl(
              fun(I, Acc) ->
                      [#{id => mod_muc:procname(Host, I),
-                        start => {mod_muc, start_link, [Host, Opts, I]},
+                        start => {mod_muc, start_link, [Host, I]},
                         restart => permanent,
                         shutdown => timer:minutes(1),
                         type => worker,
index 8652188adca08ac56b59cccd0462ffcb972a10c3..0b35ee2fc00e49f11a5b6244d5ce2482df05bc3f 100644 (file)
@@ -151,8 +151,9 @@ user_send_packet(Acc) ->
 %%====================================================================
 
 -spec init(list()) -> {ok, state()}.
-init([LServerS, Opts]) ->
+init([LServerS|_]) ->
     process_flag(trap_exit, true),
+    Opts = gen_mod:get_module_opts(LServerS, ?MODULE),
     [LServiceS|_] = gen_mod:get_opt_hosts(Opts),
     Access = mod_multicast_opt:access(Opts),
     SLimits = build_service_limit_record(mod_multicast_opt:limits(Opts)),
index cacab41064daadc6e50dfd99521763de0322cf34..d4c226e56a0fca3855b690392aeea140e1e20631 100644 (file)
@@ -91,8 +91,9 @@ reload(Host, NewOpts, OldOpts) ->
 %%====================================================================
 %% gen_server callbacks
 %%====================================================================
-init([Host, Opts]) ->
+init([Host|_]) ->
     process_flag(trap_exit, true),
+    Opts = gen_mod:get_module_opts(Host, ?MODULE),
     State = init_state(Host, Opts),
     register_iq_handlers(Host),
     case State#state.send_pings of
index 9ca78f67f3cc5361b3c50c2b6927627ad3cdec8c..43f7bc91a6ca9208704f54857bcbad4be8b5bd75 100644 (file)
@@ -198,7 +198,7 @@ process_presence_in(Acc) ->
 %%%===================================================================
 %%% gen_server callbacks
 %%%===================================================================
-init([Host, _Opts]) ->
+init([Host|_]) ->
     process_flag(trap_exit, true),
     catch ets:new(?MODULE,
                   [named_table, public,
index 61e09439df2eddab1e902bd99b6bea1614424933..718f49cb4a8e7e323c0f48400c97870c6a83452e 100644 (file)
@@ -39,7 +39,7 @@
 %% supervisor callbacks.
 -export([init/1]).
 
--export([start_link/2, mod_opt_type/1, mod_options/1, depends/2]).
+-export([start_link/1, mod_opt_type/1, mod_options/1, depends/2]).
 
 -define(PROCNAME, ejabberd_mod_proxy65).
 
@@ -59,7 +59,7 @@ start(Host, Opts) ->
            Mod = gen_mod:ram_db_mod(global, ?MODULE),
            Mod:init(),
            Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-           ChildSpec = {Proc, {?MODULE, start_link, [Host, Opts]},
+           ChildSpec = {Proc, {?MODULE, start_link, [Host]},
                         transient, infinity, supervisor, [?MODULE]},
            supervisor:start_child(ejabberd_gen_mod_sup, ChildSpec)
     end.
@@ -80,14 +80,13 @@ reload(Host, NewOpts, OldOpts) ->
     Mod:init(),
     mod_proxy65_service:reload(Host, NewOpts, OldOpts).
 
-start_link(Host, Opts) ->
+start_link(Host) ->
     Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    supervisor:start_link({local, Proc}, ?MODULE,
-                         [Host, Opts]).
+    supervisor:start_link({local, Proc}, ?MODULE, [Host]).
 
-init([Host, Opts]) ->
+init([Host]) ->
     Service = {mod_proxy65_service,
-              {mod_proxy65_service, start_link, [Host, Opts]},
+              {mod_proxy65_service, start_link, [Host]},
               transient, 5000, worker, [mod_proxy65_service]},
     {ok, {{one_for_one, 10, 1}, [Service]}}.
 
index 31344d27e6f3861f29bcec0caa71dd2d74654462..3a3f9c6d2ba8f15896a36fd9ccd19e03610013a2 100644 (file)
@@ -33,7 +33,7 @@
 -export([init/1, handle_info/2, handle_call/3,
         handle_cast/2, terminate/2, code_change/3]).
 
--export([start_link/2, reload/3, add_listener/2, process_disco_info/1,
+-export([start_link/1, reload/3, add_listener/2, process_disco_info/1,
         process_disco_items/1, process_vcard/1, process_bytestreams/1,
         delete_listener/1, route/1]).
 
 %%% gen_server callbacks
 %%%------------------------
 
-start_link(Host, Opts) ->
+start_link(Host) ->
     Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
-    gen_server:start_link({local, Proc}, ?MODULE,
-                         [Host, Opts], []).
+    gen_server:start_link({local, Proc}, ?MODULE, [Host], []).
 
 reload(Host, NewOpts, OldOpts) ->
     Proc = gen_mod:get_module_proc(Host, ?PROCNAME),
     gen_server:cast(Proc, {reload, Host, NewOpts, OldOpts}).
 
-init([Host, Opts]) ->
+init([Host]) ->
     process_flag(trap_exit, true),
+    Opts = gen_mod:get_module_opts(Host, mod_proxy65),
     MyHosts = gen_mod:get_opt_hosts(Opts),
     lists:foreach(
       fun(MyHost) ->
index 92379a81f59693fc350e79f6a94033238d0ab103..3fab12ea97e8515031f2cf7c19b2ce2ab6caaa74 100644 (file)
@@ -241,9 +241,9 @@ stop(Host) ->
 %%--------------------------------------------------------------------
 -spec init([binary() | [{_,_}],...]) -> {'ok',state()}.
 
-init([ServerHost, Opts]) ->
+init([ServerHost|_]) ->
     process_flag(trap_exit, true),
-    ?DEBUG("Pubsub init ~p ~p", [ServerHost, Opts]),
+    Opts = gen_mod:get_module_opts(ServerHost, ?MODULE),
     Hosts = gen_mod:get_opt_hosts(Opts),
     Access = mod_pubsub_opt:access_createnode(Opts),
     PepOffline = mod_pubsub_opt:ignore_pep_from_offline(Opts),
index 4790b4cd34f262120dd153a8223143ed29a3ca75..bd8cc7732d29a6cd8762a373bef45664e45a3794 100644 (file)
@@ -210,8 +210,9 @@ process_subscription(Direction, User, Server, JID,
 %%====================================================================
 %% gen_server callbacks
 %%====================================================================
-init([Host, Opts]) ->
+init([Host|_]) ->
     process_flag(trap_exit, true),
+    Opts = gen_mod:get_module_opts(Host, ?MODULE),
     State = parse_options(Host, Opts),
     init_cache(Host, Opts),
     ejabberd_hooks:add(roster_get, Host, ?MODULE,
index 16f2f9c7cbe3fa2134667753d0a9220e2b7a58f9..1ef246ecb12de18a73b99714fea83b6ca85ef016 100644 (file)
@@ -82,8 +82,9 @@ stop(Host) ->
 %%====================================================================
 %% gen_server callbacks
 %%====================================================================
-init([Host, Opts]) ->
+init([Host|_]) ->
     process_flag(trap_exit, true),
+    Opts = gen_mod:get_module_opts(Host, ?MODULE),
     Mod = gen_mod:db_mod(Opts, ?MODULE),
     Mod:init(Host, Opts),
     init_cache(Mod, Host, Opts),