You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by rn...@apache.org on 2014/08/06 20:17:52 UTC

[02/27] couch-replicator commit: updated refs/heads/windsor-merge to 75e5ba1

Send message asynchronusly from event manager

The replicator_manager was blocking for too long responding to
resume_scan events and causing general breakage.

BugzID: 17907


Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/commit/8d03f0c5
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/tree/8d03f0c5
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/diff/8d03f0c5

Branch: refs/heads/windsor-merge
Commit: 8d03f0c59b4302ebd7765c3d8e899bf3ef150dc5
Parents: d809436
Author: Adam Kocoloski <ad...@cloudant.com>
Authored: Thu Mar 7 16:48:29 2013 -0500
Committer: Robert Newson <rn...@apache.org>
Committed: Tue Jul 29 12:38:39 2014 +0100

----------------------------------------------------------------------
 src/couch_replicator_manager.erl | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/blob/8d03f0c5/src/couch_replicator_manager.erl
----------------------------------------------------------------------
diff --git a/src/couch_replicator_manager.erl b/src/couch_replicator_manager.erl
index 949ceef..6afddd8 100644
--- a/src/couch_replicator_manager.erl
+++ b/src/couch_replicator_manager.erl
@@ -177,16 +177,6 @@ handle_call({rep_complete, RepId}, _From, State) ->
 handle_call({rep_error, RepId, Error}, _From, State) ->
     {reply, ok, replication_error(State, RepId, Error)};
 
-handle_call({resume_scan, DbName}, _From, State) ->
-    Since = case ets:lookup(?DB_TO_SEQ, DbName) of
-        [] -> 0;
-        [{DbName, EndSeq}] -> EndSeq
-    end,
-    ensure_rep_ddoc_exists(DbName),
-    Pid = changes_feed_loop(DbName, Since),
-    couch_log:debug("Scanning ~s from update_seq ~p", [DbName, Since]),
-    {reply, ok, State#state{rep_start_pids = [Pid | State#state.rep_start_pids]}};
-
 handle_call({rep_db_checkpoint, DbName, EndSeq}, _From, State) ->
     true = ets:insert(?DB_TO_SEQ, {DbName, EndSeq}),
     {reply, ok, State};
@@ -199,6 +189,16 @@ handle_call(Msg, From, State) ->
         [Msg, From]),
     {stop, {error, {unexpected_call, Msg}}, State}.
 
+handle_cast({resume_scan, DbName}, State) ->
+    Since = case ets:lookup(?DB_TO_SEQ, DbName) of
+        [] -> 0;
+        [{DbName, EndSeq}] -> EndSeq
+    end,
+    ensure_rep_ddoc_exists(DbName),
+    Pid = changes_feed_loop(DbName, Since),
+    couch_log:debug("Scanning ~s from update_seq ~p", [DbName, Since]),
+    {noreply, State#state{rep_start_pids = [Pid | State#state.rep_start_pids]}};
+
 handle_cast({set_max_retries, MaxRetries}, State) ->
     {noreply, State#state{max_retries = MaxRetries}};
 
@@ -320,7 +320,7 @@ db_update_notifier() ->
                     ensure_rep_ddoc_exists(DbName);
                 updated when IsRepDb ->
                     Msg = {resume_scan, DbName},
-                    ok = gen_server:call(Server, Msg, infinity);
+                    ok = gen_server:cast(Server, Msg);
                 deleted when IsRepDb ->
                     clean_up_replications(DbName);
                 _ ->
@@ -800,7 +800,7 @@ scan_all_dbs(Server) when is_pid(Server) ->
                 RelativeFilename -> ok
             end,
             DbName = ?l2b(filename:rootname(RelativeFilename, ".couch")),
-	    gen_server:call(Server, {resume_scan, DbName}),
+	    gen_server:cast(Server, {resume_scan, DbName}),
 	    ok
 	end, ok).