Skip to content

Commit d523f8e

Browse files
Move merging fieldselectors into app/server.go and replace namespaceFitler with fieldSelectorFilter
1 parent 87a7793 commit d523f8e

File tree

6 files changed

+53
-46
lines changed

6 files changed

+53
-46
lines changed

internal/store/builder.go

Lines changed: 29 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,7 @@ type Builder struct {
6262
customResourceClients map[string]interface{}
6363
vpaClient vpaclientset.Interface
6464
namespaces options.NamespaceList
65-
namespaceFilter string
66-
nodeNameFilter string
65+
fieldSelectorFilter string
6766
ctx context.Context
6867
enabledResources []string
6968
familyGeneratorFilter generator.FamilyGeneratorFilter
@@ -107,20 +106,27 @@ func (b *Builder) WithEnabledResources(r []string) error {
107106
return nil
108107
}
109108

110-
// WithNamespaces sets the namespaces property of a Builder.
111-
func (b *Builder) WithNamespaces(n options.NamespaceList, nsFilter string) {
112-
b.namespaces = n
113-
b.namespaceFilter = nsFilter
109+
// WithFieldSelectorFilter sets the fieldSelector property of a Builder.
110+
func (b *Builder) WithFieldSelectorFilter(fieldSelectorFilter string) {
111+
b.fieldSelectorFilter = fieldSelectorFilter
114112
}
115113

116-
// WithNodeName sets the nodename property of a Builder.
117-
func (b *Builder) WithNodeName(nodeNameFilter string) {
118-
b.nodeNameFilter = nodeNameFilter
114+
// WithNamespaces sets the namespaces property of a Builder.
115+
func (b *Builder) WithNamespaces(n options.NamespaceList) {
116+
b.namespaces = n
119117
}
120118

121-
// MergeFieldSelector merges two fieldSelectors using AND operator.
122-
func (b *Builder) MergeFieldSelector(s1 string, s2 string) (string, error) {
123-
return options.MergeFieldSelector(s1, s2)
119+
// MergeFieldSelector merges multiple fieldSelectors using AND operator.
120+
func (b *Builder) MergeFieldSelector(selectors []string) (string, error) {
121+
var err error
122+
merged := options.EmptyFieldSelector()
123+
for _, s := range selectors {
124+
merged, err = options.MergeFieldSelector(merged, s)
125+
if err != nil {
126+
return "", err
127+
}
128+
}
129+
return merged, nil
124130
}
125131

126132
// WithSharding sets the shard and totalShards property of a Builder.
@@ -478,12 +484,10 @@ func (b *Builder) buildStores(
478484
familyHeaders,
479485
composedMetricGenFuncs,
480486
)
481-
merged, err := b.MergeFieldSelector(b.namespaceFilter, b.nodeNameFilter)
482-
if err != nil {
483-
panic(fmt.Sprintf("Failed to merge fieldSelector %s and %s", b.namespaceFilter, b.nodeNameFilter))
487+
if b.fieldSelectorFilter != "" {
488+
klog.Infof("FieldSelector is used ", b.fieldSelectorFilter)
484489
}
485-
klog.Infof("FieldSelector is used ", merged)
486-
listWatcher := listWatchFunc(b.kubeClient, v1.NamespaceAll, merged)
490+
listWatcher := listWatchFunc(b.kubeClient, v1.NamespaceAll, b.fieldSelectorFilter)
487491
b.startReflector(expectedType, store, listWatcher, useAPIServerCache)
488492
return []cache.Store{store}
489493
}
@@ -494,12 +498,10 @@ func (b *Builder) buildStores(
494498
familyHeaders,
495499
composedMetricGenFuncs,
496500
)
497-
merged, err := b.MergeFieldSelector(b.namespaceFilter, b.nodeNameFilter)
498-
if err != nil {
499-
panic(fmt.Sprintf("Failed to merge fieldSelector %s and %s", b.namespaceFilter, b.nodeNameFilter))
501+
if b.fieldSelectorFilter != "" {
502+
klog.Infof("FieldSelector is used ", b.fieldSelectorFilter)
500503
}
501-
klog.Infof("FieldSelector is used ", merged)
502-
listWatcher := listWatchFunc(b.kubeClient, ns, merged)
504+
listWatcher := listWatchFunc(b.kubeClient, ns, b.fieldSelectorFilter)
503505
b.startReflector(expectedType, store, listWatcher, useAPIServerCache)
504506
stores = append(stores, store)
505507
}
@@ -529,12 +531,10 @@ func (b *Builder) buildCustomResourceStores(resourceName string,
529531
familyHeaders,
530532
composedMetricGenFuncs,
531533
)
532-
merged, err := b.MergeFieldSelector(b.namespaceFilter, b.nodeNameFilter)
533-
if err != nil {
534-
panic(fmt.Sprintf("Failed to merge fieldSelector %s and %s", b.namespaceFilter, b.nodeNameFilter))
534+
if b.fieldSelectorFilter != "" {
535+
klog.Infof("FieldSelector is used ", b.fieldSelectorFilter)
535536
}
536-
klog.Infof("FieldSelector is used ", merged)
537-
listWatcher := listWatchFunc(customResourceClient, v1.NamespaceAll, merged)
537+
listWatcher := listWatchFunc(customResourceClient, v1.NamespaceAll, b.fieldSelectorFilter)
538538
b.startReflector(expectedType, store, listWatcher, useAPIServerCache)
539539
return []cache.Store{store}
540540
}
@@ -545,12 +545,8 @@ func (b *Builder) buildCustomResourceStores(resourceName string,
545545
familyHeaders,
546546
composedMetricGenFuncs,
547547
)
548-
merged, err := b.MergeFieldSelector(b.namespaceFilter, b.nodeNameFilter)
549-
if err != nil {
550-
panic(fmt.Sprintf("Failed to merge fieldSelector %s and %s", b.namespaceFilter, b.nodeNameFilter))
551-
}
552-
klog.Infof("FieldSelector is used ", merged)
553-
listWatcher := listWatchFunc(customResourceClient, ns, merged)
548+
klog.Infof("FieldSelector is used ", b.fieldSelectorFilter)
549+
listWatcher := listWatchFunc(customResourceClient, ns, b.fieldSelectorFilter)
554550
b.startReflector(expectedType, store, listWatcher, useAPIServerCache)
555551
stores = append(stores, store)
556552
}

pkg/app/server.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,13 @@ func RunKubeStateMetrics(ctx context.Context, opts *options.Options, factories .
106106

107107
namespaces := opts.Namespaces.GetNamespaces()
108108
nsFieldSelector := namespaces.GetExcludeNSFieldSelector(opts.NamespacesDenylist)
109-
storeBuilder.WithNamespaces(namespaces, nsFieldSelector)
110-
storeBuilder.WithNodeName(opts.NodeName.GetNodeNameFieldSelector())
109+
nodeNameFieldSelector := opts.NodeName.GetNodeNameFieldSelector()
110+
merged, err := storeBuilder.MergeFieldSelector([]string{nsFieldSelector, nodeNameFieldSelector})
111+
if err != nil {
112+
return err
113+
}
114+
storeBuilder.WithNamespaces(namespaces)
115+
storeBuilder.WithFieldSelectorFilter(merged)
111116

112117
allowDenyList, err := allowdenylist.New(opts.MetricAllowlist, opts.MetricDenylist)
113118
if err != nil {

pkg/app/server_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ func BenchmarkKubeStateMetrics(b *testing.B) {
8080
builder.WithKubeClient(kubeClient)
8181
builder.WithSharding(0, 1)
8282
builder.WithContext(ctx)
83-
builder.WithNamespaces(options.DefaultNamespaces, "")
83+
builder.WithNamespaces(options.DefaultNamespaces)
8484
builder.WithGenerateStoresFunc(builder.DefaultGenerateStoresFunc())
8585

8686
allowDenyListFilter, err := allowdenylist.New(map[string]struct{}{}, map[string]struct{}{})
@@ -155,7 +155,7 @@ func TestFullScrapeCycle(t *testing.T) {
155155
t.Fatal(err)
156156
}
157157
builder.WithKubeClient(kubeClient)
158-
builder.WithNamespaces(options.DefaultNamespaces, "")
158+
builder.WithNamespaces(options.DefaultNamespaces)
159159
builder.WithGenerateStoresFunc(builder.DefaultGenerateStoresFunc())
160160

161161
l, err := allowdenylist.New(map[string]struct{}{}, map[string]struct{}{})
@@ -442,7 +442,7 @@ func TestShardingEquivalenceScrapeCycle(t *testing.T) {
442442
t.Fatal(err)
443443
}
444444
unshardedBuilder.WithKubeClient(kubeClient)
445-
unshardedBuilder.WithNamespaces(options.DefaultNamespaces, "")
445+
unshardedBuilder.WithNamespaces(options.DefaultNamespaces)
446446
unshardedBuilder.WithFamilyGeneratorFilter(l)
447447
unshardedBuilder.WithAllowLabels(map[string][]string{})
448448
unshardedBuilder.WithGenerateStoresFunc(unshardedBuilder.DefaultGenerateStoresFunc())
@@ -458,7 +458,7 @@ func TestShardingEquivalenceScrapeCycle(t *testing.T) {
458458
t.Fatal(err)
459459
}
460460
shardedBuilder1.WithKubeClient(kubeClient)
461-
shardedBuilder1.WithNamespaces(options.DefaultNamespaces, "")
461+
shardedBuilder1.WithNamespaces(options.DefaultNamespaces)
462462
shardedBuilder1.WithFamilyGeneratorFilter(l)
463463
shardedBuilder1.WithAllowLabels(map[string][]string{})
464464
shardedBuilder1.WithGenerateStoresFunc(shardedBuilder1.DefaultGenerateStoresFunc())
@@ -474,7 +474,7 @@ func TestShardingEquivalenceScrapeCycle(t *testing.T) {
474474
t.Fatal(err)
475475
}
476476
shardedBuilder2.WithKubeClient(kubeClient)
477-
shardedBuilder2.WithNamespaces(options.DefaultNamespaces, "")
477+
shardedBuilder2.WithNamespaces(options.DefaultNamespaces)
478478
shardedBuilder2.WithFamilyGeneratorFilter(l)
479479
shardedBuilder2.WithAllowLabels(map[string][]string{})
480480
shardedBuilder2.WithGenerateStoresFunc(shardedBuilder2.DefaultGenerateStoresFunc())
@@ -616,7 +616,7 @@ func TestCustomResourceExtension(t *testing.T) {
616616

617617
builder.WithKubeClient(kubeClient)
618618
builder.WithCustomResourceClients(customResourceClients)
619-
builder.WithNamespaces(options.DefaultNamespaces, "")
619+
builder.WithNamespaces(options.DefaultNamespaces)
620620
builder.WithGenerateStoresFunc(builder.DefaultGenerateStoresFunc())
621621
builder.WithGenerateCustomResourceStoresFunc(builder.DefaultGenerateCustomResourceStoresFunc())
622622

pkg/builder/builder.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ func (b *Builder) WithEnabledResources(c []string) error {
5858
}
5959

6060
// WithNamespaces sets the namespaces property of a Builder.
61-
func (b *Builder) WithNamespaces(n options.NamespaceList, nsFilter string) {
62-
b.internal.WithNamespaces(n, nsFilter)
61+
func (b *Builder) WithNamespaces(n options.NamespaceList) {
62+
b.internal.WithNamespaces(n)
6363
}
6464

6565
// WithSharding sets the shard and totalShards property of a Builder.

pkg/builder/types/interfaces.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ import (
3535
type BuilderInterface interface {
3636
WithMetrics(r prometheus.Registerer)
3737
WithEnabledResources(c []string) error
38-
WithNamespaces(n options.NamespaceList, nsFilter string)
38+
WithNamespaces(n options.NamespaceList)
39+
WithFieldSelectorFilter(fieldSelectors string)
3940
WithSharding(shard int32, totalShards int)
4041
WithContext(ctx context.Context)
4142
WithKubeClient(c clientset.Interface)

pkg/options/types.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,15 +115,20 @@ func (n *NodeNameType) GetNodeNameFieldSelector() string {
115115
return fields.Nothing().String()
116116
}
117117

118+
// EmptyFieldSelector returns an empty field selector.
119+
func EmptyFieldSelector() string {
120+
return fields.Nothing().String()
121+
}
122+
118123
// MergeFieldSelector returns AND of two field selectors.
119124
func MergeFieldSelector(s1 string, s2 string) (string, error) {
120125
selector1, err := fields.ParseSelector(s1)
121126
if err != nil {
122-
return fields.Nothing().String(), err
127+
return EmptyFieldSelector(), err
123128
}
124129
selector2, err := fields.ParseSelector(s2)
125130
if err != nil {
126-
return fields.Nothing().String(), err
131+
return EmptyFieldSelector(), err
127132
}
128133
if selector1.Empty() {
129134
return selector2.String(), nil

0 commit comments

Comments
 (0)