summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul J. Davis <paul.joseph.davis@gmail.com>2018-05-03 16:05:13 -0500
committerPaul J. Davis <paul.joseph.davis@gmail.com>2018-05-03 16:05:13 -0500
commit0a1c42de50913e34fa962759b859a8bdaf2d2ffb (patch)
treef973844ad37f97e663f8e934e0acc8bee8d20e64
parentce3f77066f54adaafddb2ea11384bf2b68a1dbbb (diff)
downloadcouchdb-0a1c42de50913e34fa962759b859a8bdaf2d2ffb.tar.gz
[SQUERGE] mem3 internal replication bug fixes
-rw-r--r--src/mem3/src/mem3_rep.erl8
-rw-r--r--src/mem3/src/mem3_rpc.erl9
2 files changed, 8 insertions, 9 deletions
diff --git a/src/mem3/src/mem3_rep.erl b/src/mem3/src/mem3_rep.erl
index 88bece48a..2dd8e3876 100644
--- a/src/mem3/src/mem3_rep.erl
+++ b/src/mem3/src/mem3_rep.erl
@@ -231,13 +231,13 @@ pull_purges(#acc{} = Acc0) ->
with_src_db(Acc0, fun(Db) ->
SrcUUID = couch_db:get_uuid(Db),
- {ok, LocalPurgeId, Infos, ThroughSeq, Remaining} =
+ {LocalPurgeId, Infos, ThroughSeq, Remaining} =
mem3_rpc:load_purge_infos(TgtNode, TgtDbName, SrcUUID, Count),
if Infos == [] -> ok; true ->
{ok, _} = couch_db:purge_docs(Db, Infos, [replicated_edits]),
Body = purge_cp_body(Acc0, ThroughSeq),
- ok = mem3_rpc:save_purge_checkpoint(
+ mem3_rpc:save_purge_checkpoint(
TgtNode, TgtDbName, LocalPurgeId, Body)
end,
@@ -270,7 +270,7 @@ push_purges(#acc{} = Acc0) ->
couch_util:get_value(<<"purge_seq">>, Props);
{not_found, _} ->
{ok, Oldest} = couch_db:get_oldest_purge_seq(Db),
- Oldest
+ erlang:max(0, Oldest - 1)
end,
FoldFun = fun({PSeq, UUID, Id, Revs}, {Count, Infos, _}) ->
@@ -466,7 +466,7 @@ save_on_target(Node, Name, Docs) ->
purge_on_target(Node, Name, PurgeInfos) ->
- {ok, _} = mem3_rpc:purge_docs(Node, Name, PurgeInfos, [
+ mem3_rpc:purge_docs(Node, Name, PurgeInfos, [
replicated_changes,
full_commit,
?ADMIN_CTX,
diff --git a/src/mem3/src/mem3_rpc.erl b/src/mem3/src/mem3_rpc.erl
index b0b0098ef..ee8ece4b0 100644
--- a/src/mem3/src/mem3_rpc.erl
+++ b/src/mem3/src/mem3_rpc.erl
@@ -72,7 +72,7 @@ load_purge_infos(Node, DbName, SourceUUID, Count) ->
save_purge_checkpoint(Node, DbName, PurgeDocId, Body) ->
Args = [DbName, PurgeDocId, Body],
- rexi_call(Node, {mem3_rpc, save_purge_checkpoint, Args}).
+ rexi_call(Node, {mem3_rpc, save_purge_checkpoint_rpc, Args}).
purge_docs(Node, DbName, PurgeInfos, Options) ->
@@ -160,7 +160,7 @@ load_purge_infos_rpc(DbName, SrcUUID, BatchSize) ->
couch_util:get_value(<<"purge_seq">>, Props);
{not_found, _} ->
{ok, Oldest} = couch_db:get_oldest_purge_seq(Db),
- Oldest
+ erlang:max(0, Oldest - 1)
end,
FoldFun = fun({PSeq, UUID, Id, Revs}, {Count, Infos, _}) ->
NewCount = Count + length(Revs),
@@ -173,7 +173,7 @@ load_purge_infos_rpc(DbName, SrcUUID, BatchSize) ->
couch_db:fold_purge_infos(Db, StartSeq, FoldFun, InitAcc),
{ok, PurgeSeq} = couch_db:get_purge_seq(Db),
Remaining = PurgeSeq - ThroughSeq,
- rexi:reply({ok, PurgeDocId, PurgeInfos, ThroughSeq, Remaining});
+ rexi:reply({ok, {PurgeDocId, PurgeInfos, ThroughSeq, Remaining}});
Else ->
rexi:reply(Else)
end.
@@ -185,8 +185,7 @@ save_purge_checkpoint_rpc(DbName, PurgeDocId, Body) ->
{ok, Db} ->
Doc = #doc{id = PurgeDocId, body = Body},
Resp = try couch_db:update_doc(Db, Doc, []) of
- {ok, _} -> ok;
- Else -> {error, Else}
+ Resp0 -> Resp0
catch T:R ->
{T, R}
end,