PostgreSQL: Refactor feature toggle handling for standalone mode (#112061)

This commit is contained in:
Zoltán Bedi 2025-10-06 16:57:32 +02:00 committed by GitHub
parent 98f293e229
commit 510b86450c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 8 additions and 13 deletions

View File

@ -15,7 +15,6 @@ import (
"github.com/grafana/grafana-plugin-sdk-go/backend/instancemgmt" "github.com/grafana/grafana-plugin-sdk-go/backend/instancemgmt"
"github.com/grafana/grafana-plugin-sdk-go/data" "github.com/grafana/grafana-plugin-sdk-go/data"
"github.com/grafana/grafana-plugin-sdk-go/data/sqlutil" "github.com/grafana/grafana-plugin-sdk-go/data/sqlutil"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/jackc/pgx/v5/pgxpool" "github.com/jackc/pgx/v5/pgxpool"
"github.com/lib/pq" "github.com/lib/pq"
@ -129,7 +128,7 @@ func newPostgresPGX(ctx context.Context, userFacingDefaultError string, rowLimit
return p, handler, nil return p, handler, nil
} }
func NewInstanceSettings(logger log.Logger, features featuremgmt.FeatureToggles, dataPath string) datasource.InstanceFactoryFunc { func NewInstanceSettings(logger log.Logger, usePGX bool, dataPath string) datasource.InstanceFactoryFunc {
return func(ctx context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) { return func(ctx context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
cfg := backend.GrafanaConfigFromContext(ctx) cfg := backend.GrafanaConfigFromContext(ctx)
sqlCfg, err := cfg.SQL() sqlCfg, err := cfg.SQL()
@ -167,14 +166,12 @@ func NewInstanceSettings(logger log.Logger, features featuremgmt.FeatureToggles,
DecryptedSecureJSONData: settings.DecryptedSecureJSONData, DecryptedSecureJSONData: settings.DecryptedSecureJSONData,
} }
isPGX := features.IsEnabled(ctx, featuremgmt.FlagPostgresDSUsePGX)
userFacingDefaultError, err := cfg.UserFacingDefaultError() userFacingDefaultError, err := cfg.UserFacingDefaultError()
if err != nil { if err != nil {
return nil, err return nil, err
} }
if isPGX { if usePGX {
pgxlogger := logger.FromContext(ctx).With("driver", "pgx") pgxlogger := logger.FromContext(ctx).With("driver", "pgx")
pgxTlsManager := newPgxTlsManager(pgxlogger) pgxTlsManager := newPgxTlsManager(pgxlogger)
pgxTlsSettings, err := pgxTlsManager.getTLSSettings(dsInfo) pgxTlsSettings, err := pgxTlsManager.getTLSSettings(dsInfo)
@ -184,7 +181,7 @@ func NewInstanceSettings(logger log.Logger, features featuremgmt.FeatureToggles,
// Ensure cleanupCertFiles is called after the connection is opened // Ensure cleanupCertFiles is called after the connection is opened
defer pgxTlsManager.cleanupCertFiles(pgxTlsSettings) defer pgxTlsManager.cleanupCertFiles(pgxTlsSettings)
cnnstr, err := generateConnectionString(dsInfo, pgxTlsSettings, isPGX, pgxlogger) cnnstr, err := generateConnectionString(dsInfo, pgxTlsSettings, usePGX, pgxlogger)
if err != nil { if err != nil {
return "", err return "", err
} }
@ -202,7 +199,7 @@ func NewInstanceSettings(logger log.Logger, features featuremgmt.FeatureToggles,
if err != nil { if err != nil {
return "", err return "", err
} }
cnnstr, err := generateConnectionString(dsInfo, tlsSettings, isPGX, pqlogger) cnnstr, err := generateConnectionString(dsInfo, tlsSettings, usePGX, pqlogger)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -20,8 +20,9 @@ type Service struct {
func ProvideService(cfg *setting.Cfg, features featuremgmt.FeatureToggles) *Service { func ProvideService(cfg *setting.Cfg, features featuremgmt.FeatureToggles) *Service {
logger := backend.NewLoggerWith("logger", "tsdb.postgres") logger := backend.NewLoggerWith("logger", "tsdb.postgres")
usePGX := features.IsEnabled(context.Background(), featuremgmt.FlagPostgresDSUsePGX)
s := &Service{ s := &Service{
im: datasource.NewInstanceManager(NewInstanceSettings(logger, features, cfg.DataPath)), im: datasource.NewInstanceManager(NewInstanceSettings(logger, usePGX, cfg.DataPath)),
features: features, features: features,
} }
return s return s

View File

@ -6,7 +6,6 @@ import (
"github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/backend/datasource" "github.com/grafana/grafana-plugin-sdk-go/backend/datasource"
"github.com/grafana/grafana-plugin-sdk-go/backend/log" "github.com/grafana/grafana-plugin-sdk-go/backend/log"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/setting"
postgres "github.com/grafana/grafana/pkg/tsdb/grafana-postgresql-datasource" postgres "github.com/grafana/grafana/pkg/tsdb/grafana-postgresql-datasource"
) )
@ -14,11 +13,9 @@ import (
func main() { func main() {
// No need to pass logger name, it will be set by the plugin SDK // No need to pass logger name, it will be set by the plugin SDK
logger := backend.NewLoggerWith() logger := backend.NewLoggerWith()
// TODO: get rid of setting.NewCfg() and featuremgmt.FeatureToggles once PostgresDSUsePGX is removed // TODO: get rid of setting.NewCfg() once PostgresDSUsePGX is removed
cfg := setting.NewCfg() cfg := setting.NewCfg()
// We want to enable the feature toggle for api server if err := datasource.Manage("grafana-postgresql-datasource", postgres.NewInstanceSettings(logger, true, cfg.DataPath), datasource.ManageOpts{}); err != nil {
features := featuremgmt.WithFeatures(featuremgmt.FlagPostgresDSUsePGX)
if err := datasource.Manage("grafana-postgresql-datasource", postgres.NewInstanceSettings(logger, features, cfg.DataPath), datasource.ManageOpts{}); err != nil {
log.DefaultLogger.Error(err.Error()) log.DefaultLogger.Error(err.Error())
os.Exit(1) os.Exit(1)
} }