Skip to content

fix: fall back to configured seed URLs when pool is exhausted during discovery#104

Open
MattDevy wants to merge 3 commits intomainfrom
fix/discovery-seed-url-fallback
Open

fix: fall back to configured seed URLs when pool is exhausted during discovery#104
MattDevy wants to merge 3 commits intomainfrom
fix/discovery-seed-url-fallback

Conversation

@MattDevy
Copy link
Copy Markdown
Contributor

@MattDevy MattDevy commented Apr 17, 2026

Summary

Fixes #93.

Discovery now falls back to the configured seed URLs when the pool-based fetch of /_nodes/http fails, giving the client a chance to self-heal when every discovered node is unreachable but a seed URL is still up.

  • getNodesInfo attempts the pool-selected connection first.
  • If pool.Next() errors, or the fetch via the pool connection fails (network error, non-2xx, decode error), each c.urls entry is tried in order. On pool-connection failure we also call pool.OnFailure(conn) so the pool state stays accurate.
  • First seed URL that returns a valid response wins; the remaining seeds are skipped.
  • On total failure the pool/pool-conn error is joined with each seed error via errors.Join so the root cause is preserved and still unwrappable via errors.Is/errors.As.
  • Fallback short-circuits on context cancellation to avoid hammering seed URLs when the parent context is already done.
  • Happy path unchanged: when the pool-selected connection succeeds, no seed URLs are touched.
  • Extracted the single-URL fetch logic into fetchNodesInfo so the pool and fallback paths share one implementation.

Discussion point: why fall back on request failure, not just on pool.Next() error

The issue text describes the trigger as pool.Next() returning an error "for example every node has been marked dead and is waiting for resurrection". In practice that's not how statusConnectionPool.Next() behaves today:

  1. Live connections exist -> pick one.
  2. No live, but dead exist -> force-resurrect the last dead one and return it.
  3. Error only when both live and dead are empty (or the pool is closed, or resurrect itself errors).

scheduleResurrect also auto-resurrects dead nodes after defaultResurrectTimeoutInitial (60s, doubling up to ~32min).

So "every node marked dead" doesn't produce a pool.Next() error - Next() hands back a force-resurrected dead node, and the real failure surfaces inside c.roundTrip(req) when that node is actually unreachable. A fix that only kicks in on pool.Next() errors would miss the scenario the issue is trying to solve and would only help the degenerate "pool has zero connections" case.

Caveat of the broader trigger: on a transient network blip where a pool node fails a single discovery request, we now walk every seed URL before giving up, which can amplify latency. I think that's acceptable for the discovery path (runs on a long interval, off the hot request path), but happy to narrow the trigger if reviewers prefer.

Test plan

  • go test -v -race ./... passes
  • go vet ./... clean
  • Unit test: pool exhausted + first seed down + second seed up -> discovery succeeds, pool repopulated, seeds tried in configured order
  • Unit test: pool exhausted + all seeds down -> returns a joined error referencing the pool error and every seed host
  • Unit test: pool returns a (dead) connection whose fetch fails + seed succeeds -> pool.OnFailure called exactly once, seed URL contacted after the dead node, discovery succeeds

…discovery

When every discovered node becomes unreachable between discovery intervals,
pool.Next() returns an error and discovery aborts, preventing the client from
self-healing even if the originally configured URLs are reachable.

getNodesInfo now attempts each c.urls entry as a fallback when pool.Next()
fails. The first seed URL that returns a valid /_nodes/http response wins;
if all fail, the pool error is joined with per-seed errors via errors.Join
so the root cause is preserved.

Closes #93
@prodsecmachine
Copy link
Copy Markdown

prodsecmachine commented Apr 17, 2026

Snyk checks have passed. No issues have been found so far.

Status Scan Engine Critical High Medium Low Total (0)
Open Source Security 0 0 0 0 0 issues
Licenses 0 0 0 0 0 issues

💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse.

@MattDevy MattDevy requested a review from Anaethelion April 17, 2026 11:42
pool.Next() on a statusConnectionPool rarely returns an error when nodes
are dead - it force-resurrects the last dead connection and hands it back.
The self-healing scenario from #93 (all nodes unreachable but seed URLs
are up) actually surfaces as a roundTrip failure on the returned
connection, not as a pool.Next() error.

Extend the fallback: if the pool-selected connection's fetch fails
(network error, non-2xx response, or decode error), call pool.OnFailure
so the pool state stays accurate, then try each configured seed URL.
Short-circuit on context cancellation to avoid hammering seed URLs when
the parent context is already done.
TestCloseConcurrent caught a race: when Close cancels the parent context
of an in-flight DiscoverNodesContext, fetchNodesInfo returns a ctx error,
which previously triggered pool.OnFailure -> scheduleResurrect. That
schedules a goroutine via resurrectWaitGroup.Add(1) concurrent with
statusConnectionPool.Close calling resurrectWaitGroup.Wait(), violating
sync.WaitGroup's contract.

