apache / apache/parquet-java

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

Aperta
#2,542 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Component: Java Component: Parquet Priority: Minor Type: bug
Lingua principale
Java
Stelle
3.1k
Fork
1.6k
Merge medio
3g 12h
PR unite (30g)
33

Descrizione

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.*

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Direzione di ricerca

Inizia tracciando l’avvio di parquet-tools attorno alle sostituzioni di System.setOut(System.setErr), a VoidStream e al percorso die() che segnala a Main.err. Riproduci l’invocazione diretta di java -jar senza il prefisso hadoop e confrontala con il comportamento dopo che questi stream non sopprimono più gli errori. Il lavoro è completato quando i fallimenti dovuti a classi mancanti vengono segnalati invece di non produrre alcun output.

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

Valutazione

Stack tecnologico
java
Ambito
cli
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.