Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 1981A200C1D for ; Wed, 1 Feb 2017 18:55:55 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 18099160B41; Wed, 1 Feb 2017 17:55:55 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 36DA0160B46 for ; Wed, 1 Feb 2017 18:55:54 +0100 (CET) Received: (qmail 58655 invoked by uid 500); 1 Feb 2017 17:55:53 -0000 Mailing-List: contact commits-help@couchdb.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@couchdb.apache.org Delivered-To: mailing list commits@couchdb.apache.org Received: (qmail 58636 invoked by uid 99); 1 Feb 2017 17:55:53 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 01 Feb 2017 17:55:53 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 2742DDFCDD; Wed, 1 Feb 2017 17:55:53 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: davisp@apache.org To: commits@couchdb.apache.org Date: Wed, 01 Feb 2017 17:55:54 -0000 Message-Id: In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [2/2] mem3 commit: updated refs/heads/COUCHDB-3287-pluggable-storage-engines to ac2feae archived-at: Wed, 01 Feb 2017 17:55:55 -0000 Update to use the pluggable storage API Project: http://git-wip-us.apache.org/repos/asf/couchdb-mem3/repo Commit: http://git-wip-us.apache.org/repos/asf/couchdb-mem3/commit/4f92ecdd Tree: http://git-wip-us.apache.org/repos/asf/couchdb-mem3/tree/4f92ecdd Diff: http://git-wip-us.apache.org/repos/asf/couchdb-mem3/diff/4f92ecdd Branch: refs/heads/COUCHDB-3287-pluggable-storage-engines Commit: 4f92ecddd54b759f34a0de36f930edc29e3b423d Parents: c3c5429 Author: Paul J. Davis Authored: Wed Feb 10 16:56:28 2016 -0600 Committer: Paul J. Davis Committed: Wed Feb 1 11:01:51 2017 -0600 ---------------------------------------------------------------------- src/mem3_nodes.erl | 33 ++++++++++++++++++--------------- src/mem3_rep.erl | 23 +++++++++++------------ src/mem3_rpc.erl | 3 ++- src/mem3_shards.erl | 15 +++++++++------ 4 files changed, 40 insertions(+), 34 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/couchdb-mem3/blob/4f92ecdd/src/mem3_nodes.erl ---------------------------------------------------------------------- diff --git a/src/mem3_nodes.erl b/src/mem3_nodes.erl index f31891a..b4ce95f 100644 --- a/src/mem3_nodes.erl +++ b/src/mem3_nodes.erl @@ -92,24 +92,27 @@ code_change(_OldVsn, #state{}=State, _Extra) -> initialize_nodelist() -> DbName = config:get("mem3", "nodes_db", "_nodes"), {ok, Db} = mem3_util:ensure_exists(DbName), - {ok, _, Db} = couch_btree:fold(Db#db.id_tree, fun first_fold/3, Db, []), - % add self if not already present - case ets:lookup(?MODULE, node()) of - [_] -> - ok; - [] -> - ets:insert(?MODULE, {node(), []}), - Doc = #doc{id = couch_util:to_binary(node())}, - {ok, _} = couch_db:update_doc(Db, Doc, []) - end, - couch_db:close(Db), - Db#db.update_seq. + try + {ok, Db} = couch_db:fold_docs(Db, fun first_fold/2, Db), + % add self it not already present + case ets:lookup(?MODULE, node()) of + [_] -> + ok; + [] -> + ets:insert(?MODULE, {node(), []}), + Doc = #doc{id = couch_util:to_binary(node())}, + {ok, _} = couch_db:update_doc(Db, Doc, []) + end, + couch_db:get_update_seq(Db) + after + couch_db:close(Db) + end. -first_fold(#full_doc_info{id = <<"_design/", _/binary>>}, _, Acc) -> +first_fold(#full_doc_info{id = <<"_design/", _/binary>>}, Acc) -> {ok, Acc}; -first_fold(#full_doc_info{deleted=true}, _, Acc) -> +first_fold(#full_doc_info{deleted=true}, Acc) -> {ok, Acc}; -first_fold(#full_doc_info{id=Id}=DocInfo, _, Db) -> +first_fold(#full_doc_info{id=Id}=DocInfo, Db) -> {ok, #doc{body={Props}}} = couch_db:open_doc(Db, DocInfo, [ejson_body]), ets:insert(?MODULE, {mem3_util:to_atom(Id), Props}), {ok, Db}. http://git-wip-us.apache.org/repos/asf/couchdb-mem3/blob/4f92ecdd/src/mem3_rep.erl ---------------------------------------------------------------------- diff --git a/src/mem3_rep.erl b/src/mem3_rep.erl index ad7ac55..049910f 100644 --- a/src/mem3_rep.erl +++ b/src/mem3_rep.erl @@ -21,7 +21,7 @@ ]). -export([ - changes_enumerator/3 + changes_enumerator/2 ]). @@ -170,11 +170,11 @@ find_source_seq_int(#doc{body={Props}}, SrcNode0, TgtNode0, TgtUUID, TgtSeq) -> end. -repl(#db{name=DbName, seq_tree=Bt}=Db, Acc0) -> +repl(#db{name=DbName}=Db, Acc0) -> erlang:put(io_priority, {internal_repl, DbName}), #acc{seq=Seq} = Acc1 = calculate_start_seq(Acc0#acc{source = Db}), - Fun = fun ?MODULE:changes_enumerator/3, - {ok, _, Acc2} = couch_btree:fold(Bt, Fun, Acc1, [{start_key, Seq + 1}]), + Fun = fun ?MODULE:changes_enumerator/2, + {ok, Acc2} = couch_db:fold_changes(Db, Seq, Fun, Acc1), {ok, #acc{seq = LastSeq}} = replicate_batch(Acc2), {ok, couch_db:count_changes_since(Db, LastSeq)}. @@ -225,11 +225,10 @@ compare_epochs(Acc) -> Seq = mem3_rpc:find_common_seq(Node, Name, UUID, Epochs), Acc#acc{seq = Seq, history = {[]}}. -changes_enumerator(#doc_info{id=DocId}, Reds, #acc{db=Db}=Acc) -> +changes_enumerator(#doc_info{id=DocId}, #acc{db=Db}=Acc) -> {ok, FDI} = couch_db:get_full_doc_info(Db, DocId), - changes_enumerator(FDI, Reds, Acc); -changes_enumerator(#full_doc_info{}=FDI, _, - #acc{revcount=C, infos=Infos}=Acc0) -> + changes_enumerator(FDI, Acc); +changes_enumerator(#full_doc_info{}=FDI, #acc{revcount=C, infos=Infos}=Acc0) -> #doc_info{ high_seq=Seq, revs=Revs @@ -353,11 +352,11 @@ find_repl_doc(SrcDb, TgtUUIDPrefix) -> {stop, not_found} end end, - Options = [{start_key, DocIdPrefix}], - case couch_btree:fold(SrcDb#db.local_tree, FoldFun, not_found, Options) of - {ok, _, {TgtUUID, Doc}} -> + Options = [{start_key, DocIdPrefix}, {local, true}], + case couch_db:fold_docs(SrcDb, Options, FoldFun, not_found) of + {ok, {TgtUUID, Doc}} -> {ok, TgtUUID, Doc}; - {ok, _, not_found} -> + {ok, not_found} -> {not_found, missing}; Else -> couch_log:error("Error finding replication doc: ~w", [Else]), http://git-wip-us.apache.org/repos/asf/couchdb-mem3/blob/4f92ecdd/src/mem3_rpc.erl ---------------------------------------------------------------------- diff --git a/src/mem3_rpc.erl b/src/mem3_rpc.erl index 93cb99a..13641dc 100644 --- a/src/mem3_rpc.erl +++ b/src/mem3_rpc.erl @@ -84,7 +84,8 @@ load_checkpoint_rpc(DbName, SourceNode, SourceUUID) -> save_checkpoint_rpc(DbName, Id, SourceSeq, NewEntry0, History0) -> erlang:put(io_priority, {internal_repl, DbName}), case get_or_create_db(DbName, [?ADMIN_CTX]) of - {ok, #db{update_seq = TargetSeq} = Db} -> + {ok, Db} -> + TargetSeq = couch_db:get_update_seq(Db), NewEntry = {[ {<<"target_node">>, atom_to_binary(node(), utf8)}, {<<"target_uuid">>, couch_db:get_uuid(Db)}, http://git-wip-us.apache.org/repos/asf/couchdb-mem3/blob/4f92ecdd/src/mem3_shards.erl ---------------------------------------------------------------------- diff --git a/src/mem3_shards.erl b/src/mem3_shards.erl index c7f33c6..e30b85e 100644 --- a/src/mem3_shards.erl +++ b/src/mem3_shards.erl @@ -156,7 +156,7 @@ fold(Fun, Acc) -> {ok, Db} = mem3_util:ensure_exists(DbName), FAcc = {Db, Fun, Acc}, try - {ok, _, LastAcc} = couch_db:enum_docs(Db, fun fold_fun/3, FAcc, []), + {ok, LastAcc} = couch_db:fold_docs(Db, fun fold_fun/2, FAcc), {_Db, _UFun, UAcc} = LastAcc, UAcc after @@ -249,10 +249,10 @@ code_change(_OldVsn, #st{}=St, _Extra) -> %% internal functions -fold_fun(#full_doc_info{}=FDI, _, Acc) -> +fold_fun(#full_doc_info{}=FDI, Acc) -> DI = couch_doc:to_doc_info(FDI), - fold_fun(DI, nil, Acc); -fold_fun(#doc_info{}=DI, _, {Db, UFun, UAcc}) -> + fold_fun(DI, Acc); +fold_fun(#doc_info{}=DI, {Db, UFun, UAcc}) -> case couch_db:open_doc(Db, DI, [ejson_body, conflicts]) of {ok, Doc} -> {Props} = Doc#doc.body, @@ -266,8 +266,11 @@ fold_fun(#doc_info{}=DI, _, {Db, UFun, UAcc}) -> get_update_seq() -> DbName = config:get("mem3", "shards_db", "_dbs"), {ok, Db} = mem3_util:ensure_exists(DbName), - couch_db:close(Db), - Db#db.update_seq. + try + couch_db:get_update_seq(Db) + after + couch_db:close(Db) + end. listen_for_changes(Since) -> DbName = config:get("mem3", "shards_db", "_dbs"),