datasources: querier: renamed the "mt" builder to "qs" builder (#109779)

This commit is contained in:
Gábor Farkas
2025-08-19 12:37:56 +02:00
committed by GitHub
parent 0fc29cbaae
commit 2e5b55a855
14 changed files with 61 additions and 61 deletions
+1 -1
View File
@@ -158,7 +158,7 @@
/pkg/services/hooks/ @grafana/grafana-backend-group
/pkg/services/kmsproviders/ @grafana/grafana-operator-experience-squad
/pkg/services/licensing/ @grafana/grafana-operator-experience-squad
/pkg/services/mtdsclient/ @grafana/grafana-datasources-core-services
/pkg/services/dsquerierclient/ @grafana/grafana-datasources-core-services
/pkg/services/navtree/ @grafana/grafana-backend-group
/pkg/services/notifications/ @grafana/grafana-backend-group
/pkg/services/org/ @grafana/grafana-backend-group
+3 -3
View File
@@ -22,7 +22,7 @@ import (
"github.com/grafana/grafana/pkg/plugins/manager/registry"
"github.com/grafana/grafana/pkg/services/datasources"
fakeDatasources "github.com/grafana/grafana/pkg/services/datasources/fakes"
"github.com/grafana/grafana/pkg/services/mtdsclient"
"github.com/grafana/grafana/pkg/services/dsquerierclient"
"github.com/grafana/grafana/pkg/services/pluginsintegration/pluginconfig"
"github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext"
pluginSettings "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings/service"
@@ -81,7 +81,7 @@ func TestAPIEndpoint_Metrics_QueryMetricsV2(t *testing.T) {
),
pluginconfig.NewFakePluginRequestConfigProvider(),
),
mtdsclient.NewNullMTDatasourceClientBuilder(),
dsquerierclient.NewNullQSDatasourceClientBuilder(),
)
server := SetupAPITestServer(t, func(hs *HTTPServer) {
hs.queryDataService = qds
@@ -264,7 +264,7 @@ func TestDataSourceQueryError(t *testing.T) {
&fakeDatasources.FakeCacheService{}, ds,
pluginSettings.ProvideService(dbtest.NewFakeDB(),
secretstest.NewFakeSecretsService()), pluginconfig.NewFakePluginRequestConfigProvider()),
mtdsclient.NewNullMTDatasourceClientBuilder(),
dsquerierclient.NewNullQSDatasourceClientBuilder(),
)
hs.QuotaService = quotatest.New(false, nil)
})
+2 -2
View File
@@ -17,8 +17,8 @@ import (
"github.com/grafana/grafana/pkg/plugins"
"github.com/grafana/grafana/pkg/services/datasources"
datafakes "github.com/grafana/grafana/pkg/services/datasources/fakes"
"github.com/grafana/grafana/pkg/services/dsquerierclient"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/services/mtdsclient"
"github.com/grafana/grafana/pkg/services/pluginsintegration/pluginconfig"
"github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext"
"github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore"
@@ -71,7 +71,7 @@ func framesPassThroughService(t *testing.T, frames data.Frames) (data.Frames, er
Features: features,
Tracer: tracing.InitializeTracerForTest(),
},
mtDatasourceClientBuilder: mtdsclient.NewNullMTDatasourceClientBuilder(),
qsDatasourceClientBuilder: dsquerierclient.NewNullQSDatasourceClientBuilder(),
}
queries := []Query{{
RefID: "A",
+3 -3
View File
@@ -395,7 +395,7 @@ func (dn *DSNode) Execute(ctx context.Context, now time.Time, _ mathexp.Vars, s
}()
var resp *backend.QueryDataResponse
mtDSClient, ok, err := s.mtDatasourceClientBuilder.BuildClient(dn.datasource.Type, dn.datasource.UID)
qsDSClient, ok, err := s.qsDatasourceClientBuilder.BuildClient(dn.datasource.Type, dn.datasource.UID)
if err != nil {
return mathexp.Results{}, MakeQueryError(dn.refID, dn.datasource.UID, err)
}
@@ -410,14 +410,14 @@ func (dn *DSNode) Execute(ctx context.Context, now time.Time, _ mathexp.Vars, s
if err != nil {
return mathexp.Results{}, MakeQueryError(dn.refID, dn.datasource.UID, err)
}
} else {
} else { // use query-service client (single or multi tenant)
k8sReq, err := ConvertBackendRequestToDataRequest(req)
if err != nil {
return mathexp.Results{}, MakeQueryError(dn.refID, dn.datasource.UID, err)
}
// make the query with a mt client
resp, err = mtDSClient.QueryData(ctx, *k8sReq)
resp, err = qsDSClient.QueryData(ctx, *k8sReq)
// handle error
if err != nil {
+4 -4
View File
@@ -15,8 +15,8 @@ import (
"github.com/grafana/grafana/pkg/infra/tracing"
"github.com/grafana/grafana/pkg/plugins"
"github.com/grafana/grafana/pkg/services/datasources"
"github.com/grafana/grafana/pkg/services/dsquerierclient"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/services/mtdsclient"
"github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext"
"github.com/grafana/grafana/pkg/setting"
)
@@ -68,7 +68,7 @@ type Service struct {
tracer tracing.Tracer
metrics *metrics.ExprMetrics
mtDatasourceClientBuilder mtdsclient.MTDatasourceClientBuilder
qsDatasourceClientBuilder dsquerierclient.QSDatasourceClientBuilder
}
type pluginContextProvider interface {
@@ -77,7 +77,7 @@ type pluginContextProvider interface {
}
func ProvideService(cfg *setting.Cfg, pluginClient plugins.Client, pCtxProvider *plugincontext.Provider,
features featuremgmt.FeatureToggles, registerer prometheus.Registerer, tracer tracing.Tracer, builder mtdsclient.MTDatasourceClientBuilder) *Service {
features featuremgmt.FeatureToggles, registerer prometheus.Registerer, tracer tracing.Tracer, builder dsquerierclient.QSDatasourceClientBuilder) *Service {
return &Service{
cfg: cfg,
dataService: pluginClient,
@@ -90,7 +90,7 @@ func ProvideService(cfg *setting.Cfg, pluginClient plugins.Client, pCtxProvider
Features: features,
Tracer: tracer,
},
mtDatasourceClientBuilder: builder,
qsDatasourceClientBuilder: builder,
}
}
+2 -2
View File
@@ -19,8 +19,8 @@ import (
"github.com/grafana/grafana/pkg/plugins"
"github.com/grafana/grafana/pkg/services/datasources"
datafakes "github.com/grafana/grafana/pkg/services/datasources/fakes"
"github.com/grafana/grafana/pkg/services/dsquerierclient"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/services/mtdsclient"
"github.com/grafana/grafana/pkg/services/pluginsintegration/pluginconfig"
"github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext"
"github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore"
@@ -256,6 +256,6 @@ func newMockQueryService(responses map[string]backend.DataResponse, queries []Qu
Features: features,
Tracer: tracing.InitializeTracerForTest(),
},
mtDatasourceClientBuilder: mtdsclient.NewNullMTDatasourceClientBuilder(),
qsDatasourceClientBuilder: dsquerierclient.NewNullQSDatasourceClientBuilder(),
}, &Request{Queries: queries, User: &user.SignedInUser{}}
}
+4 -4
View File
@@ -15,7 +15,7 @@ import (
"github.com/grafana/grafana/pkg/components/simplejson"
"github.com/grafana/grafana/pkg/expr"
"github.com/grafana/grafana/pkg/services/datasources"
"github.com/grafana/grafana/pkg/services/mtdsclient"
"github.com/grafana/grafana/pkg/services/dsquerierclient"
"github.com/grafana/grafana/pkg/setting"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/codes"
@@ -257,7 +257,7 @@ func handleQuery(ctx context.Context, raw query.QueryDataRequest, b QueryAPIBuil
dsQuerierLoggerWithSlug := instance.GetLogger(connectLogger).New("ruleuid", headers["X-Rule-Uid"])
mtDsClientBuilder := mtdsclient.NewMtDatasourceClientBuilderWithInstance(
qsDsClientBuilder := dsquerierclient.NewQsDatasourceClientBuilderWithInstance(
instance,
ctx,
dsQuerierLoggerWithSlug,
@@ -275,10 +275,10 @@ func handleQuery(ctx context.Context, raw query.QueryDataRequest, b QueryAPIBuil
instanceConfig.FeatureToggles,
nil,
b.tracer,
mtDsClientBuilder,
qsDsClientBuilder,
)
qdr, err := service.QueryData(ctx, dsQuerierLoggerWithSlug, cache, exprService, mReq, mtDsClientBuilder, headers)
qdr, err := service.QueryData(ctx, dsQuerierLoggerWithSlug, cache, exprService, mReq, qsDsClientBuilder, headers)
// tell the `instance` structure that it can now report
// metrics that are only reported once during a request
+2 -2
View File
@@ -84,6 +84,7 @@ import (
"github.com/grafana/grafana/pkg/services/datasourceproxy"
"github.com/grafana/grafana/pkg/services/datasources"
datasourceservice "github.com/grafana/grafana/pkg/services/datasources/service"
"github.com/grafana/grafana/pkg/services/dsquerierclient"
"github.com/grafana/grafana/pkg/services/encryption"
encryptionservice "github.com/grafana/grafana/pkg/services/encryption/service"
"github.com/grafana/grafana/pkg/services/extsvcauth"
@@ -105,7 +106,6 @@ import (
"github.com/grafana/grafana/pkg/services/login/authinfoimpl"
"github.com/grafana/grafana/pkg/services/loginattempt"
"github.com/grafana/grafana/pkg/services/loginattempt/loginattemptimpl"
"github.com/grafana/grafana/pkg/services/mtdsclient"
"github.com/grafana/grafana/pkg/services/navtree/navtreeimpl"
"github.com/grafana/grafana/pkg/services/ngalert"
ngimage "github.com/grafana/grafana/pkg/services/ngalert/image"
@@ -327,7 +327,7 @@ var wireBasicSet = wire.NewSet(
serviceaccountsmanager.ProvideServiceAccountsService,
serviceaccountsproxy.ProvideServiceAccountsProxy,
wire.Bind(new(serviceaccounts.Service), new(*serviceaccountsproxy.ServiceAccountsProxy)),
mtdsclient.NewNullMTDatasourceClientBuilder,
dsquerierclient.NewNullQSDatasourceClientBuilder,
expr.ProvideService,
featuremgmt.ProvideManagerService,
featuremgmt.ProvideToggles,
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
package mtdsclient
package dsquerierclient
import (
"context"
@@ -8,7 +8,7 @@ import (
"github.com/grafana/grafana/pkg/registry/apis/query/clientapi"
)
type MTDatasourceClientBuilder interface {
type QSDatasourceClientBuilder interface {
BuildClient(pluginId string, uid string) (clientapi.QueryDataClient, bool, error)
}
@@ -18,18 +18,18 @@ func (m *nullBuilder) BuildClient(pluginId string, uid string) (clientapi.QueryD
return nil, false, nil
}
// we use this noop for st flows
func NewNullMTDatasourceClientBuilder() MTDatasourceClientBuilder {
// we use this noop for non-query-service flows
func NewNullQSDatasourceClientBuilder() QSDatasourceClientBuilder {
return &nullBuilder{}
}
type MtDatasourceClientBuilderWithInstance struct {
type QsDatasourceClientBuilderWithInstance struct {
instance clientapi.Instance
ctx context.Context
logger log.Logger
}
func (b *MtDatasourceClientBuilderWithInstance) BuildClient(pluginId string, uid string) (clientapi.QueryDataClient, bool, error) {
func (b *QsDatasourceClientBuilderWithInstance) BuildClient(pluginId string, uid string) (clientapi.QueryDataClient, bool, error) {
dsClient, err := b.instance.GetDataSourceClient(
b.ctx,
v0alpha1.DataSourceRef{
@@ -44,19 +44,19 @@ func (b *MtDatasourceClientBuilderWithInstance) BuildClient(pluginId string, uid
}
// TODO: I think we might be able to refactor this to just use the instance
func NewMtDatasourceClientBuilderWithInstance(
func NewQsDatasourceClientBuilderWithInstance(
instance clientapi.Instance,
ctx context.Context,
logger log.Logger,
) MTDatasourceClientBuilder {
return &MtDatasourceClientBuilderWithInstance{
) QSDatasourceClientBuilder {
return &QsDatasourceClientBuilderWithInstance{
instance: instance,
ctx: ctx,
logger: logger,
}
}
func NewTestMTDSClientBuilder(isMultiTenant bool, mockClient clientapi.QueryDataClient) MTDatasourceClientBuilder {
func NewTestQSDSClientBuilder(isMultiTenant bool, mockClient clientapi.QueryDataClient) QSDatasourceClientBuilder {
return &testBuilder{
mockClient: mockClient,
isMultitenant: isMultiTenant,
+3 -3
View File
@@ -19,8 +19,8 @@ import (
"github.com/grafana/grafana/pkg/plugins"
"github.com/grafana/grafana/pkg/services/datasources"
fakes "github.com/grafana/grafana/pkg/services/datasources/fakes"
"github.com/grafana/grafana/pkg/services/dsquerierclient"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/services/mtdsclient"
"github.com/grafana/grafana/pkg/services/ngalert/models"
"github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore"
"github.com/grafana/grafana/pkg/services/user"
@@ -599,7 +599,7 @@ func TestValidate(t *testing.T) {
featuremgmt.WithFeatures(),
nil,
tracing.InitializeTracerForTest(),
mtdsclient.NewNullMTDatasourceClientBuilder(),
dsquerierclient.NewNullQSDatasourceClientBuilder(),
)
validator := NewConditionValidator(cacheService, expressions, store)
evalCtx := NewContext(context.Background(), u)
@@ -729,7 +729,7 @@ func TestCreate_HysteresisCommand(t *testing.T) {
featuremgmt.WithFeatures(),
nil,
tracing.InitializeTracerForTest(),
mtdsclient.NewNullMTDatasourceClientBuilder(),
dsquerierclient.NewNullQSDatasourceClientBuilder(),
),
)
evalCtx := NewContextWithPreviousResults(context.Background(), u, testCase.reader)
@@ -25,8 +25,8 @@ import (
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/infra/tracing"
datasources "github.com/grafana/grafana/pkg/services/datasources/fakes"
"github.com/grafana/grafana/pkg/services/dsquerierclient"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/services/mtdsclient"
"github.com/grafana/grafana/pkg/services/ngalert/eval"
"github.com/grafana/grafana/pkg/services/ngalert/metrics"
"github.com/grafana/grafana/pkg/services/ngalert/models"
@@ -77,7 +77,7 @@ func TestProcessTicks(t *testing.T) {
featuremgmt.WithFeatures(),
nil,
tracing.InitializeTracerForTest(),
mtdsclient.NewNullMTDatasourceClientBuilder(),
dsquerierclient.NewNullQSDatasourceClientBuilder(),
),
)
rrSet := setting.RecordingRuleSettings{
@@ -1215,7 +1215,7 @@ func setupScheduler(t *testing.T, rs *fakeRulesStore, is *state.FakeInstanceStor
featuremgmt.WithFeatures(),
nil,
tracing.InitializeTracerForTest(),
mtdsclient.NewNullMTDatasourceClientBuilder(),
dsquerierclient.NewNullQSDatasourceClientBuilder(),
),
)
}
+9 -9
View File
@@ -22,7 +22,7 @@ import (
"github.com/grafana/grafana/pkg/plugins"
"github.com/grafana/grafana/pkg/services/contexthandler"
"github.com/grafana/grafana/pkg/services/datasources"
"github.com/grafana/grafana/pkg/services/mtdsclient"
"github.com/grafana/grafana/pkg/services/dsquerierclient"
"github.com/grafana/grafana/pkg/services/ngalert/models"
"github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext"
"github.com/grafana/grafana/pkg/services/validations"
@@ -49,7 +49,7 @@ func ProvideService(
dataSourceRequestValidator validations.DataSourceRequestValidator,
pluginClient plugins.Client,
pCtxProvider *plugincontext.Provider,
mtDatasourceClientBuilder mtdsclient.MTDatasourceClientBuilder,
qsDatasourceClientBuilder dsquerierclient.QSDatasourceClientBuilder,
) *ServiceImpl {
g := &ServiceImpl{
cfg: cfg,
@@ -60,7 +60,7 @@ func ProvideService(
pCtxProvider: pCtxProvider,
log: log.New("query_data"),
concurrentQueryLimit: cfg.SectionWithEnvOverrides("query").Key("concurrent_query_limit").MustInt(runtime.NumCPU()),
mtDatasourceClientBuilder: mtDatasourceClientBuilder,
qsDatasourceClientBuilder: qsDatasourceClientBuilder,
}
g.log.Info("Query Service initialization")
return g
@@ -87,7 +87,7 @@ type ServiceImpl struct {
pCtxProvider *plugincontext.Provider
log log.Logger
concurrentQueryLimit int
mtDatasourceClientBuilder mtdsclient.MTDatasourceClientBuilder
qsDatasourceClientBuilder dsquerierclient.QSDatasourceClientBuilder
headers map[string]string
}
@@ -224,13 +224,13 @@ func buildErrorResponses(err error, queries []*simplejson.Json) splitResponse {
return splitResponse{er, http.Header{}}
}
func QueryData(ctx context.Context, log log.Logger, dscache datasources.CacheService, exprService *expr.Service, reqDTO dtos.MetricRequest, mtDatasourceClientBuilder mtdsclient.MTDatasourceClientBuilder, headers map[string]string) (*backend.QueryDataResponse, error) {
func QueryData(ctx context.Context, log log.Logger, dscache datasources.CacheService, exprService *expr.Service, reqDTO dtos.MetricRequest, qsDatasourceClientBuilder dsquerierclient.QSDatasourceClientBuilder, headers map[string]string) (*backend.QueryDataResponse, error) {
s := &ServiceImpl{
log: log,
dataSourceCache: dscache,
expressionService: exprService,
dataSourceRequestValidator: validations.ProvideValidator(),
mtDatasourceClientBuilder: mtDatasourceClientBuilder,
qsDatasourceClientBuilder: qsDatasourceClientBuilder,
headers: headers,
concurrentQueryLimit: 16, // TODO: make it configurable
}
@@ -302,7 +302,7 @@ func (s *ServiceImpl) handleQuerySingleDatasource(ctx context.Context, user iden
req.Queries = append(req.Queries, q.query)
}
mtDsClient, ok, err := s.mtDatasourceClientBuilder.BuildClient(ds.Type, ds.UID)
qsDsClient, ok, err := s.qsDatasourceClientBuilder.BuildClient(ds.Type, ds.UID)
if err != nil {
return nil, err
}
@@ -314,13 +314,13 @@ func (s *ServiceImpl) handleQuerySingleDatasource(ctx context.Context, user iden
}
req.PluginContext = pCtx
return s.pluginClient.QueryData(ctx, req)
} else { // multi tenant flow
} else { // query-service flow (single or multi tenant)
// transform request from backend.QueryDataRequest to k8s request
k8sReq, err := expr.ConvertBackendRequestToDataRequest(req)
if err != nil {
return nil, err
}
return mtDsClient.QueryData(ctx, *k8sReq)
return qsDsClient.QueryData(ctx, *k8sReq)
}
}
+7 -7
View File
@@ -31,8 +31,8 @@ import (
contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model"
"github.com/grafana/grafana/pkg/services/datasources"
fakeDatasources "github.com/grafana/grafana/pkg/services/datasources/fakes"
"github.com/grafana/grafana/pkg/services/dsquerierclient"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/services/mtdsclient"
"github.com/grafana/grafana/pkg/services/pluginsintegration/pluginconfig"
"github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext"
pluginSettings "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings/service"
@@ -653,7 +653,7 @@ func TestIntegrationQueryDataMultipleSources(t *testing.T) {
})
}
func TestIntegrationQueryDataWithMTDSClient(t *testing.T) {
func TestIntegrationQueryDataWithQSDSClient(t *testing.T) {
if testing.Short() {
t.Skip("skipping integration test in short mode")
}
@@ -758,11 +758,11 @@ func setup(t *testing.T, isMultiTenant bool, mockClient clientapi.QueryDataClien
pluginconfig.NewFakePluginRequestConfigProvider(),
)
var mtdsClientBuilder mtdsclient.MTDatasourceClientBuilder
var qsdsClientBuilder dsquerierclient.QSDatasourceClientBuilder
if isMultiTenant {
mtdsClientBuilder = mtdsclient.NewTestMTDSClientBuilder(isMultiTenant, mockClient)
qsdsClientBuilder = dsquerierclient.NewTestQSDSClientBuilder(isMultiTenant, mockClient)
} else {
mtdsClientBuilder = mtdsclient.NewTestMTDSClientBuilder(false, nil)
qsdsClientBuilder = dsquerierclient.NewTestQSDSClientBuilder(false, nil)
}
exprService := expr.ProvideService(
@@ -772,7 +772,7 @@ func setup(t *testing.T, isMultiTenant bool, mockClient clientapi.QueryDataClien
featuremgmt.WithFeatures(),
nil,
tracing.InitializeTracerForTest(),
mtdsClientBuilder,
qsdsClientBuilder,
)
queryService := ProvideService(
@@ -782,7 +782,7 @@ func setup(t *testing.T, isMultiTenant bool, mockClient clientapi.QueryDataClien
rv,
pc,
pCtxProvider,
mtdsClientBuilder,
qsdsClientBuilder,
)
return &testContext{