summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Newson <rnewson@apache.org>2021-02-15 13:24:13 +0000
committerRobert Newson <rnewson@apache.org>2021-02-15 19:36:56 +0000
commit5724e8e3f35839f67e15dfca478a2b80103127b4 (patch)
treebb2ba4363f10833a4224d3bd975c020786dd57b7
parentf261b80f559730c9c1e645457a46e5f15518086a (diff)
downloadcouchdb-couch_server_system_aggregate.tar.gz
Add "couch_server" aggregate to _system outputcouch_server_system_aggregate
This helps ease transition from singleton couch_server to multiple. The "couch_server" message queue is simply the sum of the couch_server_X message queues.
-rw-r--r--src/chttpd/src/chttpd_node.erl3
-rw-r--r--src/couch/src/couch_server.erl11
2 files changed, 12 insertions, 2 deletions
diff --git a/src/chttpd/src/chttpd_node.erl b/src/chttpd/src/chttpd_node.erl
index 6407df106..734c49bd7 100644
--- a/src/chttpd/src/chttpd_node.erl
+++ b/src/chttpd/src/chttpd_node.erl
@@ -209,7 +209,8 @@ get_stats() ->
{NumberOfGCs, WordsReclaimed, _} = statistics(garbage_collection),
{{input, Input}, {output, Output}} = statistics(io),
{CF, CDU} = db_pid_stats(),
- MessageQueues0 = [{couch_file, {CF}}, {couch_db_updater, {CDU}}],
+ MessageQueues0 = [{couch_file, {CF}}, {couch_db_updater, {CDU}},
+ {couch_server, couch_server:aggregate_queue_len()}],
MessageQueues = MessageQueues0 ++ message_queues(registered()),
{SQ, DCQ} = run_queues(),
[
diff --git a/src/couch/src/couch_server.erl b/src/couch/src/couch_server.erl
index 59b630ee7..feeebdf17 100644
--- a/src/couch/src/couch_server.erl
+++ b/src/couch/src/couch_server.erl
@@ -28,6 +28,7 @@
-export([lock/2, unlock/1]).
-export([db_updated/1]).
-export([num_servers/0, couch_server/1, couch_dbs_pid_to_name/1, couch_dbs/1]).
+-export([aggregate_queue_len/0]).
% config_listener api
-export([handle_config_change/5, handle_config_terminate/3]).
@@ -359,7 +360,7 @@ handle_config_terminate(_Server, _Reason, N) ->
per_couch_server(X) ->
- erlang:max(1, X div couch_server:num_servers()).
+ erlang:max(1, X div num_servers()).
all_databases() ->
@@ -943,6 +944,14 @@ num_servers() ->
erlang:system_info(schedulers).
+aggregate_queue_len() ->
+ N = num_servers(),
+ Names = [couch_server(I) || I <- lists:seq(1, N)],
+ MQs = [process_info(whereis(Name), message_queue_len) ||
+ Name <- Names],
+ lists:sum([X || {_, X} <- MQs]).
+
+
-ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").