Skip to content

CI Failure DoctorCI Failure - Run #22920159072 (Per-Class Coverage Gate) #4327

@github-actions

Description

@github-actions

Failure Details

Failed Jobs and Errors

Job Conclusion
Per-Class Coverage Gate → Enforce Per-Class Coverage Gate ❌ failure
allBuildAndTestSuccessful → Verify all jobs passed ❌ failure (depends on above)
All other buildAndTest jobs (Java 11/17/21/25, jcstress) ✅ success

Coverage regression reported by the gate:

Class Line Branch Method
graphql.execution.instrumentation.dataloader.ExhaustedDataLoaderDispatchStrategy -1.2% 🔴 -7.7% 🔴 ±0.0%

Specifically the dispatchImpl method:

  • Line: 95.0% (baseline: 100.0%, delta: -5.0%)
  • Branch: 75.0% (baseline: 100.0%, delta: -25.0%)

Root Cause

This failure is not caused by PR #4326, which only modifies .github/dependabot.yml (Dependabot schedule: weekly → monthly). No Java source code was changed.

The coverage regression in ExhaustedDataLoaderDispatchStrategy.dispatchImpl is a flaky/intermittent failure. The method uses a CAS (Compare-And-Swap) based loop with multiple concurrent code paths:

private void dispatchImpl(CallStack callStack) {
    while (true) {
        int oldState = callStack.getState();
        if (!CallStack.getDataLoaderToDispatch(oldState)) {   // branch: may/may-not be hit
            int newState = CallStack.setCurrentlyDispatching(oldState, false);
            if (callStack.tryUpdateState(oldState, newState)) { // CAS: may fail and retry
                return;
            }
        }
        // ...
        if (callStack.tryUpdateState(oldState, newState)) { // CAS: retry branch may/may-not trigger
            break;
        }
    }
    // ...
}

The branch miss (25% = 2/8 branches) corresponds to CAS-retry paths that are only hit under specific concurrent timing conditions. The baseline recorded 100% coverage when these paths happened to be exercised, but they are not reliably exercised in every test run.

Baseline confirms 100% was the recorded expectation:

  • dispatchImpl baseline: Line {covered: 20, missed: 0}, Branch {covered: 8, missed: 0}

Recommended Fix

  • Immediate: Re-run the CI workflow for PR Change Dependabot update schedule from weekly to monthly #4326 — the coverage failure is unrelated to the PR's changes and will likely pass on a re-run
  • Long-term: Update test-baseline.json to reflect a more realistic/stable coverage level for ExhaustedDataLoaderDispatchStrategy.dispatchImpl, or add a dedicated concurrency test that reliably exercises all CAS-retry branches in dispatchImpl (the while(true) loop's retry path when tryUpdateState returns false).
    • File: src/main/java/graphql/execution/instrumentation/dataloader/ExhaustedDataLoaderDispatchStrategy.java
    • Method: dispatchImpl (line ~239)
    • Test: src/test/groovy/graphql/execution/instrumentation/dataloader/

Generated by CI Failure Doctor ·

To install this agentic workflow, run

gh aw add githubnext/agentics/workflows/ci-doctor.md@ee50a3b7d1d3eb4a8c409ac9409fd61c9a66b0f5

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions