You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iceberg.apache.org by ze...@apache.org on 2026/01/08 16:20:56 UTC

(iceberg-go) branch main updated: fix(catalog): ensure we close metadata writers (#666)

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 <zo...@gmail.com>
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 {