From d8c7c16aad9cdfc0d29b2577764dc997347351bd Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Wed, 28 Jan 2026 12:13:29 -0800 Subject: [PATCH] S3 Tables: fix gRPC stream loop handling in namespace handlers - Correctly handle io.EOF in handleListNamespaces and handleDeleteNamespace. - Propagate other errors to prevent silent failures or accidental data loss. - Added necessary io import. --- weed/s3api/s3tables/handler_namespace.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/weed/s3api/s3tables/handler_namespace.go b/weed/s3api/s3tables/handler_namespace.go index 6d54b86e0..d45641195 100644 --- a/weed/s3api/s3tables/handler_namespace.go +++ b/weed/s3api/s3tables/handler_namespace.go @@ -4,6 +4,7 @@ import ( "encoding/json" "errors" "fmt" + "io" "net/http" "strings" "time" @@ -236,7 +237,10 @@ func (h *S3TablesHandler) handleListNamespaces(w http.ResponseWriter, r *http.Re for { entry, respErr := resp.Recv() if respErr != nil { - break + if respErr == io.EOF { + break + } + return respErr } if entry.Entry == nil { continue @@ -352,7 +356,10 @@ func (h *S3TablesHandler) handleDeleteNamespace(w http.ResponseWriter, r *http.R for { entry, err := resp.Recv() if err != nil { - break + if err == io.EOF { + break + } + return err } if entry.Entry != nil && !strings.HasPrefix(entry.Entry.Name, ".") { hasChildren = true