Skip to content

Commit 01812d5

Browse files
committed
Buffering the input stream for metadata read
1 parent c2428ab commit 01812d5

1 file changed

Lines changed: 5 additions & 3 deletions

File tree

presto-hive/src/main/java/com/facebook/presto/hive/parquet/reader/ParquetMetadataReader.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import parquet.schema.Type.Repetition;
3838
import parquet.schema.Types;
3939

40+
import java.io.BufferedInputStream;
4041
import java.io.EOFException;
4142
import java.io.IOException;
4243
import java.io.InputStream;
@@ -85,10 +86,11 @@ public static ParquetMetadata readFooter(FSDataInputStream inputStream, Path fil
8586
long metadataLengthIndex = fileSize - PARQUET_METADATA_LENGTH - MAGIC.length;
8687

8788
inputStream.seek(metadataLengthIndex);
88-
int metadataLength = readIntLittleEndian(inputStream);
89+
InputStream in = new BufferedInputStream(inputStream, PARQUET_METADATA_LENGTH + MAGIC.length);
90+
int metadataLength = readIntLittleEndian(in);
8991

9092
byte[] magic = new byte[MAGIC.length];
91-
inputStream.readFully(magic);
93+
validateParquet(in.read(magic) == magic.length, "No enough data for MAGIC");
9294
validateParquet(Arrays.equals(MAGIC, magic), "Not valid Parquet file: %s expected magic number: %s got: %s", file, Arrays.toString(MAGIC), Arrays.toString(magic));
9395

9496
long metadataIndex = metadataLengthIndex - metadataLength;
@@ -98,7 +100,7 @@ public static ParquetMetadata readFooter(FSDataInputStream inputStream, Path fil
98100
file,
99101
metadataIndex);
100102
inputStream.seek(metadataIndex);
101-
FileMetaData fileMetaData = readFileMetaData(inputStream);
103+
FileMetaData fileMetaData = readFileMetaData(new BufferedInputStream(inputStream, metadataLength));
102104
List<SchemaElement> schema = fileMetaData.getSchema();
103105
validateParquet(!schema.isEmpty(), "Empty Parquet schema in file: %s", file);
104106

0 commit comments

Comments
 (0)