This is an automated email from the ASF dual-hosted git repository. rnewson pushed a commit to branch ra in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 27db5e3f33dc09d4ca7f0b686ea40775d3bd1f9c Author: Robert Newson <[email protected]> AuthorDate: Mon Jan 27 17:52:03 2025 +0000 working kinda --- src/couch/src/couch_write_queue.erl | 16 +++++++++++++--- src/couch_ra/src/couch_ra.erl | 14 +++++++++++++- src/couch_ra/src/couch_ra_app.erl | 21 +++++++-------------- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/src/couch/src/couch_write_queue.erl b/src/couch/src/couch_write_queue.erl index 7ff8c22ae..2173e7b16 100644 --- a/src/couch/src/couch_write_queue.erl +++ b/src/couch/src/couch_write_queue.erl @@ -27,11 +27,21 @@ init(_Conf) -> apply(_Meta, {update_doc, DbName, Doc, Options}, State) when is_binary(DbName), is_record(Doc, doc), is_list(Options) -> + Reply = try + update_doc(DbName, Doc, Options) + catch + Exception -> + Exception; + error:Reason -> + {error, Reason} + end, + couch_log:notice("apply ~s ~p ~p", [DbName, Doc, Reply]), + {State, Reply}. + +update_doc(DbName, Doc, Options) -> {ok, Db} = couch_db:open(DbName, [{create_if_missing, true}, ?ADMIN_CTX]), try - Reply = couch_db:update_doc(Db, Doc, Options), - couch_log:notice("apply ~s ~p ~p", [couch_db:name(Db), Doc, Reply]), - {State, Reply} + couch_db:update_doc(Db, Doc, Options) after couch_db:close(Db) end. diff --git a/src/couch_ra/src/couch_ra.erl b/src/couch_ra/src/couch_ra.erl index 2157c5324..129f65f63 100644 --- a/src/couch_ra/src/couch_ra.erl +++ b/src/couch_ra/src/couch_ra.erl @@ -12,7 +12,19 @@ -module(couch_ra). --export([couch_write_queue_name/1]). +-export([ + start_cluster/1, + couch_write_queue_name/1 +]). + +start_cluster(Nodes) -> + Name = couch_write_queue_name(Nodes), + couch_log:notice("starting ~p", [Name]), + ra:start_cluster( + default, + Name, + {module, couch_write_queue, #{}}, + [{Name, N} || N <- Nodes]). couch_write_queue_name(Nodes) -> list_to_atom( diff --git a/src/couch_ra/src/couch_ra_app.erl b/src/couch_ra/src/couch_ra_app.erl index 36efeefa5..3bbd7db18 100644 --- a/src/couch_ra/src/couch_ra_app.erl +++ b/src/couch_ra/src/couch_ra_app.erl @@ -22,21 +22,17 @@ start(_Type, []) -> RaEnv = [ {data_dir, config:get("couchdb", "ra_data_dir")} ], - ra:start(RaEnv), + {ok, _} = ra:start(RaEnv), - %% create Ra clusters for ordering doc writes - [start_cluster(Nodes) || Nodes <- combinations(3, mem3:nodes())], + Nodes = mem3:nodes(), + N = config:get_integer("cluster", "n", 3), + lists:foreach(fun couch_ra:start_cluster/1, combinations(N, Nodes)), couch_ra_sup:start_link(). -start_cluster(Nodes) -> - Name = couch_ra:couch_write_queue_name(Nodes), - ra:start_cluster( - couchdb, - Name, - {module, couch_write_queue, #{}}, - [{Name, N} || N <- Nodes] - ). +stop(_) -> + ok. + %% https://rosettacode.org/wiki/Combinations#Erlang combinations(0, _Nodes) -> @@ -45,6 +41,3 @@ combinations(_, []) -> []; combinations(N, [Node | Rest]) -> [[Node | List] || List <- combinations(N - 1, Rest)] ++ combinations(N, Rest). - -stop([]) -> - ok.
