fix(unified-storage): break dependency from dualwriter in resource module (#101788)
This commit is contained in:
@@ -43,7 +43,7 @@ type SearchHandler struct {
|
||||
}
|
||||
|
||||
func NewSearchHandler(tracer trace.Tracer, dual dualwrite.Service, legacyDashboardSearcher resource.ResourceIndexClient, resourceClient resource.ResourceClient, features featuremgmt.FeatureToggles) *SearchHandler {
|
||||
searchClient := resource.NewSearchClient(dual, dashboardv0alpha1.DashboardResourceInfo.GroupResource(), resourceClient, legacyDashboardSearcher)
|
||||
searchClient := resource.NewSearchClient(dualwrite.NewSearchAdapter(dual), dashboardv0alpha1.DashboardResourceInfo.GroupResource(), resourceClient, legacyDashboardSearcher)
|
||||
return &SearchHandler{
|
||||
client: searchClient,
|
||||
log: log.New("grafana-apiserver.dashboards.search"),
|
||||
|
||||
@@ -53,7 +53,7 @@ type k8sHandler struct {
|
||||
func NewK8sHandler(dual dualwrite.Service, namespacer request.NamespaceMapper, gvr schema.GroupVersionResource,
|
||||
restConfig func(context.Context) (*rest.Config, error), dashStore dashboards.Store, userSvc user.Service, resourceClient resource.ResourceClient, sorter sort.Service) K8sHandler {
|
||||
legacySearcher := legacysearcher.NewDashboardSearchClient(dashStore, sorter)
|
||||
searchClient := resource.NewSearchClient(dual, gvr.GroupResource(), resourceClient, legacySearcher)
|
||||
searchClient := resource.NewSearchClient(dualwrite.NewSearchAdapter(dual), gvr.GroupResource(), resourceClient, legacySearcher)
|
||||
|
||||
return &k8sHandler{
|
||||
namespacer: namespacer,
|
||||
|
||||
@@ -50,3 +50,17 @@ type Service interface {
|
||||
// change the status (finish migration etc)
|
||||
Update(ctx context.Context, status StorageStatus) (StorageStatus, error)
|
||||
}
|
||||
|
||||
type SearchAdapter struct {
|
||||
Service
|
||||
}
|
||||
|
||||
func NewSearchAdapter(s Service) *SearchAdapter {
|
||||
return &SearchAdapter{Service: s}
|
||||
}
|
||||
|
||||
func (d *SearchAdapter) IsEnabled(gr schema.GroupResource) bool {
|
||||
//nolint:errcheck
|
||||
status, _ := d.Status(context.Background(), gr)
|
||||
return status.Runtime && d.Service.ShouldManage(gr)
|
||||
}
|
||||
|
||||
@@ -5,13 +5,15 @@ import (
|
||||
|
||||
"google.golang.org/grpc"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
|
||||
"github.com/grafana/grafana/pkg/storage/legacysql/dualwrite"
|
||||
)
|
||||
|
||||
func NewSearchClient(dual dualwrite.Service, gr schema.GroupResource, unifiedClient ResourceIndexClient, legacyClient ResourceIndexClient) ResourceIndexClient {
|
||||
status, _ := dual.Status(context.Background(), gr)
|
||||
if status.Runtime && dual.ShouldManage(gr) {
|
||||
type DualWriter interface {
|
||||
IsEnabled(schema.GroupResource) bool
|
||||
ReadFromUnified(context.Context, schema.GroupResource) (bool, error)
|
||||
}
|
||||
|
||||
func NewSearchClient(dual DualWriter, gr schema.GroupResource, unifiedClient ResourceIndexClient, legacyClient ResourceIndexClient) ResourceIndexClient {
|
||||
if dual.IsEnabled(gr) {
|
||||
return &searchWrapper{
|
||||
dual: dual,
|
||||
groupResource: gr,
|
||||
@@ -19,14 +21,15 @@ func NewSearchClient(dual dualwrite.Service, gr schema.GroupResource, unifiedCli
|
||||
legacyClient: legacyClient,
|
||||
}
|
||||
}
|
||||
if status.ReadUnified {
|
||||
//nolint:errcheck
|
||||
if ok, _ := dual.ReadFromUnified(context.Background(), gr); ok {
|
||||
return unifiedClient
|
||||
}
|
||||
return legacyClient
|
||||
}
|
||||
|
||||
type searchWrapper struct {
|
||||
dual dualwrite.Service
|
||||
dual DualWriter
|
||||
groupResource schema.GroupResource
|
||||
|
||||
unifiedClient ResourceIndexClient
|
||||
|
||||
Reference in New Issue
Block a user