diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index fa32532b..6e39f08f 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -284,331 +284,331 @@ }, { "ImportPath": "k8s.io/api/admissionregistration/v1alpha1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/admissionregistration/v1beta1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/apps/v1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/apps/v1beta1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/apps/v1beta2", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/authentication/v1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/authentication/v1beta1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/authorization/v1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/authorization/v1beta1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/autoscaling/v1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/autoscaling/v2beta1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/batch/v1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/batch/v1beta1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/batch/v2alpha1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/certificates/v1beta1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/core/v1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/events/v1beta1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/extensions/v1beta1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/imagepolicy/v1alpha1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/networking/v1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/policy/v1beta1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/rbac/v1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/rbac/v1alpha1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/rbac/v1beta1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/scheduling/v1alpha1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/settings/v1alpha1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/storage/v1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/storage/v1alpha1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/api/storage/v1beta1", - "Rev": "2694da5be9c4ab4f3fd826112d4c3f71b8bf4b23" + "Rev": "0d0b2f481328d8bae556061a08a02175054059f4" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/equality", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/errors", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/meta", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/resource", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/testing", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/testing/fuzzer", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/testing/roundtrip", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/apimachinery", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/announced", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/registered", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/fuzzer", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1beta1", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/conversion", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/fields", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/labels", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/schema", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/selection", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/types", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/cache", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/clock", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/diff", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/errors", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/framer", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream/spdy", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/intstr", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/json", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/net", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/remotecommand", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/runtime", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/sets", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/validation", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/validation/field", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/wait", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/yaml", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/version", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/pkg/watch", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/netutil", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect", - "Rev": "616b23029fa3dc3e0ccefd47963f5651a6543d94" + "Rev": "da3b134bab57ebf23dedfec7e0004614dd4b5a24" }, { "ImportPath": "k8s.io/kube-openapi/pkg/util/proto", diff --git a/tools/cache/shared_informer.go b/tools/cache/shared_informer.go index f6ce07f7..8a669494 100644 --- a/tools/cache/shared_informer.go +++ b/tools/cache/shared_informer.go @@ -335,7 +335,7 @@ func (s *sharedIndexInformer) AddEventHandlerWithResyncPeriod(handler ResourceEv s.blockDeltas.Lock() defer s.blockDeltas.Unlock() - s.processor.addAndStartListener(listener) + s.processor.addListener(listener) for _, item := range s.indexer.List() { listener.add(addNotification{newObj: item}) } @@ -373,6 +373,7 @@ func (s *sharedIndexInformer) HandleDeltas(obj interface{}) error { } type sharedProcessor struct { + listenersStarted bool listenersLock sync.RWMutex listeners []*processorListener syncingListeners []*processorListener @@ -380,20 +381,15 @@ type sharedProcessor struct { wg wait.Group } -func (p *sharedProcessor) addAndStartListener(listener *processorListener) { - p.listenersLock.Lock() - defer p.listenersLock.Unlock() - - p.addListenerLocked(listener) - p.wg.Start(listener.run) - p.wg.Start(listener.pop) -} - func (p *sharedProcessor) addListener(listener *processorListener) { p.listenersLock.Lock() defer p.listenersLock.Unlock() p.addListenerLocked(listener) + if p.listenersStarted { + p.wg.Start(listener.run) + p.wg.Start(listener.pop) + } } func (p *sharedProcessor) addListenerLocked(listener *processorListener) { @@ -424,6 +420,7 @@ func (p *sharedProcessor) run(stopCh <-chan struct{}) { p.wg.Start(listener.run) p.wg.Start(listener.pop) } + p.listenersStarted = true }() <-stopCh p.listenersLock.RLock() diff --git a/tools/cache/shared_informer_test.go b/tools/cache/shared_informer_test.go index 6f49d167..22e4a90d 100644 --- a/tools/cache/shared_informer_test.go +++ b/tools/cache/shared_informer_test.go @@ -251,3 +251,15 @@ func TestResyncCheckPeriod(t *testing.T) { t.Errorf("expected %d, got %d", e, a) } } + +// verify that https://github.com/kubernetes/kubernetes/issues/59822 is fixed +func TestSharedInformerInitializationRace(t *testing.T) { + source := fcache.NewFakeControllerSource() + informer := NewSharedInformer(source, &v1.Pod{}, 1*time.Second).(*sharedIndexInformer) + listener := newTestListener("raceListener", 0) + + stop := make(chan struct{}) + go informer.AddEventHandlerWithResyncPeriod(listener, listener.resyncPeriod) + go informer.Run(stop) + close(stop) +}