From 0a38fc1a2a9589963fc86fcf915385f36ad9e7eb Mon Sep 17 00:00:00 2001 From: Dan Upton Date: Mon, 15 May 2023 12:35:10 +0100 Subject: [PATCH] resource: handle `ErrWatchClosed` in `WatchList` endpoint (#17289) --- agent/grpc-external/services/resource/watch.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/agent/grpc-external/services/resource/watch.go b/agent/grpc-external/services/resource/watch.go index 2fd943a6c9..35ec14513a 100644 --- a/agent/grpc-external/services/resource/watch.go +++ b/agent/grpc-external/services/resource/watch.go @@ -4,6 +4,8 @@ package resource import ( + "errors" + "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -51,7 +53,10 @@ func (s *Server) WatchList(req *pbresource.WatchListRequest, stream pbresource.R for { event, err := watch.Next(stream.Context()) - if err != nil { + switch { + case errors.Is(err, storage.ErrWatchClosed): + return status.Error(codes.Aborted, "watch closed by the storage backend (possibly due to snapshot restoration)") + case err != nil: return status.Errorf(codes.Internal, "failed next: %v", err) }