This is an automated email from the ASF dual-hosted git repository.
fokko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/parquet-java.git
The following commit(s) were added to refs/heads/master by this push:
new 824b7d009 GH-2935: Avoid double close of ParquetFileWriter (#2951)
824b7d009 is described below
commit 824b7d009eb41539cb0e2f73110efc0ac5694251
Author: hellishfire <[email protected]>
AuthorDate: Mon Jul 22 15:49:12 2024 +0800
GH-2935: Avoid double close of ParquetFileWriter (#2951)
* GH-2935: Avoid double close of ParquetFileWriter
* fix comment
---------
Co-authored-by: youming.whl <[email protected]>
---
.../src/main/java/org/apache/parquet/hadoop/ParquetFileWriter.java | 6 ++++++
.../test/java/org/apache/parquet/hadoop/TestParquetFileWriter.java | 3 +++
2 files changed, 9 insertions(+)
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 db15ba406..814b98c50 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
@@ -170,6 +170,7 @@ public class ParquetFileWriter implements AutoCloseable {
// set when end is called
private ParquetMetadata footer = null;
+ private boolean closed;
private final CRC32 crc;
private final ReusingByteBufferAllocator crcAllocator;
@@ -1658,11 +1659,16 @@ public class ParquetFileWriter implements AutoCloseable
{
@Override
public void close() throws IOException {
+ if (closed) {
+ return;
+ }
try (PositionOutputStream temp = out) {
temp.flush();
if (crcAllocator != null) {
crcAllocator.close();
}
+ } finally {
+ closed = true;
}
}
diff --git
a/parquet-hadoop/src/test/java/org/apache/parquet/hadoop/TestParquetFileWriter.java
b/parquet-hadoop/src/test/java/org/apache/parquet/hadoop/TestParquetFileWriter.java
index 32e2eac0b..c6be72ff7 100644
---
a/parquet-hadoop/src/test/java/org/apache/parquet/hadoop/TestParquetFileWriter.java
+++
b/parquet-hadoop/src/test/java/org/apache/parquet/hadoop/TestParquetFileWriter.java
@@ -286,6 +286,9 @@ public class TestParquetFileWriter {
w.endColumn();
w.endBlock();
w.end(new HashMap<String, String>());
+ // Although writer is already closed in previous end(),
+ // explicitly close it again to verify double close behavior.
+ w.close();
ParquetMetadata readFooter = ParquetFileReader.readFooter(configuration,
path);
assertEquals("footer: " + readFooter, 2, readFooter.getBlocks().size());