FrankChen021 opened a new issue, #20399: URL: https://github.com/apache/druid/issues/20399
_This issue was generated automatically by Claude Code (Anthropic's AI coding agent) running a scheduled CI-triage routine on behalf of @FrankChen021. Analysis and suggested fixes are AI-produced; please verify before acting on them._ Scope: the 7 commits pushed to `master` on 2026-09-21. 4 of them had at least one failed job, and every one of those failures has the same single root cause: #19678 (12dcc91566) added JUnit 4 `Assert.assertEquals(...)` calls to `HyperLogLogCollectorTest`, which had already been migrated to JUnit 5 (`org.junit.jupiter.api.Assertions`) on master. The test module no longer compiled, so every push-triggered workflow (Static Checks CI, CodeQL, Unit & Integration tests CI) on that commit and on the next three commits (bd234ed176, 43a0a70477, 6a05dca088, all merged within the same minute) failed at `maven-compiler-plugin:testCompile` before a single test ran. **This is a genuine regression, not a flake.** It was fixed the same day by #20388 (13ae31afc2); that commit and the following one (f81c3c19c9) are fully green. No test-level flaky failures occurred on master yesterday because no test executed on the broken commits. ### Summary | Commit | Failed job | Failure log | Root cause | Verdict | |---|---|---|---|---| | 12dcc91566 (#19678, fix HLL zero cardinality on sparse overflow) | `strict-compilation`, `static-checks-maven`, `openrewrite`, `packaging-check (25)`, `web-checks` | [job 106190452470](https://github.com/apache/druid/actions/runs/35552762793/job/106190452470) | `HyperLogLogCollectorTest` test-compile failure: `cannot find symbol: variable Assert` at lines 622-710 (9 sites); JUnit 4 `Assert` used in a JUnit 5 test with no import | Persistent (fix in #20388) | | 12dcc91566 (#19678) | `Analyze (java)` (CodeQL) | [job 106190451533](https://github.com/apache/druid/actions/runs/35552762493/job/106190451533) | same `testCompile` failure in "Build Java sources" | Persistent (fix in #20388) | | 12dcc91566 (#19678) | `docker-tests`; all 10 `unit tests (25, …)` shards; `QTest 0/4`-`3/4` | [job 106190453025](https://github.com/apache/druid/actions/runs/35552762961/job/106190453025) | same `testCompile` failure while building `druid-processing`; no tests ran | Persistent (fix in #20388) | | bd234ed176 (#20151, handle 429/503 HTML in DirectDruidClient) | `strict-compilation`, `static-checks-maven`, `openrewrite`, `packaging-check (25)`, `web-checks` | [job 106190478978](https://github.com/apache/druid/actions/runs/35552771908/job/106190478978) | same `testCompile` failure inherited from 12dcc91566; commit touches only `DirectDruidClient` | Persistent (fix in #20388) | | bd234ed176 (#20151) | `Analyze (java)` (CodeQL) | [job 106190477985](https://github.com/apache/druid/actions/runs/35552771607/job/106190477985) | same | Persistent (fix in #20388) | | bd234ed176 (#20151) | `docker-tests`; all 10 `unit tests (25, …)` shards; `QTest 0/4`-`3/4` | [job 106190479424](https://github.com/apache/druid/actions/runs/35552772119/job/106190479424) | same | Persistent (fix in #20388) | | 43a0a70477 (#20381, skip unset vars in EnvironmentVariableDynamicConfigProvider) | `strict-compilation`, `static-checks-maven`, `openrewrite`, `packaging-check (25)`, `web-checks` | [job 106190515818](https://github.com/apache/druid/actions/runs/35552784640/job/106190515818) | same `testCompile` failure inherited from 12dcc91566 | Persistent (fix in #20388) | | 43a0a70477 (#20381) | `Analyze (java)` (CodeQL) | [job 106190514772](https://github.com/apache/druid/actions/runs/35552784331/job/106190514772) | same | Persistent (fix in #20388) | | 43a0a70477 (#20381) | `docker-tests`; all 10 `unit tests (25, …)` shards; `QTest 0/4`-`3/4` | [job 106190516040](https://github.com/apache/druid/actions/runs/35552784773/job/106190516040) | same | Persistent (fix in #20388) | | 6a05dca088 (#20368, retry bash-static download in Docker build) | `strict-compilation`, `static-checks-maven`, `openrewrite`, `packaging-check (25)`, `web-checks` | [job 106190538695](https://github.com/apache/druid/actions/runs/35552792951/job/106190538695) | same `testCompile` failure inherited from 12dcc91566 | Persistent (fix in #20388) | | 6a05dca088 (#20368) | `Analyze (java)` (CodeQL) | [job 106190537336](https://github.com/apache/druid/actions/runs/35552792624/job/106190537336) | same | Persistent (fix in #20388) | | 6a05dca088 (#20368) | `docker-tests`; all 10 `unit tests (25, …)` shards; `QTest 0/4`-`3/4` | [job 106190539056](https://github.com/apache/druid/actions/runs/35552793163/job/106190539056) | same | Persistent (fix in #20388) | ### Analysis and suggested fixes 1. **`HyperLogLogCollectorTest` does not compile after #19678 (processing, all shards)** #19678 adds nine regression tests to `processing/src/test/java/org/apache/druid/hll/HyperLogLogCollectorTest.java` (odd-bucket overflow, populated neighbour sharing the overflow byte, dense collectors of both parities) and asserts with `Assert.assertEquals(...)`. The file's imports at that commit are only `org.junit.jupiter.api.Assertions`, `Disabled` and `Test`: the test had been migrated to JUnit 5 on master on 2026-08-13 (3f16421969), so `Assert` resolves to nothing and `testCompile` of `druid-processing` fails with `cannot find symbol: variable Assert` at lines 622, 623, 632, 649, 664, 678, 693, 705 and 710. Because every downstream job (unit-test shards, QTest splits, docker-tests, strict-compilation, static-checks-maven, openrewrite, packaging-check, web-checks' Maven step and the CodeQL Java build) compiles the test sources of `processing`, all of them fail identically and no test executes. The production change in `HyperLogLogCollector.java` itself is fine and is not im plicated. Why pre-merge CI did not catch it: the PR's last pre-merge runs (Static Checks CI, CodeQL, Unit & Integration tests CI) were on 2026-07-14 against the PR head `69a616a9`, which predates the JUnit 5 migration by a month; at that time `org.junit.Assert` was still imported by the file. The branch was merged on 2026-09-21 without a rebase or a fresh CI run, so the merge commit was never compiled before landing. The three commits merged in the same minute (#20151, #20381, #20368) inherited the broken file and are otherwise unrelated: they touch `DirectDruidClient`, `EnvironmentVariableDynamicConfigProvider` and the Docker build script respectively. Status: fixed by #20388 (13ae31afc2), which replaces the nine `Assert.assertEquals` calls with `Assertions.assertEquals`. Master is green from that commit onward (13ae31afc2 and f81c3c19c9 both fully passed), so no further code change is needed. Suggested fix (process, to prevent a recurrence): require the PR branch to be up to date with `master`, or at least require a pre-merge CI run newer than N days, before merging. Concretely, enable "Require branches to be up to date before merging" on the `master` ruleset, or extend `PR Commit Checks` to fail when the PR's merge-base is older than the latest JUnit-migration-style sweeping commit. A cheaper alternative is to make the `PR Merged` (`pull_request_target`) workflow trigger a `Static Checks CI` run on the merge commit and notify the merger on failure, so a stale-branch break is caught within minutes instead of being discovered on the next four commits. -- 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: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
