You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ko...@apache.org on 2020/01/06 18:27:10 UTC

[couchdb] 10/19: Update handle_config_terminate API

This is an automated email from the ASF dual-hosted git repository.

kocolosk pushed a commit to branch ioq-in-tree
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit bdcfe6aa3a33c28411f0e4b9b121fff33474c3eb
Author: ILYA Khlopotov <ii...@ca.ibm.com>
AuthorDate: Mon Aug 22 14:42:07 2016 -0700

    Update handle_config_terminate API
    
    COUCHDB-3102
---
 src/ioq.erl     | 16 +++++++++-------
 src/ioq_sup.erl | 23 ++++++++++++++++++++++-
 2 files changed, 31 insertions(+), 8 deletions(-)

diff --git a/src/ioq.erl b/src/ioq.erl
index 967a49b..93377d6 100644
--- a/src/ioq.erl
+++ b/src/ioq.erl
@@ -20,6 +20,8 @@
 % config_listener api
 -export([handle_config_change/5, handle_config_terminate/3]).
 
+-define(RELISTEN_DELAY, 5000).
+
 -record(state, {
     concurrency,
     ratio,
@@ -83,6 +85,9 @@ handle_info({'DOWN', Ref, _, _, Reason}, State) ->
         false ->
             {noreply, State, 0}
     end;
+handle_info(restart_config_listener, State) ->
+    ok = config:listen_for_changes(?MODULE, nil),
+    {noreply, State};
 handle_info(timeout, State) ->
     {noreply, maybe_submit_request(State)}.
 
@@ -91,13 +96,10 @@ handle_config_change("ioq", _, _, _, _) ->
 handle_config_change(_, _, _, _, _) ->
     {ok, nil}.
 
-handle_config_terminate(_, stop, _) -> ok;
-handle_config_terminate(_, _, _) ->
-    spawn(fun() ->
-        timer:sleep(5000),
-        config:listen_for_changes(?MODULE, nil)
-    end),
-    ok.
+handle_config_terminate(_Server, stop, _State) ->
+    ok;
+handle_config_terminate(_Server, _Reason, _State) ->
+    erlang:send_after(?RELISTEN_DELAY, whereis(?MODULE), restart_config_listener).
 
 code_change(_Vsn, State, _Extra) ->
     {ok, State}.
diff --git a/src/ioq_sup.erl b/src/ioq_sup.erl
index c4d04a9..56e51ae 100644
--- a/src/ioq_sup.erl
+++ b/src/ioq_sup.erl
@@ -13,6 +13,7 @@
 -module(ioq_sup).
 -behaviour(supervisor).
 -export([start_link/0, init/1]).
+-export([handle_config_change/5, handle_config_terminate/3]).
 
 %% Helper macro for declaring children of supervisor
 -define(CHILD(I, Type), {I, {I, start_link, []}, permanent, 5000, Type, [I]}).
@@ -21,4 +22,24 @@ start_link() ->
     supervisor:start_link({local, ?MODULE}, ?MODULE, []).
 
 init([]) ->
-    {ok, { {one_for_one, 5, 10}, [?CHILD(ioq, worker)]}}.
+    {ok, { {one_for_one, 5, 10}, [
+        {
+            config_listener_mon,
+            {config_listener_mon, start_link, [?MODULE, nil]},
+            permanent,
+            5000,
+            worker,
+            [config_listener_mon]
+        },
+        ?CHILD(ioq_server, worker)
+    ]} }.
+
+handle_config_change("ioq", _Key, _Val, _Persist, St) ->
+    gen_server:cast(ioq_server, update_config),
+    {ok, St};
+handle_config_change(_Sec, _Key, _Val, _Persist, St) ->
+    {ok, St}.
+
+handle_config_terminate(_Server, _Reason, _State) ->
+    gen_server:cast(ioq_server, update_config),
+    ok.