Skip to content

Commit f12229a

Browse files
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.
1 parent 77fa24e commit f12229a

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

parquet-hadoop/src/main/java/org/apache/parquet/hadoop/ParquetFileWriter.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1643,14 +1643,17 @@ private static void copy(SeekableInputStream from, PositionOutputStream to, long
16431643
* @throws IOException if there is an error while writing
16441644
*/
16451645
public void end(Map<String, String> extraMetaData) throws IOException {
1646-
state = state.end();
1647-
serializeColumnIndexes(columnIndexes, blocks, out, fileEncryptor);
1648-
serializeOffsetIndexes(offsetIndexes, blocks, out, fileEncryptor);
1649-
serializeBloomFilters(bloomFilters, blocks, out, fileEncryptor);
1650-
LOG.debug("{}: end", out.getPos());
1651-
this.footer = new ParquetMetadata(new FileMetaData(schema, extraMetaData, Version.FULL_VERSION), blocks);
1652-
serializeFooter(footer, out, fileEncryptor, metadataConverter);
1653-
close();
1646+
try {
1647+
state = state.end();
1648+
serializeColumnIndexes(columnIndexes, blocks, out, fileEncryptor);
1649+
serializeOffsetIndexes(offsetIndexes, blocks, out, fileEncryptor);
1650+
serializeBloomFilters(bloomFilters, blocks, out, fileEncryptor);
1651+
LOG.debug("{}: end", out.getPos());
1652+
this.footer = new ParquetMetadata(new FileMetaData(schema, extraMetaData, Version.FULL_VERSION), blocks);
1653+
serializeFooter(footer, out, fileEncryptor, metadataConverter);
1654+
} finally {
1655+
close();
1656+
}
16541657
}
16551658

16561659
@Override

0 commit comments

Comments
 (0)