This is an automated email from the ASF dual-hosted git repository. fokko pushed a commit to branch parquet-1.14.x in repository https://gitbox.apache.org/repos/asf/parquet-java.git
commit 4241df31bfe4f4c90fd0c1907b96109ab16fa5e9 Author: Amogh Jahagirdar <[email protected]> AuthorDate: Thu May 16 21:14:20 2024 -0600 PARQUET-2472: Close in finally block in ParquetFileWriter#end (#1350) It's currently possible that ParquetFileWriter#end fails when writing out the footer, and we don't clean up resources. This change addresses this by explicitly closing the output stream in the finally block. --- .../org/apache/parquet/hadoop/ParquetFileWriter.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetFileWriter.java b/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetFileWriter.java index 761f7a7be..db15ba406 100644 --- a/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetFileWriter.java +++ b/parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetFileWriter.java @@ -1643,14 +1643,17 @@ public class ParquetFileWriter implements AutoCloseable { * @throws IOException if there is an error while writing */ public void end(Map<String, String> extraMetaData) throws IOException { - state = state.end(); - serializeColumnIndexes(columnIndexes, blocks, out, fileEncryptor); - serializeOffsetIndexes(offsetIndexes, blocks, out, fileEncryptor); - serializeBloomFilters(bloomFilters, blocks, out, fileEncryptor); - LOG.debug("{}: end", out.getPos()); - this.footer = new ParquetMetadata(new FileMetaData(schema, extraMetaData, Version.FULL_VERSION), blocks); - serializeFooter(footer, out, fileEncryptor, metadataConverter); - close(); + try { + state = state.end(); + serializeColumnIndexes(columnIndexes, blocks, out, fileEncryptor); + serializeOffsetIndexes(offsetIndexes, blocks, out, fileEncryptor); + serializeBloomFilters(bloomFilters, blocks, out, fileEncryptor); + LOG.debug("{}: end", out.getPos()); + this.footer = new ParquetMetadata(new FileMetaData(schema, extraMetaData, Version.FULL_VERSION), blocks); + serializeFooter(footer, out, fileEncryptor, metadataConverter); + } finally { + close(); + } } @Override
