Skip to content

Commit

Permalink
nfd-master: check that namespace informer cache sync succeeded
Browse files Browse the repository at this point in the history
Signed-off-by: Oleg Zhurakivskyy <oleg.zhurakivskyy@intel.com>
  • Loading branch information
ozhuraki committed Nov 29, 2024
1 parent 620e16e commit 6e62f62
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 5 deletions.
16 changes: 13 additions & 3 deletions pkg/nfd-master/namespace-lister.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,15 @@ limitations under the License.
package nfdmaster

import (
"fmt"
"time"

corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/client-go/informers"
k8sclient "k8s.io/client-go/kubernetes"
v1lister "k8s.io/client-go/listers/core/v1"
"k8s.io/klog/v2"
)

// NamespaceLister lists kubernetes namespaces.
Expand All @@ -32,19 +34,27 @@ type NamespaceLister struct {
stopChan chan struct{}
}

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

stopChan := make(chan struct{})
factory.Start(stopChan) // runs in background
factory.WaitForCacheSync(stopChan)

start := time.Now()
ret := factory.WaitForCacheSync(stopChan)
for res, ok := range ret {
if !ok {
return &NamespaceLister{}, fmt.Errorf("namespace informer cache failed to sync (%s)", res)
}
}
klog.InfoS("namespace informer cache synced", "duration", time.Since(start))

return &NamespaceLister{
namespaceLister: namespaceLister,
labelsSelector: labelsSelector,
stopChan: stopChan,
}
}, nil
}

// list returns all kubernetes namespaces.
Expand Down
7 changes: 6 additions & 1 deletion pkg/nfd-master/nfd-api-controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,12 @@ func newNfdController(config *restclient.Config, nfdApiControllerOptions nfdApiC
klog.ErrorS(err, "failed to convert label selector to map", "selector", nfdApiControllerOptions.NodeFeatureNamespaceSelector)
return nil, err
}
c.namespaceLister = newNamespaceLister(nfdApiControllerOptions.K8sClient, labelMap)
c.namespaceLister, err = newNamespaceLister(nfdApiControllerOptions.K8sClient, labelMap)
if err != nil {
klog.ErrorS(err, "coudn't create namespace lister")
return nil, err
}

}

nfdClient := nfdclientset.NewForConfigOrDie(config)
Expand Down
2 changes: 1 addition & 1 deletion pkg/nfd-master/nfd-api-controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ func TestIsNamespaceSelected(t *testing.T) {

for _, tc := range testcases {
labelMap, _ := metav1.LabelSelectorAsSelector(tc.nodeFeatureNamespaceSelector)
c.namespaceLister = newNamespaceLister(fakeCli, labelMap)
c.namespaceLister, _ = newNamespaceLister(fakeCli, labelMap)
res := c.isNamespaceSelected(tc.objectNamespace)
assert.Equal(t, res, tc.expectedResult)
}
Expand Down

0 comments on commit 6e62f62

Please sign in to comment.