Skip to content

Merge latest release/26.08 into main [skip ci] - #15434

Merged
nvliyuan merged 11 commits into
NVIDIA:mainfrom
nvliyuan:fix-auto-merge-conflict-15412-v2
Jul 30, 2026
Merged

Merge latest release/26.08 into main [skip ci]#15434
nvliyuan merged 11 commits into
NVIDIA:mainfrom
nvliyuan:fix-auto-merge-conflict-15412-v2

Conversation

@nvliyuan

@nvliyuan nvliyuan commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

Resolves the latest merge conflicts in #15412 after #15423 merged.

Description

Merge the current release/26.08 head into the current main head.

The initial conflicts were the root and Scala 2.13 project versions. Both were resolved by retaining main's 26.10.0-SNAPSHOT version instead of the release branch's 26.08.0-SNAPSHOT version.

The branch was refreshed again after additional PRs landed on release/26.08. The current diff includes all release updates added after #15423, including:

Checklists

Documentation

  • Updated for new or modified user-facing features or behaviors
  • No user-facing change

Testing

  • Added or modified tests to cover new code paths
  • Covered by existing tests
    (The included release commits retain their original tests.)
  • Not required

Performance

  • Tests ran and results are added in the PR description
  • Issue filed with a link in the PR description
  • Not required

Validation

  • git diff --check
  • Parsed both initially resolved POM files as XML
  • python3 -m py_compile for the modified Iceberg, Delta, and date-time integration tests

IMPORTANT: Merge this PR using Create a merge commit so the release commit ancestry is preserved and #15412 can close automatically.

