Skip to content

Cuvs lucene move - #2353

Open
imotov wants to merge 139 commits into
NVIDIA:mainfrom
imotov:cuvs-lucene-move
Open

Cuvs lucene move#2353
imotov wants to merge 139 commits into
NVIDIA:mainfrom
imotov:cuvs-lucene-move

Conversation

@imotov

@imotov imotov commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Moves cuvs-lucene into java/cuvs-lucene folder of cuVs.

This is a preliminary PR to validate CI scripts. We'll need to rerun parts of the process and rebase the PR when we're ready to make the move. So, please ignore all changes in java/cuvs-lucene directory except for build-related changes.

Open questions:

  • Do we want to have a separate cuvs-lucene-codeowners or do we use cuvs-java-codeowners?

Timeline for the move:

  • Right after 26.08 release
    • Merge this PR to main with no-squash and move all new cuvs-lucene development to cuvs wi
    • Add a note to cuvs-lucene that all new development and all issues should be now go to this repo
  • Between 26.08 release and 26.10 code freeze
    • Move all still relevant cuvs-lucene PRs and issue to cuvs repo, close the rest.
    • Update release process to publish cuvs-lucene jars from this project instead of cuvs-lucene
    • Remove references to the cuvs-lucene repo in various other parts of our infrastructure
  • After 26.10 code freeze and when all issue and PRs are move to this repo

Preparation script for cuvs-lucene:

git clone [git@github.com](mailto:git@github.com):NVIDIA/cuvs-lucene.git cuvs-lucene-move
cd cuvs-lucene-move
git filter-repo --to-subdirectory-filter java/cuvs-lucene --replace-message ../message-filter.txt
cd ../cuvs
git remote add cuvs-lucene-origin ../cuvs-lucene-move
git fetch cuvs-lucene-origin
git merge --allow-unrelated-histories cuvs-lucene-origin/main
# Comment message:
# Merge main branch of 'cuvs-lucene' into cuvs
git remote remove cuvs-lucene-origin

message-filter.txt

regex:(?<![\w/])#(\d{1,3})\b==>NVIDIA/cuvs-lucene#\1

See NVIDIA/cuvs-lucene#168

cjnolet and others added 30 commits June 5, 2025 10:12
…s-lucene#2)

Fixes NVIDIA/cuvs-lucene#1 

Things included in this PR:
- Add the spotless maven plugin configuration.
- Add the gitignore file.
- Add a source license-header file that is used by the spotless plugin (to add/update license headers automatically if missing).
- Update the readme file.

