Skip to content

Commit

Permalink
share indexers via indexers package
Browse files Browse the repository at this point in the history
  • Loading branch information
mjudeikis committed Jan 28, 2025
1 parent 483ec63 commit 03cb858
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 67 deletions.
18 changes: 18 additions & 0 deletions pkg/indexers/apiexport.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ limitations under the License.
package indexers

import (
"fmt"

kcpcache "github.com/kcp-dev/apimachinery/v2/pkg/cache"
"github.com/kcp-dev/logicalcluster/v3"

Expand All @@ -33,6 +35,8 @@ const (
// APIExportByClaimedIdentities is the indexer name for retrieving APIExports that have a permission claim for a
// particular identity hash.
APIExportByClaimedIdentities = "APIExportByClaimedIdentities"
// APIExportEndpointSliceByAPIExport is the indexer name for retrieving APIExportEndpointSlices by their APIExport's Reference Path and Name.
APIExportEndpointSliceByAPIExport = "APIExportEndpointSliceByAPIExport"
)

// IndexAPIExportByIdentity is an index function that indexes an APIExport by its identity hash.
Expand Down Expand Up @@ -72,3 +76,17 @@ func IndexAPIExportByClaimedIdentities(obj interface{}) ([]string, error) {
}
return sets.List[string](claimedIdentities), nil
}

// IndexAPIExportEndpointSliceByAPIExportFunc indexes the APIExportEndpointSlice by their APIExport's Reference Path and Name.
func IndexAPIExportEndpointSliceByAPIExport(obj interface{}) ([]string, error) {
apiExportEndpointSlice, ok := obj.(*apisv1alpha1.APIExportEndpointSlice)
if !ok {
return []string{}, fmt.Errorf("obj %T is not an APIExportEndpointSlice", obj)
}

path := logicalcluster.NewPath(apiExportEndpointSlice.Spec.APIExport.Path)
if path.Empty() {
path = logicalcluster.From(apiExportEndpointSlice).Path()
}
return []string{path.Join(apiExportEndpointSlice.Spec.APIExport.Name).String()}, nil
}
Original file line number Diff line number Diff line change
Expand Up @@ -204,15 +204,15 @@ func (c *controller) enqueueAPIExportEndpointSlicesForAPIExport(obj interface{})
// binding keys by full path
keys := sets.New[string]()
if path := logicalcluster.NewPath(export.Annotations[core.LogicalClusterPathAnnotationKey]); !path.Empty() {
pathKeys, err := c.apiExportEndpointSliceClusterInformer.Informer().GetIndexer().IndexKeys(indexAPIExportEndpointSliceByAPIExport, path.Join(export.Name).String())
pathKeys, err := c.apiExportEndpointSliceClusterInformer.Informer().GetIndexer().IndexKeys(indexers.APIExportEndpointSliceByAPIExport, path.Join(export.Name).String())
if err != nil {
utilruntime.HandleError(err)
return
}
keys.Insert(pathKeys...)
}

