Skip to content

Bug triage results: 2026-10-12 #6892

Open

Description

@andygrove

Triage pass over the open requires-triage queue, per the project Bug Triage Guide.

  • Date: 2026-10-12
  • Total issues processed: 89 (84 triaged, 5 skipped, 0 failed)
  • Type counts: 49 bugs, 35 enhancements
  • Priority counts applied: priority:critical 18, priority:high 0, priority:medium 25, priority:low 6
  • Guide: docs/source/contributor-guide/bug_triage.md

Labels have already been applied. A reviewer should spot-check the calls below and close this issue when satisfied. Corrections should be made directly on the affected issue.

Notes on this pass:

Bugs

priority:critical

priority:medium

  • Native PartialMerge over input sorted on a prefix of its keys fails to spill on DataFusion 55.2 (#6880)
  • Native date functions and date-to-string cast return NULL or fail for dates outside chrono's NaiveDate range (#6843)
  • Native cast string to date returns NULL for years outside chrono's NaiveDate range (#6842)
  • CometScanRule reads fs.comet.libhdfs.schemes from SQLConf, but native reads it from the Hadoop conf (#6837)
  • Cast of a literal that fails under ANSI fails the query at planning time, even in a branch no row reaches (#6825)
  • IN evaluates later candidates over the whole batch, so an ANSI error can fire for a row that already matched (#6823)
  • Native timezone conversions stop applying DST after 2099, while Spark keeps applying the zone's rules (#6816)
    • Area labels: area:expressions; also carries correctness
    • Rationale: After about 2100, hour, casts to string or date, and date_trunc in a DST zone can be off by the DST offset, and the first two run natively by default. That is silent wrong results, documented in the compatibility guide. Raised from the author's priority:low to medium, where this pass holds the other far-from-present date issues (see escalations).
  • Non-AQE DPP subquery doesn't reuse the Comet broadcast when the dimension is a UNION (#6815)
  • ShuffleScan metrics are dropped under AQE: shuffle read and decode time missing on the direct-read path (#6804)
    • Area labels: area:shuffle
    • Rationale: With AQE and direct read, both on by default, the shuffle read and decode time never reach any SQL metric. Results are unaffected, but the metrics are broken, so step 3 (see escalations).
  • Null-named attribute fails Arrow export with "field name cannot be null" (#6802)
    • Area labels: area:ffi, spark sql tests
    • Rationale: An NPE in Arrow export fails the query, but it needs the opt-in localTableScan and a null-named attribute (SPARK-57725). A visible failure on an opt-in path, step 3 (see escalations).
  • GROUP BY on a struct containing a map fails with CometNativeException (#6801)
    • Area labels: spark sql tests
    • Rationale: The query fails with CometNativeException where Spark succeeds. It was seen only with the opt-in localTableScan and isn't diagnosed yet, so step 3 for a visible failure (see escalations).
  • Native errors surface as SparkException where Spark raises a specific error class (#6798)
  • Math functions differ from Spark in the last digits (#6797)
    • Area labels: area:expressions, spark sql tests; also carries expression, correctness
    • Rationale: Native asinh, cosh, tan, cot, atanh, cbrt, exp, pow and atan2 run by default and return values that differ from Spark in the last digits. Held at medium because the values differ only in floating-point precision (see escalations).
  • Native Iceberg scan fails with field not found when an equality delete is keyed on a nested field (#6782)
    • Area labels: area:scan; also carries area:Iceberg
    • Rationale: Every native Iceberg query on such a table fails where Spark answers. A visible failure with a workaround (turning off the native Iceberg scan), so step 3.
  • Native Parquet writer starts a new row group for every batch when writing to HDFS (#6774)
    • Area labels: area:writer; also carries performance
    • Rationale: Files written natively to HDFS get a row group every 8,192 rows instead of up to 1,048,576, so readers do more work. The data is right, so this is performance degradation on the off-by-default writer, step 3.
  • Native fanout Iceberg writes fail when their open partitions outgrow the memory pool (#6771)
  • Native sequence raises "Unreachable code reached." where Spark 4.0.5, 4.1.4 and 4.2.1 return the sequence (SPARK-58821) (#6769)
    • Area labels: area:expressions
    • Rationale: On Spark 4.0.5, 4.1.4 and 4.2.1, which include SPARK-58821, Comet fails a query that Spark answers. A visible failure on edge-case inputs, step 3.
  • spark.comet.expression.<name>.enabled has no effect on expressions inside a codegen-dispatched tree (#6756)
    • Area labels: area:expressions; also carries area:udf
    • Rationale: The flag the user guide documents for forcing a Spark fallback has no effect inside a dispatched tree. Results match Spark, so this is a broken feature with workarounds, step 3.
  • Native Parquet writes on Spark 3.4/3.5 ignore maxRecordsPerFile (#6751)
  • [Bug] Native make_date mishandles Date32 overflow and skipped evaluation (#6741)
  • Native mode treats all NaNs as one value on Spark 3.4, where Spark counts each NaN separately (#6738)
  • Iceberg data tables whose names end with a metadata-table name fall back to Spark (#6719)
    • Area labels: area:scan
    • Rationale: An ordinary Iceberg table named, say, user_files or order_history falls back with a misleading reason, because the metadata-table check matches the end of the name. Results are correct, but those tables lose the native scan, so step 3.
  • Cached AQE queries fail after transition reversion on Spark 4.0+ (#6687)
  • TakeOrderedAndProject fails with "Subquery not found" when the sort order has a scalar subquery and the input has several partitions (#6676)
    • Area labels: none
    • Rationale: With default configs, a scalar subquery in the sort keys over a multi-partition input fails the query where Spark returns rows. A visible failure with a workaround, step 3.
  • Codegen dispatcher fails with "Subquery has not finished" when a scalar subquery is inside the dispatched expression (#6674)
    • Area labels: area:expressions; also carries area:udf
    • Rationale: With the dispatcher on by default, a scalar subquery inside a Scala UDF's argument, or inside to_json on Spark 4, fails the task where Spark succeeds, on 1.0 and 1.1 as well. A visible failure with a workaround, step 3.

priority:low

  • SQLAppStatusListenerMemoryLeakSuite "no memory leak" is flaky in the Spark SQL tests (#6890)
    • Area labels: area:ci, spark sql tests; also carries test
    • Rationale: A CI flake caused by a race in the Spark test itself (2 of 252 runs), which upstream fixed in SPARK-57711. Step 4, confirming the author's label. It hasn't evicted a PR from the merge queue, so the escalation trigger doesn't apply yet.
  • S3 test suites can no longer pull the minio/minio image (#6884)
  • CometIcebergWriteDetectionSuite assumes a split Iceberg write plan (#6803)
  • collect_set / collect_list return elements in a different order than Spark (#6796)
    • Area labels: area:aggregation, spark sql tests
    • Rationale: Spark documents the order of collect_list and collect_set results as non-deterministic, so the failing tests depend on an order Spark doesn't promise. Test-only, step 4.
  • test: Spark SQL tests that inspect the physical plan fail when LocalTableScanExec is native (#6795)
    • Area labels: spark sql tests; also carries test
    • Rationale: About 40 upstream tests assert on Spark nodes that become Comet nodes once localTableScan is on by default. Test-only, step 4.
  • Spark SQL Writer Tests (manual) never runs Comet's native writer (#6749)
    • Area labels: area:writer, area:ci
    • Rationale: The manual workflow never turns on the native writer, so a green run tests Spark's writer. CI tooling, step 4. Its second finding, that the documented environment variable for allowIncompatible is ignored, is a minor config defect with an easy workaround.

Enhancements

  • Rename Cast.is_spark4_plus and get_json_object_spark34 to describe the behavior they select (#6891)
    • Area labels: area:expressions
    • Rationale: A rename with no behavior change, a refactor under the guide's type table. Confirms the author's label.
  • Write blog post for 1.2.0 release (#6889)
  • Add a GroupsAccumulator for the native regr_* aggregates (#6886)
  • Native Iceberg writes: count the DataFiles a task keeps in its memory reservation (#6885)
    • Area labels: area:writer; also carries area:Iceberg, area:memory
    • Rationale: A memory accounting improvement for the native Iceberg writer, with nothing failing. Confirms the author's label.
  • [EPIC] Nested-type conversion performance: C2R, R2C and JVM shuffle slower than Spark (#6855)
    • Area labels: area:shuffle, area:scan; also carries performance, EPIC
    • Rationale: A performance EPIC. Every item is a gap against Spark or a benchmark follow-up, with correct results.
  • Push Iceberg residual predicates on decimal columns into the native scan (#6854)
    • Area labels: area:scan; also carries performance, area:Iceberg
    • Rationale: Results are correct, and this adds row group and page pruning on decimal columns.
  • Follow-ups to native NULL short-circuiting of array and map functions (#6850)
  • Check the timezone label of every native expression that returns a timestamp (#6849)
  • [followup] Broadcast build-side auto-bridge only accelerates the innermost join when a fact has multiple unsupported-format dimensions (#6832)
  • Native fanout Iceberg writes: sort the remaining rows by partition when the memory pool runs short, instead of writing small files (#6818)
  • Interrupt a native scalar Arrow UDF when its task is killed (#6811)
  • perf: without AQE, native operators read Comet shuffle through a JVM round trip per block, making small reduce tasks up to 4x slower than Spark (#6807)
  • perf: every Comet broadcast hash join probe task re-decodes the whole broadcast in the JVM (#6806)
  • Draft the Apache Comet proposal and board resolution (#6791)
  • Agree on the scope and repositories for Apache Comet (#6789)
  • Agree on the initial PMC, committers, and chair for Apache Comet (#6788)
  • perf: divide once per row in pmod and div_round_half_up (#6781)
    • Area labels: area:shuffle, area:expressions; also carries performance
    • Rationale: A performance optimization of pmod in shuffle partitioning and of wide decimal rescaling.
  • Hand natively written Iceberg files' Parquet footers to the JVM instead of reading them back (#6772)
    • Area labels: area:writer; also carries area:Iceberg
    • Rationale: A performance optimization that saves two storage reads for each natively written file. Confirms the author's label.
  • Warn when unrecognized spark.comet.* configuration keys are set (#6767)
    • Area labels: none
    • Rationale: A new warning for mistyped configuration keys. Confirms the author's label.
  • perf: reuse the nested unsafe views in ArrowWriter's row path, detaching them once per row (#6765)
  • perf: converting unsafe arrays of maps to Arrow is up to 1.7x slower when C2 inlines MapWriter.writeEntries (#6757)
  • Codegen dispatcher: run more Scala UDF null-guard shapes inside the kernel (#6755)
  • Stop ending Spark-to-Arrow batches at input file boundaries (#6752)
  • Add an end-to-end HDFS write test for both native Parquet writers (#6750)
    • Area labels: area:writer
    • Rationale: New test coverage. Confirms the author's label.
  • Extend per-scan HTTP attempt and retry metrics to native Azure and GCS (#6748)
  • Design question: long-term, should native Iceberg scans run through DataFusion's ParquetSource instead of iceberg-rust's ArrowReader? (#6737)
    • Area labels: area:scan
    • Rationale: A design discussion about the long-term read path for native Iceberg scans, with nothing broken.
  • Explore Kubernetes in-place pod memory resize (Spark 4.2 ExecutorResizePlugin) for Comet's untracked native memory (#6727)
    • Area labels: none; also carries area:memory
    • Rationale: An exploration of Spark 4.2's ExecutorResizePlugin for Comet's untracked native memory. Confirms the author's label.
  • Native Iceberg scan reads every field of a nested column even when Spark prunes it (#6724)
  • Row-input conversionTime metric includes the time the child spends producing rows (#6723)
    • Area labels: area:scan
    • Rationale: A metric that counts more than its description says. The issue proposes relabeling or dropping it, since timing each row would cost more than the conversion. Confirms the author's label.
  • Admit all array and map types in CometSparkToColumnarExec (#6722)
  • Reuse Arrow buffers across batches in Spark-to-Arrow conversion instead of reallocating and zeroing them (#6720)
  • Vectorize the lower-bound check in native date_trunc for fine units (#6717)
  • Native Parquet scan: FLOAT and DOUBLE comparisons in data filters don't prune with row-level pushdown (#6702)
    • Area labels: area:scan; also carries performance
    • Rationale: Lost pruning in the opt-in row-level pushdown mode, with correct results. Confirms the author's label.
  • Support custom vectorized Java UDFs that operate on Arrow vectors (#6694)
  • Native Iceberg writes: write row lineage for copy-on-write DML and compaction on format-version 3 tables (#6669)
    • Area labels: area:writer; also carries area:Iceberg
    • Rationale: These writes fall back to iceberg-java today, so native support is new functionality. Confirms the author's label.

Escalations to consider

Skipped (needs more info)

#6576 has no reproduction on a supported path. The others are tracking or record issues rather than bug reports or feature requests. requires-triage was left in place on all five, so they reappear in the next pass until they are closed or classified.

  • Arrow struct writer should respect projected schema width (#6576)
  • Audit the PRs in 1.1.0 for regressions since 1.0.0 (#6399)
  • Bug triage results: 2026-10-05 (#6665)
    • The summary of the 2026-10-05 pass. No type or priority label it applied has changed since, so it can be closed once reviewed.
  • Bug triage results: 2026-09-28 (#6321)
    • The summary of the 2026-09-28 pass, with nothing outstanding, so it can be closed.
  • Bug triage results: 2026-08-24 (#5454)
    • The summary of the 2026-08-24 pass. dwsmith1983 suggested closing it on 2026-10-04, as the other summaries from that period were.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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