sameerz and others added 6 commits July 28, 2026 17:50
…in for Apache Spark rename (NVIDIA#15114)

Contributes to NVIDIA#15107

### Description

The https://github.com/nvidia/spark-rapids repository has been renamed
to https://github.com/nvidia/cudf-spark. This PR rolls out name changes
for content and links referenced in the documentation.

Not changed here are documentation updates for configurations.
Configurations will be added to support the new product name (removing
rapids) with a deprecation period. Documentation for configurations can
be updated when new configuration names are enabled.

Note that this PR modifies some generated documentation, so pre-merge CI
should be enabled.

### Checklists

Documentation
- [X] Updated for new or modified user-facing features or behaviors
- [ ] No user-facing change

Testing
- [ ] Added or modified tests to cover new code paths
- [ ] Covered by existing tests
(Please provide the names of the existing tests in the PR description.)
- [X] Not required

Performance
- [ ] Tests ran and results are added in the PR description
- [ ] Issue filed with a link in the PR description
- [X] Not required

---------

Signed-off-by: Sameer Raheja <sraheja@.nvidia.com>
Co-authored-by: Sameer Raheja <sraheja@.nvidia.com>
Co-authored-by: Gary Shen <gashen@nvidia.com>
Fixes NVIDIA#15234 

## Description

Add native GPU support for Databricks Delta’s CheckOverflowInTableWrite
expression on DBR 17.3. The expression now delegates to GpuCast while
preserving Delta’s DELTA_CAST_OVERFLOW_IN_TABLE_WRITE error behavior.

The change also:

  - Registers the expression rule with the DBR 17.3 Delta provider.
  - Adds success and overflow integration tests.
- Disables the CPU-expression bridge in the focused tests to prove
native GPU replacement.
- Imports the DBR spark-protobuf_2.13 artifact required by the
integration-test build.

  ## Verification

Tested on DBR 17.3 GPU ML:

  - Built successfully with ./jenkins/databricks/build.sh.
  - Focused MERGE success and overflow tests passed.
- Verified GpuRapidsProcessDeltaMergeJoinExec was used with the CPU
bridge disabled.
  - Verified overflow retains DELTA_CAST_OVERFLOW_IN_TABLE_WRITE

## Performance Results

On DBR 17.3.x GPU ML, a 10-million-row matched Delta MERGE was measured
with 16 partitions, one warm-up, and three alternating runs per mode.
Native CheckOverflowInTableWrite support reduced median wall time from
11.447s to 8.559s, a 1.337× speedup and 25.23% reduction in elapsed
time. Median rewrite time decreased from 4.648s to 1.784s, while scan
times remained comparable.


### Checklists

Documentation
- [ ] Updated for new or modified user-facing features or behaviors
- [x] No user-facing change

Testing
- [x] Added or modified tests to cover new code paths
- [ ] Covered by existing tests
(Please provide the names of the existing tests in the PR description.)
- [ ] Not required

Performance
- [ ] Tests ran and results are added in the PR description
- [ ] Issue filed with a link in the PR description
- [x] Not required

---------

Signed-off-by: Rahul Prabhu <raprabhu@nvidia.com>
…IDIA#15415)

Fixes NVIDIA#15405.

### Description

`test_orc_gpu_write_cpu_read_timestamp_in_non_utc_timezone` expects ORC
timestamp
writes to fall back to CPU when the JVM and Spark session use a non-UTC
timezone.
On Spark versions whose write plan exposes `WriteFilesExec`, that node
is also
reported as a CPU fallback because its parent write command cannot run
on GPU, but
the test only allowed `DataWritingCommandExec`.

This change allows `WriteFilesExec` only in the existing non-UTC allow
list. UTC
test behavior remains unchanged.

Validation:
- `build/buildall --profile=noSnapshots -P=4` built the Scala 2.12 uber
jar with
  20 shims.
- `build/buildall --scala213 --profile=noSnapshots -P=4` built the Scala
2.13
  uber jar with all 19 supported shims.
-
`orc_test.py::test_orc_gpu_write_cpu_read_timestamp_in_non_utc_timezone`
passed
with `TZ=Asia/Shanghai` on all 20 supported Scala 2.12 Spark
installations and
all 19 supported Scala 2.13 Spark installations from Spark 3.3.0 through
4.2.0.

### Checklists

Documentation
- [ ] Updated for new or modified user-facing features or behaviors
- [x] No user-facing change

Testing
- [x] Added or modified tests to cover new code paths
- [ ] Covered by existing tests
(Please provide the names of the existing tests in the PR description.)
- [ ] Not required

Performance
- [ ] Tests ran and results are added in the PR description
- [ ] Issue filed with a link in the PR description
- [x] Not required

Signed-off-by: Chong Gao <chongg@nvidia.com>
Co-authored-by: Chong Gao <res_life@163.com>
NVIDIA#15413)

Fixes NVIDIA#15379.

### Description

- Propagate `BroadcastHashJoinExec.isSkewJoin` into
`GpuBroadcastHashJoinExec` on Spark 4.2 so AQE skew-optimized broadcast
joins keep the flag after GPU conversion, matching Spark's SPARK-44065
plan display.
- Override `nodeName` in `GpuBroadcastHashJoinExecBase` to append
`(skew=true)` when `isSkewJoin` is set, so GPU explain output mirrors
CPU behavior.
- Split the Spark 4.2 BHJ shim from the shared `spark340` path because
`isSkewJoin` only exists on BHJ in Spark 4.2+, avoiding compile failures
on older shims.
- Add `BroadcastHashJoinSkewSuite` for Spark 4.2 to assert the GPU join
preserves `isSkewJoin` and the plan-string marker.

Validation:
- `mvn -s ~/.m2/settings_art.xml -f scala2.13/pom.xml -Dbuildver=420
-Dcuda.version=cuda13 -DskipTests verify -pl sql-plugin,tests -am`
- `mvn -s ~/.m2/settings_art.xml -Dbuildver=330 -Dcuda.version=cuda13
-DskipTests verify -pl sql-plugin -am`
- `mvn -s ~/.m2/settings_art.xml -f scala2.13/pom.xml -Dbuildver=420
-Dcuda.version=cuda13 package -pl tests -am
-DwildcardSuites=com.nvidia.spark.rapids.BroadcastHashJoinSkewSuite`

### Checklists

Documentation
- [ ] Updated for new or modified user-facing features or behaviors
- [x] No user-facing change

Testing
- [x] Added or modified tests to cover new code paths
- [ ] Covered by existing tests
(Please provide the names of the existing tests in the PR description.)
- [ ] Not required

Performance
- [ ] Tests ran and results are added in the PR description
- [ ] Issue filed with a link in the PR description
- [x] Not required

Signed-off-by: Firestarman <firestarmanllc@gmail.com>
Fixes NVIDIA#15323.

### Description

This is a follow-up to NVIDIA#15360 that makes the Iceberg S3 path regression
test reliable with a REST catalog.

The test previously constructed the problematic path by overriding
`write.data.path` with the configured warehouse. For a REST catalog, the
warehouse value can be a logical identifier rather than a physical S3
location.

The updated test follows
`test_iceberg_parquet_read_from_url_encoded_path`:

- Adds a string containing a raw space as special-case partition data.
The value is valid in an S3 object key but invalid in a URI unless
encoded.
- Creates an Iceberg table partitioned by that column and lets Iceberg
construct the data-file path through its normal partition writer.
- Continues to run only with the REST catalog, where the optimized S3
reader is exercised.
- Verifies the startup-only `spark.rapids.perfio.s3.enabled` setting
through SparkConf instead of querying an executor-initialized PerfIO
singleton from the driver.

Testing performed:

- The REST-catalog run completed 184 existing tests successfully; the
three new parameterized variants reached table setup and exposed the
driver-side PerfIO assertion corrected here.
- `python3 -m py_compile
integration_tests/src/main/python/iceberg/iceberg_test.py`
- `git diff --check`

A final REST-catalog pipeline rerun is pending.

### Checklists

Documentation
- [ ] Updated for new or modified user-facing features or behaviors
- [x] No user-facing change

Testing
- [x] Added or modified tests to cover new code paths
- [ ] Covered by existing tests
- [ ] Not required

Performance
- [ ] Tests ran and results are added in the PR description
- [ ] Issue filed with a link in the PR description
- [x] Not required

---------

Signed-off-by: Ray Liu <liurenjie2008@gmail.com>
Keep the main branch 26.10 version while incorporating the latest Spark 4.2 broadcast-join and Iceberg regression fixes from release/26.08.

Signed-off-by: liyuan <yuali@nvidia.com>
@nvliyuan nvliyuan changed the title Merge latest release/26.08 into main [databricks] Merge latest release/26.08 into main Jul 30, 2026
@greptile-apps

greptile-apps Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This release-branch merge brings Delta Lake, Spark 4.2, Iceberg, and utility updates into main.

  • Adds OSS Delta deletion-vector support for retention filters and inline bitmaps across Parquet reader paths.
  • Enables GPU Delta replacement-table writes through truncate-capable staged tables and overwrite plan conversion.
  • Preserves Spark 4.2 broadcast-hash-join skew metadata and aligns date_trunc overflow behavior.
  • Adds Iceberg path-regression coverage and extracts a reusable ByteBufferInputStream.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains.

Important Files Changed

Filename Overview
delta-lake/common/src/main/delta-33x-41x/scala/com/nvidia/spark/rapids/delta/common/GpuDeltaParquetFileFormatBase2.scala Propagates retention-filter semantics and matching alive-row counts consistently through per-file, multithreaded, and coalescing deletion-vector readers.
delta-lake/common/src/main/delta-33x-41x/scala/com/nvidia/spark/rapids/delta/GpuDeltaCatalogBase.scala Advertises truncate support for staged Delta tables so replacement-table writes can use the overwrite execution path.
sql-plugin/src/main/scala/org/apache/spark/sql/rapids/datetimeExpressions.scala Routes every timestamp-truncation dispatch shape through version-specific overflow checking while preserving resource cleanup.
sql-plugin/src/main/spark420/scala/com/nvidia/spark/rapids/shims/TruncTimestampShims.scala Adds Spark 4.2-specific wrapped-result detection for timestamp truncation.
sql-plugin/src/main/spark420/scala/org/apache/spark/sql/rapids/execution/GpuBroadcastHashJoinExec.scala Preserves Spark 4.2 BroadcastHashJoin skew metadata during GPU conversion.
sql-plugin/src/main/scala/com/nvidia/spark/rapids/ByteBufferInputStream.scala Introduces a reusable InputStream adapter with standard bounds, zero-length-read, and skip behavior.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
  Release["release/26.08 changes"] --> Main["main / 26.10.0-SNAPSHOT"]
  Main --> Delta["Delta deletion vectors and RTAS"]
  Main --> Spark42["Spark 4.2 date_trunc and skew-join shims"]
  Main --> Iceberg["Iceberg S3 path regression coverage"]
  Main --> Utility["ByteBufferInputStream extraction"]
Loading

Reviews (3): Last reviewed commit: "Merge branch 'main' into fix-auto-merge-..." | Re-trigger Greptile

@nvliyuan
nvliyuan requested a review from GaryShen2008 July 30, 2026 03:38
GaryShen2008
GaryShen2008 previously approved these changes Jul 30, 2026
…ors for OSS delta [databricks] (NVIDIA#15368)

Fixes NVIDIA#15326.

### Description

The CDF read with deletion vectors currently fails. Two things were
missing to support this case:

- The `IF_NOT_CONTAINED` row index filter type support. The Delta CDC
reader can use this type of row index filter.
- Inline deletion vector support. The CDC reader creates inline deletion
vectors.

This PR adds those supports based on
NVIDIA/cudf#23402 for OSS Delta. The plugin
now can load inline deletion vectors and process the `IF_NOT_CONTAINED`
filter properly with all 3 Delta readers.

Note that the issue exists only with the native readers
(`GpuDeltaParquetFileFormatBase2`). The legacy reader
(`GpuDeltaParquetFileFormatBase`) does not have this issue.

Databricks readers have the same issue, and will be fixed in
NVIDIA#15365.

### Checklists

Documentation
- [ ] Updated for new or modified user-facing features or behaviors
- [x] No user-facing change

Testing
- [x] Added or modified tests to cover new code paths
- [ ] Covered by existing tests
(Please provide the names of the existing tests in the PR description.)
- [ ] Not required

Performance
- [ ] Tests ran and results are added in the PR description
- [ ] Issue filed with a link in the PR description
- [x] Not required

---------

Signed-off-by: Jihoon Son <ghoonson@gmail.com>
@nvliyuan

Copy link
Copy Markdown
Collaborator Author

build

@nvliyuan nvliyuan changed the title [databricks] Merge latest release/26.08 into main [databricks] Merge latest release/26.08 into main [skip ci] Jul 30, 2026
@nvliyuan nvliyuan changed the title [databricks] Merge latest release/26.08 into main [skip ci] Merge latest release/26.08 into main [skip ci] Jul 30, 2026
Fixes NVIDIA#15394

### Description

On OSS Spark 4.0 with Delta Lake 4.0, `CREATE OR REPLACE TABLE ... USING
DELTA AS SELECT ...` succeeds on CPU but fails on GPU with:

```text
[UNSUPPORTED_FEATURE.TABLE_OPERATION] Table ... does not support truncate in batch mode
```

Spark 4 plans RTAS as an unconditional `OverwriteByExpression`. Its
table capability check therefore requires the staged table to support
`TRUNCATE`.

The RAPIDS staged Delta table advertised only `V1_BATCH_WRITE`, and its
write builder did not implement `SupportsTruncate`. In addition, the
Delta provider's `OverwriteByExpressionExecV1` handling recognized
regular `DeltaTableV2` tables but not the RAPIDS staged Delta table used
by atomic RTAS.

In this PR:
- Added `TRUNCATE` to the capabilities advertised by
`GpuStagedDeltaTableV2`.
- Implemented `SupportsTruncate` in the staged Delta V1 write builder.
- Tags and converts `OverwriteByExpressionExecV1` for RAPIDS staged
Delta tables to `GpuOverwriteByExpressionExecV1`.
- Applied the staged-table handling to the Delta 3.3, 4.0, and 4.1
provider implementations.
- Preserved the existing behavior for regular `DeltaTableV2` tables and
continues to reject unrelated table implementations.
- Limits the existing Delta issue NVIDIA#4671 RTAS xfails to the affected
Spark 3.5 releases instead of also applying them to Spark 4.
- Added an integration regression test.

### Testing

#### OSS Spark 4.0 / Delta Lake 4.0

Focused integration test:

```text
TEST=test_delta_rtas_truncate_capability
```

Result: `1 passed, 39635 deselected`.

Broader focused RTAS selection:

```text
TEST="test_delta_rtas_truncate_capability or test_delta_rtas_sql"
```

Result: `3 passed, 1 skipped, 39632 deselected`.

### Checklists

Documentation

- [ ] Updated for new or modified user-facing features or behaviors
- [x] No user-facing change

Testing

- [x] Added or modified tests to cover new code paths
- [ ] Covered by existing tests  
(Please provide the names of the existing tests in the PR description.)
- [ ] Not required

Performance

- [ ] Tests ran and results are added in the PR description
- [ ] Issue filed with a link in the PR description
- [x] Not required

---------

Signed-off-by: Niranjan Artal <nartal@nvidia.com>
@nartal1

nartal1 commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

@nvliyuan - I didn't realize the auto-merge from release/26.08 to main is broken. I merged this PR - #15411 on release/26.08. Could you please include that as well in this PR ?
Or is it okay to create another PR to cherry-pick #15411 once this PR is merged?

firestarman and others added 2 commits July 30, 2026 13:49
…IDIA#15416)

Fixes NVIDIA#15382.

### Description

- Match Spark 4.2 (`SPARK-56663`) `date_trunc` semantics at
`Long.MinValue` micros: truncation underflow must raise
`ArithmeticException` instead of returning a wrapped positive timestamp
on GPU.
- Route the check through `TruncTimestampShims` so Spark 4.2 enables the
overflow check while older supported Spark lines keep the previous no-op
behavior, without runtime version compares in common code.
- Add `test_date_trunc_long_min_value_overflow` for `YEAR` and
`MILLISECOND` on Spark 4.2+, comparing CPU/GPU exception behavior and
validating the GPU plan includes `GpuProjectExec`.
- Validated with:
- `mvn -s /home/liangcail/.m2/settings_art.xml -f scala2.13/pom.xml -pl
sql-plugin -Dbuildver=420 -Dcuda.version=cuda13 -DskipTests clean
compile`
- `mvn -s /home/liangcail/.m2/settings_art.xml -f scala2.13/pom.xml -pl
sql-plugin -Dbuildver=413 -Dcuda.version=cuda13 -DskipTests clean
compile`
- `mvn -s /home/liangcail/.m2/settings_art.xml -f scala2.13/pom.xml
-Dbuildver=420 -Dcuda.version=cuda13 -DskipTests validate`
- `mvn -s /home/liangcail/.m2/settings_art.xml -f scala2.13/pom.xml
-Dbuildver=413 -Dcuda.version=cuda13 -DskipTests validate`

### Checklists

Documentation
- [ ] Updated for new or modified user-facing features or behaviors
- [x] No user-facing change

Testing
- [x] Added or modified tests to cover new code paths
- [ ] Covered by existing tests
(Please provide the names of the existing tests in the PR description.)
- [ ] Not required

Performance
- [ ] Tests ran and results are added in the PR description
- [ ] Issue filed with a link in the PR description
- [x] Not required

---------

Signed-off-by: Firestarman <firestarmanllc@gmail.com>
Include the Delta RTAS, deletion-vector, and Spark 4.2 date_trunc fixes merged into release/26.08 after the initial conflict-resolution commit.

Signed-off-by: liyuan <yuali@nvidia.com>
@nvliyuan

Copy link
Copy Markdown
Collaborator Author

@nvliyuan - I didn't realize the auto-merge from release/26.08 to main is broken. I merged this PR - #15411 on release/26.08. Could you please include that as well in this PR ?
Or is it okay to create another PR to cherry-pick #15411 once this PR is merged?

Thanks for the heads-up. I refreshed #15434 with the latest release/26.08, so #15411 is now included, along with #15368 and #15416. @GaryShen2008 could you help re-review thx?

@nvliyuan
nvliyuan requested a review from GaryShen2008 July 30, 2026 06:25
@nvliyuan

Copy link
Copy Markdown
Collaborator Author

build

@nvliyuan
nvliyuan merged commit e1e1ba3 into NVIDIA:main Jul 30, 2026
103 of 104 checks passed
GaryShen2008 pushed a commit that referenced this pull request Jul 31, 2026
Restore the release branch parent lost when #15434 was squash-merged while keeping the current main tree unchanged.

Signed-off-by: liyuan <yuali@nvidia.com>
GaryShen2008 added a commit that referenced this pull request Jul 31, 2026
### Description

#15434 was squash-merged, so its code reached `main` but the
`release/26.08` commit ancestry was lost. As a result, auto-merge PR
#15412 remained open and conflicting.

This PR records the missing ancestry by merging the current
`release/26.08` head into the current `main` head while keeping the main
tree unchanged.

### Verification

- The merge commit has two parents:
  - current main: `e1e1ba3cfd7d24d0867759d5731bf2c65210c1c5`
  - release/26.08: `e5bcfffd061bc9b58fdf138010b5b6ca61d934e3`
- `git diff origin/main...HEAD` is empty.
- Both POM version conflicts retained main's `26.10.0-SNAPSHOT` value.
- `git diff --check` passes.

### Checklists

Documentation
- [ ] Updated for new or modified user-facing features or behaviors
- [x] No user-facing change

Testing
- [ ] Added or modified tests to cover new code paths
- [x] Covered by existing tests
      (No tree changes; ancestry only.)
- [ ] Not required

Performance
- [ ] Tests ran and results are added in the PR description
- [ ] Issue filed with a link in the PR description
- [x] Not required

IMPORTANT: This PR must be merged using **Create a merge commit**.
Squash or rebase would discard the release parent again and leave #15412
unresolved.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants