You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2026/07/16 13:59:25 UTC
(couchdb) 01/02: feat(couch): add process_count gauge to query server manager
This is an automated email from the ASF dual-hosted git repository.
nickva pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit d4067c4f9274b93a0f07dda6c5f75ab451858bcd
Author: Sam Smith <sa...@samsmith.xyz>
AuthorDate: Wed Jul 15 15:47:01 2026 +0100
feat(couch): add process_count gauge to query server manager
Track the number of active query server processes to provide
visibility into resource usage. The gauge is updated when processes
spawn/remove.
---
src/couch/priv/stats_descriptions.cfg | 4 ++++
src/couch/src/couch_proc_manager.erl | 9 +++++++--
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/src/couch/priv/stats_descriptions.cfg b/src/couch/priv/stats_descriptions.cfg
index 17f028782..3497b728b 100644
--- a/src/couch/priv/stats_descriptions.cfg
+++ b/src/couch/priv/stats_descriptions.cfg
@@ -322,6 +322,10 @@
{type, counter},
{desc, <<"number of acquired external processes">>}
]}.
+{[couchdb, query_server, process_count], [
+ {type, gauge},
+ {desc, <<"number of active query server processes">>}
+]}.
{[couchdb, query_server, process_starts], [
{type, counter},
{desc, <<"number of OS process starts">>}
diff --git a/src/couch/src/couch_proc_manager.erl b/src/couch/src/couch_proc_manager.erl
index ea4a76001..a95acc7c0 100644
--- a/src/couch/src/couch_proc_manager.erl
+++ b/src/couch/src/couch_proc_manager.erl
@@ -141,6 +141,8 @@ init([]) ->
ok = configure_language_servers(),
+ couch_stats:update_gauge([couchdb, query_server, process_count], get_proc_count()),
+
{ok, #state{
config = get_proc_config(),
threshold_ts = timestamp(),
@@ -250,6 +252,7 @@ handle_info({'EXIT', Pid, spawn_error}, State) ->
% Assert when removing that we always expect the opener to have been there
[{Pid, #client{lang = Lang}}] = ets:take(?OPENING, Pid),
dec_count(Lang),
+ couch_stats:update_gauge([couchdb, query_server, process_count], get_proc_count()),
ok = flush_waiters(State, Lang),
{noreply, State};
handle_info({'EXIT', Pid, Reason}, State) ->
@@ -370,7 +373,8 @@ find_proc(Lang, DbPat, DDocKey) when
spawn_proc(#client{} = Client) ->
Pid = spawn_link(?MODULE, new_proc, [Client]),
ets:insert(?OPENING, {Pid, Client}),
- inc_count(Client#client.lang).
+ inc_count(Client#client.lang),
+ couch_stats:update_gauge([couchdb, query_server, process_count], get_proc_count()).
% This instance was spawned without a client to replenish
% the untagged pool asynchronously
@@ -686,7 +690,8 @@ remove_proc(#proc{pid = Pid} = Proc) ->
false ->
ok
end,
- dec_count(Proc#proc.lang).
+ dec_count(Proc#proc.lang),
+ couch_stats:update_gauge([couchdb, query_server, process_count], get_proc_count()).
flush_waiters(#state{} = State, Lang) ->
#state{hard_limit = HardLimit, config = {[_ | _] = Cfg}} = State,