A canceled request is a client-side signal, not a node fault, so skip
OnFailure when ctx.Err() != nil. Discovery still reports the underlying
error; the pool state simply isn't perturbed by our own cancellation.
@github-actions
Copy link
Copy Markdown
Contributor

Benchmark Results

ubuntu-latest

goos: linux
goarch: amd64
pkg: github.com/elastic/elastic-transport-go/v8/elastictransport
cpu: AMD EPYC 9V74 80-Core Processor                
                                                                           │ /home/runner/work/_temp/base.txt │  /home/runner/work/_temp/head.txt   │
                                                                           │              sec/op              │    sec/op      vs base              │
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-1-4                                    456.0n ± 20%    450.6n ± 20%       ~ (p=0.403 n=7)
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-10-4                                   494.3n ± 14%    491.6n ± 28%       ~ (p=0.383 n=7)
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-100-4                                  692.0n ±  3%    684.7n ±  1%       ~ (p=0.259 n=7)
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-1000-4                                 729.1n ±  7%    735.6n ±  8%       ~ (p=0.383 n=7)
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-1-4                                    600.0n ±  3%    586.6n ±  2%       ~ (p=0.073 n=7)
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-10-4                                   622.4n ±  2%    613.7n ±  3%  -1.40% (p=0.001 n=7)
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-100-4                                  671.7n ±  2%    665.4n ±  3%       ~ (p=0.053 n=7)
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-1000-4                                 845.7n ±  9%    775.3n ± 12%       ~ (p=0.165 n=7)
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-1-4                          629.8n ±  4%    635.5n ±  3%       ~ (p=0.318 n=7)
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-10-4                         604.4n ±  3%    620.9n ±  3%  +2.73% (p=0.026 n=7)
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-100-4                        647.8n ±  1%    656.2n ±  3%  +1.30% (p=0.004 n=7)
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-1000-4                       812.9n ±  5%    845.2n ±  8%       ~ (p=0.902 n=7)
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-1-4                          538.0n ±  1%    541.7n ±  3%       ~ (p=1.000 n=7)
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-10-4                         569.9n ±  3%    572.8n ±  1%       ~ (p=1.000 n=7)
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-100-4                        625.4n ±  3%    626.2n ±  3%       ~ (p=0.620 n=7)
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-1000-4                       822.7n ± 11%    794.8n ±  9%       ~ (p=0.710 n=7)
SingleConnectionPool/Next()/Single__________-4                                                  0.3525n ±  0%   0.3523n ±  0%       ~ (p=0.829 n=7)
SingleConnectionPool/Next()/Parallel_(1000)-4                                                   0.3687n ±  0%   0.3678n ±  0%  -0.24% (p=0.029 n=7)
SingleConnectionPool/OnFailure()/Single_____-4                                                  0.3524n ±  4%   0.3523n ±  0%       ~ (p=0.476 n=7)
SingleConnectionPool/OnFailure()/Parallel_(1000)-4                                              0.2972n ±  1%   0.2970n ±  0%       ~ (p=0.218 n=7)
StatusConnectionPool/Next()/Single_____-4                                                        11.01n ±  0%    11.01n ±  3%       ~ (p=0.395 n=7)
StatusConnectionPool/Next()/Parallel_(100)-4                                                     80.00n ±  1%    80.09n ±  2%       ~ (p=0.477 n=7)
StatusConnectionPool/OnFailure()/Single_____-4                                                   11.32n ±  2%    11.30n ±  2%       ~ (p=0.266 n=7)
StatusConnectionPool/OnFailure()/Parallel_(10)-4                                                 65.49n ±  1%    65.51n ±  2%       ~ (p=0.805 n=7)
StatusConnectionPool/OnSuccess()/Single_____-4                                                   6.249n ±  3%    6.205n ±  2%       ~ (p=0.209 n=7)
StatusConnectionPool/OnSuccess()/Parallel_(10)-4                                                 2.382n ±  4%    2.387n ±  3%       ~ (p=0.383 n=7)
StatusConnectionPool/resurrect()/Single-4                                                        46.41n ± 77%    60.39n ± 60%       ~ (p=0.620 n=7)
StatusConnectionPool/resurrect()/Parallel_(10)-4                                                 71.18n ±  4%    72.45n ±  1%       ~ (p=0.165 n=7)
Transport/Defaults-4                                                                             756.5n ±  1%    775.0n ±  5%  +2.45% (p=0.026 n=7)
Transport/Headers-4                                                                              966.6n ±  3%    980.5n ±  1%       ~ (p=0.365 n=7)
Transport/Compress_body_(pool:_false)-4                                                          93.65µ ± 17%    94.09µ ± 14%       ~ (p=1.000 n=7)
Transport/Compress_body_(pool:_true)-4                                                           14.30µ ±  9%    13.70µ ±  3%  -4.24% (p=0.001 n=7)
TransportLogger/Text-4                                                                           1.468µ ±  1%    1.496µ ±  1%  +1.91% (p=0.001 n=7)
TransportLogger/Text-Body-4                                                                      3.394µ ±  1%    3.434µ ±  5%  +1.18% (p=0.011 n=7)
TransportLogger/JSON-4                                                                           1.313µ ±  2%    1.314µ ±  1%       ~ (p=0.733 n=7)
TransportLogger/JSON-Body-4                                                                      2.430µ ±  1%    2.453µ ±  6%  +0.95% (p=0.012 n=7)
geomean                                                                                          186.2n          187.3n        +0.63%

                                                                           │ /home/runner/work/_temp/base.txt │   /home/runner/work/_temp/head.txt    │
                                                                           │               B/op               │     B/op       vs base                │
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-1-4                                 1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-10-4                                1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-100-4                               1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-1000-4                              1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7)
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-1-4                                 1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-10-4                                1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-100-4                               1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-1000-4                              1.095Ki ±  0%     1.094Ki ±  0%       ~ (p=0.592 n=7)
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-1-4                       1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-10-4                      1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-100-4                     1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-1000-4                    1.095Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7)
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-1-4                       1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-10-4                      1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-100-4                     1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-1000-4                    1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7)
SingleConnectionPool/Next()/Single__________-4                                                  0.000 ±  0%       0.000 ±  0%       ~ (p=1.000 n=7) ¹
SingleConnectionPool/Next()/Parallel_(1000)-4                                                   0.000 ±  0%       0.000 ±  0%       ~ (p=1.000 n=7) ¹
SingleConnectionPool/OnFailure()/Single_____-4                                                  0.000 ±  0%       0.000 ±  0%       ~ (p=1.000 n=7) ¹
SingleConnectionPool/OnFailure()/Parallel_(1000)-4                                              0.000 ±  0%       0.000 ±  0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/Next()/Single_____-4                                                       0.000 ±  0%       0.000 ±  0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/Next()/Parallel_(100)-4                                                    0.000 ±  0%       0.000 ±  0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnFailure()/Single_____-4                                                  0.000 ±  0%       0.000 ±  0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnFailure()/Parallel_(10)-4                                                0.000 ±  0%       0.000 ±  0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnSuccess()/Single_____-4                                                  0.000 ±  0%       0.000 ±  0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnSuccess()/Parallel_(10)-4                                                0.000 ±  0%       0.000 ±  0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/resurrect()/Single-4                                                       45.00 ± 11%       42.00 ± 17%       ~ (p=0.730 n=7)
StatusConnectionPool/resurrect()/Parallel_(10)-4                                                46.00 ±  2%       46.00 ± 13%       ~ (p=0.841 n=7)
Transport/Defaults-4                                                                          1.453Ki ±  0%     1.453Ki ±  0%       ~ (p=1.000 n=7) ¹
Transport/Headers-4                                                                           1.469Ki ±  0%     1.469Ki ±  0%       ~ (p=1.000 n=7) ¹
Transport/Compress_body_(pool:_false)-4                                                       796.6Ki ±  0%     796.6Ki ±  0%       ~ (p=1.000 n=7) ¹
Transport/Compress_body_(pool:_true)-4                                                        1.690Ki ±  0%     1.688Ki ±  0%  -0.17% (p=0.001 n=7)
TransportLogger/Text-4                                                                        1.689Ki ±  0%     1.689Ki ±  0%       ~ (p=1.000 n=7) ¹
TransportLogger/Text-Body-4                                                                   9.562Ki ±  0%     9.562Ki ±  0%       ~ (p=1.000 n=7) ¹
TransportLogger/JSON-4                                                                        1.797Ki ±  0%     1.797Ki ±  0%       ~ (p=1.000 n=7) ¹
TransportLogger/JSON-Body-4                                                                   5.422Ki ±  0%     5.422Ki ±  0%       ~ (p=1.000 n=7) ¹
geomean                                                                                                     ²                  -0.20%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                                                           │ /home/runner/work/_temp/base.txt │  /home/runner/work/_temp/head.txt  │
                                                                           │            allocs/op             │ allocs/op   vs base                │
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-1-4                                    9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-10-4                                   9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-100-4                                  9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-1000-4                                 9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-1-4                                    9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-10-4                                   9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-100-4                                  9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-1000-4                                 9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-1-4                          9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-10-4                         9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-100-4                        9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-1000-4                       9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-1-4                          9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-10-4                         9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-100-4                        9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-1000-4                       9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
SingleConnectionPool/Next()/Single__________-4                                                   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
SingleConnectionPool/Next()/Parallel_(1000)-4                                                    0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
SingleConnectionPool/OnFailure()/Single_____-4                                                   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
SingleConnectionPool/OnFailure()/Parallel_(1000)-4                                               0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/Next()/Single_____-4                                                        0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/Next()/Parallel_(100)-4                                                     0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnFailure()/Single_____-4                                                   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnFailure()/Parallel_(10)-4                                                 0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnSuccess()/Single_____-4                                                   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnSuccess()/Parallel_(10)-4                                                 0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/resurrect()/Single-4                                                        0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/resurrect()/Parallel_(10)-4                                                 0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
Transport/Defaults-4                                                                             11.00 ± 0%     11.00 ± 0%       ~ (p=1.000 n=7) ¹
Transport/Headers-4                                                                              12.00 ± 0%     12.00 ± 0%       ~ (p=1.000 n=7) ¹
Transport/Compress_body_(pool:_false)-4                                                          38.00 ± 0%     38.00 ± 0%       ~ (p=1.000 n=7) ¹
Transport/Compress_body_(pool:_true)-4                                                           19.00 ± 0%     19.00 ± 0%       ~ (p=1.000 n=7) ¹
TransportLogger/Text-4                                                                           18.00 ± 0%     18.00 ± 0%       ~ (p=1.000 n=7) ¹
TransportLogger/Text-Body-4                                                                      36.00 ± 0%     36.00 ± 0%       ~ (p=1.000 n=7) ¹
TransportLogger/JSON-4                                                                           13.00 ± 0%     13.00 ± 0%       ~ (p=1.000 n=7) ¹
TransportLogger/JSON-Body-4                                                                      24.00 ± 0%     24.00 ± 0%       ~ (p=1.000 n=7) ¹
geomean                                                                                                     ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

