apache / apache/parquet-java

parquet-tools class-not-found failures are silent and therefore not helpful

Abierto
#2,542 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Component: Java Component: Parquet Priority: Minor Type: bug
Lenguaje dominante
Java
Estrellas
3.1k
Forks
1.6k
Merge medio
3 d 12 h
PR fusionados (30 d)
33

Descripción

If you download a parquet-tools jar from e.g. maven central and simply run it without the "hadoop" command prefix:

`[jlilley@rpb-dev-cent7-1 ~]$ wget [https://repo1.maven.org/maven2/org/apache/parquet/parquet-tools/1.11.1/parquet-tools-1.11.1.jar]`
`...`

`[jlilley@rpb-dev-cent7-1 ~]$ java -jar parquet-tools-1.11.1.jar --help`
`[jlilley@rpb-dev-cent7-1 ~]$`

it will fail because the hadoop dependencies are missing, and will fail silently because System.out and System.err have been replaced with VoidStream:

`System.setOut(VoidStream);`
`System.setErr(VoidStream);`

Because of this, the missing-class exceptions are not reported and user is left scratching head and wondering what happened.  It is unclear why the message goes unreported, because the exception _should_ be printed to Main.err by die()

catch (Throwable th) {
`   if (debug) th.printStackTrace(Main.err);`
`   die(th, false, name, command);`
}

However, commenting out the System.setOut() and System.setErr() lines does indeed cause the stack trace to be shown.

 

**Environment**: I've tried this on both CentOS7 and Windows 10, using JDK 1.8.0_211

 
**Reporter**: [john lilley](https://issues.apache.org/jira/secure/ViewProfile.jspa?name=john.lilley@redpoint.net)

**Note**: *This issue was originally created as [PARQUET-1937](https://issues.apache.org/jira/browse/PARQUET-1937). Please see the [migration documentation](https://issues.apache.org/jira/browse/PARQUET-2502) for further details.*

Guía de contribución

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

Línea de trabajo

Comienza rastreando el inicio de parquet-tools en torno a las sustituciones de System.setOut(System.setErr), VoidStream y la ruta die() que informa a Main.err. Reproduce la invocación directa de java -jar sin el prefijo hadoop y compárala con el comportamiento después de que esos streams dejen de suprimir los errores. La tarea está completada cuando los fallos por clases ausentes se informan en lugar de no producir ninguna salida.

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

Evaluación

Stack tecnológico
java
Área
cli
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.