Skip to content

HTTPCLIENT-2438: AsyncIoByteCounterExec: create counter builders per request - #932

Open
shinseongsu wants to merge 1 commit into
apache:masterfrom
shinseongsu:HTTPCLIENT-2438
Open

shinseongsu wants to merge 1 commit into
apache:masterfrom
shinseongsu:HTTPCLIENT-2438

Conversation

@shinseongsu

Copy link
Copy Markdown
Contributor

https://issues.apache.org/jira/browse/HTTPCLIENT-2438

AsyncIoByteCounterExec kept the two Counter.Builder instances in fields and called tags() on them for every request. tags() adds to what the builder already has, so a tag that only some requests get (e.g. from a tagCustomizer) stayed on the builder and showed up on the counters of every request after it.

The builders are now created in record() for each request, same as IoByteCounterExec does on the classic side.

With a tagCustomizer that adds only_for_a=yes for /a only, sending GET /a (200) and then GET /b (404):

Before:

test.response.bytes  [method=GET, only_for_a=yes, status=200]
test.response.bytes  [method=GET, only_for_a=yes, status=404]   <- /b

After:

test.response.bytes  [method=GET, only_for_a=yes, status=200]
test.response.bytes  [method=GET, status=404]                   <- /b

Added this as a test in AsyncIoByteCounterExecTest. It fails on master and passes with the change. ./mvnw -pl httpclient5-observation -am verify passes.

This touches the same class as #920 but a different part, so it should merge cleanly either way. Could this go to 5.6.x as well?

…request

The builders were shared fields and Counter.Builder#tags adds to the
existing tags, so a tag set for one request stayed on the builder and
was applied to the counters of all later requests.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants