From 74f583644346da21e5ccb0be6233a154e9bc2d09 Mon Sep 17 00:00:00 2001 From: Andrew Ash Date: Fri, 31 Mar 2017 11:53:11 -0700 Subject: [PATCH] More detailed error messages in footer parsing Include invalid values in exception messages when reading footer for two situations: - too-short files (include file length) - files with corrupted footer lengths (include calculated footer start index) --- .../java/org/apache/parquet/hadoop/ParquetFileReader.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetFileReader.java b/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetFileReader.java index 7b7534cbe4..1815bd6c84 100644 --- a/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetFileReader.java +++ b/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetFileReader.java @@ -471,7 +471,7 @@ private static final ParquetMetadata readFooter(ParquetMetadataConverter convert LOG.debug("File length {}", fileLen); int FOOTER_LENGTH_SIZE = 4; if (fileLen < MAGIC.length + FOOTER_LENGTH_SIZE + MAGIC.length) { // MAGIC + data + footer + footerIndex + MAGIC - throw new RuntimeException(filePath + " is not a Parquet file (too small)"); + throw new RuntimeException(filePath + " is not a Parquet file (too small length: " + fileLen + ")"); } long footerLengthIndex = fileLen - FOOTER_LENGTH_SIZE - MAGIC.length; LOG.debug("reading footer index at {}", footerLengthIndex); @@ -486,7 +486,7 @@ private static final ParquetMetadata readFooter(ParquetMetadataConverter convert long footerIndex = footerLengthIndex - footerLength; LOG.debug("read footer length: {}, footer index: {}", footerLength, footerIndex); if (footerIndex < MAGIC.length || footerIndex >= footerLengthIndex) { - throw new RuntimeException("corrupted file: the footer index is not within the file"); + throw new RuntimeException("corrupted file: the footer index is not within the file: " + footerIndex); } f.seek(footerIndex); return converter.readParquetMetadata(f, filter);