Skip to content

Resolve every Java-binding URL through the vortex-cloud registry, adding hf:// - #9273

Open
robert3005 wants to merge 5 commits into
developfrom
claude/vortex-jni-hf
Open

Resolve every Java-binding URL through the vortex-cloud registry, adding hf://#9273
robert3005 wants to merge 5 commits into
developfrom
claude/vortex-jni-hf

Conversation

@robert3005

@robert3005 robert3005 commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Remove special handling of object stores from vortex-jni and use upstream logic from vortex-cloud

@codspeed-hq

codspeed-hq Bot commented Aug 7, 2026

Copy link
Copy Markdown

Merging this PR will degrade performance by 9.27%

⚡ 2 improved benchmarks
❌ 3 regressed benchmarks
✅ 1939 untouched benchmarks
⏩ 85 skipped benchmarks1

Warning

Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Mode Benchmark BASE HEAD Efficiency
Simulation decompress[u64, (1000, 16)] 65.1 µs 133.8 µs -51.37%
Simulation cold_misaligned[(64, 256)] 4.4 ms 5.1 ms -14.73%
Simulation compress_fsst[(1000, 64, 8)] 1 ms 1.2 ms -12.46%
Simulation decompress[u32, (1000, 256)] 52.8 µs 39.6 µs +33.41%
Simulation decode_varbin[(1000, 2)] 77.8 µs 61.3 µs +26.96%

Tip

Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.


Comparing claude/vortex-jni-hf (6462bf1) with develop (85926c4)

Open in CodSpeed

Footnotes

  1. 85 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@robert3005
robert3005 force-pushed the claude/vortex-jni-hf branch from 16e9e89 to a0677fe Compare August 7, 2026 13:11
@robert3005 robert3005 changed the title Read hf:// URLs from the Java binding by keying reads at the registry-reported mount Resolve every Java-binding URL through the vortex-cloud registry, adding hf:// Aug 7, 2026
@robert3005
robert3005 force-pushed the claude/vortex-jni-hf branch 3 times, most recently from 8043b00 to dfabcd8 Compare August 8, 2026 22:10
…g `hf://`

The Java binding built stores through its own scheme dispatch — bespoke S3,
Azure and GCS builders plus an authority-keyed cache — and keyed every read by
the full URL path. That assumption held for the schemes it served, but not for
`hf://`: a Hugging Face store is rooted at a repository and revision, which
occupy path segments, so a full-URL-path key would send the repository name to
the Hub as part of the file path. And the authority-keyed cache cannot serve
`hf://` at all, since every Hub repository shares the `datasets` authority.

Replace the dispatch with `vortex_cloud::Registry`, the same resolution the
Python and DuckDB bindings use. `make_object_store` reports the path of the URL
within the store it returns, and every caller (metadata reads, listing, deletes,
globbed data sources, the writer) keys by that. Caller properties are
`object_store` configuration keys already (`aws_access_key_id`, ...), so they
layer over the process environment into a per-property-set registry — stores
built with one caller's credentials must not serve another's requests.

The old builders' hardcoded configuration (generic S3 endpoint, path-style,
allow-http, a 120s Azure timeout) is gone with them: stores are configured by
the environment and the caller's properties alone, as in the other bindings.

The OpenDAL-backed schemes keep a properties-native branch, since their
property names (`secret_id`, ...) are the services' own rather than environment
names. The crate's `opendal` feature flag is gone entirely: vortex-jni is an
unpublished cdylib built exactly one way, no Rust consumer exists to opt out,
and CI never exercised the off-combo, so the flag only added untested cfg
branches. The dependency is now unconditional and the shipped library serves
every scheme.

Verified with the crate's unit tests, the Java suite
(`./gradlew :vortex-jni:test`, 32 tests), and a live Hub read through
`DataSource.open("hf://datasets/...")` (10k rows, 1190 columns). The S3Mock
container test needs Docker and is left to CI.

Towards #5379.

Signed-off-by: Robert Kruszewski <robert@spiraldb.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Lc5zw7Le2T3pakDEUdKTYd
@robert3005
robert3005 force-pushed the claude/vortex-jni-hf branch from dfabcd8 to 091f481 Compare August 10, 2026 00:13
Signed-off-by: Robert Kruszewski <github@robertk.io>
@robert3005
robert3005 marked this pull request as ready for review August 10, 2026 01:06
@robert3005 robert3005 added changelog/chore A trivial change changelog/feature A new feature and removed changelog/chore A trivial change labels Aug 10, 2026
robert3005 and others added 3 commits August 10, 2026 01:18
…p merge

The develop merge resolved the `vortex-cloud` dependency line to the base
branch's `optional = true` spelling. With the `opendal` feature section gone,
nothing enables an optional dependency, so the crate was never linked and the
whole workspace failed to compile vortex-jni.

Signed-off-by: Robert Kruszewski <robert@spiraldb.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Lc5zw7Le2T3pakDEUdKTYd
…p://

The removed JNI store builders hardcoded `allow_http`, which the registry
no longer applies. `object_store` rejects `http://` endpoints unless allowed,
so map an explicitly plain-HTTP `fs.s3a.endpoint` (LocalStack, MinIO, S3Mock)
onto `aws_allow_http` where the rest of the S3A configuration is translated.

Signed-off-by: Robert Kruszewski <robert@spiraldb.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Lc5zw7Le2T3pakDEUdKTYd
A property overrides the environment by exact key. CI runners export
AWS_REGION-style variables, so a short spelling (`region`) races its
environment alias at the store builder instead of overriding it —
reproducible locally with `AWS_REGION=x cargo test -p vortex-jni`.

Signed-off-by: Robert Kruszewski <robert@spiraldb.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Lc5zw7Le2T3pakDEUdKTYd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog/feature A new feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant