Skip to content

Forward-merge release/26.08 into main - #23531

Merged
gforsyth merged 3 commits into
NVIDIA:mainfrom
gforsyth:main-merge-release/26.08
Aug 4, 2026
Merged

Forward-merge release/26.08 into main#23531
gforsyth merged 3 commits into
NVIDIA:mainfrom
gforsyth:main-merge-release/26.08

Conversation

@gforsyth

@gforsyth gforsyth commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Resolves #23474

robertmaynard and others added 3 commits July 29, 2026 13:30
## Description
Upgrades nvcomp to version 5.3.0.16.

Depends on rapidsai/rmm#2462.

Replaces NVIDIA#23294.

## Checklist
- [x] I am familiar with the [Contributing
Guidelines](https://github.com/rapidsai/cudf/blob/HEAD/CONTRIBUTING.md).
- [x] New or existing tests cover these changes.
- [x] The documentation is up to date with these changes.

---------

Co-authored-by: Bradley Dice <bdice@bradleydice.com>
Co-authored-by: Vukasin Milovanovic <vmilovanovic@nvidia.com>
## Description

On `main` and `release/26.08`, the following will error reliably:

```
pytest -p no:randomly -n0 \
	python/cudf_polars/tests/streaming/test_ray.py::test_yields_engine \
	python/cudf_polars/tests/quent/test_quent_integration.py
```

In CI, it will fail if a worker that previously happened to run one of
the ray tests with 0 GPUs happened to worksteal the quent integration
tests.

This fixes the issue by passing through `ray_init_options` and
`ray_num_ranks` when creating the RayEngine for the quent tests, similar
to the rest of the tests

Closes NVIDIA#23441

## Checklist
- [x] I am familiar with the [Contributing
Guidelines](https://github.com/rapidsai/cudf/blob/HEAD/CONTRIBUTING.md).
- [x] New or existing tests cover these changes.
- [x] The documentation is up to date with these changes.
@gforsyth gforsyth added improvement Improvement / enhancement to an existing function non-breaking Non-breaking change labels Aug 4, 2026
@gforsyth
gforsyth requested review from a team as code owners August 4, 2026 17:10
@gforsyth
gforsyth requested a review from bdice August 4, 2026 17:10
@github-actions github-actions Bot added libcudf Affects libcudf (C++/CUDA) code. Python Affects Python cuDF API. CMake CMake build issue Java Affects Java cuDF API. cudf-polars Issues specific to cudf-polars labels Aug 4, 2026
@GPUtester GPUtester moved this to In Progress in cuDF Python Aug 4, 2026
@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Summary by CodeRabbit

  • Bug Fixes

    • Improved compatibility and reliability when using static library builds, including Java integrations.
    • Enhanced GPU-distributed integration test configuration for more consistent execution.
  • Chores

    • Updated nvCOMP to version 5.3.0.16 across supported CUDA environments, Python packages, and build configurations.
    • Improved handling of static dependencies and linking behavior across supported builds.

Walkthrough

Changes

nvCOMP dependency and linking changes

Layer / File(s) Summary
nvCOMP version pins
conda/environments/*cuda-129*, conda/environments/*cuda-133*, conda/recipes/libcudf/conda_build_config.yaml, dependencies.yaml, python/libcudf/pyproject.toml, cpp/cmake/thirdparty/get_nvcomp.cmake
Updates nvCOMP pins to 5.3.0.16 across Conda, CUDA, wheel, CMake, and Python build configurations.
libcudf static dependency linking
cpp/CMakeLists.txt
Exports static-link metadata and conditionally absorbs or links nvCOMP and spdlog targets.
Java native target linking
java/src/main/native/CMakeLists.txt
Detects static nvCOMP, whole-archives static libcudf, and separates nvtx3 and CUDA runtime configuration.

Ray integration fixture configuration

Layer / File(s) Summary
RayEngine fixture options
python/cudf_polars/tests/quent/test_quent_integration.py
Passes Ray initialization options and rank settings to RayEngine and enables GPU sharing.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

Suggested labels: libcudf, Python, Java, CMake, cudf-polars, bug, non-breaking

Suggested reviewers: bdice, kylefromnvidia, jihoonson, wence-

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the primary change: forward-merging release/26.08 into main.
Description check ✅ Passed The description accurately summarizes the nvCOMP upgrade and Quent integration test fix included in the changeset.
Linked Issues check ✅ Passed The changeset supports issue [#23474] by forward-merging release/26.08 into main and carrying its listed updates.
Out of Scope Changes check ✅ Passed The nvCOMP updates and Quent test fix are both identified as part of the forward-merge scope.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@cpp/CMakeLists.txt`:
- Around line 1310-1322: Update the nvcomp absorption branch around
target_link_libraries and _absorbed_nvcomp so it appends the nvcomp dependency
to the export list before setting _absorbed_nvcomp to TRUE. Ensure nvcomp is
exported exactly once when only nvcomp::nvcomp_static exists, allowing the Java
build’s nvcomp::nvcomp reference to resolve.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 7262b6de-2ad2-4550-b775-fbad84d35388

📥 Commits

Reviewing files that changed from the base of the PR and between fb021d4 and c5dc92c.

📒 Files selected for processing (11)
  • conda/environments/all_cuda-129_arch-aarch64.yaml
  • conda/environments/all_cuda-129_arch-x86_64.yaml
  • conda/environments/all_cuda-133_arch-aarch64.yaml
  • conda/environments/all_cuda-133_arch-x86_64.yaml
  • conda/recipes/libcudf/conda_build_config.yaml
  • cpp/CMakeLists.txt
  • cpp/cmake/thirdparty/get_nvcomp.cmake
  • dependencies.yaml
  • java/src/main/native/CMakeLists.txt
  • python/cudf_polars/tests/quent/test_quent_integration.py
  • python/libcudf/pyproject.toml

Comment thread cpp/CMakeLists.txt
Comment on lines +1310 to +1322
set_property(
TARGET cudf
APPEND
PROPERTY CUDF_STATIC_LINKED_PROJECTS "${_dep_link}"
)

# nvcomp_static has done a WHOLE_ARCHIVE on rmm and rapids_logger itself. Therefore it needs to
# come after our WHOLE_ARCHIVE otherwise we will get duplicate symbols for rmm and/or
# rapids_logger
if(TARGET nvcomp::nvcomp_static)
target_link_libraries(${_dep_link} INTERFACE $<BUILD_LOCAL_INTERFACE:nvcomp::nvcomp_static>)
set(_absorbed_nvcomp TRUE)
endif()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

# Trace writes to libcudf static-link metadata.
rg -n -C 6 \
  'CUDF_STATIC_LINKED_PROJECTS|_absorbed_nvcomp|nvcomp::nvcomp_static|CUDF_nvcomp_TARGET' \
  cpp/CMakeLists.txt

# Trace the Java consumer decision.
rg -n -C 6 \
  'cudf_static_linked_projects|nvcomp IN_LIST|nvcomp::nvcomp_static|nvcomp::nvcomp' \
  java/src/main/native/CMakeLists.txt

Repository: rapidsai/cudf

Length of output: 4826


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

printf '%s\n' '--- cpp/CMakeLists.txt relevant sections ---'
sed -n '1240,1400p' cpp/CMakeLists.txt

printf '%s\n' '--- Java native configuration and nvcomp target setup ---'
sed -n '80,125p' java/src/main/native/CMakeLists.txt
sed -n '250,300p' java/src/main/native/CMakeLists.txt

printf '%s\n' '--- all metadata consumers and nvcomp target references ---'
rg -n -C 4 \
  'CUDF_STATIC_LINKED_PROJECTS|CUDF_JNI_LIBCUDF_STATIC|CUDF_nvcomp_TARGET|nvcomp::nvcomp(_static)?' \
  --glob 'CMakeLists.txt' --glob '*.cmake' .

Repository: rapidsai/cudf

Length of output: 22714


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

python3 - <<'PY'
from pathlib import Path

cpp = Path("cpp/CMakeLists.txt").read_text()
java = Path("java/src/main/native/CMakeLists.txt").read_text()

loop = cpp[cpp.index("set(_absorbed_deps"):cpp.index("if(TARGET spdlog::spdlog)")]
assert "set(_absorbed_nvcomp FALSE)" in loop
assert "if(TARGET nvcomp::nvcomp_static)" in loop
assert "set(_absorbed_nvcomp TRUE)" in loop
assert 'PROPERTY CUDF_STATIC_LINKED_PROJECTS "${_dep_link}"' in loop
assert 'PROPERTY CUDF_STATIC_LINKED_PROJECTS "nvcomp"' not in loop

fallback = cpp[cpp.index("if(NOT _absorbed_nvcomp)"):cpp.index("# Add Conda library")]
assert 'PROPERTY CUDF_STATIC_LINKED_PROJECTS "nvcomp"' in fallback

consumer = java[java.index("get_target_property(cudf_static_linked_projects"):
                java.index("target_link_libraries(cudfjni PRIVATE nvtx3::nvtx3-cpp)")]
assert "if(nvcomp IN_LIST cudf_static_linked_projects)" in consumer
assert "nvcomp::nvcomp_static" in consumer
assert "nvcomp::nvcomp" in consumer

# Model the proposed guard across the two absorbed dependencies.
for static_deps in ([], ["rmm"], ["rapids_logger"], ["rmm", "rapids_logger"]):
    absorbed = False
    entries = []
    for dep in static_deps:
        if not absorbed:
            entries.append(dep)
        if True:  # nvcomp::nvcomp_static exists
            if not absorbed:
                entries.append("nvcomp")
            absorbed = True
    assert entries.count("nvcomp") == (1 if static_deps else 0)

print("The current loop omits nvcomp metadata on the absorption path.")
print("The proposed guard records nvcomp once for any absorbed static dependency.")
print("The Java consumer uses nvcomp::nvcomp_static only when nvcomp is in the exported list.")
PY

Repository: rapidsai/cudf

Length of output: 376


Export nvcomp for the absorption path.

When nvcomp::nvcomp_static exists, this branch sets _absorbed_nvcomp, so the later block does not export nvcomp. The Java build then selects nvcomp::nvcomp; if only the static target exists, CMake cannot resolve that target. Append nvcomp once before setting _absorbed_nvcomp to TRUE.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@cpp/CMakeLists.txt` around lines 1310 - 1322, Update the nvcomp absorption
branch around target_link_libraries and _absorbed_nvcomp so it appends the
nvcomp dependency to the export list before setting _absorbed_nvcomp to TRUE.
Ensure nvcomp is exported exactly once when only nvcomp::nvcomp_static exists,
allowing the Java build’s nvcomp::nvcomp reference to resolve.

@gforsyth

gforsyth commented Aug 4, 2026

Copy link
Copy Markdown
Contributor Author

/merge nosquash

@gforsyth
gforsyth merged commit 298cfb2 into NVIDIA:main Aug 4, 2026
139 of 141 checks passed
@gforsyth
gforsyth deleted the main-merge-release/26.08 branch August 4, 2026 19:35
@github-project-automation github-project-automation Bot moved this from In Progress to Done in cuDF Python Aug 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CMake CMake build issue cudf-polars Issues specific to cudf-polars improvement Improvement / enhancement to an existing function Java Affects Java cuDF API. libcudf Affects libcudf (C++/CUDA) code. non-breaking Non-breaking change Python Affects Python cuDF API.

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants