comphead opened a new pull request, #5987:
URL: https://github.com/apache/datafusion-comet/pull/5987

   ## Which issue does this PR close?
   
   Closes #5986.
   
   ## Rationale for this change
   
   The Spark SQL matrix runs `sql/testOnly *` (`dev/ci/spark-sql-modules.py`), 
so every RocksDB
   state-store suite under 
`sql/core/src/test/scala/org/apache/spark/sql/execution/streaming/state/`
   runs with Comet enabled. None of them exercise a Comet code path:
   
   - `CometExecRule._apply` and `CometScanRule.apply` return the plan untouched 
for any streaming plan
     (`ShimCometStreaming.isStreamingPlan`, implemented for both 3.x and 4.x), 
so the suites that drive
     streaming queries run plain Spark end to end.
   - The rest call `StateStore`/`RocksDB` APIs directly and never build a query 
plan.
   
   Before this PR, exactly one of the six suites was skipped, on one of the 
four Spark versions:
   
   | Suite | 3.4.3 | 3.5.9 | 4.0.4 | 4.1.3 | shard |
   | --- | --- | --- | --- | --- | --- |
   | `RocksDBStateStoreIntegrationSuite` | runs | runs | runs | "ignored" | 
`sql_core-1` |
   | `RocksDBStateStoreSuite` | runs | runs | runs | runs | `sql_core-2` |
   | `RocksDBSuite` | runs | runs | runs | runs | `sql_core-3` |
   | `RocksDBStateStoreCheckpointFormatV2Suite` | n/a | n/a | runs | runs | 
`sql_core-1` |
   | `RocksDBCheckpointFailureInjectionSuite` | n/a | n/a | n/a | runs | 
`sql_core-3` |
   | `RocksDBLineageSuite` | n/a | n/a | n/a | runs | `sql_core-1` |
   
   There is precedent: `StateStoreSuite`, the 
`StateStoreSuiteBase[HDFSBackedStateStoreProvider]` twin
   of `RocksDBStateStoreSuite`, is already skipped under Comet on 4.0 and 4.1 
with the comment "The
   tests target streaming state-store internals (StateStore.get/put/commit), 
not SQL execution paths,
   and the `maintenance` test is flaky in CI" (#4221). The same reasoning 
applies to the RocksDB
   provider, which is the heavier of the two: `RocksDBSuite` is ~4000 lines and 
`@SlowSQLTest`,
   `RocksDBStateStoreSuite` is `@ExtendedSQLTest`, and 
`AlsoTestWithRocksDBFeatures` /
   `AlsoTestWithEncodingTypes` multiply each case across 
changelog-checkpointing, column-family and
   encoding permutations. They land in all three `sql_core` shards, the rows 
already tuned for the
   7 GB runner budget.
   
   ### The mixin order matters, and the existing 4.1 entry had it wrong
   
   `RocksDBStateStoreIntegrationSuite` is quoted as "ignored" above because 
that is what the patch
   intends, not what it does. `dev/diffs/4.1.3.diff` mixes the trait in last:
   
   ```scala
   class RocksDBStateStoreIntegrationSuite extends StreamTest
     with AlsoTestWithRocksDBFeatures with IgnoreCometSuite {
   ```
   
   `AlsoTestWithRocksDBFeatures` registers tests through `super.test`, and 
`super` inside that trait
   resolves to whatever is linearized *after* it. With `IgnoreCometSuite` 
declared last it linearizes
   *before* the trait, so `testWithColumnFamilies` and 
`testWithChangelogCheckpointing*` reach
   `SQLTestUtils.test` directly and register real tests. Only plain `test(...)` 
calls were skipped --
   one of that suite's nine registration sites.
   
   Declaring `IgnoreCometSuite` before the trait puts it after in the 
linearization, so every
   `super.test` lands on the override. Verified against a standalone model of 
