build(deps): Bump dev.vortex:vortex-jni from 0.75.0 to 0.76.0#197
Merged
Conversation
Bumps [dev.vortex:vortex-jni](https://github.com/spiraldb/vortex) from 0.75.0 to 0.76.0. - [Release notes](https://github.com/spiraldb/vortex/releases) - [Commits](vortex-data/vortex@0.75.0...0.76.0) --- updated-dependencies: - dependency-name: dev.vortex:vortex-jni dependency-version: 0.76.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
… 0.76.0) Bumping vortex-jni to 0.76.0 broke RustWritesJavaReadsIntegrationTest #jniWriter_perZoneSum_readFromZoneMapTable with a ClassCastException (DType$Bool -> DType$Primitive) while decoding the per-zone stats table. 0.76.0's zoned layout (spiraldb/vortex #7938) splits the format in two: the canonical `vortex.zoned` id now stores an ordered aggregate-function spec list in its metadata (proto: version byte + ZonedMetadataProto) and its stats table drops the legacy per-stat `_is_truncated` Bool flags, while the legacy `vortex.stats` alias keeps the Stat-bitset metadata. Our reader treated the two ids as pure aliases and always reconstructed the legacy schema, so the extra Bool fields no longer matched the encoded table and the positional struct decode mismatched. The reader now dispatches on the layout id: `vortex.zoned` goes through a new ZonedStatsSchema.aggregateStatsTableDtype that parses the aggregate specs and maps each known aggregate (max/min/sum/null_count/nan_count/...) to its stored stat dtype, with no truncation flags; `vortex.stats` keeps the bitset path. Unknown/nested-state aggregates (e.g. vortex.bounded_max) bail to the per-chunk fallback rather than decode a misaligned table. The CLI stats inspector uses the same dispatch. This is a genuine compatibility fix on top of the dependency bump, not a rebase-conflict resolution (the rebase onto main was clean). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4d4c742 to
94dec38
Compare
This was referenced Jul 7, 2026
dfa1
added a commit
that referenced
this pull request
Jul 7, 2026
…cimal sum fallback (#197) The aggregate-spec zone-map decoder added in #197 (commit 9e20edc) had two post-merge review findings. Overflow class: ProtoCursor guarded reads with `pos + len > bound`. A varint length up to Long.MAX_VALUE overflows `pos + len` to negative, so the `> bound` check is false and the guard passes — then `new byte[(int) len]` throws NegativeArraySizeException, or `pos` advances negative and the next segment read throws IndexOutOfBoundsException. This is untrusted file metadata (ADR 0003), so it must never surface a raw JDK exception. Every length/offset check (readAggregateSpecId message descent, readString, advance/skipField) is rewritten overflow-safe: the invariant pos <= bound holds throughout, so `bound - pos >= 0` never overflows and the guard becomes `len < 0 || len > bound - pos`. Malformed metadata now falls back to per-chunk stats. Decimal divergence: Rust's default_zoned_aggregate_fns (vortex-layout zoned/writer.rs) emits a `sum` column whenever Sum.return_dtype is Some — which is Some(Decimal(precision + 10)) for a Decimal column (sum/mod.rs) — while our sumDtype returns null for Decimal. Dropping that field with `continue` reconstructs {max,min,null_count} for an encoded {max,min,sum,null_count} table, so the positional decode reads null_count out of the sum buffer. The reconstructor now distinguishes "Rust also omits this" (nan_count over non-float per nan_count/mod.rs, min/max over an unsupported column per min_max minmax_supported_dtype — safe skip) from "Rust keeps a field we cannot map" (decimal sum, bounded_max/min nested state — return null so the whole column falls back to correct-but-unpruned per-chunk stats). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
dfa1
added a commit
that referenced
this pull request
Jul 7, 2026
…cimal sum fallback (#197) The aggregate-spec zone-map decoder added in #197 (commit 9e20edc) had two post-merge review findings. Overflow class: ProtoCursor guarded reads with `pos + len > bound`. A varint length up to Long.MAX_VALUE overflows `pos + len` to negative, so the `> bound` check is false and the guard passes — then `new byte[(int) len]` throws NegativeArraySizeException, or `pos` advances negative and the next segment read throws IndexOutOfBoundsException. This is untrusted file metadata (ADR 0003), so it must never surface a raw JDK exception. Every length/offset check (readAggregateSpecId message descent, readString, advance/skipField) is rewritten overflow-safe: the invariant pos <= bound holds throughout, so `bound - pos >= 0` never overflows and the guard becomes `len < 0 || len > bound - pos`. Malformed metadata now falls back to per-chunk stats. Decimal divergence: Rust's default_zoned_aggregate_fns (vortex-layout zoned/writer.rs) emits a `sum` column whenever Sum.return_dtype is Some — which is Some(Decimal(precision + 10)) for a Decimal column (sum/mod.rs) — while our sumDtype returns null for Decimal. Dropping that field with `continue` reconstructs {max,min,null_count} for an encoded {max,min,sum,null_count} table, so the positional decode reads null_count out of the sum buffer. The reconstructor now distinguishes "Rust also omits this" (nan_count over non-float per nan_count/mod.rs, min/max over an unsupported column per min_max minmax_supported_dtype — safe skip) from "Rust keeps a field we cannot map" (decimal sum, bounded_max/min nested state — return null so the whole column falls back to correct-but-unpruned per-chunk stats). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumps dev.vortex:vortex-jni from 0.75.0 to 0.76.0.
Release notes
Sourced from dev.vortex:vortex-jni's releases.
... (truncated)
Commits
0a45777Add swimlane view to vortex-web that visualizes physical layout of columns in...d9ded20Convert extension type scalars to Value correctly (#8635)c7e8ae9Back VortexSession with ArcSwap for mutable but less errorprone session manag...3e7098cfeat(vortex-bench): infra of SpatialBench on DuckDB, plain binary (#8598)797b650fix(vortex-bench): map gs:// scheme to gcs storage label (#8630)5d3be01Lock scheduler in GDB when launching functions (#8629)3077131chore: forbid the locking Id constructors with a clippy lint (#8617)4a90e13Patches have correct dtype by construction instead of normalised during array...79c6b0fchore: Python CUDA bridge: CI and buffer handoff ABI (#8618)f2758d3Lock file maintenance (#8616)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)