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());

Reply via email to