windows-latest

goos: windows
goarch: amd64
pkg: github.com/elastic/elastic-transport-go/v8/elastictransport
cpu: AMD EPYC 7763 64-Core Processor                
                                                                           │ D:\a\_temp/base.txt │          D:\a\_temp/head.txt          │
                                                                           │       sec/op        │     sec/op      vs base               │
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-1-4                      751.8n ±   2%    741.7n ±   1%   -1.34% (p=0.011 n=7)
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-10-4                     788.0n ±   2%    788.7n ±   2%        ~ (p=1.000 n=7)
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-100-4                    981.3n ±   3%    959.2n ±  22%        ~ (p=0.097 n=7)
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-1000-4                   698.1n ±   7%    660.5n ±   7%        ~ (p=0.128 n=7)
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-1-4                      661.3n ±   4%    719.2n ±   2%   +8.76% (p=0.001 n=7)
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-10-4                     724.7n ±   1%    789.7n ±   2%   +8.97% (p=0.001 n=7)
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-100-4                    777.5n ±   6%    863.9n ±   4%  +11.11% (p=0.001 n=7)
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-1000-4                   859.8n ±  14%    741.5n ±  21%        ~ (p=0.209 n=7)
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-1-4            708.3n ±   5%    700.9n ±   2%        ~ (p=0.335 n=7)
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-10-4           756.6n ±   1%    753.6n ±   1%        ~ (p=0.176 n=7)
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-100-4          840.1n ±   4%    850.9n ±   6%        ~ (p=0.620 n=7)
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-1000-4         908.8n ±  12%    893.3n ±  12%        ~ (p=0.318 n=7)
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-1-4            651.0n ±   4%    652.1n ±   5%        ~ (p=0.805 n=7)
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-10-4           704.8n ±   1%    705.5n ±   3%        ~ (p=0.515 n=7)
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-100-4          816.2n ±   6%    806.5n ±   8%        ~ (p=0.902 n=7)
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-1000-4         745.3n ±  19%    725.3n ±  25%        ~ (p=0.535 n=7)
SingleConnectionPool/Next()/Single__________-4                                    0.3289n ±   2%   0.3205n ±   1%   -2.55% (p=0.003 n=7)
SingleConnectionPool/Next()/Parallel_(1000)-4                                     0.3291n ±   0%   0.3297n ±   0%        ~ (p=0.156 n=7)
SingleConnectionPool/OnFailure()/Single_____-4                                    0.3166n ±   2%   0.3170n ±   0%        ~ (p=0.596 n=7)
SingleConnectionPool/OnFailure()/Parallel_(1000)-4                                0.2591n ±   1%   0.2594n ±   1%        ~ (p=0.274 n=7)
StatusConnectionPool/Next()/Single_____-4                                          10.87n ±   0%    10.88n ±   0%        ~ (p=0.510 n=7)
StatusConnectionPool/Next()/Parallel_(100)-4                                       71.84n ±   1%    65.95n ±   3%   -8.20% (p=0.001 n=7)
StatusConnectionPool/OnFailure()/Single_____-4                                     10.20n ±   2%    10.52n ±   4%   +3.14% (p=0.003 n=7)
StatusConnectionPool/OnFailure()/Parallel_(10)-4                                   76.29n ±   1%    69.58n ±  18%   -8.80% (p=0.026 n=7)
StatusConnectionPool/OnSuccess()/Single_____-4                                     5.559n ±   2%    5.221n ±   6%   -6.08% (p=0.001 n=7)
StatusConnectionPool/OnSuccess()/Parallel_(10)-4                                   2.383n ±  14%    2.339n ±  13%        ~ (p=0.209 n=7)
StatusConnectionPool/resurrect()/Single-4                                          53.07n ±  37%    55.17n ±  29%        ~ (p=0.456 n=7)
StatusConnectionPool/resurrect()/Parallel_(10)-4                                   56.93n ±  39%    54.64n ±   2%   -4.02% (p=0.003 n=7)
Transport/Defaults-4                                                               936.7n ±  23%    743.0n ±  34%        ~ (p=0.128 n=7)
Transport/Headers-4                                                                932.4n ±   6%    942.6n ±   7%        ~ (p=0.710 n=7)
Transport/Compress_body_(pool:_false)-4                                            86.19µ ± 351%    88.52µ ± 244%        ~ (p=1.000 n=7)
Transport/Compress_body_(pool:_true)-4                                             15.81µ ±   3%    15.61µ ±   6%        ~ (p=0.805 n=7)
TransportLogger/Text-4                                                             1.521µ ±  48%    1.471µ ±   2%   -3.29% (p=0.001 n=7)
TransportLogger/Text-Body-4                                                        3.547µ ±  43%    3.512µ ±  43%        ~ (p=0.535 n=7)
TransportLogger/JSON-4                                                             1.281µ ±   0%    1.261µ ±   1%   -1.56% (p=0.002 n=7)
TransportLogger/JSON-Body-4                                                        2.470µ ±  14%    2.454µ ±  11%        ~ (p=0.223 n=7)
geomean                                                                            199.7n           196.7n          -1.50%

                                                                           │ D:\a\_temp/base.txt │          D:\a\_temp/head.txt           │
                                                                           │        B/op         │     B/op       vs base                 │
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-1-4                    1.094Ki ±  0%     1.094Ki ±  0%        ~ (p=1.000 n=7) ¹
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-10-4                   1.094Ki ±  0%     1.094Ki ±  0%        ~ (p=1.000 n=7) ¹
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-100-4                  1.094Ki ±  0%     1.094Ki ±  0%        ~ (p=1.000 n=7) ¹
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-1000-4                 1.094Ki ±  0%     1.094Ki ±  0%        ~ (p=1.000 n=7)
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-1-4                    1.094Ki ±  0%     1.094Ki ±  0%        ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-10-4                   1.094Ki ±  0%     1.094Ki ±  0%        ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-100-4                  1.094Ki ±  0%     1.094Ki ±  0%        ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-1000-4                 1.094Ki ±  0%     1.095Ki ±  0%        ~ (p=0.103 n=7)
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-1-4          1.094Ki ±  0%     1.094Ki ±  0%        ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-10-4         1.094Ki ±  0%     1.094Ki ±  0%        ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-100-4        1.094Ki ±  0%     1.094Ki ±  0%        ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-1000-4       1.095Ki ±  0%     1.095Ki ±  0%        ~ (p=0.462 n=7)
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-1-4          1.094Ki ±  0%     1.094Ki ±  0%        ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-10-4         1.094Ki ±  0%     1.094Ki ±  0%        ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-100-4        1.094Ki ±  0%     1.094Ki ±  0%        ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-1000-4       1.094Ki ±  0%     1.094Ki ±  0%        ~ (p=1.000 n=7)
SingleConnectionPool/Next()/Single__________-4                                     0.000 ±  0%       0.000 ±  0%        ~ (p=1.000 n=7) ¹
SingleConnectionPool/Next()/Parallel_(1000)-4                                      0.000 ±  0%       0.000 ±  0%        ~ (p=1.000 n=7) ¹
SingleConnectionPool/OnFailure()/Single_____-4                                     0.000 ±  0%       0.000 ±  0%        ~ (p=1.000 n=7) ¹
SingleConnectionPool/OnFailure()/Parallel_(1000)-4                                 0.000 ±  0%       0.000 ±  0%        ~ (p=1.000 n=7) ¹
StatusConnectionPool/Next()/Single_____-4                                          0.000 ±  0%       0.000 ±  0%        ~ (p=1.000 n=7) ¹
StatusConnectionPool/Next()/Parallel_(100)-4                                       0.000 ±  0%       0.000 ±  0%        ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnFailure()/Single_____-4                                     0.000 ±  0%       0.000 ±  0%        ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnFailure()/Parallel_(10)-4                                   0.000 ±  0%       0.000 ±  0%        ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnSuccess()/Single_____-4                                     0.000 ±  0%       0.000 ±  0%        ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnSuccess()/Parallel_(10)-4                                   0.000 ±  0%       0.000 ±  0%        ~ (p=1.000 n=7) ¹
StatusConnectionPool/resurrect()/Single-4                                          42.00 ± 10%       42.00 ± 17%        ~ (p=0.741 n=7)
StatusConnectionPool/resurrect()/Parallel_(10)-4                                   41.00 ± 15%       47.00 ±  4%  +14.63% (p=0.022 n=7)
Transport/Defaults-4                                                             1.453Ki ±  0%     1.453Ki ±  0%        ~ (p=1.000 n=7) ¹
Transport/Headers-4                                                              1.469Ki ±  0%     1.469Ki ±  0%        ~ (p=1.000 n=7) ¹
Transport/Compress_body_(pool:_false)-4                                          796.6Ki ±  0%     796.6Ki ±  0%        ~ (p=1.000 n=7) ¹
Transport/Compress_body_(pool:_true)-4                                           1.714Ki ±  1%     1.716Ki ±  1%        ~ (p=0.971 n=7)
TransportLogger/Text-4                                                           1.689Ki ±  0%     1.689Ki ±  0%        ~ (p=1.000 n=7) ¹
TransportLogger/Text-Body-4                                                      9.562Ki ±  0%     9.562Ki ±  0%        ~ (p=1.000 n=7) ¹
TransportLogger/JSON-4                                                           1.797Ki ±  0%     1.797Ki ±  0%        ~ (p=1.000 n=7) ¹
TransportLogger/JSON-Body-4                                                      5.422Ki ±  0%     5.422Ki ±  0%        ~ (p=1.000 n=7) ¹
geomean                                                                                        ²                   +0.39%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                                                           │ D:\a\_temp/base.txt │        D:\a\_temp/head.txt         │
                                                                           │      allocs/op      │ allocs/op   vs base                │
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-1-4                       9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-10-4                      9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-100-4                     9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-1000-4                    9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-1-4                       9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-10-4                      9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-100-4                     9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-1000-4                    9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-1-4             9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-10-4            9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-100-4           9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-1000-4          9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-1-4             9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-10-4            9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-100-4           9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-1000-4          9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
SingleConnectionPool/Next()/Single__________-4                                      0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
SingleConnectionPool/Next()/Parallel_(1000)-4                                       0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
SingleConnectionPool/OnFailure()/Single_____-4                                      0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
SingleConnectionPool/OnFailure()/Parallel_(1000)-4                                  0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/Next()/Single_____-4                                           0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/Next()/Parallel_(100)-4                                        0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnFailure()/Single_____-4                                      0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnFailure()/Parallel_(10)-4                                    0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnSuccess()/Single_____-4                                      0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnSuccess()/Parallel_(10)-4                                    0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/resurrect()/Single-4                                           0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/resurrect()/Parallel_(10)-4                                    0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
Transport/Defaults-4                                                                11.00 ± 0%     11.00 ± 0%       ~ (p=1.000 n=7) ¹
Transport/Headers-4                                                                 12.00 ± 0%     12.00 ± 0%       ~ (p=1.000 n=7) ¹
Transport/Compress_body_(pool:_false)-4                                             38.00 ± 0%     38.00 ± 0%       ~ (p=1.000 n=7) ¹
Transport/Compress_body_(pool:_true)-4                                              19.00 ± 0%     19.00 ± 0%       ~ (p=1.000 n=7) ¹
TransportLogger/Text-4                                                              18.00 ± 0%     18.00 ± 0%       ~ (p=1.000 n=7) ¹
TransportLogger/Text-Body-4                                                         36.00 ± 0%     36.00 ± 0%       ~ (p=1.000 n=7) ¹
TransportLogger/JSON-4                                                              13.00 ± 0%     13.00 ± 0%       ~ (p=1.000 n=7) ¹
TransportLogger/JSON-Body-4                                                         24.00 ± 0%     24.00 ± 0%       ~ (p=1.000 n=7) ¹
geomean                                                                                        ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

