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

chewbranca pushed a commit to branch couch-stats-resource-tracker-rebase
in repository https://gitbox.apache.org/repos/asf/couchdb.git


The following commit(s) were added to 
refs/heads/couch-stats-resource-tracker-rebase by this push:
     new 583f7ace3 Distinguish between reqs and req handlers
583f7ace3 is described below

commit 583f7ace3bf4e5e9d40a22c4f9831d476d892e0d
Author: Russell Branca <chewbra...@apache.org>
AuthorDate: Wed Feb 14 15:40:43 2024 -0800

    Distinguish between reqs and req handlers
---
 src/chttpd/src/chttpd_db.erl                         |  1 +
 src/couch_stats/src/couch_stats_resource_tracker.erl | 14 +++++++++++---
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/chttpd/src/chttpd_db.erl b/src/chttpd/src/chttpd_db.erl
index 8c35910a6..599ac03dc 100644
--- a/src/chttpd/src/chttpd_db.erl
+++ b/src/chttpd/src/chttpd_db.erl
@@ -104,6 +104,7 @@ handle_request(#httpd{path_parts = [DbName | RestParts], 
method = Method} = Req)
             do_db_req(Req, fun db_req/2);
         {_, [SecondPart | _]} ->
             Handler = chttpd_handlers:db_handler(SecondPart, fun db_req/2),
+            couch_stats_resource_tracker:set_context_handler_fun(Handler),
             do_db_req(Req, Handler)
     end.
 
diff --git a/src/couch_stats/src/couch_stats_resource_tracker.erl 
b/src/couch_stats/src/couch_stats_resource_tracker.erl
index 0d8e4164e..a7ef6c0ea 100644
--- a/src/couch_stats/src/couch_stats_resource_tracker.erl
+++ b/src/couch_stats/src/couch_stats_resource_tracker.erl
@@ -157,6 +157,7 @@
     state = alive,
     dbname,
     username,
+    path,
 
     %% Stats counters
     db_open = 0,
@@ -387,6 +388,7 @@ field(#rctx{type=Val}, type) -> convert_type(Val);
 field(#rctx{state=Val}, state) -> Val;
 field(#rctx{dbname=Val}, dbname) -> Val;
 field(#rctx{username=Val}, username) -> Val;
+field(#rctx{path=Val}, path) -> Val;
 field(#rctx{db_open=Val}, db_open) -> Val;
 field(#rctx{docs_read=Val}, docs_read) -> Val;
 field(#rctx{rows_read=Val}, rows_read) -> Val;
@@ -580,6 +582,8 @@ to_flat_json(#rctx{}=Rctx) ->
     }.
 
 
+convert_mfa(MFA) when is_list(MFA)  ->
+    list_to_binary(MFA);
 convert_mfa({M0, F0, A0}) ->
     M = atom_to_binary(M0),
     F = atom_to_binary(F0),
@@ -666,8 +670,10 @@ create_coordinator_context(#httpd{} = Req, Path) ->
             PidRef = get_pid_ref(), %% this will instantiate a new PidRef
             Rctx = #rctx{
                 pid_ref = PidRef,
-                type = {coordinator, Verb, [$/ | Path]},
-                nonce = Nonce
+                %%type = {coordinator, Verb, Path},
+                type = {coordinator, Verb, init},
+                nonce = Nonce,
+                path = list_to_binary([$/ | Path])
             },
             track(Rctx),
             erlang:put(?DELTA_TZ, Rctx),
@@ -697,7 +703,9 @@ set_context_handler_fun(Fun) when is_function(Fun) ->
             ok;
         true ->
             FunName = erlang:fun_to_list(Fun),
-            catch case ets:update_element(?MODULE, get_pid_ref(), [{#rctx.mfa, 
FunName}]) of
+            #rctx{type={coordinator, Verb, _}} = get_resource(),
+            Update = [{#rctx.type, {coordinator, Verb, FunName}}],
+            catch case ets:update_element(?MODULE, get_pid_ref(), Update) of
                 false ->
                     Stk = try throw(42) catch _:_:Stk0 -> Stk0 end,
                     io:format("UPDATING HANDLER FUN[~p] FAILURE WITH CONTEXT: 
~p AND STACK:~n~pFOO:: ~p~n~n", [FunName, get_resource(), Stk, 
process_info(self(), current_stacktrace)]),

Reply via email to