You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ji...@apache.org on 2018/06/20 07:14:40 UTC
[couchdb] branch COUCHDB-3326-clustered-purge-pr5-implementation
updated: Address Paul and Ilya's comments
This is an automated email from the ASF dual-hosted git repository.
jiangphcn pushed a commit to branch COUCHDB-3326-clustered-purge-pr5-implementation
in repository https://gitbox.apache.org/repos/asf/couchdb.git
The following commit(s) were added to refs/heads/COUCHDB-3326-clustered-purge-pr5-implementation by this push:
new 94fcf71 Address Paul and Ilya's comments
94fcf71 is described below
commit 94fcf717cc247fad720b4ec38e1ef7d6ae8090cc
Author: jiangphcn <ji...@cn.ibm.com>
AuthorDate: Wed Jun 20 10:47:38 2018 +0800
Address Paul and Ilya's comments
- add error log for purge checkpoint
- introduce version for mem3
- use verify_module with arity 1
COUCHDB-3326
---
src/couch/src/couch_db.erl | 17 +++++++++++------
src/couch_mrview/src/couch_mrview_util.erl | 2 +-
.../src/cpse_test_purge_bad_checkpoints.erl | 2 +-
src/couch_pse_tests/src/cpse_test_purge_replication.erl | 1 +
src/couch_pse_tests/src/cpse_util.erl | 3 ++-
src/mem3/src/mem3_rep.erl | 8 +++++---
6 files changed, 21 insertions(+), 12 deletions(-)
diff --git a/src/couch/src/couch_db.erl b/src/couch/src/couch_db.erl
index d0f1e21..e7b5328 100644
--- a/src/couch/src/couch_db.erl
+++ b/src/couch/src/couch_db.erl
@@ -436,8 +436,10 @@ get_minimum_purge_seq(#db{} = Db) ->
_ ->
% If there's a broken doc we have to keep every
% purge info until the doc is fixed or removed.
- Fmt = "Invalid purge doc '~s' with purge_seq '~w'",
- couch_log:error(Fmt, [DocId, ClientSeq]),
+ Fmt = "Invalid purge doc '~s' on database ~p
+ with purge_seq '~w'",
+ DbName = couch_db:name(Db),
+ couch_log:error(Fmt, [DocId, DbName, ClientSeq]),
{ok, erlang:min(OldestPurgeSeq, SeqAcc)}
end;
_ ->
@@ -479,14 +481,17 @@ purge_client_exists(DbName, DocId, Props) ->
Updated = couch_util:get_value(<<"updated_on">>, Props),
if is_integer(Updated) and Updated > LagThreshold -> ok; true ->
Diff = NowSecs - Updated,
- Fmt = "Purge checkpoint '~s' not updated in ~p seconds",
- couch_log:error(Fmt, [DocId, Diff])
+ Fmt1 = "Purge checkpoint '~s' not updated in ~p seconds",
+ couch_log:error(Fmt1, [DocId, Diff])
end
end,
Exists
catch _:_ ->
% If we fail to check for a client we have to assume that
% it exists.
+ Fmt2 = "Failed to check purge checkpoint using
+ document '~p' on database ~p",
+ couch_log:error(Fmt2, [DbName, DocId]),
true
end.
@@ -504,9 +509,9 @@ get_purge_client_fun(DocId, Props) ->
F0 = couch_util:get_value(<<"verify_function">>, Props),
try
F = binary_to_existing_atom(F0, latin1),
- case erlang:function_exported(M, F, 2) of
+ case erlang:function_exported(M, F, 1) of
true ->
- fun M:F/2;
+ fun M:F/1;
false ->
Fmt2 = "Missing exported function '~p' in '~p'
for purge checkpoint '~s'",
diff --git a/src/couch_mrview/src/couch_mrview_util.erl b/src/couch_mrview/src/couch_mrview_util.erl
index b470631..b274961 100644
--- a/src/couch_mrview/src/couch_mrview_util.erl
+++ b/src/couch_mrview/src/couch_mrview_util.erl
@@ -45,7 +45,7 @@
get_local_purge_doc_id(Sig) ->
Version = "v" ++ config:get("purge", "version", "1") ++ "-",
- ?l2b(?LOCAL_DOC_PREFIX ++ "purge-" ++ Version ++ "mrview-" ++ Sig).
+ ?l2b(?LOCAL_DOC_PREFIX ++ "purge-mrview-" ++ Version ++ Sig).
get_value_from_options(Key, Options) ->
diff --git a/src/couch_pse_tests/src/cpse_test_purge_bad_checkpoints.erl b/src/couch_pse_tests/src/cpse_test_purge_bad_checkpoints.erl
index 52d6870..3d5edb1 100644
--- a/src/couch_pse_tests/src/cpse_test_purge_bad_checkpoints.erl
+++ b/src/couch_pse_tests/src/cpse_test_purge_bad_checkpoints.erl
@@ -96,7 +96,7 @@ save_local_doc(Db1, PurgeSeq, Mod, Fun) ->
{Mega, Secs, _} = os:timestamp(),
NowSecs = Mega * 1000000 + Secs,
Doc = couch_doc:from_json_obj(?JSON_DECODE(?JSON_ENCODE({[
- {<<"_id">>, <<"_local/purge-test-stuff">>},
+ {<<"_id">>, <<"_local/purge-test-stuff-v1">>},
{<<"purge_seq">>, PurgeSeq},
{<<"timestamp_utc">>, NowSecs},
{<<"verify_module">>, Mod},
diff --git a/src/couch_pse_tests/src/cpse_test_purge_replication.erl b/src/couch_pse_tests/src/cpse_test_purge_replication.erl
index bba360a..474d4e6 100644
--- a/src/couch_pse_tests/src/cpse_test_purge_replication.erl
+++ b/src/couch_pse_tests/src/cpse_test_purge_replication.erl
@@ -188,6 +188,7 @@ repl(Source, Target) ->
SrcTerm = cpse_util:db_as_term(Source, replication),
TgtTerm = cpse_util:db_as_term(Target, replication),
+
Diff = cpse_util:term_diff(SrcTerm, TgtTerm),
?assertEqual(nodiff, Diff).
diff --git a/src/couch_pse_tests/src/cpse_util.erl b/src/couch_pse_tests/src/cpse_util.erl
index aa73c38..17e8e48 100644
--- a/src/couch_pse_tests/src/cpse_util.erl
+++ b/src/couch_pse_tests/src/cpse_util.erl
@@ -470,7 +470,8 @@ db_docs_as_term(Db) ->
db_local_docs_as_term(Db, Type) ->
FoldFun = fun(Doc, Acc) ->
case Doc#doc.id of
- <<"_local/purge-mem3-", _/binary>> when Type == replication ->
+ <<?LOCAL_DOC_PREFIX, "purge-mem3", _/binary>>
+ when Type == replication ->
{ok, Acc};
_ ->
{ok, [Doc | Acc]}
diff --git a/src/mem3/src/mem3_rep.erl b/src/mem3/src/mem3_rep.erl
index 2dd8e38..3f224cd 100644
--- a/src/mem3/src/mem3_rep.erl
+++ b/src/mem3/src/mem3_rep.erl
@@ -18,7 +18,7 @@
go/3,
make_local_id/2,
make_purge_id/2,
- verify_purge_checkpoint/3,
+ verify_purge_checkpoint/1,
find_source_seq/4
]).
@@ -122,10 +122,12 @@ make_local_id(SourceThing, TargetThing, Filter) ->
make_purge_id(SourceUUID, TargetUUID) ->
- <<"_local/purge-mem3-", SourceUUID/binary, "-", TargetUUID/binary>>.
+ Version = "v" ++ config:get("purge", "version", "1") ++ "-",
+ ?l2b(?LOCAL_DOC_PREFIX ++ "purge-mem3-" ++ Version ++
+ ?b2l(SourceUUID) ++ "-" ++ ?b2l(TargetUUID)).
-verify_purge_checkpoint(_Db, _DocId, Props) ->
+verify_purge_checkpoint(Props) ->
DbName = couch_util:get_value(<<"dbname">>, Props),
SourceBin = couch_util:get_value(<<"source">>, Props),
TargetBin = couch_util:get_value(<<"target">>, Props),