Skip to content

SQLAppStatusListenerMemoryLeakSuite "no memory leak" is flaky in the Spark SQL tests #6890

Closed

Description

@andygrove

Describe the bug

org.apache.spark.sql.execution.ui.SQLAppStatusListenerMemoryLeakSuite ("no memory leak"), which runs in the sql_core-1 shard of the Spark SQL tests, fails intermittently:

[info] - no memory leak *** FAILED *** (1 second, 338 milliseconds)
[info]   statusStore.listener.get.noLiveData() was false (SQLAppStatusListenerSuite.scala:1123)

It is the only failing test in the shard when it happens (nightly 2026-10-10, Spark 4.0: Tests: succeeded 7847, failed 1).

The cause is a race in the Spark test itself. Upstream Spark fixed it on master, but none of the Spark versions Comet's tests run against has the fix.

The race. In DAGScheduler.failJobAndIndependentStages, the job waiter is notified before SparkListenerJobEnd is posted:

cleanupStateForJobAndIndependentStages(job)
job.listener.jobFailed(error)   // unblocks the failing action on the test thread
listenerBus.post(SparkListenerJobEnd(job.jobId, clock.getTimeMillis(), JobFailed(error)))

The test runs 100 failing jobs (df.foreach(_ => throw new RuntimeException("Oops"))), then calls sc.listenerBus.waitUntilEmpty() and asserts noLiveData(). If the last JobEnd is posted after the bus has been drained, the last failed execution never reaches its end-event count and stays in liveExecutions, so the assertion sees live data. In the 2026-10-10 log the assertion fails 22 ms after the last Oops task failure, and the shard log has no dropped-event messages.

Steps to reproduce

Not deterministic. It occurred in 2 of 252 CI executions of the shard (see below). Upstream reports that it reproduces under SBT when the test is run repeatedly.

Expected behavior

The suite passes consistently.

Additional context

Sightings. Every nightly, merge-queue and label run from 2026-10-02 to 2026-10-12 was checked. The sql_core-1 job ran 252 times and the test failed in 2 of them, about 0.8%. Commit runs of PRs that carry a run-* label also execute the shards and were not counted.

Date Run Job Result
2026-10-06 label run on #6709, head 4cf4f40 Spark 4.1 sql_core-1 succeeded 8334, failed 1. The Comet CI run at the same head passed.
2026-10-10 nightly on main, head bfacc43 Spark 4.0 sql_core-1 succeeded 7847, failed 1. The Spark 3.5 and 4.2 sql_core-1 jobs of the same nightly passed. The nightly's auto-filed issue is #6848.

By run type: 1 of 32 nightly executions, 1 of 39 label-run executions and 0 of 181 merge-queue executions. The other failed sql_core-1 jobs in the window failed other tests on PR branches, or had no failed step and no log (a lost runner).

Impact. CI only. It turns the nightly or a label run red. In the merge queue it would evict the PR, which has not happened yet.

Every Spark version Comet tests has the race. The assertion is unguarded and the DAGScheduler order above is the same in 3.4.3, 3.5.9, 4.0.4, 4.1.3 and 4.2.0, and in the 4.0.5-rc2, 4.1.4-rc2 and 4.2.1-rc1 release candidates. A patch-version bump will not fix it.

Upstream fix. apache/spark#56790 (SPARK-57711) wraps the final assertion in eventually(timeout(5.seconds), interval(10.milliseconds)). It was merged to master and branch-4.x on 2026-06-27 and is in 4.3.0-rc1. It is not on branch-4.2, branch-4.1, branch-4.0 or branch-3.5. Upstream fixed the test, and the scheduler order is unchanged in 4.3.0-rc1.

Is Comet involved? The suite builds its own SparkContext, and #6415 (2026-10-02) made suites like it run with Comet. The race is in Spark's scheduler and listener bus, and upstream hit the same failure on plain Spark SBT builds (example run). Whether running with Comet makes the window wider has not been measured.

Options.

  1. Carry the upstream test change (one import and the eventually wrapper) in dev/diffs/{3.4.3,3.5.9,4.0.4,4.1.3,4.2.0}.diff. The diffs have to be regenerated as described in the Spark SQL tests guide, not edited by hand. This is the smallest change and matches upstream.
  2. Do nothing and re-run the failed job when it happens.
  3. Mark the test IgnoreComet. This also drops the check that a Comet plan leaves no live SQL status data behind, so it is the least attractive.

Activity

  1. added
    bugSomething isn't working
    testTesting related
    priority:lowMinor issues, test failures, tooling, cosmetic
    area:ciCI/CD, GitHub Actions, build tooling
    on Oct 12, 2026
  2. LinSimon-901101 commented on Oct 12, 2026

    @LinSimon-901101
    Contributor

    take

  3. added a commit that references this issue on Oct 13, 2026
    e860b04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

area:ciCI/CD, GitHub Actions, build toolingbugSomething isn't workingpriority:lowMinor issues, test failures, tooling, cosmeticspark sql testsSpark SQL test failurestestTesting related

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions