Storage: Add List support for pagination (#87093)

* Add origin keys to List request
* Check origin keys requirement in the sql entity server's List method
* Refactor mode 2 List
* Check origin keys before making Storage List call

---------

Co-authored-by: Dan Cech <dcech@grafana.com>
This commit is contained in:
Arati R
2024-05-01 08:42:47 +02:00
committed by GitHub
co-authored by Dan Cech
parent 406fe8c85a
commit 61f3d08c3f
7 changed files with 209 additions and 154 deletions
@@ -1,6 +1,7 @@
package entity
import (
"github.com/grafana/grafana/pkg/services/apiserver/utils"
apierrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/selection"
@@ -20,6 +21,8 @@ type Requirements struct {
ListDeleted bool
// ListHistory is a resource name to list the history of
ListHistory string
// ListOriginKeys needs to include the origin key of a given entity in order for it to be selected.
ListOriginKeys []string
}
func ReadLabelSelectors(selector labels.Selector) (Requirements, labels.Selector, error) {
@@ -45,6 +48,11 @@ func ReadLabelSelectors(selector labels.Selector) (Requirements, labels.Selector
return requirements, newSelector, apierrors.NewBadRequest(SortByKey + " label selector only supports in")
}
requirements.SortBy = r.Values().List()
case utils.AnnoKeyOriginKey:
if r.Operator() != selection.In {
return requirements, newSelector, apierrors.NewBadRequest(SortByKey + " label selector only supports in")
}
requirements.ListOriginKeys = r.Values().List()
case ListDeletedKey:
if r.Operator() != selection.Equals {
return requirements, newSelector, apierrors.NewBadRequest(ListDeletedKey + " label selector only supports equality")
@@ -442,6 +442,9 @@ func (s *Storage) GetList(ctx context.Context, key string, opts storage.ListOpti
if len(requirements.SortBy) > 0 {
req.Sort = requirements.SortBy
}
if len(requirements.ListOriginKeys) > 0 {
req.OriginKeys = requirements.ListOriginKeys
}
if requirements.ListDeleted {
req.Deleted = true
}