mirror of
https://github.com/kubernetes-sigs/node-feature-discovery.git
synced 2024-12-14 11:57:51 +00:00
nfd-master: check that namespace informer cache sync succeeded
Signed-off-by: Oleg Zhurakivskyy <oleg.zhurakivskyy@intel.com>
This commit is contained in:
parent
0beafc6aa7
commit
f13ccb1fb5
3 changed files with 22 additions and 5 deletions
|
@ -16,6 +16,7 @@ limitations under the License.
|
|||
package nfdmaster
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
|
@ -23,6 +24,7 @@ import (
|
|||
"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.
|
||||
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -104,7 +104,9 @@ func TestIsNamespaceSelected(t *testing.T) {
|
|||
|
||||
for _, tc := range testcases {
|
||||
labelMap, _ := metav1.LabelSelectorAsSelector(tc.nodeFeatureNamespaceSelector)
|
||||
c.namespaceLister = newNamespaceLister(fakeCli, labelMap)
|
||||
lister, err := newNamespaceLister(fakeCli, labelMap)
|
||||
assert.Nil(t, err)
|
||||
c.namespaceLister = lister
|
||||
res := c.isNamespaceSelected(tc.objectNamespace)
|
||||
assert.Equal(t, res, tc.expectedResult)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue