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},
