This is an automated email from the ASF dual-hosted git repository.
gangwu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/parquet-mr.git
The following commit(s) were added to refs/heads/master by this push:
new f12229add PARQUET-2472: Close in finally block in
ParquetFileWriter#end (#1350)
f12229add is described below
commit f12229addfdca512770a0959d8074100b1e42ee5
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