You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2017/04/09 04:02:42 UTC

[couchdb] 01/04: [fixup] use m,f,a in cluster event listener

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

vatamane pushed a commit to branch 63012-scheduler
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 676fd79017780d871a4f91bf3d6fe5b2a16009ee
Author: Nick Vatamaniuc <va...@apache.org>
AuthorDate: Sat Apr 8 02:09:47 2017 -0400

    [fixup] use m,f,a in cluster event listener
---
 src/couch_replicator/src/couch_replicator_clustering.erl    | 11 +++++------
 src/couch_replicator/src/couch_replicator_db_changes.erl    |  9 ++++++++-
 src/couch_replicator/src/couch_replicator_doc_processor.erl | 12 ++++++++++--
 3 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/src/couch_replicator/src/couch_replicator_clustering.erl b/src/couch_replicator/src/couch_replicator_clustering.erl
index 4a6abd7..285be37 100644
--- a/src/couch_replicator/src/couch_replicator_clustering.erl
+++ b/src/couch_replicator/src/couch_replicator_clustering.erl
@@ -30,7 +30,7 @@
 
 % public API
 -export([start_link/0, owner/2, is_stable/0]).
--export([link_cluster_event_listener/1]).
+-export([link_cluster_event_listener/3]).
 
 % gen_server callbacks
 -export([init/1, handle_call/3, handle_info/2, handle_cast/2,
@@ -81,12 +81,11 @@ is_stable() ->
     gen_server:call(?MODULE, is_stable).
 
 
-% Convenience function for gen_servers to subscribe to {cluster, stable} and
-% {cluster, unstable} events from couch_replicator clustering module.
--spec link_cluster_event_listener(pid()) -> pid().
-link_cluster_event_listener(GenServer) when is_pid(GenServer) ->
+-spec link_cluster_event_listener(atom(), atom(), list()) -> pid().
+link_cluster_event_listener(Mod, Fun, Args)
+        when is_atom(Mod), is_atom(Fun), is_list(Args) ->
     CallbackFun =
-        fun(Event = {cluster, _}) -> gen_server:cast(GenServer, Event);
+        fun(Event = {cluster, _}) -> erlang:apply(Mod, Fun, Args ++ [Event]);
            (_) -> ok
         end,
     {ok, Pid} = couch_replicator_notifier:start_link(CallbackFun),
diff --git a/src/couch_replicator/src/couch_replicator_db_changes.erl b/src/couch_replicator/src/couch_replicator_db_changes.erl
index 924c24f..dd4be64 100644
--- a/src/couch_replicator/src/couch_replicator_db_changes.erl
+++ b/src/couch_replicator/src/couch_replicator_db_changes.erl
@@ -18,6 +18,7 @@
 -export([init/1, handle_call/3, handle_info/2, handle_cast/2]).
 -export([code_change/3, terminate/2]).
 
+-export([notify_cluster_event/2]).
 
 -record(state, {
    event_listener :: pid(),
@@ -25,6 +26,11 @@
 }).
 
 
+-spec notify_cluster_event(pid(), {cluster, any()}) -> ok.
+notify_cluster_event(Server, {cluster, _} = Event) ->
+    gen_server:cast(Server, Event).
+
+
 -spec start_link() ->
     {ok, pid()} | ignore | {error, any()}.
 start_link() ->
@@ -32,7 +38,8 @@ start_link() ->
 
 
 init([]) ->
-    EvtPid = couch_replicator_clustering:link_cluster_event_listener(self()),
+    EvtPid = couch_replicator_clustering:link_cluster_event_listener(?MODULE,
+        notify_cluster_event, [self()]),
     State = #state{event_listener = EvtPid, mdb_changes = nil},
     case couch_replicator_clustering:is_stable() of
         true ->
diff --git a/src/couch_replicator/src/couch_replicator_doc_processor.erl b/src/couch_replicator/src/couch_replicator_doc_processor.erl
index 9c2e2b3..d22ac26 100644
--- a/src/couch_replicator/src/couch_replicator_doc_processor.erl
+++ b/src/couch_replicator/src/couch_replicator_doc_processor.erl
@@ -17,6 +17,7 @@
 -export([docs/1, doc/2]).
 -export([update_docs/0]).
 -export([get_worker_ref/1]).
+-export([notify_cluster_event/2]).
 
 % multidb changes callback
 -export([db_created/2, db_deleted/2, db_found/2, db_change/3]).
@@ -101,6 +102,12 @@ get_worker_ref({DbName, DocId}) when is_binary(DbName), is_binary(DocId) ->
     end.
 
 
+% Cluster membership change notification callback
+-spec notify_cluster_event(pid(), {cluster, any()}) -> ok.
+notify_cluster_event(Server, {cluster, _} = Event) ->
+    gen_server:cast(Server, Event).
+
+
 % Private helpers for multidb changes API, these updates into the doc
 % processor gen_server
 
@@ -179,7 +186,8 @@ start_link() ->
 
 init([]) ->
     ?MODULE = ets:new(?MODULE, [ordered_set, named_table, {keypos, #rdoc.id}]),
-    couch_replicator_clustering:link_cluster_event_listener(self()),
+    couch_replicator_clustering:link_cluster_event_listener(?MODULE,
+        notify_cluster_event, [self()]),
     {ok, nil}.
 
 
@@ -818,7 +826,7 @@ setup() ->
     meck:expect(config, get, fun(_, _, Default) -> Default end),
     meck:expect(config, listen_for_changes, 2, ok),
     meck:expect(couch_replicator_clustering, owner, 2, node()),
-    meck:expect(couch_replicator_clustering, link_cluster_event_listener, 1, ok),
+    meck:expect(couch_replicator_clustering, link_cluster_event_listener, 3, ok),
     meck:expect(couch_replicator_doc_processor_worker, spawn_worker, 4, pid),
     meck:expect(couch_replicator_scheduler, remove_job, 1, ok),
     meck:expect(couch_replicator_docs, remove_state_fields, 2, ok),

-- 
To stop receiving notification emails like this one, please contact
"commits@couchdb.apache.org" <co...@couchdb.apache.org>.