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 {