You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@parquet.apache.org by fo...@apache.org on 2024/07/22 07:49:16 UTC

(parquet-java) branch master updated: GH-2935: Avoid double close of ParquetFileWriter (#2951)

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 <st...@yahoo.com>
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 <yo...@antfin.com>
---
 .../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());