This is an automated email from the ASF dual-hosted git repository.

rnewson pushed a commit to branch enhance_reduce_limit-3
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit a650cc2f5fc1e6ef6411fc02833f17a6e29d2a0f
Author: Robert Newson <[email protected]>
AuthorDate: Wed Nov 5 16:55:36 2025 +0000

    wip
---
 share/server/views.js                 | 17 +++++++++--------
 src/couch/src/couch_query_servers.erl | 12 ++++++++----
 src/fabric/src/fabric_view.erl        |  1 +
 3 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/share/server/views.js b/share/server/views.js
index 623b5c4b5..352640802 100644
--- a/share/server/views.js
+++ b/share/server/views.js
@@ -16,7 +16,7 @@ var Views = (function() {
 
   var map_results = []; // holds temporary emitted values during doc map
 
-  function runReduce(reduceFuns, keys, values, rereduce) {
+  function runReduce(dbname, reduceFuns, keys, values, rereduce) {
     var code_size = 0;
     for (var i in reduceFuns) {
       var fun_body =  reduceFuns[i];
@@ -42,7 +42,8 @@ var Views = (function() {
       var log_message = [
           "Reduce output must shrink more rapidly:",
           "input size:", input_length,
-          "output size:", reduce_length
+          "output size:", reduce_length,
+          "dbname:", dbname,
       ].join(" ");
       if (State.query_config.reduce_limit === "log") {
           log("reduce_overflow_error: " + log_message);
@@ -65,8 +66,8 @@ var Views = (function() {
       // fatal_error. But by default if they don't do error handling we
       // just eat the exception and carry on.
       //
-      // In this case we abort map processing but don't destroy the 
-      // JavaScript process. If you need to destroy the JavaScript 
+      // In this case we abort map processing but don't destroy the
+      // JavaScript process. If you need to destroy the JavaScript
       // process, throw the error form matched by the block below.
       throw(["error", "map_runtime_error", "function raised 'fatal_error'"]);
     } else if (err[0] == "fatal") {
@@ -93,17 +94,17 @@ var Views = (function() {
       }
       return rv;
     },
-    reduce : function(reduceFuns, kvs) {
+    reduce : function(dbname, reduceFuns, kvs) {
       var keys = new Array(kvs.length);
       var values = new Array(kvs.length);
       for(var i = 0; i < kvs.length; i++) {
           keys[i] = kvs[i][0];
           values[i] = kvs[i][1];
       }
-      runReduce(reduceFuns, keys, values, false);
+      runReduce(dbname, reduceFuns, keys, values, false);
     },
-    rereduce : function(reduceFuns, values) {
-      runReduce(reduceFuns, null, values, true);
+    rereduce : function(dbname, reduceFuns, values) {
+      runReduce(dbname, reduceFuns, null, values, true);
     },
     mapDoc : function(doc) {
       // Compute all the map functions against the document.
diff --git a/src/couch/src/couch_query_servers.erl 
b/src/couch/src/couch_query_servers.erl
index a204a767f..f0323e1c9 100644
--- a/src/couch/src/couch_query_servers.erl
+++ b/src/couch/src/couch_query_servers.erl
@@ -150,8 +150,9 @@ os_reduce(_Lang, [], _KVs) ->
     {ok, []};
 os_reduce(Lang, OsRedSrcs, KVs) ->
     Proc = get_os_process(Lang),
+    DbName = erlang:get(db_name),
     OsResults =
-        try proc_prompt(Proc, [<<"reduce">>, OsRedSrcs, KVs]) of
+        try proc_prompt(Proc, [<<"reduce">>, DbName, OsRedSrcs, KVs]) of
             [true, Reductions] -> Reductions
         catch
             throw:{reduce_overflow_error, Msg} ->
@@ -165,7 +166,8 @@ os_rereduce(Lang, OsRedSrcs, KVs) ->
     case get_overflow_error(KVs) of
         undefined ->
             Proc = get_os_process(Lang),
-            try proc_prompt(Proc, [<<"rereduce">>, OsRedSrcs, KVs]) of
+            DbName = erlang:get(db_name),
+            try proc_prompt(Proc, [<<"rereduce">>, DbName, OsRedSrcs, KVs]) of
                 [true, [Reduction]] -> Reduction
             catch
                 throw:{reduce_overflow_error, Msg} ->
@@ -295,11 +297,13 @@ check_sum_overflow(InSize, OutSize, Sum) ->
     end.
 
 log_sum_overflow(InSize, OutSize) ->
+    DbName = erlang:get(db_name),
     Fmt =
         "Reduce output must shrink more rapidly: "
         "input size: ~b "
-        "output size: ~b",
-    Msg = iolist_to_binary(io_lib:format(Fmt, [InSize, OutSize])),
+        "output size: ~b "
+        "dbname: ~s",
+    Msg = iolist_to_binary(io_lib:format(Fmt, [InSize, OutSize, DbName])),
     couch_log:error(Msg, []),
     Msg.
 
diff --git a/src/fabric/src/fabric_view.erl b/src/fabric/src/fabric_view.erl
index 33a59db88..91cc7dcf8 100644
--- a/src/fabric/src/fabric_view.erl
+++ b/src/fabric/src/fabric_view.erl
@@ -285,6 +285,7 @@ get_next_row(#collector{reducer = RedSrc} = State0) when 
RedSrc =/= undefined ->
                 Records
             ),
             Wrapped = [[fabric_view_row:get_value(R)] || R <- Records],
+            erlang:put(db_name, State0#collector.db_name),
             {ok, [Reduced]} = couch_query_servers:rereduce(Lang, [RedSrc], 
Wrapped),
             {ok, Finalized} = couch_query_servers:finalize(RedSrc, Reduced),
             State = State0#collector{keys = RestKeys, rows = RowDict, counters 
= Counters},

Reply via email to