macos-latest

goos: darwin
goarch: arm64
pkg: github.com/elastic/elastic-transport-go/v8/elastictransport
cpu: Apple M1 (Virtual)
                                                                           │ /Users/runner/work/_temp/base.txt │  /Users/runner/work/_temp/head.txt   │
                                                                           │              sec/op               │    sec/op      vs base               │
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-1-3                                     368.2n ± 48%    326.7n ± 82%        ~ (p=0.535 n=7)
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-10-3                                    448.4n ± 21%    358.9n ±  8%  -19.96% (p=0.001 n=7)
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-100-3                                   445.2n ± 35%    424.3n ± 39%        ~ (p=0.383 n=7)
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-1000-3                                  513.4n ± 25%    516.2n ± 16%        ~ (p=0.620 n=7)
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-1-3                                     466.0n ±  7%    426.1n ± 62%        ~ (p=0.073 n=7)
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-10-3                                    512.5n ± 24%    470.2n ± 34%        ~ (p=0.318 n=7)
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-100-3                                   500.1n ± 10%    445.9n ± 35%        ~ (p=0.097 n=7)
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-1000-3                                  632.3n ± 42%    530.2n ±  3%  -16.15% (p=0.007 n=7)
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-1-3                           805.1n ± 41%    461.1n ± 37%  -42.73% (p=0.001 n=7)
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-10-3                          831.1n ± 19%    473.7n ± 36%  -43.00% (p=0.001 n=7)
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-100-3                         659.1n ± 16%    469.7n ± 20%  -28.74% (p=0.001 n=7)
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-1000-3                        979.8n ± 40%    573.7n ± 44%  -41.45% (p=0.001 n=7)
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-1-3                           665.2n ± 18%    414.8n ±  6%  -37.64% (p=0.001 n=7)
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-10-3                          693.8n ± 38%    431.9n ± 63%  -37.75% (p=0.007 n=7)
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-100-3                         659.2n ±  8%    427.2n ± 61%  -35.19% (p=0.011 n=7)
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-1000-3                        817.1n ± 30%    528.5n ± 48%  -35.32% (p=0.004 n=7)
SingleConnectionPool/Next()/Single__________-3                                                   0.4031n ± 25%   0.3407n ±  4%  -15.48% (p=0.001 n=7)
SingleConnectionPool/Next()/Parallel_(1000)-3                                                    0.3497n ± 10%   0.3455n ± 21%        ~ (p=0.456 n=7)
SingleConnectionPool/OnFailure()/Single_____-3                                                   0.3832n ± 17%   0.3419n ±  2%  -10.78% (p=0.001 n=7)
SingleConnectionPool/OnFailure()/Parallel_(1000)-3                                               0.3057n ± 22%   0.5095n ±  2%  +66.67% (p=0.001 n=7)
StatusConnectionPool/Next()/Single_____-3                                                         17.83n ± 19%    15.36n ± 15%  -13.85% (p=0.017 n=7)
StatusConnectionPool/Next()/Parallel_(100)-3                                                      72.17n ± 16%    74.17n ± 15%        ~ (p=1.000 n=7)
StatusConnectionPool/OnFailure()/Single_____-3                                                    23.64n ± 11%    22.48n ±  6%        ~ (p=0.165 n=7)
StatusConnectionPool/OnFailure()/Parallel_(10)-3                                                  91.59n ± 17%   100.50n ±  7%   +9.73% (p=0.011 n=7)
StatusConnectionPool/OnSuccess()/Single_____-3                                                    17.71n ±  7%    15.07n ±  9%  -14.91% (p=0.001 n=7)
StatusConnectionPool/OnSuccess()/Parallel_(10)-3                                                  5.782n ± 18%    5.361n ± 23%        ~ (p=0.245 n=7)
StatusConnectionPool/resurrect()/Single-3                                                         63.83n ± 52%    40.94n ± 30%        ~ (p=0.073 n=7)
StatusConnectionPool/resurrect()/Parallel_(10)-3                                                  114.8n ± 20%    131.3n ±  5%  +14.37% (p=0.017 n=7)
Transport/Defaults-3                                                                              2.017µ ± 34%    1.359µ ± 27%  -32.62% (p=0.011 n=7)
Transport/Headers-3                                                                               1.901µ ± 15%    1.549µ ± 20%  -18.52% (p=0.001 n=7)
Transport/Compress_body_(pool:_false)-3                                                           420.0µ ± 16%    518.9µ ± 18%  +23.53% (p=0.004 n=7)
Transport/Compress_body_(pool:_true)-3                                                            22.35µ ±  9%    18.86µ ±  4%  -15.60% (p=0.001 n=7)
TransportLogger/Text-3                                                                            1.864µ ± 43%    2.194µ ± 27%        ~ (p=0.259 n=7)
TransportLogger/Text-Body-3                                                                       6.131µ ± 48%    7.691µ ± 19%        ~ (p=0.259 n=7)
TransportLogger/JSON-3                                                                            1.894µ ± 19%    2.248µ ± 28%        ~ (p=0.219 n=7)
TransportLogger/JSON-Body-3                                                                       5.242µ ± 32%    5.427µ ± 23%        ~ (p=0.805 n=7)
geomean                                                                                           239.2n          208.0n        -13.05%

                                                                           │ /Users/runner/work/_temp/base.txt │   /Users/runner/work/_temp/head.txt   │
                                                                           │               B/op                │     B/op       vs base                │
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-1-3                                  1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-10-3                                 1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-100-3                                1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-1000-3                               1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-1-3                                  1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-10-3                                 1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-100-3                                1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-1000-3                               1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=0.462 n=7)
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-1-3                        1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-10-3                       1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-100-3                      1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-1000-3                     1.095Ki ±  0%     1.094Ki ±  0%  -0.09% (p=0.005 n=7)
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-1-3                        1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-10-3                       1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-100-3                      1.094Ki ±  0%     1.094Ki ±  0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-1000-3                     1.095Ki ±  0%     1.094Ki ±  0%       ~ (p=0.266 n=7)
SingleConnectionPool/Next()/Single__________-3                                                   0.000 ±  0%       0.000 ±  0%       ~ (p=1.000 n=7) ¹
SingleConnectionPool/Next()/Parallel_(1000)-3                                                    0.000 ±  0%       0.000 ±  0%       ~ (p=1.000 n=7) ¹
SingleConnectionPool/OnFailure()/Single_____-3                                                   0.000 ±  0%       0.000 ±  0%       ~ (p=1.000 n=7) ¹
SingleConnectionPool/OnFailure()/Parallel_(1000)-3                                               0.000 ±  0%       0.000 ±  0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/Next()/Single_____-3                                                        0.000 ±  0%       0.000 ±  0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/Next()/Parallel_(100)-3                                                     0.000 ±  0%       0.000 ±  0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnFailure()/Single_____-3                                                   0.000 ±  0%       0.000 ±  0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnFailure()/Parallel_(10)-3                                                 0.000 ±  0%       0.000 ±  0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnSuccess()/Single_____-3                                                   0.000 ±  0%       0.000 ±  0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnSuccess()/Parallel_(10)-3                                                 0.000 ±  0%       0.000 ±  0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/resurrect()/Single-3                                                        45.00 ± 11%       46.00 ± 13%       ~ (p=0.284 n=7)
StatusConnectionPool/resurrect()/Parallel_(10)-3                                                 45.00 ±  9%       45.00 ±  7%       ~ (p=0.769 n=7)
Transport/Defaults-3                                                                           1.453Ki ±  0%     1.453Ki ±  0%       ~ (p=1.000 n=7) ¹
Transport/Headers-3                                                                            1.469Ki ±  0%     1.469Ki ±  0%       ~ (p=1.000 n=7) ¹
Transport/Compress_body_(pool:_false)-3                                                        796.6Ki ±  0%     796.6Ki ±  0%       ~ (p=0.592 n=7)
Transport/Compress_body_(pool:_true)-3                                                         1.701Ki ±  0%     1.697Ki ±  0%  -0.23% (p=0.003 n=7)
TransportLogger/Text-3                                                                         1.689Ki ±  0%     1.689Ki ±  0%       ~ (p=1.000 n=7) ¹
TransportLogger/Text-Body-3                                                                    9.562Ki ±  0%     9.562Ki ±  0%       ~ (p=1.000 n=7) ¹
TransportLogger/JSON-3                                                                         1.797Ki ±  0%     1.797Ki ±  0%       ~ (p=1.000 n=7) ¹
TransportLogger/JSON-Body-3                                                                    5.422Ki ±  0%     5.422Ki ±  0%       ~ (p=1.000 n=7) ¹
geomean                                                                                                      ²                  +0.05%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                                                           │ /Users/runner/work/_temp/base.txt │ /Users/runner/work/_temp/head.txt  │
                                                                           │             allocs/op             │ allocs/op   vs base                │
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-1-3                                     9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-10-3                                    9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-100-3                                   9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/SingleConnectionPool/Perform/parallelism-1000-3                                  9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-1-3                                     9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-10-3                                    9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-100-3                                   9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/StatusConnectionPool/Perform/parallelism-1000-3                                  9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-1-3                           9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-10-3                          9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-100-3                         9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/SynchronizedWrapper/Perform/parallelism-1000-3                        9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-1-3                           9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-10-3                          9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-100-3                         9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
ClientPoolAccess/CustomPool/ConcurrentSafeOptIn/Perform/parallelism-1000-3                        9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=7) ¹
SingleConnectionPool/Next()/Single__________-3                                                    0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
SingleConnectionPool/Next()/Parallel_(1000)-3                                                     0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
SingleConnectionPool/OnFailure()/Single_____-3                                                    0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
SingleConnectionPool/OnFailure()/Parallel_(1000)-3                                                0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/Next()/Single_____-3                                                         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/Next()/Parallel_(100)-3                                                      0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnFailure()/Single_____-3                                                    0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnFailure()/Parallel_(10)-3                                                  0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnSuccess()/Single_____-3                                                    0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/OnSuccess()/Parallel_(10)-3                                                  0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/resurrect()/Single-3                                                         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
StatusConnectionPool/resurrect()/Parallel_(10)-3                                                  0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=7) ¹
Transport/Defaults-3                                                                              11.00 ± 0%     11.00 ± 0%       ~ (p=1.000 n=7) ¹
Transport/Headers-3                                                                               12.00 ± 0%     12.00 ± 0%       ~ (p=1.000 n=7) ¹
Transport/Compress_body_(pool:_false)-3                                                           38.00 ± 0%     38.00 ± 0%       ~ (p=1.000 n=7) ¹
Transport/Compress_body_(pool:_true)-3                                                            19.00 ± 0%     19.00 ± 0%       ~ (p=1.000 n=7) ¹
TransportLogger/Text-3                                                                            18.00 ± 0%     18.00 ± 0%       ~ (p=1.000 n=7) ¹
TransportLogger/Text-Body-3                                                                       36.00 ± 0%     36.00 ± 0%       ~ (p=1.000 n=7) ¹
TransportLogger/JSON-3                                                                            13.00 ± 0%     13.00 ± 0%       ~ (p=1.000 n=7) ¹
TransportLogger/JSON-Body-3                                                                       24.00 ± 0%     24.00 ± 0%       ~ (p=1.000 n=7) ¹
geomean                                                                                                      ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

Compared using benchstat. Benchmarks were run with -benchtime=500ms -count=7 on the same runner for a fair comparison.

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.

fix: discovery should fall back to configured URLs when pool is exhausted

2 participants