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.

Reply via email to