From 6e7e389ee24504380a151e637c538c77c0f78585 Mon Sep 17 00:00:00 2001 From: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> Date: Tue, 4 Feb 2025 13:31:03 +0100 Subject: [PATCH] Report grpc canceled timeouts as cancelled status and not error (#99981) --- pkg/plugins/instrumentationutils/request_status.go | 4 +++- pkg/plugins/manager/client/client.go | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/pkg/plugins/instrumentationutils/request_status.go b/pkg/plugins/instrumentationutils/request_status.go index d8da79cb71a..9d6cb7fba5e 100644 --- a/pkg/plugins/instrumentationutils/request_status.go +++ b/pkg/plugins/instrumentationutils/request_status.go @@ -33,7 +33,9 @@ func RequestStatusFromError(err error) RequestStatus { status := RequestStatusOK if err != nil { status = RequestStatusError - if errors.Is(err, context.Canceled) || grpcstatus.Code(err) == grpccodes.Canceled { + if errors.Is(err, context.Canceled) { + status = RequestStatusCancelled + } else if s, ok := grpcstatus.FromError(err); ok && s.Code() == grpccodes.Canceled { status = RequestStatusCancelled } } diff --git a/pkg/plugins/manager/client/client.go b/pkg/plugins/manager/client/client.go index c6382451a87..7a972fb617e 100644 --- a/pkg/plugins/manager/client/client.go +++ b/pkg/plugins/manager/client/client.go @@ -7,6 +7,9 @@ import ( "net/textproto" "strings" + grpccodes "google.golang.org/grpc/codes" + grpcstatus "google.golang.org/grpc/status" + "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana/pkg/plugins" @@ -61,6 +64,10 @@ func (s *Service) QueryData(ctx context.Context, req *backend.QueryDataRequest) return nil, plugins.ErrPluginRequestCanceledErrorBase.Errorf("client: query data request canceled: %w", err) } + if s, ok := grpcstatus.FromError(err); ok && s.Code() == grpccodes.Canceled { + return nil, plugins.ErrPluginRequestCanceledErrorBase.Errorf("client: query data request canceled: %w", err) + } + return nil, plugins.ErrPluginDownstreamErrorBase.Errorf("client: failed to query data: %w", err) }