From 75fe25e717b6bfff9c17af40f0136617d0910cf0 Mon Sep 17 00:00:00 2001 From: Hongchao Deng Date: Sat, 13 Aug 2016 17:10:13 -0700 Subject: [PATCH] generic.Matcher -> *generic.SelectionPredicate --- examples/apiserver/rest/reststorage.go | 2 +- federation/registry/cluster/strategy.go | 2 +- pkg/registry/certificates/etcd/etcd.go | 2 +- pkg/registry/certificates/strategy.go | 2 +- pkg/registry/clusterrole/strategy.go | 2 +- pkg/registry/clusterrolebinding/strategy.go | 2 +- pkg/registry/configmap/strategy.go | 2 +- pkg/registry/controller/strategy.go | 2 +- pkg/registry/daemonset/strategy.go | 2 +- pkg/registry/deployment/strategy.go | 2 +- pkg/registry/endpoint/strategy.go | 2 +- pkg/registry/event/strategy.go | 2 +- pkg/registry/generic/registry/store.go | 8 +- pkg/registry/generic/registry/store_test.go | 86 ++++++++----------- .../horizontalpodautoscaler/strategy.go | 2 +- pkg/registry/ingress/strategy.go | 2 +- pkg/registry/job/strategy.go | 2 +- pkg/registry/limitrange/strategy.go | 2 +- pkg/registry/namespace/strategy.go | 2 +- pkg/registry/networkpolicy/strategy.go | 2 +- pkg/registry/node/strategy.go | 2 +- pkg/registry/persistentvolume/strategy.go | 2 +- .../persistentvolumeclaim/strategy.go | 2 +- pkg/registry/petset/strategy.go | 2 +- pkg/registry/pod/strategy.go | 2 +- pkg/registry/poddisruptionbudget/strategy.go | 2 +- pkg/registry/podsecuritypolicy/strategy.go | 2 +- pkg/registry/podtemplate/strategy.go | 2 +- pkg/registry/replicaset/strategy.go | 2 +- pkg/registry/resourcequota/strategy.go | 2 +- pkg/registry/role/strategy.go | 2 +- pkg/registry/rolebinding/strategy.go | 2 +- pkg/registry/scheduledjob/strategy.go | 2 +- pkg/registry/secret/strategy.go | 2 +- pkg/registry/service/strategy.go | 2 +- pkg/registry/serviceaccount/strategy.go | 2 +- pkg/registry/storageclass/strategy.go | 2 +- pkg/registry/thirdpartyresource/strategy.go | 2 +- .../thirdpartyresourcedata/strategy.go | 2 +- 39 files changed, 78 insertions(+), 90 deletions(-) diff --git a/examples/apiserver/rest/reststorage.go b/examples/apiserver/rest/reststorage.go index 15bcc666f96..68a54582eee 100644 --- a/examples/apiserver/rest/reststorage.go +++ b/examples/apiserver/rest/reststorage.go @@ -61,7 +61,7 @@ func NewREST(config *storagebackend.Config, storageDecorator generic.StorageDeco return obj.(*testgroup.TestType).Name, nil }, // Used to match objects based on labels/fields for list. - PredicateFunc: func(label labels.Selector, field fields.Selector) generic.Matcher { + PredicateFunc: func(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/federation/registry/cluster/strategy.go b/federation/registry/cluster/strategy.go index fe04259341f..9b12d487a44 100644 --- a/federation/registry/cluster/strategy.go +++ b/federation/registry/cluster/strategy.go @@ -44,7 +44,7 @@ func ClusterToSelectableFields(cluster *federation.Cluster) fields.Set { return generic.ObjectMetaFieldsSet(cluster.ObjectMeta, false) } -func MatchCluster(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchCluster(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/certificates/etcd/etcd.go b/pkg/registry/certificates/etcd/etcd.go index 4ac75cf723c..041430b877b 100644 --- a/pkg/registry/certificates/etcd/etcd.go +++ b/pkg/registry/certificates/etcd/etcd.go @@ -62,7 +62,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST, *ApprovalREST) { ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*certificates.CertificateSigningRequest).Name, nil }, - PredicateFunc: func(label labels.Selector, field fields.Selector) generic.Matcher { + PredicateFunc: func(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return csrregistry.Matcher(label, field) }, QualifiedResource: certificates.Resource("certificatesigningrequests"), diff --git a/pkg/registry/certificates/strategy.go b/pkg/registry/certificates/strategy.go index 578e4320193..5c26aef339e 100644 --- a/pkg/registry/certificates/strategy.go +++ b/pkg/registry/certificates/strategy.go @@ -168,7 +168,7 @@ func (csrApprovalStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Obje } // Matcher returns a generic matcher for a given label and field selector. -func Matcher(label labels.Selector, field fields.Selector) generic.Matcher { +func Matcher(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/clusterrole/strategy.go b/pkg/registry/clusterrole/strategy.go index 16ba9e2f6aa..556390d7af9 100644 --- a/pkg/registry/clusterrole/strategy.go +++ b/pkg/registry/clusterrole/strategy.go @@ -102,7 +102,7 @@ func (s strategy) Export(ctx api.Context, obj runtime.Object, exact bool) error } // Matcher returns a generic matcher for a given label and field selector. -func Matcher(label labels.Selector, field fields.Selector) generic.Matcher { +func Matcher(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/clusterrolebinding/strategy.go b/pkg/registry/clusterrolebinding/strategy.go index 8c6778e8ed9..4ef043fe23d 100644 --- a/pkg/registry/clusterrolebinding/strategy.go +++ b/pkg/registry/clusterrolebinding/strategy.go @@ -102,7 +102,7 @@ func (s strategy) Export(ctx api.Context, obj runtime.Object, exact bool) error } // Matcher returns a generic matcher for a given label and field selector. -func Matcher(label labels.Selector, field fields.Selector) generic.Matcher { +func Matcher(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/configmap/strategy.go b/pkg/registry/configmap/strategy.go index d4227bc18e3..bbac7e86b1f 100644 --- a/pkg/registry/configmap/strategy.go +++ b/pkg/registry/configmap/strategy.go @@ -88,7 +88,7 @@ func ConfigMapToSelectableFields(cfg *api.ConfigMap) fields.Set { } // MatchConfigMap returns a generic matcher for a given label and field selector. -func MatchConfigMap(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchConfigMap(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/controller/strategy.go b/pkg/registry/controller/strategy.go index 62e5ecad094..6b96706b604 100644 --- a/pkg/registry/controller/strategy.go +++ b/pkg/registry/controller/strategy.go @@ -113,7 +113,7 @@ func ControllerToSelectableFields(controller *api.ReplicationController) fields. // MatchController is the filter used by the generic etcd backend to route // watch events from etcd to clients of the apiserver only interested in specific // labels/fields. -func MatchController(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchController(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/daemonset/strategy.go b/pkg/registry/daemonset/strategy.go index 3d7987f30f4..de5690545a3 100644 --- a/pkg/registry/daemonset/strategy.go +++ b/pkg/registry/daemonset/strategy.go @@ -112,7 +112,7 @@ func DaemonSetToSelectableFields(daemon *extensions.DaemonSet) fields.Set { // MatchSetDaemon is the filter used by the generic etcd backend to route // watch events from etcd to clients of the apiserver only interested in specific // labels/fields. -func MatchDaemonSet(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchDaemonSet(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/deployment/strategy.go b/pkg/registry/deployment/strategy.go index 540d8b74c8c..e460685b373 100644 --- a/pkg/registry/deployment/strategy.go +++ b/pkg/registry/deployment/strategy.go @@ -118,7 +118,7 @@ func DeploymentToSelectableFields(deployment *extensions.Deployment) fields.Set // MatchDeployment is the filter used by the generic etcd backend to route // watch events from etcd to clients of the apiserver only interested in specific // labels/fields. -func MatchDeployment(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchDeployment(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/endpoint/strategy.go b/pkg/registry/endpoint/strategy.go index f307f8b32c7..903c9e13de7 100644 --- a/pkg/registry/endpoint/strategy.go +++ b/pkg/registry/endpoint/strategy.go @@ -79,7 +79,7 @@ func (endpointsStrategy) AllowUnconditionalUpdate() bool { } // MatchEndpoints returns a generic matcher for a given label and field selector. -func MatchEndpoints(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchEndpoints(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{Label: label, Field: field, GetAttrs: EndpointsAttributes} } diff --git a/pkg/registry/event/strategy.go b/pkg/registry/event/strategy.go index c565eee1b72..bcf363be12f 100644 --- a/pkg/registry/event/strategy.go +++ b/pkg/registry/event/strategy.go @@ -70,7 +70,7 @@ func (eventStrategy) AllowUnconditionalUpdate() bool { return true } -func MatchEvent(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchEvent(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{Label: label, Field: field, GetAttrs: getAttrs} } diff --git a/pkg/registry/generic/registry/store.go b/pkg/registry/generic/registry/store.go index 949ffd82e66..99ee27691bc 100644 --- a/pkg/registry/generic/registry/store.go +++ b/pkg/registry/generic/registry/store.go @@ -88,7 +88,7 @@ type Store struct { TTLFunc func(obj runtime.Object, existing uint64, update bool) (uint64, error) // Returns a matcher corresponding to the provided labels and fields. - PredicateFunc func(label labels.Selector, field fields.Selector) generic.Matcher + PredicateFunc func(label labels.Selector, field fields.Selector) *generic.SelectionPredicate // DeleteCollectionWorkers is the maximum number of workers in a single // DeleteCollection call. @@ -188,7 +188,7 @@ func (e *Store) List(ctx api.Context, options *api.ListOptions) (runtime.Object, } // ListPredicate returns a list of all the items matching m. -func (e *Store) ListPredicate(ctx api.Context, m generic.Matcher, options *api.ListOptions) (runtime.Object, error) { +func (e *Store) ListPredicate(ctx api.Context, m *generic.SelectionPredicate, options *api.ListOptions) (runtime.Object, error) { list := e.NewListFunc() filter := e.createFilter(m) if name, ok := m.MatchesSingle(); ok { @@ -797,7 +797,7 @@ func (e *Store) Watch(ctx api.Context, options *api.ListOptions) (watch.Interfac } // WatchPredicate starts a watch for the items that m matches. -func (e *Store) WatchPredicate(ctx api.Context, m generic.Matcher, resourceVersion string) (watch.Interface, error) { +func (e *Store) WatchPredicate(ctx api.Context, m *generic.SelectionPredicate, resourceVersion string) (watch.Interface, error) { filter := e.createFilter(m) if name, ok := m.MatchesSingle(); ok { @@ -813,7 +813,7 @@ func (e *Store) WatchPredicate(ctx api.Context, m generic.Matcher, resourceVersi return e.Storage.WatchList(ctx, e.KeyRootFunc(ctx), resourceVersion, filter) } -func (e *Store) createFilter(m generic.Matcher) storage.Filter { +func (e *Store) createFilter(m *generic.SelectionPredicate) storage.Filter { filterFunc := func(obj runtime.Object) bool { matches, err := m.Matches(obj) if err != nil { diff --git a/pkg/registry/generic/registry/store_test.go b/pkg/registry/generic/registry/store_test.go index f52b6a07653..a913fdf0eaf 100644 --- a/pkg/registry/generic/registry/store_test.go +++ b/pkg/registry/generic/registry/store_test.go @@ -83,45 +83,33 @@ func NewTestGenericStoreRegistry(t *testing.T) (*etcdtesting.EtcdTestServer, *St return newTestGenericStoreRegistry(t, false) } -// setMatcher is a matcher that matches any pod with id in the set. +// matchPodName returns selection predicate that matches any pod with name in the set. // Makes testing simpler. -type setMatcher struct { - sets.String -} - -func (sm setMatcher) Matches(obj runtime.Object) (bool, error) { - pod, ok := obj.(*api.Pod) - if !ok { - return false, fmt.Errorf("wrong object") +func matchPodName(names ...string) *generic.SelectionPredicate { + // Note: even if pod name is a field, we have to use labels, + // because field selector doesn't support "IN" operator. + l, err := labels.NewRequirement("name", labels.InOperator, sets.NewString(names...)) + if err != nil { + panic("Labels requirement must validate successfully") } - return sm.Has(pod.Name), nil -} - -func (sm setMatcher) MatchesSingle() (string, bool) { - if sm.Len() == 1 { - // Since pod name is its key, we can optimize this case. - return sm.List()[0], true + return &generic.SelectionPredicate{ + Label: labels.Everything().Add(*l), + Field: fields.Everything(), + GetAttrs: func(obj runtime.Object) (label labels.Set, field fields.Set, err error) { + pod := obj.(*api.Pod) + return labels.Set{"name": pod.ObjectMeta.Name}, nil, nil + }, } - return "", false } -func (sm setMatcher) MatcherIndex() []storage.MatchValue { - return nil -} - -// everythingMatcher matches everything -type everythingMatcher struct{} - -func (everythingMatcher) Matches(obj runtime.Object) (bool, error) { - return true, nil -} - -func (everythingMatcher) MatchesSingle() (string, bool) { - return "", false -} - -func (everythingMatcher) MatcherIndex() []storage.MatchValue { - return nil +func matchEverything() *generic.SelectionPredicate { + return &generic.SelectionPredicate{ + Label: labels.Everything(), + Field: fields.Everything(), + GetAttrs: func(obj runtime.Object) (label labels.Set, field fields.Set, err error) { + return nil, nil, nil + }, + } } func TestStoreList(t *testing.T) { @@ -139,34 +127,34 @@ func TestStoreList(t *testing.T) { table := map[string]struct { in *api.PodList - m generic.Matcher + m *generic.SelectionPredicate out runtime.Object context api.Context }{ "notFound": { in: nil, - m: everythingMatcher{}, + m: matchEverything(), out: &api.PodList{Items: []api.Pod{}}, }, "normal": { in: &api.PodList{Items: []api.Pod{*podA, *podB}}, - m: everythingMatcher{}, + m: matchEverything(), out: &api.PodList{Items: []api.Pod{*podA, *podB}}, }, "normalFiltered": { in: &api.PodList{Items: []api.Pod{*podA, *podB}}, - m: setMatcher{sets.NewString("foo")}, + m: matchPodName("foo"), out: &api.PodList{Items: []api.Pod{*podB}}, }, "normalFilteredNoNamespace": { in: &api.PodList{Items: []api.Pod{*podA, *podB}}, - m: setMatcher{sets.NewString("foo")}, + m: matchPodName("foo"), out: &api.PodList{Items: []api.Pod{*podB}}, context: noNamespaceContext, }, "normalFilteredMatchMultiple": { in: &api.PodList{Items: []api.Pod{*podA, *podB}}, - m: setMatcher{sets.NewString("foo", "makeMatchSingleReturnFalse")}, + m: matchPodName("foo", "makeMatchSingleReturnFalse"), out: &api.PodList{Items: []api.Pod{*podB}}, }, } @@ -930,7 +918,7 @@ func TestStoreDeleteCollectionWithWatch(t *testing.T) { } podCreated := objCreated.(*api.Pod) - watcher, err := registry.WatchPredicate(testContext, setMatcher{sets.NewString("foo")}, podCreated.ResourceVersion) + watcher, err := registry.WatchPredicate(testContext, matchPodName("foo"), podCreated.ResourceVersion) if err != nil { t.Fatalf("Unexpected error: %v", err) } @@ -960,18 +948,18 @@ func TestStoreWatch(t *testing.T) { noNamespaceContext := api.NewContext() table := map[string]struct { - generic.Matcher - context api.Context + selectPred *generic.SelectionPredicate + context api.Context }{ "single": { - Matcher: setMatcher{sets.NewString("foo")}, + selectPred: matchPodName("foo"), }, "multi": { - Matcher: setMatcher{sets.NewString("foo", "bar")}, + selectPred: matchPodName("foo", "bar"), }, "singleNoNamespace": { - Matcher: setMatcher{sets.NewString("foo")}, - context: noNamespaceContext, + selectPred: matchPodName("foo"), + context: noNamespaceContext, }, } @@ -989,7 +977,7 @@ func TestStoreWatch(t *testing.T) { } server, registry := NewTestGenericStoreRegistry(t) - wi, err := registry.WatchPredicate(ctx, m, "0") + wi, err := registry.WatchPredicate(ctx, m.selectPred, "0") if err != nil { t.Errorf("%v: unexpected error: %v", name, err) } else { @@ -1046,7 +1034,7 @@ func newTestGenericStoreRegistry(t *testing.T, hasCacheEnabled bool) (*etcdtesti return path.Join(podPrefix, id), nil }, ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*api.Pod).Name, nil }, - PredicateFunc: func(label labels.Selector, field fields.Selector) generic.Matcher { + PredicateFunc: func(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/horizontalpodautoscaler/strategy.go b/pkg/registry/horizontalpodautoscaler/strategy.go index b5889d27bb0..12c0ecf0081 100644 --- a/pkg/registry/horizontalpodautoscaler/strategy.go +++ b/pkg/registry/horizontalpodautoscaler/strategy.go @@ -88,7 +88,7 @@ func AutoscalerToSelectableFields(hpa *autoscaling.HorizontalPodAutoscaler) fiel return fields.Set{} } -func MatchAutoscaler(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchAutoscaler(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/ingress/strategy.go b/pkg/registry/ingress/strategy.go index a457844fb3e..5238ebe925f 100644 --- a/pkg/registry/ingress/strategy.go +++ b/pkg/registry/ingress/strategy.go @@ -105,7 +105,7 @@ func IngressToSelectableFields(ingress *extensions.Ingress) fields.Set { // MatchIngress is the filter used by the generic etcd backend to ingress // watch events from etcd to clients of the apiserver only interested in specific // labels/fields. -func MatchIngress(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchIngress(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/job/strategy.go b/pkg/registry/job/strategy.go index e943f639230..a9769637379 100644 --- a/pkg/registry/job/strategy.go +++ b/pkg/registry/job/strategy.go @@ -166,7 +166,7 @@ func JobToSelectableFields(job *batch.Job) fields.Set { // MatchJob is the filter used by the generic etcd backend to route // watch events from etcd to clients of the apiserver only interested in specific // labels/fields. -func MatchJob(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchJob(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/limitrange/strategy.go b/pkg/registry/limitrange/strategy.go index 4e36e4ae2d3..31af0fb2171 100644 --- a/pkg/registry/limitrange/strategy.go +++ b/pkg/registry/limitrange/strategy.go @@ -85,7 +85,7 @@ func (limitrangeStrategy) Export(api.Context, runtime.Object, bool) error { return nil } -func MatchLimitRange(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchLimitRange(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/namespace/strategy.go b/pkg/registry/namespace/strategy.go index 39b7aab1839..5ef0441c18e 100644 --- a/pkg/registry/namespace/strategy.go +++ b/pkg/registry/namespace/strategy.go @@ -135,7 +135,7 @@ func (namespaceFinalizeStrategy) PrepareForUpdate(ctx api.Context, obj, old runt } // MatchNamespace returns a generic matcher for a given label and field selector. -func MatchNamespace(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchNamespace(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/networkpolicy/strategy.go b/pkg/registry/networkpolicy/strategy.go index c44cf32b78a..9a2da57c676 100644 --- a/pkg/registry/networkpolicy/strategy.go +++ b/pkg/registry/networkpolicy/strategy.go @@ -97,7 +97,7 @@ func NetworkPolicyToSelectableFields(networkPolicy *extensions.NetworkPolicy) fi // MatchNetworkPolicy is the filter used by the generic etcd backend to watch events // from etcd to clients of the apiserver only interested in specific labels/fields. -func MatchNetworkPolicy(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchNetworkPolicy(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/node/strategy.go b/pkg/registry/node/strategy.go index c36b329ed43..532f5394c45 100644 --- a/pkg/registry/node/strategy.go +++ b/pkg/registry/node/strategy.go @@ -147,7 +147,7 @@ func NodeToSelectableFields(node *api.Node) fields.Set { } // MatchNode returns a generic matcher for a given label and field selector. -func MatchNode(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchNode(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/persistentvolume/strategy.go b/pkg/registry/persistentvolume/strategy.go index 5d988d45f7c..4b5e3118897 100644 --- a/pkg/registry/persistentvolume/strategy.go +++ b/pkg/registry/persistentvolume/strategy.go @@ -95,7 +95,7 @@ func (persistentvolumeStatusStrategy) ValidateUpdate(ctx api.Context, obj, old r } // MatchPersistentVolume returns a generic matcher for a given label and field selector. -func MatchPersistentVolumes(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchPersistentVolumes(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/persistentvolumeclaim/strategy.go b/pkg/registry/persistentvolumeclaim/strategy.go index c7e2b05480c..0b259f04cc0 100644 --- a/pkg/registry/persistentvolumeclaim/strategy.go +++ b/pkg/registry/persistentvolumeclaim/strategy.go @@ -95,7 +95,7 @@ func (persistentvolumeclaimStatusStrategy) ValidateUpdate(ctx api.Context, obj, } // MatchPersistentVolumeClaim returns a generic matcher for a given label and field selector. -func MatchPersistentVolumeClaim(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchPersistentVolumeClaim(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/petset/strategy.go b/pkg/registry/petset/strategy.go index 2365622e80d..2ff0ada8e76 100644 --- a/pkg/registry/petset/strategy.go +++ b/pkg/registry/petset/strategy.go @@ -103,7 +103,7 @@ func PetSetToSelectableFields(petSet *apps.PetSet) fields.Set { // MatchPetSet is the filter used by the generic etcd backend to watch events // from etcd to clients of the apiserver only interested in specific labels/fields. -func MatchPetSet(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchPetSet(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/pod/strategy.go b/pkg/registry/pod/strategy.go index b3a873c63f2..35199f0c44c 100644 --- a/pkg/registry/pod/strategy.go +++ b/pkg/registry/pod/strategy.go @@ -155,7 +155,7 @@ func (podStatusStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object } // MatchPod returns a generic matcher for a given label and field selector. -func MatchPod(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchPod(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/poddisruptionbudget/strategy.go b/pkg/registry/poddisruptionbudget/strategy.go index aea297dfccf..450fb302a8f 100644 --- a/pkg/registry/poddisruptionbudget/strategy.go +++ b/pkg/registry/poddisruptionbudget/strategy.go @@ -102,7 +102,7 @@ func PodDisruptionBudgetToSelectableFields(podDisruptionBudget *policy.PodDisrup // MatchPodDisruptionBudget is the filter used by the generic etcd backend to watch events // from etcd to clients of the apiserver only interested in specific labels/fields. -func MatchPodDisruptionBudget(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchPodDisruptionBudget(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/podsecuritypolicy/strategy.go b/pkg/registry/podsecuritypolicy/strategy.go index f3f54b86abf..4bc4bba8c23 100644 --- a/pkg/registry/podsecuritypolicy/strategy.go +++ b/pkg/registry/podsecuritypolicy/strategy.go @@ -74,7 +74,7 @@ func (strategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.E } // Matcher returns a generic matcher for a given label and field selector. -func MatchPodSecurityPolicy(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchPodSecurityPolicy(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/podtemplate/strategy.go b/pkg/registry/podtemplate/strategy.go index d0759b324e6..bfb7a0b86ee 100644 --- a/pkg/registry/podtemplate/strategy.go +++ b/pkg/registry/podtemplate/strategy.go @@ -86,7 +86,7 @@ func PodTemplateToSelectableFields(podTemplate *api.PodTemplate) fields.Set { return fields.Set{} } -func MatchPodTemplate(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchPodTemplate(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/replicaset/strategy.go b/pkg/registry/replicaset/strategy.go index 824b758f6d0..a8adc95cdfc 100644 --- a/pkg/registry/replicaset/strategy.go +++ b/pkg/registry/replicaset/strategy.go @@ -114,7 +114,7 @@ func ReplicaSetToSelectableFields(rs *extensions.ReplicaSet) fields.Set { // MatchReplicaSet is the filter used by the generic etcd backend to route // watch events from etcd to clients of the apiserver only interested in specific // labels/fields. -func MatchReplicaSet(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchReplicaSet(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/resourcequota/strategy.go b/pkg/registry/resourcequota/strategy.go index f8f7f0d4bf4..1e6051f875f 100644 --- a/pkg/registry/resourcequota/strategy.go +++ b/pkg/registry/resourcequota/strategy.go @@ -98,7 +98,7 @@ func (resourcequotaStatusStrategy) ValidateUpdate(ctx api.Context, obj, old runt } // MatchResourceQuota returns a generic matcher for a given label and field selector. -func MatchResourceQuota(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchResourceQuota(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/role/strategy.go b/pkg/registry/role/strategy.go index b5a20e214e6..fc38ba956b0 100644 --- a/pkg/registry/role/strategy.go +++ b/pkg/registry/role/strategy.go @@ -102,7 +102,7 @@ func (s strategy) Export(ctx api.Context, obj runtime.Object, exact bool) error } // Matcher returns a generic matcher for a given label and field selector. -func Matcher(label labels.Selector, field fields.Selector) generic.Matcher { +func Matcher(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/rolebinding/strategy.go b/pkg/registry/rolebinding/strategy.go index ac0c2d6860e..319f4f50ff9 100644 --- a/pkg/registry/rolebinding/strategy.go +++ b/pkg/registry/rolebinding/strategy.go @@ -102,7 +102,7 @@ func (s strategy) Export(ctx api.Context, obj runtime.Object, exact bool) error } // Matcher returns a generic matcher for a given label and field selector. -func Matcher(label labels.Selector, field fields.Selector) generic.Matcher { +func Matcher(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/scheduledjob/strategy.go b/pkg/registry/scheduledjob/strategy.go index 6cd77559ef3..d8db976f827 100644 --- a/pkg/registry/scheduledjob/strategy.go +++ b/pkg/registry/scheduledjob/strategy.go @@ -104,7 +104,7 @@ func ScheduledJobToSelectableFields(scheduledJob *batch.ScheduledJob) fields.Set // MatchScheduledJob is the filter used by the generic etcd backend to route // watch events from etcd to clients of the apiserver only interested in specific // labels/fields. -func MatchScheduledJob(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchScheduledJob(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/secret/strategy.go b/pkg/registry/secret/strategy.go index d33aad3f444..8663f5109eb 100644 --- a/pkg/registry/secret/strategy.go +++ b/pkg/registry/secret/strategy.go @@ -94,7 +94,7 @@ func (s strategy) Export(ctx api.Context, obj runtime.Object, exact bool) error } // Matcher returns a generic matcher for a given label and field selector. -func Matcher(label labels.Selector, field fields.Selector) generic.Matcher { +func Matcher(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/service/strategy.go b/pkg/registry/service/strategy.go index ea1799da010..8fe1e3da02d 100644 --- a/pkg/registry/service/strategy.go +++ b/pkg/registry/service/strategy.go @@ -100,7 +100,7 @@ func (svcStrategy) Export(ctx api.Context, obj runtime.Object, exact bool) error return nil } -func MatchServices(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchServices(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/serviceaccount/strategy.go b/pkg/registry/serviceaccount/strategy.go index 70452b2b306..dc10c80e844 100644 --- a/pkg/registry/serviceaccount/strategy.go +++ b/pkg/registry/serviceaccount/strategy.go @@ -77,7 +77,7 @@ func (strategy) AllowUnconditionalUpdate() bool { } // Matcher returns a generic matcher for a given label and field selector. -func Matcher(label labels.Selector, field fields.Selector) generic.Matcher { +func Matcher(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/storageclass/strategy.go b/pkg/registry/storageclass/strategy.go index 21c1b156ce7..6ee3ef8b827 100644 --- a/pkg/registry/storageclass/strategy.go +++ b/pkg/registry/storageclass/strategy.go @@ -77,7 +77,7 @@ func (storageClassStrategy) AllowUnconditionalUpdate() bool { } // MatchStorageClass returns a generic matcher for a given label and field selector. -func MatchStorageClasses(label labels.Selector, field fields.Selector) generic.Matcher { +func MatchStorageClasses(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/thirdpartyresource/strategy.go b/pkg/registry/thirdpartyresource/strategy.go index 4a09d9288f6..daf1b70f048 100644 --- a/pkg/registry/thirdpartyresource/strategy.go +++ b/pkg/registry/thirdpartyresource/strategy.go @@ -78,7 +78,7 @@ func (strategy) AllowUnconditionalUpdate() bool { } // Matcher returns a generic matcher for a given label and field selector. -func Matcher(label labels.Selector, field fields.Selector) generic.Matcher { +func Matcher(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field, diff --git a/pkg/registry/thirdpartyresourcedata/strategy.go b/pkg/registry/thirdpartyresourcedata/strategy.go index 0bcfbb4a028..12897519c59 100644 --- a/pkg/registry/thirdpartyresourcedata/strategy.go +++ b/pkg/registry/thirdpartyresourcedata/strategy.go @@ -75,7 +75,7 @@ func (strategy) AllowUnconditionalUpdate() bool { } // Matcher returns a generic matcher for a given label and field selector. -func Matcher(label labels.Selector, field fields.Selector) generic.Matcher { +func Matcher(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { return &generic.SelectionPredicate{ Label: label, Field: field,