From 2f64556cf16be328f42e541bc50709b1882db80d Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Fri, 14 Jun 2024 23:34:04 +0300 Subject: [PATCH] almost... but stuck on requester --- pkg/services/apiserver/options/storage.go | 8 ++++--- pkg/services/apiserver/service.go | 22 +++++++++++++++++++ .../entity/sqlstash/sql_storage_server.go | 5 ----- pkg/storage/unified/apistore/storage.go | 2 +- .../unified/entitybridge/entitybridge.go | 4 ++-- 5 files changed, 30 insertions(+), 11 deletions(-) diff --git a/pkg/services/apiserver/options/storage.go b/pkg/services/apiserver/options/storage.go index 110215b52a5..a97ffe57cd6 100644 --- a/pkg/services/apiserver/options/storage.go +++ b/pkg/services/apiserver/options/storage.go @@ -4,10 +4,11 @@ import ( "fmt" "net" - grafanarest "github.com/grafana/grafana/pkg/apiserver/rest" "github.com/spf13/pflag" genericapiserver "k8s.io/apiserver/pkg/server" "k8s.io/apiserver/pkg/server/options" + + grafanarest "github.com/grafana/grafana/pkg/apiserver/rest" ) type StorageType string @@ -18,6 +19,7 @@ const ( StorageTypeLegacy StorageType = "legacy" StorageTypeUnified StorageType = "unified" StorageTypeUnifiedGrpc StorageType = "unified-grpc" + StorageTypeUnifiedExp StorageType = "unified-exp" ) type StorageOptions struct { @@ -43,10 +45,10 @@ func (o *StorageOptions) AddFlags(fs *pflag.FlagSet) { func (o *StorageOptions) Validate() []error { errs := []error{} switch o.StorageType { - case StorageTypeFile, StorageTypeEtcd, StorageTypeLegacy, StorageTypeUnified, StorageTypeUnifiedGrpc: + case StorageTypeFile, StorageTypeEtcd, StorageTypeLegacy, StorageTypeUnified, StorageTypeUnifiedGrpc, StorageTypeUnifiedExp: // no-op default: - errs = append(errs, fmt.Errorf("--grafana-apiserver-storage-type must be one of %s, %s, %s, %s, %s", StorageTypeFile, StorageTypeEtcd, StorageTypeLegacy, StorageTypeUnified, StorageTypeUnifiedGrpc)) + errs = append(errs, fmt.Errorf("--grafana-apiserver-storage-type must be one of %s, %s, %s, %s, %s, %s", StorageTypeFile, StorageTypeEtcd, StorageTypeLegacy, StorageTypeUnified, StorageTypeUnifiedGrpc, StorageTypeUnifiedExp)) } if _, _, err := net.SplitHostPort(o.Address); err != nil { diff --git a/pkg/services/apiserver/service.go b/pkg/services/apiserver/service.go index 339b52bfd05..2a79d5f1fda 100644 --- a/pkg/services/apiserver/service.go +++ b/pkg/services/apiserver/service.go @@ -44,6 +44,9 @@ import ( "github.com/grafana/grafana/pkg/services/store/entity/db/dbimpl" "github.com/grafana/grafana/pkg/services/store/entity/sqlstash" "github.com/grafana/grafana/pkg/setting" + "github.com/grafana/grafana/pkg/storage/unified/apistore" + "github.com/grafana/grafana/pkg/storage/unified/entitybridge" + "github.com/grafana/grafana/pkg/storage/unified/resource" ) var ( @@ -253,6 +256,25 @@ func (s *service) start(ctx context.Context) error { return err } + case grafanaapiserveroptions.StorageTypeUnifiedExp: + if !s.features.IsEnabledGlobally(featuremgmt.FlagUnifiedStorage) { + return fmt.Errorf("unified storage requires the unifiedStorage feature flag") + } + + eDB, err := dbimpl.ProvideEntityDB(s.db, s.cfg, s.features, s.tracing) + if err != nil { + return err + } + + storeServer, err := entitybridge.ProvideEntityStoreResources(eDB, s.tracing) + if err != nil { + return err + } + + store := resource.NewResourceStoreClientLocal(storeServer) + + serverConfig.Config.RESTOptionsGetter = apistore.NewRESTOptionsGetter(s.cfg, store, o.RecommendedOptions.Etcd.StorageConfig.Codec) + case grafanaapiserveroptions.StorageTypeUnified: if !s.features.IsEnabledGlobally(featuremgmt.FlagUnifiedStorage) { return fmt.Errorf("unified storage requires the unifiedStorage feature flag") diff --git a/pkg/services/store/entity/sqlstash/sql_storage_server.go b/pkg/services/store/entity/sqlstash/sql_storage_server.go index 2004cb1ad92..76024024dae 100644 --- a/pkg/services/store/entity/sqlstash/sql_storage_server.go +++ b/pkg/services/store/entity/sqlstash/sql_storage_server.go @@ -106,11 +106,6 @@ func (s *sqlEntityServer) init() error { return errors.New("missing db") } - err := s.db.Init() - if err != nil { - return err - } - sqlDB, err := s.db.GetDB() if err != nil { return err diff --git a/pkg/storage/unified/apistore/storage.go b/pkg/storage/unified/apistore/storage.go index 446b238daa0..b40347e588a 100644 --- a/pkg/storage/unified/apistore/storage.go +++ b/pkg/storage/unified/apistore/storage.go @@ -356,7 +356,7 @@ func toListRequest(ctx context.Context, opts storage.ListOptions) (*resource.Lis } switch opts.ResourceVersionMatch { - case metav1.ResourceVersionMatchNotOlderThan: + case "", metav1.ResourceVersionMatchNotOlderThan: req.VersionMatch = resource.ResourceVersionMatch_NotOlderThan case metav1.ResourceVersionMatchExact: req.VersionMatch = resource.ResourceVersionMatch_Exact diff --git a/pkg/storage/unified/entitybridge/entitybridge.go b/pkg/storage/unified/entitybridge/entitybridge.go index 520a192aad7..878cb51280a 100644 --- a/pkg/storage/unified/entitybridge/entitybridge.go +++ b/pkg/storage/unified/entitybridge/entitybridge.go @@ -1,4 +1,4 @@ -package sqlstash +package entitybridge import ( "context" @@ -13,7 +13,7 @@ import ( // Creates a ResourceServer using the existing entity tables // NOTE: most of the field values are ignored -func ProvideEnityStoreResources(db db.EntityDBInterface, tracer tracing.Tracer) (resource.ResourceServer, error) { +func ProvideEntityStoreResources(db db.EntityDBInterface, tracer tracing.Tracer) (resource.ResourceServer, error) { entity, err := sqlstash.ProvideSQLEntityServer(db, tracer) if err != nil { return nil, err