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 2017/03/01 16:09:01 UTC

[1/2] couch-replicator commit: updated refs/heads/master to 7a2b2b6

Repository: couchdb-couch-replicator
Updated Branches:
  refs/heads/master 45d739af3 -> 7a2b2b68b


Revert "Restore adding some jitter-ed sleep to shard scanning code."

This reverts commit 45d739af3fcf8b4f8e3ccca152cb3c2d781dc2fc.


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/1e413b8a
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/tree/1e413b8a
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/diff/1e413b8a

Branch: refs/heads/master
Commit: 1e413b8afa6eb156eb5293d1dc0d5726cd5063fc
Parents: 45d739a
Author: Robert Newson <rn...@apache.org>
Authored: Wed Mar 1 11:15:55 2017 +0000
Committer: Robert Newson <rn...@apache.org>
Committed: Wed Mar 1 11:15:55 2017 +0000

----------------------------------------------------------------------
 src/couch_replicator_manager.erl | 74 +++++++----------------------------
 1 file changed, 14 insertions(+), 60 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/blob/1e413b8a/src/couch_replicator_manager.erl
----------------------------------------------------------------------
diff --git a/src/couch_replicator_manager.erl b/src/couch_replicator_manager.erl
index 4e5073e..bdc3b8f 100644
--- a/src/couch_replicator_manager.erl
+++ b/src/couch_replicator_manager.erl
@@ -934,30 +934,22 @@ scan_all_dbs(Server) when is_pid(Server) ->
     {ok, Db} = mem3_util:ensure_exists(
         config:get("mem3", "shards_db", "_dbs")),
     ChangesFun = couch_changes:handle_changes(#changes_args{}, nil, Db, nil),
-    ChangesFun({fun scan_changes_cb/3, {Server, 1}}),
+    ChangesFun(fun({change, {Change}, _}, _) ->
+        DbName = couch_util:get_value(<<"id">>, Change),
+        case DbName of <<"_design/", _/binary>> -> ok; _Else ->
+            case couch_replicator_utils:is_deleted(Change) of
+            true ->
+                ok;
+            false ->
+                [gen_server:cast(Server, {resume_scan, ShardName})
+                    || ShardName <- replicator_shards(DbName)],
+                ok
+            end
+        end;
+        (_, _) -> ok
+    end),
     couch_db:close(Db).
 
-scan_changes_cb({change, {Change}, _}, _, {Server, AccCount}) ->
-    DbName = couch_util:get_value(<<"id">>, Change),
-    case DbName of <<"_design/", _/binary>> -> {Server, AccCount}; _Else ->
-        case couch_replicator_utils:is_deleted(Change) of
-        true ->
-            {Server, AccCount};
-        false ->
-            UpdatedCount = lists:foldl(fun(ShardName, Count) ->
-                spawn_link(fun() ->
-                    timer:sleep(jitter(Count)),
-                    gen_server:cast(Server, {resume_scan, ShardName})
-                end),
-                Count + 1
-           end, AccCount, replicator_shards(DbName)),
-           {Server, UpdatedCount}
-        end
-    end;
-
-scan_changes_cb(_, _, {Server, AccCount}) ->
-    {Server, AccCount}.
-
 
 replicator_shards(DbName) ->
     case is_replicator_db(DbName) of
@@ -1035,42 +1027,4 @@ t_fail_non_replicator_shard() ->
     end).
 
 
