mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Plugins: Remove datasourceQueryMultiStatus feature toggle (#90191)
* Remove datasourceQueryMultiStatus feature toggle * PR review suggestion
This commit is contained in:
parent
4e03ca5c1c
commit
9216a3df7d
@ -114,7 +114,6 @@ Experimental features might be changed or removed without prior notice.
|
||||
| `publicDashboardsScene` | Enables public dashboard rendering using scenes |
|
||||
| `lokiExperimentalStreaming` | Support new streaming approach for loki (prototype, needs special loki build) |
|
||||
| `storage` | Configurable storage for dashboards, datasources, and resources |
|
||||
| `datasourceQueryMultiStatus` | Introduce HTTP 207 Multi Status for api/ds/query |
|
||||
| `canvasPanelNesting` | Allow elements nesting |
|
||||
| `disableSecretsCompatibility` | Disable duplicated secret storage in legacy tables |
|
||||
| `logRequestsInstrumentedAsUnknown` | Logs the path for requests that are instrumented as unknown |
|
||||
|
@ -29,7 +29,6 @@ export interface FeatureToggles {
|
||||
featureHighlights?: boolean;
|
||||
storage?: boolean;
|
||||
correlations?: boolean;
|
||||
datasourceQueryMultiStatus?: boolean;
|
||||
autoMigrateOldPanels?: boolean;
|
||||
autoMigrateGraphPanel?: boolean;
|
||||
autoMigrateTablePanel?: boolean;
|
||||
|
@ -84,19 +84,15 @@ func (hs *HTTPServer) QueryMetricsV2(c *contextmodel.ReqContext) response.Respon
|
||||
}
|
||||
|
||||
func (hs *HTTPServer) toJsonStreamingResponse(ctx context.Context, qdr *backend.QueryDataResponse) response.Response {
|
||||
statusWhenError := http.StatusBadRequest
|
||||
if hs.Features.IsEnabled(ctx, featuremgmt.FlagDatasourceQueryMultiStatus) {
|
||||
statusWhenError = http.StatusMultiStatus
|
||||
}
|
||||
|
||||
statusCode := http.StatusOK
|
||||
for _, res := range qdr.Responses {
|
||||
if res.Error != nil {
|
||||
statusCode = statusWhenError
|
||||
statusCode = http.StatusBadRequest
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if statusCode == statusWhenError {
|
||||
if statusCode == http.StatusBadRequest {
|
||||
// an error in the response we treat as downstream.
|
||||
requestmeta.WithDownstreamStatusSource(ctx)
|
||||
}
|
||||
|
@ -23,7 +23,6 @@ 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/featuremgmt"
|
||||
"github.com/grafana/grafana/pkg/services/pluginsintegration/pluginconfig"
|
||||
"github.com/grafana/grafana/pkg/services/pluginsintegration/plugincontext"
|
||||
"github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings"
|
||||
@ -79,34 +78,19 @@ func TestAPIEndpoint_Metrics_QueryMetricsV2(t *testing.T) {
|
||||
}, &fakeDatasources.FakeCacheService{}, &fakeDatasources.FakeDataSourceService{},
|
||||
pluginSettings.ProvideService(dbtest.NewFakeDB(), secretstest.NewFakeSecretsService()), pluginconfig.NewFakePluginRequestConfigProvider()),
|
||||
)
|
||||
serverFeatureEnabled := SetupAPITestServer(t, func(hs *HTTPServer) {
|
||||
server := SetupAPITestServer(t, func(hs *HTTPServer) {
|
||||
hs.queryDataService = qds
|
||||
hs.Features = featuremgmt.WithFeatures(featuremgmt.FlagDatasourceQueryMultiStatus, true)
|
||||
hs.QuotaService = quotatest.New(false, nil)
|
||||
})
|
||||
serverFeatureDisabled := SetupAPITestServer(t, func(hs *HTTPServer) {
|
||||
hs.queryDataService = qds
|
||||
hs.Features = featuremgmt.WithFeatures(featuremgmt.FlagDatasourceQueryMultiStatus, false)
|
||||
hs.QuotaService = quotatest.New(false, nil)
|
||||
})
|
||||
|
||||
t.Run("Status code is 400 when data source response has an error and feature toggle is disabled", func(t *testing.T) {
|
||||
req := serverFeatureDisabled.NewPostRequest("/api/ds/query", strings.NewReader(reqValid))
|
||||
t.Run("Status code is 400 when data source response has an error", func(t *testing.T) {
|
||||
req := server.NewPostRequest("/api/ds/query", strings.NewReader(reqValid))
|
||||
webtest.RequestWithSignedInUser(req, &user.SignedInUser{UserID: 1, OrgID: 1, Permissions: map[int64]map[string][]string{1: {datasources.ActionQuery: []string{datasources.ScopeAll}}}})
|
||||
resp, err := serverFeatureDisabled.SendJSON(req)
|
||||
resp, err := server.SendJSON(req)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, resp.Body.Close())
|
||||
require.Equal(t, http.StatusBadRequest, resp.StatusCode)
|
||||
})
|
||||
|
||||
t.Run("Status code is 207 when data source response has an error and feature toggle is enabled", func(t *testing.T) {
|
||||
req := serverFeatureEnabled.NewPostRequest("/api/ds/query", strings.NewReader(reqValid))
|
||||
webtest.RequestWithSignedInUser(req, &user.SignedInUser{UserID: 1, OrgID: 1, Permissions: map[int64]map[string][]string{1: {datasources.ActionQuery: []string{datasources.ScopeAll}}}})
|
||||
resp, err := serverFeatureEnabled.SendJSON(req)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, resp.Body.Close())
|
||||
require.Equal(t, http.StatusMultiStatus, resp.StatusCode)
|
||||
})
|
||||
}
|
||||
|
||||
func TestAPIEndpoint_Metrics_PluginDecryptionFailure(t *testing.T) {
|
||||
|
@ -38,7 +38,6 @@ type QueryAPIBuilder struct {
|
||||
log log.Logger
|
||||
concurrentQueryLimit int
|
||||
userFacingDefaultError string
|
||||
returnMultiStatus bool // from feature toggle
|
||||
features featuremgmt.FeatureToggles
|
||||
|
||||
tracer tracing.Tracer
|
||||
@ -77,7 +76,6 @@ func NewQueryAPIBuilder(features featuremgmt.FeatureToggles,
|
||||
return &QueryAPIBuilder{
|
||||
concurrentQueryLimit: 4,
|
||||
log: log.New("query_apiserver"),
|
||||
returnMultiStatus: features.IsEnabledGlobally(featuremgmt.FlagDatasourceQueryMultiStatus),
|
||||
client: client,
|
||||
registry: registry,
|
||||
parser: newQueryParser(reader, legacy, tracer),
|
||||
|
@ -99,12 +99,6 @@ var (
|
||||
Expression: "true", // enabled by default
|
||||
AllowSelfServe: true,
|
||||
},
|
||||
{
|
||||
Name: "datasourceQueryMultiStatus",
|
||||
Description: "Introduce HTTP 207 Multi Status for api/ds/query",
|
||||
Stage: FeatureStageExperimental,
|
||||
Owner: grafanaPluginsPlatformSquad,
|
||||
},
|
||||
{
|
||||
Name: "autoMigrateOldPanels",
|
||||
Description: "Migrate old angular panels to supported versions (graph, table-old, worldmap, etc)",
|
||||
|
@ -10,7 +10,6 @@ lokiExperimentalStreaming,experimental,@grafana/observability-logs,false,false,f
|
||||
featureHighlights,GA,@grafana/grafana-as-code,false,false,false
|
||||
storage,experimental,@grafana/grafana-app-platform-squad,false,false,false
|
||||
correlations,GA,@grafana/explore-squad,false,false,false
|
||||
datasourceQueryMultiStatus,experimental,@grafana/plugins-platform-backend,false,false,false
|
||||
autoMigrateOldPanels,preview,@grafana/dataviz-squad,false,false,true
|
||||
autoMigrateGraphPanel,preview,@grafana/dataviz-squad,false,false,true
|
||||
autoMigrateTablePanel,preview,@grafana/dataviz-squad,false,false,true
|
||||
|
|
@ -51,10 +51,6 @@ const (
|
||||
// Correlations page
|
||||
FlagCorrelations = "correlations"
|
||||
|
||||
// FlagDatasourceQueryMultiStatus
|
||||
// Introduce HTTP 207 Multi Status for api/ds/query
|
||||
FlagDatasourceQueryMultiStatus = "datasourceQueryMultiStatus"
|
||||
|
||||
// FlagAutoMigrateOldPanels
|
||||
// Migrate old angular panels to supported versions (graph, table-old, worldmap, etc)
|
||||
FlagAutoMigrateOldPanels = "autoMigrateOldPanels"
|
||||
|
@ -825,7 +825,8 @@
|
||||
"metadata": {
|
||||
"name": "datasourceQueryMultiStatus",
|
||||
"resourceVersion": "1718727528075",
|
||||
"creationTimestamp": "2022-05-03T16:02:20Z"
|
||||
"creationTimestamp": "2022-05-03T16:02:20Z",
|
||||
"deletionTimestamp": "2024-07-08T14:46:08Z"
|
||||
},
|
||||
"spec": {
|
||||
"description": "Introduce HTTP 207 Multi Status for api/ds/query",
|
||||
|
@ -302,15 +302,11 @@ func (api *Api) DeletePublicDashboard(c *contextmodel.ReqContext) response.Respo
|
||||
|
||||
// Copied from pkg/api/metrics.go
|
||||
func toJsonStreamingResponse(ctx context.Context, features featuremgmt.FeatureToggles, qdr *backend.QueryDataResponse) response.Response {
|
||||
statusWhenError := http.StatusBadRequest
|
||||
if features.IsEnabled(ctx, featuremgmt.FlagDatasourceQueryMultiStatus) {
|
||||
statusWhenError = http.StatusMultiStatus
|
||||
}
|
||||
|
||||
statusCode := http.StatusOK
|
||||
for _, res := range qdr.Responses {
|
||||
if res.Error != nil {
|
||||
statusCode = statusWhenError
|
||||
statusCode = http.StatusBadRequest
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user