clusterKeys, err := c.apiExportEndpointSliceClusterInformer.Informer().GetIndexer().IndexKeys(indexAPIExportEndpointSliceByAPIExport, logicalcluster.From(export).Path().Join(export.Name).String())
clusterKeys, err := c.apiExportEndpointSliceClusterInformer.Informer().GetIndexer().IndexKeys(indexers.APIExportEndpointSliceByAPIExport, logicalcluster.From(export).Path().Join(export.Name).String())
if err != nil {
utilruntime.HandleError(err)
return
Expand Down Expand Up @@ -392,7 +392,7 @@ func InstallIndexers(
indexers.ByLogicalClusterPathAndName: indexers.IndexByLogicalClusterPathAndName,
})
indexers.AddIfNotPresentOrDie(apiExportEndpointSliceClusterInformer.Informer().GetIndexer(), cache.Indexers{
indexAPIExportEndpointSliceByAPIExport: indexAPIExportEndpointSliceByAPIExportFunc,
indexers.APIExportEndpointSliceByAPIExport: indexers.IndexAPIExportEndpointSliceByAPIExport,
})
indexers.AddIfNotPresentOrDie(apiExportEndpointSliceClusterInformer.Informer().GetIndexer(), cache.Indexers{
indexAPIExportEndpointSlicesByPartition: indexAPIExportEndpointSlicesByPartitionFunc,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,24 +26,9 @@ import (
)

const (
indexAPIExportEndpointSliceByAPIExport = "indexAPIExportEndpointSliceByAPIExport"
indexAPIExportEndpointSlicesByPartition = "indexAPIExportEndpointSlicesByPartition"
)

// indexAPIExportEndpointSliceByAPIExportFunc indexes the APIExportEndpointSlice by their APIExport's Reference Path and Name.
func indexAPIExportEndpointSliceByAPIExportFunc(obj interface{}) ([]string, error) {
apiExportEndpointSlice, ok := obj.(*apisv1alpha1.APIExportEndpointSlice)
if !ok {
return []string{}, fmt.Errorf("obj %T is not an APIExportEndpointSlice", obj)
}

path := logicalcluster.NewPath(apiExportEndpointSlice.Spec.APIExport.Path)
if path.Empty() {
path = logicalcluster.From(apiExportEndpointSlice).Path()
}
return []string{path.Join(apiExportEndpointSlice.Spec.APIExport.Name).String()}, nil
}

// indexAPIExportEndpointSlicesByPartitionFunc is an index function that maps a Partition to the key for its
// spec.partition.
func indexAPIExportEndpointSlicesByPartitionFunc(obj interface{}) ([]string, error) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ func (c *controller) enqueueAPIExportEndpointSliceByAPIBinding(obj interface{})
{ // local to shard
keys := sets.New[string]()
if path := logicalcluster.NewPath(binding.Spec.Reference.Export.Path); !path.Empty() {
pathKeys, err := c.apiExportEndpointSliceClusterInformer.Informer().GetIndexer().IndexKeys(indexAPIExportEndpointSliceByAPIExport, path.Join(binding.Spec.Reference.Export.Name).String())
pathKeys, err := c.apiExportEndpointSliceClusterInformer.Informer().GetIndexer().IndexKeys(indexers.APIExportEndpointSliceByAPIExport, path.Join(binding.Spec.Reference.Export.Name).String())
if err != nil {
utilruntime.HandleError(err)
return
Expand All @@ -246,7 +246,7 @@ func (c *controller) enqueueAPIExportEndpointSliceByAPIBinding(obj interface{})
{
keys := sets.New[string]()
if path := logicalcluster.NewPath(binding.Spec.Reference.Export.Path); !path.Empty() {
pathKeys, err := c.globalApiExportEndpointSliceClusterInformer.Informer().GetIndexer().IndexKeys(indexAPIExportEndpointSliceByAPIExport, path.Join(binding.Spec.Reference.Export.Name).String())
pathKeys, err := c.globalApiExportEndpointSliceClusterInformer.Informer().GetIndexer().IndexKeys(indexers.APIExportEndpointSliceByAPIExport, path.Join(binding.Spec.Reference.Export.Name).String())
if err != nil {
utilruntime.HandleError(err)
return
Expand Down Expand Up @@ -309,15 +309,15 @@ func (c *controller) enqueueAPIExportEndpointSlicesForAPIExport(obj interface{})
// binding keys by full path
keys := sets.New[string]()
if path := logicalcluster.NewPath(export.Annotations[core.LogicalClusterPathAnnotationKey]); !path.Empty() {
pathKeys, err := c.apiExportEndpointSliceClusterInformer.Informer().GetIndexer().IndexKeys(indexAPIExportEndpointSliceByAPIExport, path.Join(export.Name).String())
pathKeys, err := c.apiExportEndpointSliceClusterInformer.Informer().GetIndexer().IndexKeys(indexers.APIExportEndpointSliceByAPIExport, path.Join(export.Name).String())
if err != nil {
utilruntime.HandleError(err)
return
}
keys.Insert(pathKeys...)
}

clusterKeys, err := c.apiExportEndpointSliceClusterInformer.Informer().GetIndexer().IndexKeys(indexAPIExportEndpointSliceByAPIExport, logicalcluster.From(export).Path().Join(export.Name).String())
clusterKeys, err := c.apiExportEndpointSliceClusterInformer.Informer().GetIndexer().IndexKeys(indexers.APIExportEndpointSliceByAPIExport, logicalcluster.From(export).Path().Join(export.Name).String())
if err != nil {
utilruntime.HandleError(err)
return
Expand Down Expand Up @@ -470,10 +470,10 @@ func InstallIndexers(
indexers.ByLogicalClusterPathAndName: indexers.IndexByLogicalClusterPathAndName,
})
indexers.AddIfNotPresentOrDie(apiExportEndpointSliceClusterInformer.Informer().GetIndexer(), cache.Indexers{
indexAPIExportEndpointSliceByAPIExport: indexAPIExportEndpointSliceByAPIExportFunc,
indexers.APIExportEndpointSliceByAPIExport: indexers.IndexAPIExportEndpointSliceByAPIExport,
})
indexers.AddIfNotPresentOrDie(globalAPIExportEndpointSliceClusterInformer.Informer().GetIndexer(), cache.Indexers{
indexAPIExportEndpointSliceByAPIExport: indexAPIExportEndpointSliceByAPIExportFunc,
indexers.APIExportEndpointSliceByAPIExport: indexers.IndexAPIExportEndpointSliceByAPIExport,
})
indexers.AddIfNotPresentOrDie(apiBindingInformer.Informer().GetIndexer(), cache.Indexers{
indexers.APIBindingsByAPIExport: indexers.IndexAPIBindingByAPIExport,
Expand Down

This file was deleted.

0 comments on commit 03cb858

Please sign in to comment.