datasources: querier: st: handle data-source-not-found (#103697)

pull/103727/head^2
Gábor Farkas 3 months ago committed by GitHub
parent fbfc943927
commit 3f3a4c1e8a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 31
      pkg/registry/apis/query/client/plugin.go

@ -2,6 +2,7 @@ package client
import (
"context"
"errors"
"fmt"
"net/http"
"sync"
@ -44,6 +45,22 @@ type pluginRegistry struct {
var _ clientapi.QueryDataClient = (*pluginClient)(nil)
var _ query.DataSourceApiServerRegistry = (*pluginRegistry)(nil)
var k8sForbiddenError error = &apierrors.StatusError{
ErrStatus: metav1.Status{
Status: metav1.StatusFailure,
Code: http.StatusForbidden,
Message: "Access denied to the data source",
},
}
var k8sNotFoundError error = &apierrors.StatusError{
ErrStatus: metav1.Status{
Status: metav1.StatusFailure,
Code: http.StatusNotFound,
Message: "Data source not found",
},
}
// NewQueryClientForPluginClient creates a client that delegates to the internal plugins.Client stack
func NewQueryClientForPluginClient(p plugins.Client, ctx *plugincontext.Provider, accessControl accesscontrol.AccessControl) clientapi.QueryDataClient {
return &pluginClient{
@ -89,18 +106,18 @@ func (d *pluginClient) QueryData(ctx context.Context, req data.QueryDataRequest)
}
if !canQuery {
status := metav1.Status{
Status: metav1.StatusFailure,
Code: http.StatusForbidden,
Message: "Access denied to the data source",
}
return nil, &apierrors.StatusError{ErrStatus: status}
return nil, k8sForbiddenError
}
// NOTE: this depends on uid unique across datasources
settings, err := d.pCtxProvider.GetDataSourceInstanceSettings(ctx, dsRef.UID)
if err != nil {
return nil, err
// there is no better way to differentiate between plugin-not-found and other-error
if errors.Is(err, datasources.ErrDataSourceNotFound) {
return nil, k8sNotFoundError
} else {
return nil, err
}
}
qdr := &backend.QueryDataRequest{

Loading…
Cancel
Save