-scan_dbs_test_() ->
-{
-      foreach,
-      fun() -> test_util:start_couch([mem3, fabric]) end,
-      fun(Ctx) -> test_util:stop_couch(Ctx) end,
-      [
-          t_resume_db_shard(),
-          t_sleep_based_on_count()
-     ]
-}.
-
-
-t_resume_db_shard() ->
-    ?_test(begin
-        DbName0 = ?tempdb(),
-        DbName = <<DbName0/binary, "/_replicator">>,
-        ok = fabric:create_db(DbName, [?CTX]),
-        Change = {[{<<"id">>, DbName}]},
-        scan_changes_cb({change, Change, req}, type, {self(), 1}),
-        ResumeMsg = receive Msg -> Msg after 1000 -> timeout end,
-        ?assertMatch({'$gen_cast', {resume_scan, <<"shards/", _/binary>>}}, ResumeMsg),
-        fabric:delete_db(DbName, [?CTX])
-    end).
-
-
-t_sleep_based_on_count() ->
-    ?_test(begin
-        DbName0 = ?tempdb(),
-        DbName = <<DbName0/binary, "/_replicator">>,
-        ok = fabric:create_db(DbName, [?CTX]),
-        Change = {[{<<"id">>, DbName}]},
-        scan_changes_cb({change, Change, req}, type, {self(), 1000}),
-        Timeout = receive Msg -> Msg after 100 -> timeout end,
-        ?assertEqual(timeout, Timeout),
-        fabric:delete_db(DbName, [?CTX])
-    end).
-
-
 -endif.


[2/2] couch-replicator commit: updated refs/heads/master to 7a2b2b6

Posted by rn...@apache.org.
fix crashes when replicator db is deleted

BugzID: 83663


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/7a2b2b68
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/tree/7a2b2b68
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/diff/7a2b2b68

Branch: refs/heads/master
Commit: 7a2b2b68bf4afa6d20b56a8ae51361f83981412a
Parents: 1e413b8
Author: Robert Newson <rn...@apache.org>
Authored: Wed Mar 1 11:14:02 2017 +0000
Committer: Robert Newson <rn...@apache.org>
Committed: Wed Mar 1 11:15:59 2017 +0000

----------------------------------------------------------------------
 src/couch_replicator_manager.erl | 26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/blob/7a2b2b68/src/couch_replicator_manager.erl
----------------------------------------------------------------------
diff --git a/src/couch_replicator_manager.erl b/src/couch_replicator_manager.erl
index bdc3b8f..c9c0a68 100644
--- a/src/couch_replicator_manager.erl
+++ b/src/couch_replicator_manager.erl
@@ -731,11 +731,15 @@ update_rep_doc(RepDbName, #doc{body = {RepDocBody}} = RepDoc, KVs, _Try) ->
     end.
 
 open_rep_doc(DbName, DocId) ->
-    {ok, Db} = couch_db:open_int(DbName, [?CTX, sys_db]),
-    try
-        couch_db:open_doc(Db, DocId, [ejson_body])
-    after
-        couch_db:close(Db)
+    case couch_db:open_int(DbName, [?CTX, sys_db]) of
+        {ok, Db} ->
+            try
+                couch_db:open_doc(Db, DocId, [ejson_body])
+            after
+                couch_db:close(Db)
+            end;
+        Else ->
+            Else
     end.
 
 save_rep_doc(DbName, Doc) ->
@@ -791,6 +795,9 @@ ensure_rep_ddoc_exists(RepDb) ->
 
 ensure_rep_ddoc_exists(RepDb, DDocId) ->
     case open_rep_doc(RepDb, DDocId) of
+        {not_found, no_db_file} ->
+            %% database was deleted.
+            ok;
         {not_found, _Reason} ->
             {ok, DDoc} = replication_design_doc(DDocId),
             couch_log:notice("creating replicator ddoc", []),
@@ -941,9 +948,12 @@ scan_all_dbs(Server) when is_pid(Server) ->
             true ->
                 ok;
             false ->
-                [gen_server:cast(Server, {resume_scan, ShardName})
-                    || ShardName <- replicator_shards(DbName)],
-                ok
+                try
+                    [gen_server:cast(Server, {resume_scan, ShardName})
+                        || ShardName <- replicator_shards(DbName)]
+                catch error:database_does_not_exist ->
+                    ok
+                end
             end
         end;
         (_, _) -> ok