You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jmeter.apache.org by "alaahong (via GitHub)" <gi...@apache.org> on 2026/07/26 07:09:02 UTC
[PR] Fix #6457: Suppress spurious 'Existing CookieManager superseded by' warnings across iterations [jmeter]
alaahong opened a new pull request, #6737:
URL: https://github.com/apache/jmeter/pull/6737
## Issue
Fixes #6457
Since 5.6, JMeter logs a flood of `Existing CookieManager ... superseded by ...` (and analogous `CacheManager`, `AuthManager`, `DNSCacheManager` warnings) on every thread-group iteration after the first one. In a long-running test plan with N iterations and M HTTP Samplers under a Thread Group, the log is filled with `(N-1) × M` redundant warning lines per manager type, hiding real issues and alarming users.
## Root cause
`HTTPSamplerBase#addTestElement(TestElement)` routed `CookieManager`, `CacheManager`, `AuthManager`, and `DNSCacheManager` through their **public** `setXxxManager` methods. Those public setters unconditionally log a warning whenever the existing manager is non-null.
`TestCompiler` calls `addTestElement` on every thread-group iteration after `clearTestElementChildren()`, but `clearTestElementChildren()` only clears the `HeaderManager` property — the replace-mode manager references survive across iterations. As a result, the warning fires `N-1` times for `N` iterations even though the user has attached exactly one manager.
`KeystoreConfig` was already exempted because its `addTestElement` branch already called the private `setKeystoreConfigProperty`, which does not warn.
## Fix
Two complementary changes in `HTTPSamplerBase`:
**B. Route replace-mode managers through private property setters in `addTestElement`**
Mirroring the existing `KeystoreConfig` path, `CookieManager`, `CacheManager`, `AuthManager`, and `DNSCacheManager` now go through their `setXxxManagerProperty` / `setDNSResolverProperty` private methods inside `addTestElement`. This is the path used by `TestCompiler` every iteration, so the warning no longer fires on legitimate re-application of the same config element.
**C. Suppress the warning in public setters when the new value is the same instance**
Defensive guard for any caller that explicitly invokes `setCookieManager(mgr)` (or any sibling setter) with the same instance already attached. The reference-equality check uses `==` deliberately and is annotated with `@SuppressWarnings("ReferenceEquality")`. Genuine misuse — attaching a *different* manager of the same type — still produces the warning, so the diagnostic value of the warning is preserved.
## Files changed
- `src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java` — reroute `addTestElement` + add same-instance guard to 5 public setters + extract 2 new private property setters (`setAuthManagerProperty`, `setDNSResolverProperty`) mirroring the existing pattern.
- `src/protocol/http/src/test/java/org/apache/jmeter/protocol/http/sampler/ReproIssue6457Test.java` — new regression test (17 cases) covering: (1) `addTestElement` × 5 iterations for each of the 5 managers, (2) same-instance setter call, (3) different-instance setter call (must still warn), (4) `HeaderManager` merge path, (5) end-to-end smoke test with all 6 managers across 10 iterations.
- `xdocs/changes.xml` — bug-fix entry under a new `HTTP Samplers and Test Script Recorder` subsection.
## Verification
```
./gradlew --quiet :src:protocol:http:compileJava :src:protocol:http:compileTestJava \
:src:protocol:http:checkstyleMain :src:protocol:http:checkstyleTest
./gradlew --quiet :src:protocol:http:test --tests "org.apache.jmeter.protocol.http.sampler.ReproIssue6457Test"
```
### Before (without fix)
- Tests: 17 completed, **10 failed**
- `jmeter.log` `superseded by` lines: **62** (16 from `addTestElement` iterations across 4 managers + 5 from same-instance setter calls + 36 from end-to-end test + 5 expected from different-instance setter calls)
Sample spurious warnings (CookieManager, 5 addTestElement iterations — 4 spurious warnings):
```
14:41:47,064 WARN o.a.j.p.h.s.HTTPSamplerBase: Existing CookieManager CookieManager-UnderTest superseded by CookieManager-UnderTest
14:41:47,064 WARN o.a.j.p.h.s.HTTPSamplerBase: Existing CookieManager CookieManager-UnderTest superseded by CookieManager-UnderTest
14:41:47,064 WARN o.a.j.p.h.s.HTTPSamplerBase: Existing CookieManager CookieManager-UnderTest superseded by CookieManager-UnderTest
14:41:47,064 WARN o.a.j.p.h.s.HTTPSamplerBase: Existing CookieManager CookieManager-UnderTest superseded by CookieManager-UnderTest
```
End-to-end (10 iterations × 6 managers) — 36 spurious warnings:
```
14:41:47,286 WARN o.a.j.p.h.s.HTTPSamplerBase: Existing CookieManager HTTP Cookie Manager superseded by HTTP Cookie Manager
14:41:47,286 WARN o.a.j.p.h.s.HTTPSamplerBase: Existing CacheManager HTTP Cache Manager superseded by HTTP Cache Manager
14:41:47,286 WARN o.a.j.p.h.s.HTTPSamplerBase: Existing AuthManager HTTP Authorization Manager superseded by HTTP Authorization Manager
14:41:47,286 WARN o.a.j.p.h.s.HTTPSamplerBase: Existing DNSCacheManager DNS Cache Manager superseded by DNS Cache Manager
... (repeated 36 times)
```
### After (with fix)
- Tests: 17 completed, **0 failed**
- `jmeter.log` `superseded by` lines: **5** (only the expected warnings from different-instance setter calls — genuine misuse is still detected)
```
14:43:26,470 WARN o.a.j.p.h.s.HTTPSamplerBase: Existing CookieManager CookieManager-First superseded by CookieManager-Second
14:43:26,532 WARN o.a.j.p.h.s.HTTPSamplerBase: Existing CacheManager CacheManager-First superseded by CacheManager-Second
14:43:26,582 WARN o.a.j.p.h.s.HTTPSamplerBase: Existing AuthManager AuthManager-First superseded by AuthManager-Second
14:43:26,628 WARN o.a.j.p.h.s.HTTPSamplerBase: Existing DNSCacheManager DNSCacheManager-First superseded by DNSCacheManager-Second
14:43:26,671 WARN o.a.j.p.h.s.HTTPSamplerBase: Existing KeystoreConfig KeystoreConfig-First superseded by KeystoreConfig-Second
```
## Backwards compatibility
- Public API (`setCookieManager`, `setCacheManager`, `setAuthManager`, `setDNSResolver`, `setKeystoreConfig`) signatures unchanged.
- The only behaviour change is: the warning is suppressed when re-applying the *same* manager instance, which is what `TestCompiler` does on every iteration. Users who intentionally attach multiple managers of the same type still see the warning.
- No changes to merge-mode `HeaderManager` behaviour.
## Credit
Reported in issue #6457. Investigated and fixed locally; happy to submit upstream.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Fix #6457: Suppress spurious 'Existing CookieManager superseded by' warnings across iterations [jmeter]
Posted by "alaahong (via GitHub)" <gi...@apache.org>.
alaahong commented on PR #6737:
URL: https://github.com/apache/jmeter/pull/6737#issuecomment-5082779132
The batchServerBatchTestLocal failure on macOS/JDK17 is a known pre-existing flaky test tracked by #6674 . The failing test plan BatchTestLocal.jmx uses only JavaSampler/JSR223Sampler and does not touch any HTTP component modified by this PR. The same failure occurs on master and is caused by a thread-group scheduling race in server mode on macOS. All non-macOS matrix jobs pass.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org