Plugins: Remove datasourceQueryMultiStatus feature toggle (#90191)

* Remove datasourceQueryMultiStatus feature toggle

* PR review suggestion
This commit is contained in:
Giuseppe Guerra 2024-07-10 11:15:10 +02:00 committed by GitHub
parent 4e03ca5c1c
commit 9216a3df7d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 11 additions and 49 deletions

View File

@ -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 |

View File

@ -29,7 +29,6 @@ export interface FeatureToggles {
featureHighlights?: boolean;
storage?: boolean;
correlations?: boolean;
datasourceQueryMultiStatus?: boolean;
autoMigrateOldPanels?: boolean;
autoMigrateGraphPanel?: boolean;
autoMigrateTablePanel?: boolean;

View File

@ -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)
}

View File

@ -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) {

View File

@ -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),

View File

@ -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)",

View File

@ -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

1 Name Stage Owner requiresDevMode RequiresRestart FrontendOnly
10 featureHighlights GA @grafana/grafana-as-code false false false
11 storage experimental @grafana/grafana-app-platform-squad false false false
12 correlations GA @grafana/explore-squad false false false
datasourceQueryMultiStatus experimental @grafana/plugins-platform-backend false false false
13 autoMigrateOldPanels preview @grafana/dataviz-squad false false true
14 autoMigrateGraphPanel preview @grafana/dataviz-squad false false true
15 autoMigrateTablePanel preview @grafana/dataviz-squad false false true

View File

@ -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"

View File

@ -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",

View File

@ -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
}
}