the trait stack compiled
   with Scala 2.13.15:
   
   ```
   ===== ... with AlsoTestWithRocksDBFeatures with IgnoreCometSuite =====
     IGNORE plain (disabled when Comet is on)
     RUN    viaHelper - with colFamiliesEnabled=true (with changelog 
checkpointing)
     RUN    viaHelper - with colFamiliesEnabled=true (without changelog 
checkpointing)
     RUN    viaHelper - with colFamiliesEnabled=false (with changelog 
checkpointing)
     RUN    viaHelper - with colFamiliesEnabled=false (without changelog 
checkpointing)
     --> registered-to-run: 4, ignored: 1
   
   ===== ... with IgnoreCometSuite with AlsoTestWithRocksDBFeatures =====
     --> registered-to-run: 0, ignored: 6, duplicate names: 0
   ```
   
   The same model, run against the exact shapes this PR produces 
(`RocksDBSuite` with
   `IgnoreCometSuite` as first parent, and `RocksDBStateStoreSuite` with the 
abstract base class plus
   both `AlsoTestWith*` traits), reports 0 registered-to-run and 0 duplicate 
test names.
   
   Inserting the trait only adds it between the `AlsoTestWith*` traits and 
`SQLTestUtils` in the
   linearization; the relative order of every other parent is unchanged, so 
with `ENABLE_COMET=false`
   the suites register exactly the test names they do upstream.
   
   ## What changes are included in this PR?
   
   `dev/diffs/3.4.3.diff`, `dev/diffs/3.5.9.diff`, `dev/diffs/4.0.4.diff` and 
`dev/diffs/4.1.3.diff`
   gain `IgnoreCometSuite` on the RocksDB state-store suites, plus a comment on 
each explaining why
   the suite is skipped and why the mixin order is load-bearing. 14 suite 
entries in total.
   
   Spark 3.4's `RocksDBStateStoreSuite` does not extend `SQLTestUtils` (no 
`SharedSparkSession`
   mixin), so `IgnoreCometSuite` cannot be mixed in there. It gets the inline
   `SparkSession.isCometEnabled` override instead, the same pattern 
`StateStoreSuite` uses on 4.0/4.1.
   
   Deliberately left running:
   
   - `RocksDBStateStoreLockHardeningSuite` and `RocksDBStateEncoderSuite` 
(4.0/4.1)
   - `RocksDBSuite` on Spark 3.4 only, where it is still a bare `SparkFunSuite`
   
   All three are plain `SparkFunSuite`s that never start a `SparkSession`, so 
Comet is never loaded
   and skipping them would drop upstream regression detection for no gain.
   
   Per the contributor guide, no diff file was hand-edited: each Spark tag was 
checked out, the
   existing diff applied, the Spark sources modified, and the diff regenerated 
with
   `git diff <tag>`.
   
   ## How are these changes tested?
   
   - Round-trip baseline: regenerating each diff from an unmodified patched 
tree reproduced the
     committed file byte-for-byte, before any edit, so the delta below is only 
the intended change.
   - Each regenerated diff applies cleanly to a pristine checkout of its tag 
(`v3.4.3`, `v3.5.9`,
     `v4.0.4`, `v4.1.3`) and round-trips byte-identically afterwards.
   - The `git diff` against the previous diff files adds only RocksDB hunks; 
the single pair of
     removed lines is the reworked 4.1.3 `RocksDBStateStoreIntegrationSuite` 
hunk header.
   - Trait linearization and test-name uniqueness verified with the compiled 
Scala model described
     above.
   - Every added line is within Spark's 100-character scalastyle limit.
   
   Not run locally: the Spark SQL suites themselves. Confirming the suites now 
report as ignored
   needs a CI run, so this PR should carry the `run-spark-3.5-tests`, 
`run-spark-4.0-tests` and
   `run-spark-3.4-tests` labels (4.1 runs in the merge queue).
   


-- 
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]

Reply via email to