diff --git a/pkg/services/unifiedSearch/service.go b/pkg/services/unifiedSearch/service.go index 6f2b29e97c5..7db7a0bffb5 100644 --- a/pkg/services/unifiedSearch/service.go +++ b/pkg/services/unifiedSearch/service.go @@ -3,7 +3,6 @@ package unifiedSearch import ( "context" "errors" - "fmt" "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/data" @@ -12,6 +11,7 @@ import ( "github.com/grafana/grafana/pkg/infra/tracing" "github.com/grafana/grafana/pkg/registry" "github.com/grafana/grafana/pkg/services/accesscontrol" + "github.com/grafana/grafana/pkg/services/apiserver/endpoints/request" "github.com/grafana/grafana/pkg/services/featuremgmt" "github.com/grafana/grafana/pkg/services/folder" "github.com/grafana/grafana/pkg/services/org" @@ -152,14 +152,16 @@ func (s *StandardSearchService) DoQuery(ctx context.Context, user *backend.User, } func (s *StandardSearchService) doQuery(ctx context.Context, signedInUser *user.SignedInUser, orgID int64, q Query) *backend.DataResponse { - response := s.doSearchQuery(ctx, q, s.cfg.AppSubURL) + response := s.doSearchQuery(ctx, q, s.cfg.AppSubURL, orgID) return response } -func (s *StandardSearchService) doSearchQuery(ctx context.Context, qry Query, _ string) *backend.DataResponse { +func (s *StandardSearchService) doSearchQuery(ctx context.Context, qry Query, _ string, orgID int64) *backend.DataResponse { response := &backend.DataResponse{} - tenantId := fmt.Sprintf("stacks-%s", s.cfg.StackID) + // will use stack id for cloud and org id for on-prem + tenantId := request.GetNamespaceMapper(s.cfg)(orgID) + req := &resource.SearchRequest{Tenant: tenantId, Query: qry.Query, Limit: int64(qry.Limit), Offset: int64(qry.From)} res, err := s.resourceClient.Search(ctx, req) if err != nil { diff --git a/pkg/storage/unified/resource/index.go b/pkg/storage/unified/resource/index.go index bc806800871..33abc5e92c7 100644 --- a/pkg/storage/unified/resource/index.go +++ b/pkg/storage/unified/resource/index.go @@ -39,46 +39,65 @@ func NewIndex(s *server, opts Opts) *Index { return idx } -func (i *Index) Init(ctx context.Context) error { - resourceTypes := fetchResourceTypes() - for _, rt := range resourceTypes { - r := &ListRequest{Options: rt} - list, err := i.s.List(ctx, r) +func (i *Index) IndexBatch(list *ListResponse, kind string) error { + for _, obj := range list.Items { + res, err := getResource(obj.Value) if err != nil { return err } - i.log.Info("initial indexing resources", "count", len(list.Items)) - for _, obj := range list.Items { - res, err := getResource(obj.Value) - if err != nil { - return err - } - - shard, err := i.getShard(tenant(res)) - if err != nil { - return err - } - - i.log.Info("indexing resource for tenant", "res", res, "tenant", tenant(res)) - - var jsonDoc interface{} - err = json.Unmarshal(obj.Value, &jsonDoc) - if err != nil { - return err - } - err = shard.batch.Index(res.Metadata.Uid, jsonDoc) - if err != nil { - return err - } + shard, err := i.getShard(tenant(res)) + if err != nil { + return err } + i.log.Debug("initial indexing resources batch", "count", len(list.Items), "kind", kind, "tenant", tenant(res)) - for _, shard := range i.shards { - err := shard.index.Batch(shard.batch) + var jsonDoc interface{} + err = json.Unmarshal(obj.Value, &jsonDoc) + if err != nil { + return err + } + err = shard.batch.Index(res.Metadata.Uid, jsonDoc) + if err != nil { + return err + } + } + + for _, shard := range i.shards { + err := shard.index.Batch(shard.batch) + if err != nil { + return err + } + shard.batch.Reset() + } + + return nil +} + +func (i *Index) Init(ctx context.Context) error { + resourceTypes := fetchResourceTypes() + for _, rt := range resourceTypes { + i.log.Info("indexing resource", "kind", rt.Key.Resource) + r := &ListRequest{Options: rt, Limit: 100} + + // Paginate through the list of resources and index each page + for { + list, err := i.s.List(ctx, r) if err != nil { return err } - shard.batch.Reset() + + // Index current page + err = i.IndexBatch(list, rt.Key.Resource) + if err != nil { + return err + } + + if list.NextPageToken == "" { + break + } + + r.NextPageToken = list.NextPageToken } } @@ -91,7 +110,7 @@ func (i *Index) Index(ctx context.Context, data *Data) error { return err } tenant := tenant(res) - i.log.Info("indexing resource for tenant", "res", res, "tenant", tenant) + i.log.Debug("indexing resource for tenant", "res", res, "tenant", tenant) shard, err := i.getShard(tenant) if err != nil { return err