Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Vectored Parquet reads can fall back unsafely after partial asynchronous reads and exceed allocation limits

Abierto
#3,719 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
45/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Tranquilo
Stack tecnológico
java

Línea de trabajo

Comienza en parquet-hadoop's ParquetFileReader.java, en la ruta de lectura vectorial alrededor de las líneas 1293-1307; después sigue el rastro de ChunkListBuilder, las lecturas asíncronas de hermanos y el manejo de parquet.read.allocation.size. Añade cobertura de regresión para el envío o la finalización parciales, los futures de hermanos pendientes, las páginas filtradas, las columnas sobredimensionadas y las lecturas con checksum habilitado; el trabajo estará terminado cuando haya un fallo seguro o un fallback y las asignaciones estén acotadas, sin cambiar los resultados decodificados.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Describe the bug, including details regarding any error messages, version, and platform.

ParquetFileReader can produce unsafe fallback behavior when Hadoop vectored I/O
is enabled and a filesystem partially submits or completes a vectored read before
raising IllegalArgumentException or UnsupportedOperationException.

The current implementation catches those exceptions around readVectored(...)
and retries every range using ordinary reads against the same ChunkListBuilder.
If an earlier range already populated the builder, its data is appended again.
For a filtered column with selected pages P0 and P2, the buffered page
sequence can become [P0, P0, P2] although the page index still describes
[P0, P2]. Depending on the page contents, decoding can fail or silently
associate the wrong page with the selected rows. Even when no page has been
consumed yet, scalar fallback is unsafe once sibling asynchronous reads may still
be operating on the same stream.

Current upstream code:

https://github.com/apache/parquet-java/blob/8e30c4cee3c7e85a8cf2133697f13138509b05b7/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetFileReader.java#L1293-L1307

The same vectored path also allocates one buffer for an entire contiguous
requested range instead of honoring parquet.read.allocation.size (8 MiB by
default), unlike the ordinary read path. Large projected column chunks or
filtered pages can therefore create unexpectedly large heap allocations.

The current master branch and Apache Parquet Java 1.18.0 contain this behavior.
The vulnerable path is also present in the 1.15.x, 1.16.x, and 1.17.x release
lines. Vectored I/O defaults to enabled starting in 1.16.0, so supported Hadoop
filesystems can reach this path without an explicit opt-in; in 1.15.2 it is
reachable when explicitly enabled.

Expected behavior:

  • Preserve ordinary fallback only when vectored I/O is unavailable or range
    preparation fails before asynchronous submission starts.
  • Once submission begins, fail the read safely rather than replaying scalar reads
    against a partially populated builder or an active stream.
  • Wait for already-published sibling reads before returning the original failure.
  • Split filesystem byte ranges to respect the configured allocation limit without
    changing the logical read plan or decoded results.
  • Add regression coverage for partial submission/completion, pending sibling
    futures, filtered pages, oversized columns, and checksum-enabled reads.
Component(s)

parquet-hadoop

Lenguaje dominante
Java
Estrellas
3.1k
Forks
1.6k
Merge medio
6 d 44 min
PR fusionados (30 d)
35

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de apache/parquet-java

Todos los issues de apache/parquet-java

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.