This is an automated email from the ASF dual-hosted git repository.

zeroshade pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg-go.git


The following commit(s) were added to refs/heads/main by this push:
     new b81fbd82 fix(catalog): ensure we close metadata writers (#666)
b81fbd82 is described below

commit b81fbd823cf94b4bc8a2a010f949c15de36239c8
Author: Matt Topol <[email protected]>
AuthorDate: Thu Jan 8 11:20:52 2026 -0500

    fix(catalog): ensure we close metadata writers (#666)
    
    While looking into #644 I found exactly one location which seems that we
    could end up failing to close a writer. So this fixes that spot and
    properly uses our `CheckedClose` utility to ensure we close the file
    writer.
    
    In theory this should fix #644 but I haven't yet been able to write a
    good test for this.
---
 catalog/internal/utils.go | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/catalog/internal/utils.go b/catalog/internal/utils.go
index 76aa378a..6e1f2b39 100644
--- a/catalog/internal/utils.go
+++ b/catalog/internal/utils.go
@@ -33,37 +33,37 @@ import (
 
        "github.com/apache/iceberg-go"
        "github.com/apache/iceberg-go/catalog"
+       "github.com/apache/iceberg-go/internal"
        icebergio "github.com/apache/iceberg-go/io"
        "github.com/apache/iceberg-go/table"
        "github.com/google/uuid"
 )
 
-func WriteTableMetadata(metadata table.Metadata, fs icebergio.WriteFileIO, loc 
string, compression string) error {
+func WriteTableMetadata(metadata table.Metadata, fs icebergio.WriteFileIO, loc 
string, compression string) (err error) {
+       switch compression {
+       case table.MetadataCompressionCodecNone, 
table.MetadataCompressionCodecGzip:
+               // supported codecs
+       default:
+               return fmt.Errorf("unsupported write metadata compression 
codec: %s", compression)
+       }
+
        out, err := fs.Create(loc)
        if err != nil {
                return err
        }
+       defer internal.CheckedClose(out, &err)
 
        var writer io.Writer = out
        var compressWriter io.WriteCloser
-       switch compression {
-       case table.MetadataCompressionCodecNone:
-               // no compression
-       case table.MetadataCompressionCodecGzip:
+       if compression == table.MetadataCompressionCodecGzip {
                compressWriter = gzip.NewWriter(out)
                writer = compressWriter
-       default:
-               return fmt.Errorf("unsupported write metadata compression 
codec: %s", compression)
+               defer internal.CheckedClose(compressWriter, &err)
        }
 
-       encodeErr := json.NewEncoder(writer).Encode(metadata)
-
-       var compressionCloseErr error
-       if compressWriter != nil {
-               compressionCloseErr = compressWriter.Close()
-       }
+       err = json.NewEncoder(writer).Encode(metadata)
 
-       return errors.Join(encodeErr, compressionCloseErr, out.Close())
+       return
 }
 
 func WriteMetadata(ctx context.Context, metadata table.Metadata, loc string, 
props iceberg.Properties) error {

Reply via email to