Skip to content

Commit 1416072

Browse files
authored
Merge pull request #1965 from ozhuraki/namespace-lister-check
nfd-master: check that namespace informer cache sync succeeded
2 parents 4094da3 + f13ccb1 commit 1416072

File tree

3 files changed

+22
-5
lines changed

3 files changed

+22
-5
lines changed

pkg/nfd-master/namespace-lister.go

+13-3
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@ limitations under the License.
1616
package nfdmaster
1717

1818
import (
19+
"fmt"
1920
"time"
2021

2122
corev1 "k8s.io/api/core/v1"
2223
"k8s.io/apimachinery/pkg/labels"
2324
"k8s.io/client-go/informers"
2425
k8sclient "k8s.io/client-go/kubernetes"
2526
v1lister "k8s.io/client-go/listers/core/v1"
27+
"k8s.io/klog/v2"
2628
)
2729

2830
// NamespaceLister lists kubernetes namespaces.
@@ -32,19 +34,27 @@ type NamespaceLister struct {
3234
stopChan chan struct{}
3335
}
3436

35-
func newNamespaceLister(k8sClient k8sclient.Interface, labelsSelector labels.Selector) *NamespaceLister {
37+
func newNamespaceLister(k8sClient k8sclient.Interface, labelsSelector labels.Selector) (*NamespaceLister, error) {
3638
factory := informers.NewSharedInformerFactory(k8sClient, time.Hour)
3739
namespaceLister := factory.Core().V1().Namespaces().Lister()
3840

3941
stopChan := make(chan struct{})
4042
factory.Start(stopChan) // runs in background
41-
factory.WaitForCacheSync(stopChan)
43+
44+
start := time.Now()
45+
ret := factory.WaitForCacheSync(stopChan)
46+
for res, ok := range ret {
47+
if !ok {
48+
return &NamespaceLister{}, fmt.Errorf("namespace informer cache failed to sync (%s)", res)
49+
}
50+
}
51+
klog.InfoS("namespace informer cache synced", "duration", time.Since(start))
4252

4353
return &NamespaceLister{
4454
namespaceLister: namespaceLister,
4555
labelsSelector: labelsSelector,
4656
stopChan: stopChan,
47-
}
57+
}, nil
4858
}
4959

5060
// list returns all kubernetes namespaces.

pkg/nfd-master/nfd-api-controller.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,12 @@ func newNfdController(config *restclient.Config, nfdApiControllerOptions nfdApiC
7878
klog.ErrorS(err, "failed to convert label selector to map", "selector", nfdApiControllerOptions.NodeFeatureNamespaceSelector)
7979
return nil, err
8080
}
81-
c.namespaceLister = newNamespaceLister(nfdApiControllerOptions.K8sClient, labelMap)
81+
c.namespaceLister, err = newNamespaceLister(nfdApiControllerOptions.K8sClient, labelMap)
82+
if err != nil {
83+
klog.ErrorS(err, "coudn't create namespace lister")
84+
return nil, err
85+
}
86+
8287
}
8388

8489
nfdClient := nfdclientset.NewForConfigOrDie(config)

pkg/nfd-master/nfd-api-controller_test.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,9 @@ func TestIsNamespaceSelected(t *testing.T) {
104104

105105
for _, tc := range testcases {
106106
labelMap, _ := metav1.LabelSelectorAsSelector(tc.nodeFeatureNamespaceSelector)
107-
c.namespaceLister = newNamespaceLister(fakeCli, labelMap)
107+
lister, err := newNamespaceLister(fakeCli, labelMap)
108+
assert.Nil(t, err)
109+
c.namespaceLister = lister
108110
res := c.isNamespaceSelected(tc.objectNamespace)
109111
assert.Equal(t, res, tc.expectedResult)
110112
}

0 commit comments

Comments
 (0)