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:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user