Authors:
  - Vivek Narang (https://github.com/narangvivek10)
  - Gil Forsyth (https://github.com/gforsyth)

Approvers:
  - Corey J. Nolet (https://github.com/cjnolet)
  - MithunR (https://github.com/mythrocks)

URL: NVIDIA/cuvs-lucene#2
Fixes NVIDIA/cuvs-lucene#5 

Main changes in this PR:
- Adapt to the cuVS-Java API updates: Mainly replace the use of `Dataset` with the new `CuVSMatrix`
- Disable the tests that use byte vector encoding, as we do not support it.

Authors:
  - Vivek Narang (https://github.com/narangvivek10)

Approvers:
  - Corey J. Nolet (https://github.com/cjnolet)

URL: NVIDIA/cuvs-lucene#10
This PR adds a few additional needed changes to enable CI.

- change permission to make `.sh` files executable
- removes unnecessary configuration from `.pre-commit-config.yaml`, `CODEOWNERS`, `dependencies.yaml`
- updates all `pre-commit` hooks
- adds `rapids-dependency-file-generator` hook (to validated `dependencies.yaml`)
- fixes all issues found by `pre-commit` hooks (broken shell scripts, trailing whitespace, etc.)
- fixes versioning in `pom.xml`

Authors:
  - Dante Gama Dessavre (https://github.com/dantegd)
  - James Lamb (https://github.com/jameslamb)

Approvers:
  - James Lamb (https://github.com/jameslamb)
  - Corey J. Nolet (https://github.com/cjnolet)

URL: NVIDIA/cuvs-lucene#15
* updates `rapids-dependency-file-generator`, to pull in changes from rapidsai/dependency-file-generator#163
* removes unnecessary error-trapping in shell scripts

Authors:
  - James Lamb (https://github.com/jameslamb)

Approvers:
  - Kyle Edwards (https://github.com/KyleFromNVIDIA)

URL: NVIDIA/cuvs-lucene#19
Contributes to rapidsai/build-planning#208

* uses CUDA 13.0.0 to build and test (using the same patterns from the `cuvs-java` tests, in NVIDIA#1273)

## Notes for Reviewers

This switches GitHub Actions workflows to the `cuda13.0` branch from here: rapidsai/shared-workflows#413

A future round of PRs will revert that back to `branch-25.10`, once all of RAPIDS supports CUDA 13.

Authors:
  - James Lamb (https://github.com/jameslamb)

Approvers:
  - Jake Awe (https://github.com/AyodeAwe)
  - Ben Frederickson (https://github.com/benfred)
  - rhdong (https://github.com/rhdong)

URL: NVIDIA/cuvs-lucene#20
Contributes to rapidsai/build-planning#208

Now that rapidsai/shared-workflows#413 is
merged, this converts all GitHub Actions references from `@cuda13.0`
back to `branch-25.10`.

## Notes for Reviewers

This is safe to admin-merge because the change is a no-op... configs on
those 2 branches are identical.
…cene#22)

This PR configures this repo (adds a `.github/release.yml` file) for
automatic release notes generation. See
https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes.
This will fix such issues as hotfix releases including wrong content
(e.g [cugraph
v25.04.01](https://github.com/rapidsai/cugraph/releases/tag/v25.04.01)
contains 50+ PRs from the full v25.04.00 release when it should only
contain the single hotfix PR (#5017).)

Example auto-generated release notes:
https://github.com/rapidsai/literate-octo-potato/releases/tag/v25.10.00a
… prefiltering (NVIDIA/cuvs-lucene#14)

Refactoring, CI fixes (pulling libcuvs from pypi if not found), prefiltering support.

Added tests:
* TestCuVSGaps (for missing vectors in documents)
* TestCuVSDeletedDocuments (for deleted vectors, that will leverage prefiltering)
* TestMerge (dedicated test for testing merges)

Authors:
  - Ishan Chattopadhyaya (https://github.com/chatman)
  - Vivek Narang (https://github.com/narangvivek10)

Approvers:
  - Mike Sarahan (https://github.com/msarahan)
  - Corey J. Nolet (https://github.com/cjnolet)

URL: NVIDIA/cuvs-lucene#14
Introducing a new Codec that uses CAGRA for building the index on GPU and serializing to Lucene-compatible HNSW index segments. The Lucene-compatible segments are searchable via the `Lucene99HnswVectorsReader` (which is the default in Lucene 10.x). 

Note: This is based on top of NVIDIA/cuvs-lucene#14 and should be rebased once that is merged.

TODO:
- Benchmarks and more tests
- Further refactoring to split the `CuVSVectorsFormat` into GPU and CPU-specific formats. 

Fixes NVIDIA/cuvs-lucene#13

Authors:
  - Vivek Narang (https://github.com/narangvivek10)
  - Puneet Ahuja (https://github.com/punAhuja)
  - Ishan Chattopadhyaya (https://github.com/chatman)

Approvers:
  - Ishan Chattopadhyaya (https://github.com/chatman)
  - Corey J. Nolet (https://github.com/cjnolet)
  - Kyle Edwards (https://github.com/KyleFromNVIDIA)

URL: NVIDIA/cuvs-lucene#16
…n to give detailed stack traces and information on tests (NVIDIA/cuvs-lucene#25)

Fixes NVIDIA/cuvs-lucene#26

Authors:
  - Vivek Narang (https://github.com/narangvivek10)

Approvers:
  - Corey J. Nolet (https://github.com/cjnolet)

URL: NVIDIA/cuvs-lucene#25
…cene upgrades (NVIDIA/cuvs-lucene#29)

As per [last night's comment on the Solr Jira issue](https://issues.apache.org/jira/browse/SOLR-17892?focusedCommentId=18024203&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-18024203) we realized that exposing the Lucene Codecs in the SPI registry prevents any calling application from being able to upgrade the codec because, under the hood, the next version of Lucene moves the older codec (Lucene101) into a different package name. 
As a result, we should only provide the relevant vector format, reader, and writer, and the calling application needs to wrap them into its own FilterCodec. 

For the sake of the current tests, we have decided to move the codec classes into the tests so that they are not bundled in the artifacts. 

This issue is a blocker for the inclusion of cuvs Lucene in Solr or any other Lucene-based search engine.

Authors:
  - Vivek Narang (https://github.com/narangvivek10)
  - Ishan Chattopadhyaya (https://github.com/chatman)

Approvers:
  - Ishan Chattopadhyaya (https://github.com/chatman)
  - MithunR (https://github.com/mythrocks)

URL: NVIDIA/cuvs-lucene#29
…cuvs-lucene#30)

We were inadvertently copying over the vectors from a list to an array before creating the CuVSMatrix instance. This is memory inefficient.

Authors:
  - Ishan Chattopadhyaya (https://github.com/chatman)

Approvers:
  - Corey J. Nolet (https://github.com/cjnolet)

URL: NVIDIA/cuvs-lucene#30
…VIDIA/cuvs-lucene#31)

* cuvs-java 25.10 is released, use that from Maven Central
* There's a blocker bug for Solr integration where single vector indexes cause a Solr crash. Adding a graceful handling for that.
* Updated README.md with a more accurate description of the project.

Authors:
  - Ishan Chattopadhyaya (https://github.com/chatman)

Approvers:
  - Corey J. Nolet (https://github.com/cjnolet)

URL: NVIDIA/cuvs-lucene#31
Contributes to rapidsai/build-planning#224

## Notes for Reviewers

This is safe to admin-merge because the change is a no-op... configs on
those 2 branches are identical.
This commit fixes the publication of cuvs-lucene artifacts to Github.

The Github actions build-logs indicate that while the JAR is built correctly, it doesn't seem to be uploaded properly as a Github artifact. It appears to be the result of a minor typo in the artifact's base dir.

This commit fixes the typo, and allows the artifact to be published.

Authors:
  - MithunR (https://github.com/mythrocks)

Approvers:
  - Nate Rock (https://github.com/rockhowse)

URL: NVIDIA/cuvs-lucene#34
@imotov
imotov force-pushed the cuvs-lucene-move branch from 085107c to abc9903 Compare August 4, 2026 22:37
@imotov
imotov force-pushed the cuvs-lucene-move branch from abc9903 to b57e9c9 Compare August 4, 2026 22:55
@imotov

imotov commented Aug 4, 2026

Copy link
Copy Markdown
Contributor Author

/ok to test b57e9c9

@imotov

imotov commented Aug 5, 2026

Copy link
Copy Markdown
Contributor Author

/ok to test f251a6a

@imotov
imotov marked this pull request as ready for review August 5, 2026 20:33
@imotov
imotov requested review from a team as code owners August 5, 2026 20:33
@imotov
imotov requested a review from jameslamb August 5, 2026 20:33

@jameslamb jameslamb left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I reviewed from the narrow perspective of build/packaging (ignored any of the code in java/ that looks like it's just directly moving from the cuvs-lucene repo, like the PR description mentions).

Left a few small suggestions, but overall this looks great from that perspective.

I put a DO NOT MERGE label on this to avoid anyone accidentally squash merging this, since you mentioned you want to no-squash merge it to preserve the commit history (contribution stats, git blame, etc.). When it's ready to merge and passing CI, anyone with write access can do that by removing that label then commenting /merge nosquash.

re: your questions about codeowners... that could probably be deferred to a separate PR. At least as of this, all the changes would already be covered by these rules:

cuvs/.github/CODEOWNERS

Lines 10 to 12 in cd4bbab

#java code owners
java/ @NVIDIA/cuvs-java-codeowners
examples/java/ @NVIDIA/cuvs-java-codeowners

Comment thread .github/workflows/build.yaml Outdated
Comment thread .github/workflows/pr.yaml
- '!ci/release/update-version.sh'
- '!ci/run_cuvs_pytests.sh'
- '!ci/test_java.sh'
- '!ci/test_lucene.sh'

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Can you do another pass over these lists please?

Most of them should include both ci/build_lucene.sh and ci/test_lucene.sh, I think.

For example, this line I'm commenting on is in a group called test_cpp which controls whether cuVS's C++ tests need to run in CI. A PR that only changes ci/build_lucene.sh shouldn't at all affect the output of those tests.

I know these lists can be a little tedious to maintain, but it's really worth it... cuVS's C++ test jobs can take 3+ hours to run 😫

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

That makes sense, but if I understand the logic correctly test_cpp should also include exclusions for ci/build_go.sh, ci/build_java.sh, !ci/build_python.sh, !ci/build_rust.sh, shouldn't it?

@cjnolet

cjnolet commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

@imotov are we planning to bring over the original history from cuVS-lucene?

Trying to understand why we are asking for no squash merge.

@imotov

imotov commented Aug 8, 2026

Copy link
Copy Markdown
Contributor Author

Yes, my preference would be to squash all of my commits related to getting this in, while leaving all historical commits that I pulled from cuvs-lucene repo untouched. This will not add too much noise from me iterating here, but will preserve all history of cuvs-lucene project. Preserving history is definitely possible, and if you check out this PR's branch and run git blame on any cuvs-lucene file, you'll see the correct commits and authors. So, as long as we don't squash this PR the history will be preserved.

The script at the bottom of the PR description is what makes this possible. It rewrites all commits in the cuvs-lucene repo as if they had originally been applied under the java/lucene directory instead of the repository root, and it adjusts all unqualified issue and PR references in commit comments to point to the cuvs-lucene repository. This ensures that files with the same name (like README.md) in both repositories retain distinct histories, and prevents clashes between issues and PRs with the same numbers in the cuvs and cuvs-lucene repositories.

@imotov

imotov commented Aug 8, 2026

Copy link
Copy Markdown
Contributor Author

/ok to test d3d8475

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

DO NOT MERGE improvement Improves an existing functionality non-breaking Introduces a non-breaking change

Projects

Status: In Progress

Development

Successfully merging this pull request may close these issues.