mirror of
https://github.com/kubernetes/client-go.git
synced 2025-09-02 07:35:21 +00:00
Enable propagration of HasSynced
* Add tracker types and tests * Modify ResourceEventHandler interface's OnAdd member * Add additional ResourceEventHandlerDetailedFuncs struct * Fix SharedInformer to let users track HasSynced for their handlers * Fix in-tree controllers which weren't computing HasSynced correctly * Deprecate the cache.Pop function Kubernetes-commit: 8100efc7b3122ad119ee8fa4bbbedef3b90f2e0d
This commit is contained in:
committed by
Kubernetes Publisher
parent
e7e7d01afd
commit
5d70a118df
27
tools/cache/shared_informer_test.go
vendored
27
tools/cache/shared_informer_test.go
vendored
@@ -52,7 +52,7 @@ func newTestListener(name string, resyncPeriod time.Duration, expected ...string
|
||||
return l
|
||||
}
|
||||
|
||||
func (l *testListener) OnAdd(obj interface{}) {
|
||||
func (l *testListener) OnAdd(obj interface{}, isInInitialList bool) {
|
||||
l.handle(obj)
|
||||
}
|
||||
|
||||
@@ -68,7 +68,6 @@ func (l *testListener) handle(obj interface{}) {
|
||||
fmt.Printf("%s: handle: %v\n", l.name, key)
|
||||
l.lock.Lock()
|
||||
defer l.lock.Unlock()
|
||||
|
||||
objectMeta, _ := meta.Accessor(obj)
|
||||
l.receivedItemNames = append(l.receivedItemNames, objectMeta.GetName())
|
||||
}
|
||||
@@ -649,8 +648,8 @@ func TestSharedInformerHandlerAbuse(t *testing.T) {
|
||||
worker := func() {
|
||||
// Keep adding and removing handler
|
||||
// Make sure no duplicate events?
|
||||
funcs := ResourceEventHandlerFuncs{
|
||||
AddFunc: func(obj interface{}) {},
|
||||
funcs := ResourceEventHandlerDetailedFuncs{
|
||||
AddFunc: func(obj interface{}, isInInitialList bool) {},
|
||||
UpdateFunc: func(oldObj, newObj interface{}) {},
|
||||
DeleteFunc: func(obj interface{}) {},
|
||||
}
|
||||
@@ -902,9 +901,13 @@ func TestAddWhileActive(t *testing.T) {
|
||||
// create the shared informer and resync every 12 hours
|
||||
informer := NewSharedInformer(source, &v1.Pod{}, 0).(*sharedIndexInformer)
|
||||
listener1 := newTestListener("originalListener", 0, "pod1")
|
||||
listener2 := newTestListener("originalListener", 0, "pod1", "pod2")
|
||||
listener2 := newTestListener("listener2", 0, "pod1", "pod2")
|
||||
handle1, _ := informer.AddEventHandler(listener1)
|
||||
|
||||
if handle1.HasSynced() {
|
||||
t.Error("Synced before Run??")
|
||||
}
|
||||
|
||||
stop := make(chan struct{})
|
||||
defer close(stop)
|
||||
|
||||
@@ -916,7 +919,17 @@ func TestAddWhileActive(t *testing.T) {
|
||||
return
|
||||
}
|
||||
|
||||
if !handle1.HasSynced() {
|
||||
t.Error("Not synced after Run??")
|
||||
}
|
||||
|
||||
listener2.lock.Lock() // ensure we observe it before it has synced
|
||||
handle2, _ := informer.AddEventHandler(listener2)
|
||||
if handle2.HasSynced() {
|
||||
t.Error("Synced before processing anything?")
|
||||
}
|
||||
listener2.lock.Unlock() // permit it to proceed and sync
|
||||
|
||||
source.Add(&v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "pod2"}})
|
||||
|
||||
if !listener2.ok() {
|
||||
@@ -924,6 +937,10 @@ func TestAddWhileActive(t *testing.T) {
|
||||
return
|
||||
}
|
||||
|
||||
if !handle2.HasSynced() {
|
||||
t.Error("Not synced even after processing?")
|
||||
}
|
||||
|
||||
if !isRegistered(informer, handle1) {
|
||||
t.Errorf("handle1 is not active")
|
||||
return
|
||||
|
Reference in New Issue
Block a user