summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeng Hui Jiang <jiangphcn@apache.org>2018-09-05 11:39:18 +0800
committerGitHub <noreply@github.com>2018-09-05 11:39:18 +0800
commit485e9ca62135808b4f82d18733efd051cf1563d4 (patch)
tree71bb9f22f308820a724c5ceb7e54fb26f6d5462e
parent32ff5f7cca3f20527fcb5b3aac45062ce45f85a6 (diff)
parent1a75eecfff740713d6c9b474745e6cb40f5a52c3 (diff)
downloadcouchdb-485e9ca62135808b4f82d18733efd051cf1563d4.tar.gz
Merge pull request #1568 from cloudant/log-changes-rewind-reasons
Log error when changes forced to rewind to beginning
-rw-r--r--src/couch/src/couch_db.erl11
-rw-r--r--src/fabric/src/fabric_view_changes.erl10
-rw-r--r--src/mem3/src/mem3_rep.erl7
3 files changed, 24 insertions, 4 deletions
diff --git a/src/couch/src/couch_db.erl b/src/couch/src/couch_db.erl
index 8e932b2ed..55664e964 100644
--- a/src/couch/src/couch_db.erl
+++ b/src/couch/src/couch_db.erl
@@ -1448,9 +1448,17 @@ calculate_start_seq(Db, _Node, {Seq, Uuid, EpochNode}) ->
true ->
case is_owner(EpochNode, Seq, get_epochs(Db)) of
true -> Seq;
- false -> 0
+ false ->
+ couch_log:warning("~p calculate_start_seq not owner "
+ "db: ~p, seq: ~p, uuid: ~p, epoch_node: ~p, epochs: ~p",
+ [?MODULE, Db#db.name, Seq, Uuid, EpochNode,
+ get_epochs(Db)]),
+ 0
end;
false ->
+ couch_log:warning("~p calculate_start_seq uuid prefix mismatch "
+ "db: ~p, seq: ~p, uuid: ~p, epoch_node: ~p",
+ [?MODULE, Db#db.name, Seq, Uuid, EpochNode]),
%% The file was rebuilt, most likely in a different
%% order, so rewind.
0
@@ -1882,6 +1890,7 @@ calculate_start_seq_test_() ->
setup_start_seq() ->
meck:new(couch_db_engine, [passthrough]),
meck:expect(couch_db_engine, get_uuid, fun(_) -> <<"foo">> end),
+ ok = meck:expect(couch_log, warning, 2, ok),
Epochs = [
{node2, 10},
{node1, 1}
diff --git a/src/fabric/src/fabric_view_changes.erl b/src/fabric/src/fabric_view_changes.erl
index 37397447b..7288f1aa5 100644
--- a/src/fabric/src/fabric_view_changes.erl
+++ b/src/fabric/src/fabric_view_changes.erl
@@ -456,11 +456,13 @@ do_unpack_seqs(Opaque, DbName) ->
end.
-get_old_seq(#shard{range=R}, SinceSeqs) ->
+get_old_seq(#shard{range=R}=Shard, SinceSeqs) ->
case lists:keyfind(R, 2, SinceSeqs) of
- {_Node, R, Seq} when is_number(Seq) ->
+ {Node, R, Seq} when is_number(Seq) ->
% Unfortunately we don't have access to the db
% uuid so we can't set a replacememnt here.
+ couch_log:warning("~p get_old_seq missing uuid "
+ "node: ~p, range: ~p, seq: ~p", [?MODULE, Node, R, Seq]),
0;
{Node, R, {Seq, Uuid}} ->
% This update seq is using the old format that
@@ -471,7 +473,9 @@ get_old_seq(#shard{range=R}, SinceSeqs) ->
% This is the newest sequence format that we
% can use for replacement.
{Seq, Uuid, EpochNode};
- _ ->
+ Error ->
+ couch_log:warning("~p get_old_seq error: ~p, shard: ~p, seqs: ~p",
+ [?MODULE, Error, Shard, SinceSeqs]),
0
end.
diff --git a/src/mem3/src/mem3_rep.erl b/src/mem3/src/mem3_rep.erl
index 03178cf5c..5920f3bd4 100644
--- a/src/mem3/src/mem3_rep.erl
+++ b/src/mem3/src/mem3_rep.erl
@@ -173,6 +173,9 @@ find_source_seq(SrcDb, TgtNode, TgtUUIDPrefix, TgtSeq) ->
SrcNode = atom_to_binary(node(), utf8),
find_source_seq_int(Doc, SrcNode, TgtNode, TgtUUID, TgtSeq);
{not_found, _} ->
+ couch_log:warning("~p find_source_seq repl doc not_found "
+ "src_db: ~p, tgt_node: ~p, tgt_uuid_prefix: ~p, tgt_seq: ~p",
+ [?MODULE, SrcDb, TgtNode, TgtUUIDPrefix, TgtSeq]),
0
end.
@@ -202,6 +205,10 @@ find_source_seq_int(#doc{body={Props}}, SrcNode0, TgtNode0, TgtUUID, TgtSeq) ->
[{Entry} | _] ->
couch_util:get_value(<<"source_seq">>, Entry);
[] ->
+ couch_log:warning("~p find_source_seq_int nil useable history "
+ "src_node: ~p, tgt_node: ~p, tgt_uuid: ~p, tgt_seq: ~p, "
+ "src_history: ~p",
+ [?MODULE, SrcNode, TgtNode, TgtUUID, TgtSeq, SrcHistory]),
0
end.