Writer: vortex.onpair throws on a string chunk past 2 GB instead of stepping aside

Chiusa
#643 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Una pull request collegata è già stata integrata.

  • #656 di @dfa1 — integrata

Valutazione

Difficoltà
3/5
Tempo stimato
Mezza giornata
Idoneità per principianti
42/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
java

Direzione di ricerca

Start in OnPairEncodingEncoder.java: the Encoder.rows method near line 152 throws when a chunk's row bytes exceed 2 GB, and encodeCascade around line 86 calls it. The fix is for the encoder to return CascadeStep.notApplicable() so CascadingCompressor.encodeChoice (line 326) lets the other string encodings win. Done when a forced vortex.onpair import of a >2 GB chunk falls back instead of throwing, verified by a case in LargeChunkInteropIntegrationTest under the large tag.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug

A default (non-compact) Parquet import of Raincloud's websight-v01 (29 GB Parquet, 822,987 rows of HTML) fails after the first chunk:

UnsupportedOperationException: vortex.onpair: chunk exceeds 2 GB of row bytes
    at io.github.dfa1.vortex.writer.encode.OnPairEncodingEncoder$Encoder.rows(OnPairEncodingEncoder.java:152)
    at io.github.dfa1.vortex.writer.encode.OnPairEncodingEncoder.encodeCascade(OnPairEncodingEncoder.java:86)
    at io.github.dfa1.vortex.writer.encode.CascadingCompressor.spliceResult(CascadingCompressor.java:478)
    at io.github.dfa1.vortex.writer.encode.CascadingCompressor.encodeChoice(CascadingCompressor.java:326)

OnPairEncodingEncoder lays a chunk's rows out contiguously (VarBinBytes.toContiguous) and throws when they don't fit one byte[]. Since #633 every other string encoding (varbin, varbinview, fsst, zstd) handles a chunk past 2 GiB, so an encoder that cannot should decline (CascadeStep.notApplicable()) and let those win, rather than abort the write. The compact import of the same file (which doesn't offer onpair) succeeds, and the file passes conformance.

open-food-facts (15 GB Parquet) failed its default import at the same step; its log was overwritten, so the cause is unconfirmed but likely the same.

Check against Rust: whether its onpair scheme bounds its input size or declines large arrays.

A cross-check belongs in LargeChunkInteropIntegrationTest (large tag): force vortex.onpair alongside the others, expecting a fallback rather than an exception.

Lingua principale
Java
Stelle
3
Fork
2
Merge medio
9h 51m
PR unite (30g)
127

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di dfa1/vortex-java

Tutte le issue di dfa1/vortex-java

Issue simili

Altre issue su Java

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.