From 529e627c8a4338d48cd2bf658303bac6fef6aaaa Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Fri, 19 May 2017 11:15:32 -0400 Subject: [PATCH 01/10] Move pkg/util/cache to apimachinery Will be used by client-go as well --- .../k8s.io/apimachinery/pkg/util/cache/BUILD | 33 +++++++++++++++++++ .../pkg/util/cache/cache.go | 0 .../pkg/util/cache/cache_test.go | 0 .../pkg/util/cache/lruexpirecache.go | 0 .../pkg/util/cache/lruexpirecache_test.go | 0 .../k8s.io/apiserver/pkg/storage/etcd/BUILD | 2 +- .../apiserver/pkg/storage/etcd/etcd_helper.go | 2 +- .../pkg/authenticator/token/webhook/BUILD | 2 +- .../authenticator/token/webhook/webhook.go | 2 +- .../plugin/pkg/authorizer/webhook/BUILD | 2 +- .../plugin/pkg/authorizer/webhook/webhook.go | 2 +- 11 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 staging/src/k8s.io/apimachinery/pkg/util/cache/BUILD rename staging/src/k8s.io/{apiserver => apimachinery}/pkg/util/cache/cache.go (100%) rename staging/src/k8s.io/{apiserver => apimachinery}/pkg/util/cache/cache_test.go (100%) rename staging/src/k8s.io/{apiserver => apimachinery}/pkg/util/cache/lruexpirecache.go (100%) rename staging/src/k8s.io/{apiserver => apimachinery}/pkg/util/cache/lruexpirecache_test.go (100%) diff --git a/staging/src/k8s.io/apimachinery/pkg/util/cache/BUILD b/staging/src/k8s.io/apimachinery/pkg/util/cache/BUILD new file mode 100644 index 00000000000..16908b0a747 --- /dev/null +++ b/staging/src/k8s.io/apimachinery/pkg/util/cache/BUILD @@ -0,0 +1,33 @@ +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +load( + "@io_bazel_rules_go//go:def.bzl", + "go_library", + "go_test", +) + +go_test( + name = "go_default_test", + srcs = [ + "cache_test.go", + "lruexpirecache_test.go", + ], + library = ":go_default_library", + tags = ["automanaged"], + deps = [ + "//vendor/github.com/golang/groupcache/lru:go_default_library", + "//vendor/k8s.io/client-go/util/clock:go_default_library", + ], +) + +go_library( + name = "go_default_library", + srcs = [ + "cache.go", + "lruexpirecache.go", + ], + tags = ["automanaged"], + deps = ["//vendor/github.com/golang/groupcache/lru:go_default_library"], +) diff --git a/staging/src/k8s.io/apiserver/pkg/util/cache/cache.go b/staging/src/k8s.io/apimachinery/pkg/util/cache/cache.go similarity index 100% rename from staging/src/k8s.io/apiserver/pkg/util/cache/cache.go rename to staging/src/k8s.io/apimachinery/pkg/util/cache/cache.go diff --git a/staging/src/k8s.io/apiserver/pkg/util/cache/cache_test.go b/staging/src/k8s.io/apimachinery/pkg/util/cache/cache_test.go similarity index 100% rename from staging/src/k8s.io/apiserver/pkg/util/cache/cache_test.go rename to staging/src/k8s.io/apimachinery/pkg/util/cache/cache_test.go diff --git a/staging/src/k8s.io/apiserver/pkg/util/cache/lruexpirecache.go b/staging/src/k8s.io/apimachinery/pkg/util/cache/lruexpirecache.go similarity index 100% rename from staging/src/k8s.io/apiserver/pkg/util/cache/lruexpirecache.go rename to staging/src/k8s.io/apimachinery/pkg/util/cache/lruexpirecache.go diff --git a/staging/src/k8s.io/apiserver/pkg/util/cache/lruexpirecache_test.go b/staging/src/k8s.io/apimachinery/pkg/util/cache/lruexpirecache_test.go similarity index 100% rename from staging/src/k8s.io/apiserver/pkg/util/cache/lruexpirecache_test.go rename to staging/src/k8s.io/apimachinery/pkg/util/cache/lruexpirecache_test.go diff --git a/staging/src/k8s.io/apiserver/pkg/storage/etcd/BUILD b/staging/src/k8s.io/apiserver/pkg/storage/etcd/BUILD index 434cdd5a474..499ed74c7ab 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/etcd/BUILD +++ b/staging/src/k8s.io/apiserver/pkg/storage/etcd/BUILD @@ -58,12 +58,12 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/cache:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", "//vendor/k8s.io/apiserver/pkg/storage:go_default_library", "//vendor/k8s.io/apiserver/pkg/storage/etcd/metrics:go_default_library", "//vendor/k8s.io/apiserver/pkg/storage/etcd/util:go_default_library", - "//vendor/k8s.io/apiserver/pkg/util/cache:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/trace:go_default_library", ], ) diff --git a/staging/src/k8s.io/apiserver/pkg/storage/etcd/etcd_helper.go b/staging/src/k8s.io/apiserver/pkg/storage/etcd/etcd_helper.go index 71f0602b83e..c2c513f503f 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/etcd/etcd_helper.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/etcd/etcd_helper.go @@ -30,12 +30,12 @@ import ( "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/conversion" "k8s.io/apimachinery/pkg/runtime" + utilcache "k8s.io/apimachinery/pkg/util/cache" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/watch" "k8s.io/apiserver/pkg/storage" "k8s.io/apiserver/pkg/storage/etcd/metrics" etcdutil "k8s.io/apiserver/pkg/storage/etcd/util" - utilcache "k8s.io/apiserver/pkg/util/cache" utiltrace "k8s.io/apiserver/pkg/util/trace" ) diff --git a/staging/src/k8s.io/apiserver/plugin/pkg/authenticator/token/webhook/BUILD b/staging/src/k8s.io/apiserver/plugin/pkg/authenticator/token/webhook/BUILD index 58435dd5726..a05f06d3821 100644 --- a/staging/src/k8s.io/apiserver/plugin/pkg/authenticator/token/webhook/BUILD +++ b/staging/src/k8s.io/apiserver/plugin/pkg/authenticator/token/webhook/BUILD @@ -31,9 +31,9 @@ go_library( deps = [ "//vendor/k8s.io/apimachinery/pkg/apimachinery/registered:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/cache:go_default_library", "//vendor/k8s.io/apiserver/pkg/authentication/authenticator:go_default_library", "//vendor/k8s.io/apiserver/pkg/authentication/user:go_default_library", - "//vendor/k8s.io/apiserver/pkg/util/cache:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/webhook:go_default_library", "//vendor/k8s.io/client-go/kubernetes/scheme:go_default_library", "//vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1:go_default_library", diff --git a/staging/src/k8s.io/apiserver/plugin/pkg/authenticator/token/webhook/webhook.go b/staging/src/k8s.io/apiserver/plugin/pkg/authenticator/token/webhook/webhook.go index e7d493479e5..3da6506738e 100644 --- a/staging/src/k8s.io/apiserver/plugin/pkg/authenticator/token/webhook/webhook.go +++ b/staging/src/k8s.io/apiserver/plugin/pkg/authenticator/token/webhook/webhook.go @@ -23,9 +23,9 @@ import ( "k8s.io/apimachinery/pkg/apimachinery/registered" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/cache" "k8s.io/apiserver/pkg/authentication/authenticator" "k8s.io/apiserver/pkg/authentication/user" - "k8s.io/apiserver/pkg/util/cache" "k8s.io/apiserver/pkg/util/webhook" "k8s.io/client-go/kubernetes/scheme" authenticationclient "k8s.io/client-go/kubernetes/typed/authentication/v1beta1" diff --git a/staging/src/k8s.io/apiserver/plugin/pkg/authorizer/webhook/BUILD b/staging/src/k8s.io/apiserver/plugin/pkg/authorizer/webhook/BUILD index ab993321cee..746207c5146 100644 --- a/staging/src/k8s.io/apiserver/plugin/pkg/authorizer/webhook/BUILD +++ b/staging/src/k8s.io/apiserver/plugin/pkg/authorizer/webhook/BUILD @@ -34,8 +34,8 @@ go_library( "//vendor/github.com/golang/glog:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apimachinery/registered:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/cache:go_default_library", "//vendor/k8s.io/apiserver/pkg/authorization/authorizer:go_default_library", - "//vendor/k8s.io/apiserver/pkg/util/cache:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/webhook:go_default_library", "//vendor/k8s.io/client-go/kubernetes/scheme:go_default_library", "//vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1:go_default_library", diff --git a/staging/src/k8s.io/apiserver/plugin/pkg/authorizer/webhook/webhook.go b/staging/src/k8s.io/apiserver/plugin/pkg/authorizer/webhook/webhook.go index 34f6785727c..91f233b1400 100644 --- a/staging/src/k8s.io/apiserver/plugin/pkg/authorizer/webhook/webhook.go +++ b/staging/src/k8s.io/apiserver/plugin/pkg/authorizer/webhook/webhook.go @@ -26,8 +26,8 @@ import ( "k8s.io/apimachinery/pkg/apimachinery/registered" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/cache" "k8s.io/apiserver/pkg/authorization/authorizer" - "k8s.io/apiserver/pkg/util/cache" "k8s.io/apiserver/pkg/util/webhook" "k8s.io/client-go/kubernetes/scheme" authorizationclient "k8s.io/client-go/kubernetes/typed/authorization/v1beta1" From 8e1639a71b83e23c47e6f8c4bf57a86b03867d22 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Fri, 19 May 2017 11:31:41 -0400 Subject: [PATCH 02/10] Change LRUExpireCache to use hashicorp cache to expose Keys() Removes the spawning of goroutines in the cache (which could be a hotspot for anything in the critical path) as well. --- .../pkg/util/cache/lruexpirecache.go | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/staging/src/k8s.io/apimachinery/pkg/util/cache/lruexpirecache.go b/staging/src/k8s.io/apimachinery/pkg/util/cache/lruexpirecache.go index 9c87ba7d3f6..f6b307aa68e 100644 --- a/staging/src/k8s.io/apimachinery/pkg/util/cache/lruexpirecache.go +++ b/staging/src/k8s.io/apimachinery/pkg/util/cache/lruexpirecache.go @@ -20,7 +20,7 @@ import ( "sync" "time" - "github.com/golang/groupcache/lru" + "github.com/hashicorp/golang-lru" ) // Clock defines an interface for obtaining the current time @@ -33,6 +33,8 @@ type realClock struct{} func (realClock) Now() time.Time { return time.Now() } +// LRUExpireCache is a cache that ensures the mostly recently accessed keys are returned with +// a ttl beyond which keys are forcibly expired. type LRUExpireCache struct { // clock is used to obtain the current time clock Clock @@ -43,12 +45,17 @@ type LRUExpireCache struct { // NewLRUExpireCache creates an expiring cache with the given size func NewLRUExpireCache(maxSize int) *LRUExpireCache { - return &LRUExpireCache{clock: realClock{}, cache: lru.New(maxSize)} + return NewLRUExpireCacheWithClock(maxSize, realClock{}) } -// NewLRUExpireCache creates an expiring cache with the given size, using the specified clock to obtain the current time +// NewLRUExpireCacheWithClock creates an expiring cache with the given size, using the specified clock to obtain the current time. func NewLRUExpireCacheWithClock(maxSize int, clock Clock) *LRUExpireCache { - return &LRUExpireCache{clock: clock, cache: lru.New(maxSize)} + cache, err := lru.New(maxSize) + if err != nil { + // if called with an invalid size + panic(err) + } + return &LRUExpireCache{clock: clock, cache: cache} } type cacheEntry struct { @@ -56,15 +63,16 @@ type cacheEntry struct { expireTime time.Time } -func (c *LRUExpireCache) Add(key lru.Key, value interface{}, ttl time.Duration) { +// Add adds the value to the cache at key with the specified maximum duration. +func (c *LRUExpireCache) Add(key interface{}, value interface{}, ttl time.Duration) { c.lock.Lock() defer c.lock.Unlock() c.cache.Add(key, &cacheEntry{value, c.clock.Now().Add(ttl)}) - // Remove entry from cache after ttl. - time.AfterFunc(ttl, func() { c.remove(key) }) } -func (c *LRUExpireCache) Get(key lru.Key) (interface{}, bool) { +// Get returns the value at the specified key from the cache if it exists and is not +// expired, or returns false. +func (c *LRUExpireCache) Get(key interface{}) (interface{}, bool) { c.lock.Lock() defer c.lock.Unlock() e, ok := c.cache.Get(key) @@ -72,14 +80,23 @@ func (c *LRUExpireCache) Get(key lru.Key) (interface{}, bool) { return nil, false } if c.clock.Now().After(e.(*cacheEntry).expireTime) { - go c.remove(key) + c.cache.Remove(key) return nil, false } return e.(*cacheEntry).value, true } -func (c *LRUExpireCache) remove(key lru.Key) { +// Remove removes the specified key from the cache if it exists +func (c *LRUExpireCache) Remove(key interface{}) { c.lock.Lock() defer c.lock.Unlock() c.cache.Remove(key) } + +// Keys returns all the keys in the cache, even if they are expired. Subsequent calls to +// get may return not found. It returns all keys from oldest to newest. +func (c *LRUExpireCache) Keys() []interface{} { + c.lock.Lock() + defer c.lock.Unlock() + return c.cache.Keys() +} From bb8c00583ab3fa2f5d24e5b1ede1a2a79a7a0b90 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Fri, 19 May 2017 11:48:33 -0400 Subject: [PATCH 03/10] Update consumers of LRUExpireCache --- plugin/pkg/admission/imagepolicy/BUILD | 2 +- plugin/pkg/admission/imagepolicy/admission.go | 2 +- plugin/pkg/admission/namespace/lifecycle/BUILD | 2 +- plugin/pkg/admission/namespace/lifecycle/admission.go | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plugin/pkg/admission/imagepolicy/BUILD b/plugin/pkg/admission/imagepolicy/BUILD index 431495bd53c..f1b78c35684 100644 --- a/plugin/pkg/admission/imagepolicy/BUILD +++ b/plugin/pkg/admission/imagepolicy/BUILD @@ -24,9 +24,9 @@ go_library( "//vendor/github.com/golang/glog:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/cache:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/yaml:go_default_library", "//vendor/k8s.io/apiserver/pkg/admission:go_default_library", - "//vendor/k8s.io/apiserver/pkg/util/cache:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/webhook:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", ], diff --git a/plugin/pkg/admission/imagepolicy/admission.go b/plugin/pkg/admission/imagepolicy/admission.go index 1edfe576d80..f584da25de8 100644 --- a/plugin/pkg/admission/imagepolicy/admission.go +++ b/plugin/pkg/admission/imagepolicy/admission.go @@ -31,9 +31,9 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime/schema" kubeschema "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/cache" "k8s.io/apimachinery/pkg/util/yaml" "k8s.io/apiserver/pkg/admission" - "k8s.io/apiserver/pkg/util/cache" "k8s.io/apiserver/pkg/util/webhook" "k8s.io/client-go/rest" diff --git a/plugin/pkg/admission/namespace/lifecycle/BUILD b/plugin/pkg/admission/namespace/lifecycle/BUILD index 36ec5e528dc..d1fcbc7c3ea 100644 --- a/plugin/pkg/admission/namespace/lifecycle/BUILD +++ b/plugin/pkg/admission/namespace/lifecycle/BUILD @@ -22,9 +22,9 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/cache:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apiserver/pkg/admission:go_default_library", - "//vendor/k8s.io/apiserver/pkg/util/cache:go_default_library", "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) diff --git a/plugin/pkg/admission/namespace/lifecycle/admission.go b/plugin/pkg/admission/namespace/lifecycle/admission.go index 65ab0ef1cb0..15bee9b63f6 100644 --- a/plugin/pkg/admission/namespace/lifecycle/admission.go +++ b/plugin/pkg/admission/namespace/lifecycle/admission.go @@ -26,9 +26,9 @@ import ( "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" + utilcache "k8s.io/apimachinery/pkg/util/cache" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apiserver/pkg/admission" - utilcache "k8s.io/apiserver/pkg/util/cache" "k8s.io/client-go/util/clock" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" From 8013212db54e95050c622675c6706cce5de42b45 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Fri, 19 May 2017 13:57:17 -0400 Subject: [PATCH 04/10] Move client-go/util/clock to apimachinery/pkg/util/clock For reuse --- .../pkg}/util/clock/BUILD | 0 .../pkg}/util/clock/clock.go | 0 .../pkg}/util/clock/clock_test.go | 0 .../src/k8s.io/apiserver/pkg/util/cache/BUILD | 33 ------------------- 4 files changed, 33 deletions(-) rename staging/src/k8s.io/{client-go => apimachinery/pkg}/util/clock/BUILD (100%) rename staging/src/k8s.io/{client-go => apimachinery/pkg}/util/clock/clock.go (100%) rename staging/src/k8s.io/{client-go => apimachinery/pkg}/util/clock/clock_test.go (100%) delete mode 100644 staging/src/k8s.io/apiserver/pkg/util/cache/BUILD diff --git a/staging/src/k8s.io/client-go/util/clock/BUILD b/staging/src/k8s.io/apimachinery/pkg/util/clock/BUILD similarity index 100% rename from staging/src/k8s.io/client-go/util/clock/BUILD rename to staging/src/k8s.io/apimachinery/pkg/util/clock/BUILD diff --git a/staging/src/k8s.io/client-go/util/clock/clock.go b/staging/src/k8s.io/apimachinery/pkg/util/clock/clock.go similarity index 100% rename from staging/src/k8s.io/client-go/util/clock/clock.go rename to staging/src/k8s.io/apimachinery/pkg/util/clock/clock.go diff --git a/staging/src/k8s.io/client-go/util/clock/clock_test.go b/staging/src/k8s.io/apimachinery/pkg/util/clock/clock_test.go similarity index 100% rename from staging/src/k8s.io/client-go/util/clock/clock_test.go rename to staging/src/k8s.io/apimachinery/pkg/util/clock/clock_test.go diff --git a/staging/src/k8s.io/apiserver/pkg/util/cache/BUILD b/staging/src/k8s.io/apiserver/pkg/util/cache/BUILD deleted file mode 100644 index 16908b0a747..00000000000 --- a/staging/src/k8s.io/apiserver/pkg/util/cache/BUILD +++ /dev/null @@ -1,33 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -licenses(["notice"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", - "go_test", -) - -go_test( - name = "go_default_test", - srcs = [ - "cache_test.go", - "lruexpirecache_test.go", - ], - library = ":go_default_library", - tags = ["automanaged"], - deps = [ - "//vendor/github.com/golang/groupcache/lru:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", - ], -) - -go_library( - name = "go_default_library", - srcs = [ - "cache.go", - "lruexpirecache.go", - ], - tags = ["automanaged"], - deps = ["//vendor/github.com/golang/groupcache/lru:go_default_library"], -) From 3e095d12b4f152a45b593927804e2e7b8816239a Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Fri, 19 May 2017 13:57:39 -0400 Subject: [PATCH 05/10] Refactor move of client-go/util/clock to apimachinery --- pkg/controller/BUILD | 4 ++-- pkg/controller/controller_utils.go | 2 +- pkg/controller/controller_utils_test.go | 2 +- pkg/controller/garbagecollector/BUILD | 2 +- pkg/controller/garbagecollector/metrics.go | 2 +- pkg/controller/node/testutil/BUILD | 2 +- pkg/controller/node/testutil/test_utils.go | 2 +- pkg/kubelet/BUILD | 4 ++-- pkg/kubelet/active_deadline.go | 2 +- pkg/kubelet/active_deadline_test.go | 2 +- pkg/kubelet/dockershim/BUILD | 2 +- pkg/kubelet/dockershim/docker_service_test.go | 2 +- pkg/kubelet/dockershim/libdocker/BUILD | 2 +- pkg/kubelet/dockershim/libdocker/fake_client.go | 2 +- pkg/kubelet/eviction/BUILD | 4 ++-- pkg/kubelet/eviction/eviction_manager.go | 2 +- pkg/kubelet/eviction/eviction_manager_test.go | 2 +- pkg/kubelet/images/BUILD | 2 +- pkg/kubelet/images/image_gc_manager_test.go | 2 +- pkg/kubelet/images/image_manager_test.go | 2 +- pkg/kubelet/kubelet.go | 2 +- pkg/kubelet/kubelet_test.go | 2 +- pkg/kubelet/pleg/BUILD | 4 ++-- pkg/kubelet/pleg/generic.go | 2 +- pkg/kubelet/pleg/generic_test.go | 2 +- pkg/kubelet/pod_workers_test.go | 2 +- pkg/kubelet/runonce_test.go | 2 +- pkg/kubelet/secret/BUILD | 4 ++-- pkg/kubelet/secret/secret_manager.go | 2 +- pkg/kubelet/secret/secret_manager_test.go | 2 +- pkg/kubelet/server/streaming/BUILD | 4 ++-- pkg/kubelet/server/streaming/request_cache.go | 2 +- pkg/kubelet/server/streaming/request_cache_test.go | 2 +- pkg/kubelet/util/cache/BUILD | 2 +- pkg/kubelet/util/cache/object_cache_test.go | 2 +- pkg/kubelet/util/queue/BUILD | 4 ++-- pkg/kubelet/util/queue/work_queue.go | 2 +- pkg/kubelet/util/queue/work_queue_test.go | 2 +- pkg/master/tunneler/BUILD | 4 ++-- pkg/master/tunneler/ssh.go | 2 +- pkg/master/tunneler/ssh_test.go | 2 +- pkg/proxy/healthcheck/BUILD | 4 ++-- pkg/proxy/healthcheck/healthcheck.go | 2 +- pkg/proxy/healthcheck/healthcheck_test.go | 2 +- plugin/pkg/admission/namespace/lifecycle/BUILD | 4 ++-- plugin/pkg/admission/namespace/lifecycle/admission.go | 2 +- .../pkg/admission/namespace/lifecycle/admission_test.go | 2 +- staging/src/k8s.io/apimachinery/pkg/util/cache/BUILD | 2 +- .../apimachinery/pkg/util/cache/lruexpirecache_test.go | 2 +- staging/src/k8s.io/apiserver/pkg/storage/BUILD | 4 ++-- staging/src/k8s.io/apiserver/pkg/storage/watch_cache.go | 2 +- .../src/k8s.io/apiserver/pkg/storage/watch_cache_test.go | 2 +- staging/src/k8s.io/client-go/Godeps/Godeps.json | 8 ++++++++ staging/src/k8s.io/client-go/rest/BUILD | 2 +- staging/src/k8s.io/client-go/rest/request_test.go | 2 +- staging/src/k8s.io/client-go/tools/cache/BUILD | 5 +++-- staging/src/k8s.io/client-go/tools/cache/controller.go | 2 +- .../src/k8s.io/client-go/tools/cache/expiration_cache.go | 2 +- .../client-go/tools/cache/expiration_cache_fakes.go | 2 +- .../k8s.io/client-go/tools/cache/expiration_cache_test.go | 2 +- staging/src/k8s.io/client-go/tools/cache/reflector.go | 2 +- .../src/k8s.io/client-go/tools/cache/shared_informer.go | 2 +- .../k8s.io/client-go/tools/cache/shared_informer_test.go | 2 +- staging/src/k8s.io/client-go/tools/record/BUILD | 4 ++-- staging/src/k8s.io/client-go/tools/record/event.go | 2 +- staging/src/k8s.io/client-go/tools/record/event_test.go | 2 +- staging/src/k8s.io/client-go/tools/record/events_cache.go | 2 +- .../k8s.io/client-go/tools/record/events_cache_test.go | 2 +- staging/src/k8s.io/client-go/util/flowcontrol/BUILD | 4 ++-- staging/src/k8s.io/client-go/util/flowcontrol/backoff.go | 2 +- .../src/k8s.io/client-go/util/flowcontrol/backoff_test.go | 2 +- staging/src/k8s.io/client-go/util/workqueue/BUILD | 4 ++-- .../src/k8s.io/client-go/util/workqueue/delaying_queue.go | 2 +- .../client-go/util/workqueue/delaying_queue_test.go | 2 +- .../client-go/util/workqueue/rate_limitting_queue_test.go | 2 +- 75 files changed, 98 insertions(+), 89 deletions(-) diff --git a/pkg/controller/BUILD b/pkg/controller/BUILD index 733f0d1311f..5faa9843299 100644 --- a/pkg/controller/BUILD +++ b/pkg/controller/BUILD @@ -43,6 +43,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", @@ -54,7 +55,6 @@ go_library( "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/tools/cache:go_default_library", "//vendor/k8s.io/client-go/tools/record:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", "//vendor/k8s.io/client-go/util/integer:go_default_library", ], ) @@ -80,13 +80,13 @@ go_test( "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//vendor/k8s.io/client-go/pkg/apis/extensions/v1beta1:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/tools/cache:go_default_library", "//vendor/k8s.io/client-go/tools/record:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", "//vendor/k8s.io/client-go/util/testing:go_default_library", ], ) diff --git a/pkg/controller/controller_utils.go b/pkg/controller/controller_utils.go index 732d72cfecb..f7e29fc171f 100644 --- a/pkg/controller/controller_utils.go +++ b/pkg/controller/controller_utils.go @@ -34,9 +34,9 @@ import ( "k8s.io/apimachinery/pkg/util/strategicpatch" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/record" - "k8s.io/client-go/util/clock" "k8s.io/client-go/util/integer" "k8s.io/kubernetes/pkg/api" diff --git a/pkg/controller/controller_utils_test.go b/pkg/controller/controller_utils_test.go index a0894bd6ccf..8bfe3438782 100644 --- a/pkg/controller/controller_utils_test.go +++ b/pkg/controller/controller_utils_test.go @@ -30,12 +30,12 @@ import ( apiequality "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/uuid" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/record" - "k8s.io/client-go/util/clock" utiltesting "k8s.io/client-go/util/testing" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" diff --git a/pkg/controller/garbagecollector/BUILD b/pkg/controller/garbagecollector/BUILD index d982e47566e..86fbb1b3e7e 100644 --- a/pkg/controller/garbagecollector/BUILD +++ b/pkg/controller/garbagecollector/BUILD @@ -38,6 +38,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", @@ -46,7 +47,6 @@ go_library( "//vendor/k8s.io/client-go/dynamic:go_default_library", "//vendor/k8s.io/client-go/kubernetes:go_default_library", "//vendor/k8s.io/client-go/tools/cache:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", "//vendor/k8s.io/client-go/util/workqueue:go_default_library", ], ) diff --git a/pkg/controller/garbagecollector/metrics.go b/pkg/controller/garbagecollector/metrics.go index dd6f03b0e71..21eeafa4cb7 100644 --- a/pkg/controller/garbagecollector/metrics.go +++ b/pkg/controller/garbagecollector/metrics.go @@ -20,7 +20,7 @@ import ( "sync" "time" - "k8s.io/client-go/util/clock" + "k8s.io/apimachinery/pkg/util/clock" "github.com/prometheus/client_golang/prometheus" ) diff --git a/pkg/controller/node/testutil/BUILD b/pkg/controller/node/testutil/BUILD index e29fd27be70..e59536cb5f4 100644 --- a/pkg/controller/node/testutil/BUILD +++ b/pkg/controller/node/testutil/BUILD @@ -24,12 +24,12 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library", "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", "//vendor/k8s.io/client-go/pkg/api/v1:go_default_library", "//vendor/k8s.io/client-go/pkg/api/v1/ref:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) diff --git a/pkg/controller/node/testutil/test_utils.go b/pkg/controller/node/testutil/test_utils.go index 12aa786f546..a384530f8ce 100644 --- a/pkg/controller/node/testutil/test_utils.go +++ b/pkg/controller/node/testutil/test_utils.go @@ -32,9 +32,9 @@ import ( "k8s.io/apimachinery/pkg/util/strategicpatch" "k8s.io/apimachinery/pkg/watch" + "k8s.io/apimachinery/pkg/util/clock" clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/pkg/api/v1/ref" - "k8s.io/client-go/util/clock" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" diff --git a/pkg/kubelet/BUILD b/pkg/kubelet/BUILD index 3bb4a3443f0..26565be52ca 100644 --- a/pkg/kubelet/BUILD +++ b/pkg/kubelet/BUILD @@ -120,6 +120,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/fields:go_default_library", "//vendor/k8s.io/apimachinery/pkg/labels:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/net:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library", @@ -134,7 +135,6 @@ go_library( "//vendor/k8s.io/client-go/tools/cache:go_default_library", "//vendor/k8s.io/client-go/tools/record:go_default_library", "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", "//vendor/k8s.io/client-go/util/flowcontrol:go_default_library", "//vendor/k8s.io/client-go/util/integer:go_default_library", ], @@ -211,6 +211,7 @@ go_test( "//vendor/k8s.io/apimachinery/pkg/labels:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/rand:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library", @@ -221,7 +222,6 @@ go_test( "//vendor/k8s.io/client-go/pkg/api/v1:go_default_library", "//vendor/k8s.io/client-go/testing:go_default_library", "//vendor/k8s.io/client-go/tools/record:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", "//vendor/k8s.io/client-go/util/flowcontrol:go_default_library", "//vendor/k8s.io/client-go/util/testing:go_default_library", ], diff --git a/pkg/kubelet/active_deadline.go b/pkg/kubelet/active_deadline.go index bf29e3b5695..578a0ebc551 100644 --- a/pkg/kubelet/active_deadline.go +++ b/pkg/kubelet/active_deadline.go @@ -20,8 +20,8 @@ import ( "fmt" "time" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/client-go/tools/record" - "k8s.io/client-go/util/clock" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/kubelet/lifecycle" "k8s.io/kubernetes/pkg/kubelet/status" diff --git a/pkg/kubelet/active_deadline_test.go b/pkg/kubelet/active_deadline_test.go index aa02259950d..7a87b2e8d87 100644 --- a/pkg/kubelet/active_deadline_test.go +++ b/pkg/kubelet/active_deadline_test.go @@ -22,8 +22,8 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/client-go/tools/record" - "k8s.io/client-go/util/clock" "k8s.io/kubernetes/pkg/api/v1" ) diff --git a/pkg/kubelet/dockershim/BUILD b/pkg/kubelet/dockershim/BUILD index 15207881f30..fcc0f9ae3e2 100644 --- a/pkg/kubelet/dockershim/BUILD +++ b/pkg/kubelet/dockershim/BUILD @@ -112,7 +112,7 @@ go_test( "//vendor/github.com/golang/mock/gomock:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/github.com/stretchr/testify/require:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", ], ) diff --git a/pkg/kubelet/dockershim/docker_service_test.go b/pkg/kubelet/dockershim/docker_service_test.go index 01966b7a5a0..9969bffa968 100644 --- a/pkg/kubelet/dockershim/docker_service_test.go +++ b/pkg/kubelet/dockershim/docker_service_test.go @@ -27,7 +27,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "k8s.io/client-go/util/clock" + "k8s.io/apimachinery/pkg/util/clock" runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1" containertest "k8s.io/kubernetes/pkg/kubelet/container/testing" "k8s.io/kubernetes/pkg/kubelet/dockershim/libdocker" diff --git a/pkg/kubelet/dockershim/libdocker/BUILD b/pkg/kubelet/dockershim/libdocker/BUILD index 871260aeb80..7e63801a7b8 100644 --- a/pkg/kubelet/dockershim/libdocker/BUILD +++ b/pkg/kubelet/dockershim/libdocker/BUILD @@ -51,7 +51,7 @@ go_library( "//vendor/github.com/golang/glog:go_default_library", "//vendor/golang.org/x/net/context:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", ], ) diff --git a/pkg/kubelet/dockershim/libdocker/fake_client.go b/pkg/kubelet/dockershim/libdocker/fake_client.go index b85b416beef..1eac1684f28 100644 --- a/pkg/kubelet/dockershim/libdocker/fake_client.go +++ b/pkg/kubelet/dockershim/libdocker/fake_client.go @@ -32,7 +32,7 @@ import ( dockertypes "github.com/docker/engine-api/types" dockercontainer "github.com/docker/engine-api/types/container" - "k8s.io/client-go/util/clock" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/kubernetes/pkg/api/v1" ) diff --git a/pkg/kubelet/eviction/BUILD b/pkg/kubelet/eviction/BUILD index 511b9462e52..f9c694035d0 100644 --- a/pkg/kubelet/eviction/BUILD +++ b/pkg/kubelet/eviction/BUILD @@ -41,10 +41,10 @@ go_test( "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library", "//vendor/k8s.io/client-go/pkg/api/v1:go_default_library", "//vendor/k8s.io/client-go/tools/record:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) @@ -76,12 +76,12 @@ go_library( "//vendor/github.com/golang/glog:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library", "//vendor/k8s.io/client-go/pkg/api/v1:go_default_library", "//vendor/k8s.io/client-go/tools/record:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) diff --git a/pkg/kubelet/eviction/eviction_manager.go b/pkg/kubelet/eviction/eviction_manager.go index 6cdb87a5630..574d546e0fe 100644 --- a/pkg/kubelet/eviction/eviction_manager.go +++ b/pkg/kubelet/eviction/eviction_manager.go @@ -25,11 +25,11 @@ import ( "github.com/golang/glog" "k8s.io/apimachinery/pkg/api/resource" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/wait" utilfeature "k8s.io/apiserver/pkg/util/feature" clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/record" - "k8s.io/client-go/util/clock" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/kubelet/cm" diff --git a/pkg/kubelet/eviction/eviction_manager_test.go b/pkg/kubelet/eviction/eviction_manager_test.go index 55e670d9368..27aa00404f5 100644 --- a/pkg/kubelet/eviction/eviction_manager_test.go +++ b/pkg/kubelet/eviction/eviction_manager_test.go @@ -22,10 +22,10 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/clock" utilfeature "k8s.io/apiserver/pkg/util/feature" clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/record" - "k8s.io/client-go/util/clock" kubeapi "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1" diff --git a/pkg/kubelet/images/BUILD b/pkg/kubelet/images/BUILD index d80b8b0dbe8..7916e98e9bf 100644 --- a/pkg/kubelet/images/BUILD +++ b/pkg/kubelet/images/BUILD @@ -53,8 +53,8 @@ go_test( "//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/github.com/stretchr/testify/require:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/client-go/tools/record:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", "//vendor/k8s.io/client-go/util/flowcontrol:go_default_library", ], ) diff --git a/pkg/kubelet/images/image_gc_manager_test.go b/pkg/kubelet/images/image_gc_manager_test.go index c9f5e1508b5..0269b2d62cb 100644 --- a/pkg/kubelet/images/image_gc_manager_test.go +++ b/pkg/kubelet/images/image_gc_manager_test.go @@ -24,8 +24,8 @@ import ( cadvisorapiv2 "github.com/google/cadvisor/info/v2" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/client-go/tools/record" - "k8s.io/client-go/util/clock" cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing" "k8s.io/kubernetes/pkg/kubelet/container" containertest "k8s.io/kubernetes/pkg/kubelet/container/testing" diff --git a/pkg/kubelet/images/image_manager_test.go b/pkg/kubelet/images/image_manager_test.go index 0e24ea53de1..9f2ec982bcb 100644 --- a/pkg/kubelet/images/image_manager_test.go +++ b/pkg/kubelet/images/image_manager_test.go @@ -23,8 +23,8 @@ import ( "github.com/stretchr/testify/assert" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/client-go/tools/record" - "k8s.io/client-go/util/clock" "k8s.io/client-go/util/flowcontrol" "k8s.io/kubernetes/pkg/api/v1" . "k8s.io/kubernetes/pkg/kubelet/container" diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 8b6e4098310..4480d8558cc 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -38,6 +38,7 @@ import ( "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/clock" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" @@ -46,7 +47,6 @@ import ( clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/record" - "k8s.io/client-go/util/clock" "k8s.io/client-go/util/flowcontrol" "k8s.io/client-go/util/integer" "k8s.io/kubernetes/pkg/api" diff --git a/pkg/kubelet/kubelet_test.go b/pkg/kubelet/kubelet_test.go index 6c3460c445c..00e3a9340ca 100644 --- a/pkg/kubelet/kubelet_test.go +++ b/pkg/kubelet/kubelet_test.go @@ -32,12 +32,12 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/clock" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/record" - "k8s.io/client-go/util/clock" "k8s.io/client-go/util/flowcontrol" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/apis/componentconfig" diff --git a/pkg/kubelet/pleg/BUILD b/pkg/kubelet/pleg/BUILD index 91288475f22..6ad5cae0e5a 100644 --- a/pkg/kubelet/pleg/BUILD +++ b/pkg/kubelet/pleg/BUILD @@ -21,9 +21,9 @@ go_library( "//pkg/kubelet/metrics:go_default_library", "//vendor/github.com/golang/glog:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) @@ -37,8 +37,8 @@ go_test( "//pkg/kubelet/container/testing:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/diff:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) diff --git a/pkg/kubelet/pleg/generic.go b/pkg/kubelet/pleg/generic.go index 4f6e66b0f3a..f6d65f0b636 100644 --- a/pkg/kubelet/pleg/generic.go +++ b/pkg/kubelet/pleg/generic.go @@ -23,9 +23,9 @@ import ( "github.com/golang/glog" "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/client-go/util/clock" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/metrics" ) diff --git a/pkg/kubelet/pleg/generic_test.go b/pkg/kubelet/pleg/generic_test.go index 36df346039b..f5fd5635ca2 100644 --- a/pkg/kubelet/pleg/generic_test.go +++ b/pkg/kubelet/pleg/generic_test.go @@ -26,8 +26,8 @@ import ( "github.com/stretchr/testify/assert" "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/diff" - "k8s.io/client-go/util/clock" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" containertest "k8s.io/kubernetes/pkg/kubelet/container/testing" ) diff --git a/pkg/kubelet/pod_workers_test.go b/pkg/kubelet/pod_workers_test.go index c20d6023984..a32241e6c9c 100644 --- a/pkg/kubelet/pod_workers_test.go +++ b/pkg/kubelet/pod_workers_test.go @@ -24,8 +24,8 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/client-go/tools/record" - "k8s.io/client-go/util/clock" "k8s.io/kubernetes/pkg/api/v1" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" containertest "k8s.io/kubernetes/pkg/kubelet/container/testing" diff --git a/pkg/kubelet/runonce_test.go b/pkg/kubelet/runonce_test.go index 66b009f0021..99d932b7ac8 100644 --- a/pkg/kubelet/runonce_test.go +++ b/pkg/kubelet/runonce_test.go @@ -25,9 +25,9 @@ import ( cadvisorapiv2 "github.com/google/cadvisor/info/v2" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/clock" clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/record" - "k8s.io/client-go/util/clock" utiltesting "k8s.io/client-go/util/testing" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/apis/componentconfig" diff --git a/pkg/kubelet/secret/BUILD b/pkg/kubelet/secret/BUILD index e2d31dc5f90..557b1b48915 100644 --- a/pkg/kubelet/secret/BUILD +++ b/pkg/kubelet/secret/BUILD @@ -20,8 +20,8 @@ go_test( "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/client-go/testing:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) @@ -39,9 +39,9 @@ go_library( "//pkg/kubelet/util:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apiserver/pkg/storage/etcd:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) diff --git a/pkg/kubelet/secret/secret_manager.go b/pkg/kubelet/secret/secret_manager.go index 4002d34f61c..be459b21875 100644 --- a/pkg/kubelet/secret/secret_manager.go +++ b/pkg/kubelet/secret/secret_manager.go @@ -30,8 +30,8 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/client-go/util/clock" ) const ( diff --git a/pkg/kubelet/secret/secret_manager_test.go b/pkg/kubelet/secret/secret_manager_test.go index b809d23b94b..b5261f402d9 100644 --- a/pkg/kubelet/secret/secret_manager_test.go +++ b/pkg/kubelet/secret/secret_manager_test.go @@ -30,8 +30,8 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/clock" core "k8s.io/client-go/testing" - "k8s.io/client-go/util/clock" "github.com/stretchr/testify/assert" ) diff --git a/pkg/kubelet/server/streaming/BUILD b/pkg/kubelet/server/streaming/BUILD index 6fc7056b3e2..7af81bf0e7f 100644 --- a/pkg/kubelet/server/streaming/BUILD +++ b/pkg/kubelet/server/streaming/BUILD @@ -24,9 +24,9 @@ go_library( "//vendor/google.golang.org/grpc:go_default_library", "//vendor/google.golang.org/grpc/codes:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/remotecommand:go_default_library", "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) @@ -44,10 +44,10 @@ go_test( "//pkg/kubelet/server/portforward:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/github.com/stretchr/testify/require:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/remotecommand:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/tools/remotecommand:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) diff --git a/pkg/kubelet/server/streaming/request_cache.go b/pkg/kubelet/server/streaming/request_cache.go index e663542d0f1..f68f640be0b 100644 --- a/pkg/kubelet/server/streaming/request_cache.go +++ b/pkg/kubelet/server/streaming/request_cache.go @@ -25,7 +25,7 @@ import ( "sync" "time" - "k8s.io/client-go/util/clock" + "k8s.io/apimachinery/pkg/util/clock" ) var ( diff --git a/pkg/kubelet/server/streaming/request_cache_test.go b/pkg/kubelet/server/streaming/request_cache_test.go index c35f5d0b6be..6ce432945bb 100644 --- a/pkg/kubelet/server/streaming/request_cache_test.go +++ b/pkg/kubelet/server/streaming/request_cache_test.go @@ -26,7 +26,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "k8s.io/client-go/util/clock" + "k8s.io/apimachinery/pkg/util/clock" ) func TestInsert(t *testing.T) { diff --git a/pkg/kubelet/util/cache/BUILD b/pkg/kubelet/util/cache/BUILD index 515081225d2..4cc478e32b3 100644 --- a/pkg/kubelet/util/cache/BUILD +++ b/pkg/kubelet/util/cache/BUILD @@ -21,8 +21,8 @@ go_test( library = ":go_default_library", tags = ["automanaged"], deps = [ + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/client-go/tools/cache:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) diff --git a/pkg/kubelet/util/cache/object_cache_test.go b/pkg/kubelet/util/cache/object_cache_test.go index be11fbfb4b8..5bc09abdd8f 100644 --- a/pkg/kubelet/util/cache/object_cache_test.go +++ b/pkg/kubelet/util/cache/object_cache_test.go @@ -21,8 +21,8 @@ import ( "testing" "time" + "k8s.io/apimachinery/pkg/util/clock" expirationcache "k8s.io/client-go/tools/cache" - "k8s.io/client-go/util/clock" ) type testObject struct { diff --git a/pkg/kubelet/util/queue/BUILD b/pkg/kubelet/util/queue/BUILD index 7a07534c477..518ecfaa8b8 100644 --- a/pkg/kubelet/util/queue/BUILD +++ b/pkg/kubelet/util/queue/BUILD @@ -14,7 +14,7 @@ go_library( tags = ["automanaged"], deps = [ "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", ], ) @@ -25,8 +25,8 @@ go_test( tags = ["automanaged"], deps = [ "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) diff --git a/pkg/kubelet/util/queue/work_queue.go b/pkg/kubelet/util/queue/work_queue.go index 63bbef1e7db..4075562f05c 100644 --- a/pkg/kubelet/util/queue/work_queue.go +++ b/pkg/kubelet/util/queue/work_queue.go @@ -21,7 +21,7 @@ import ( "time" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/util/clock" + "k8s.io/apimachinery/pkg/util/clock" ) // WorkQueue allows queuing items with a timestamp. An item is diff --git a/pkg/kubelet/util/queue/work_queue_test.go b/pkg/kubelet/util/queue/work_queue_test.go index 56302aef0b8..ee8f3fbe0f0 100644 --- a/pkg/kubelet/util/queue/work_queue_test.go +++ b/pkg/kubelet/util/queue/work_queue_test.go @@ -21,8 +21,8 @@ import ( "time" "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/client-go/util/clock" ) func newTestBasicWorkQueue() (*basicWorkQueue, *clock.FakeClock) { diff --git a/pkg/master/tunneler/BUILD b/pkg/master/tunneler/BUILD index 934d7aa3636..bf22597089b 100644 --- a/pkg/master/tunneler/BUILD +++ b/pkg/master/tunneler/BUILD @@ -15,7 +15,7 @@ go_test( tags = ["automanaged"], deps = [ "//vendor/github.com/stretchr/testify/assert:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", ], ) @@ -28,8 +28,8 @@ go_library( "//pkg/util:go_default_library", "//vendor/github.com/golang/glog:go_default_library", "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) diff --git a/pkg/master/tunneler/ssh.go b/pkg/master/tunneler/ssh.go index d05d377f825..84e91c370c8 100644 --- a/pkg/master/tunneler/ssh.go +++ b/pkg/master/tunneler/ssh.go @@ -26,8 +26,8 @@ import ( "sync/atomic" "time" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/client-go/util/clock" "k8s.io/kubernetes/pkg/ssh" "k8s.io/kubernetes/pkg/util" diff --git a/pkg/master/tunneler/ssh_test.go b/pkg/master/tunneler/ssh_test.go index 8026645b3f1..1b1f4005809 100644 --- a/pkg/master/tunneler/ssh_test.go +++ b/pkg/master/tunneler/ssh_test.go @@ -24,7 +24,7 @@ import ( "testing" "time" - "k8s.io/client-go/util/clock" + "k8s.io/apimachinery/pkg/util/clock" "github.com/stretchr/testify/assert" ) diff --git a/pkg/proxy/healthcheck/BUILD b/pkg/proxy/healthcheck/BUILD index 7cb0d680544..d6b8236524b 100644 --- a/pkg/proxy/healthcheck/BUILD +++ b/pkg/proxy/healthcheck/BUILD @@ -20,9 +20,9 @@ go_library( "//vendor/github.com/golang/glog:go_default_library", "//vendor/github.com/renstrom/dedent:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/client-go/pkg/api/v1:go_default_library", "//vendor/k8s.io/client-go/tools/record:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) @@ -34,8 +34,8 @@ go_test( deps = [ "//vendor/github.com/davecgh/go-spew/spew:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) diff --git a/pkg/proxy/healthcheck/healthcheck.go b/pkg/proxy/healthcheck/healthcheck.go index 9e6cf7028a6..c7187a6908f 100644 --- a/pkg/proxy/healthcheck/healthcheck.go +++ b/pkg/proxy/healthcheck/healthcheck.go @@ -29,9 +29,9 @@ import ( "github.com/renstrom/dedent" "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/clock" clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/record" - "k8s.io/client-go/util/clock" "k8s.io/kubernetes/pkg/api" ) diff --git a/pkg/proxy/healthcheck/healthcheck_test.go b/pkg/proxy/healthcheck/healthcheck_test.go index c39652f8ec2..b34f8219ed1 100644 --- a/pkg/proxy/healthcheck/healthcheck_test.go +++ b/pkg/proxy/healthcheck/healthcheck_test.go @@ -25,8 +25,8 @@ import ( "time" "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/client-go/util/clock" "github.com/davecgh/go-spew/spew" ) diff --git a/plugin/pkg/admission/namespace/lifecycle/BUILD b/plugin/pkg/admission/namespace/lifecycle/BUILD index d1fcbc7c3ea..5d0428688ab 100644 --- a/plugin/pkg/admission/namespace/lifecycle/BUILD +++ b/plugin/pkg/admission/namespace/lifecycle/BUILD @@ -23,9 +23,9 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/cache:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apiserver/pkg/admission:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) @@ -43,11 +43,11 @@ go_test( "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/k8s.io/apiserver/pkg/admission:go_default_library", "//vendor/k8s.io/client-go/testing:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) diff --git a/plugin/pkg/admission/namespace/lifecycle/admission.go b/plugin/pkg/admission/namespace/lifecycle/admission.go index 15bee9b63f6..cefdd87576c 100644 --- a/plugin/pkg/admission/namespace/lifecycle/admission.go +++ b/plugin/pkg/admission/namespace/lifecycle/admission.go @@ -27,9 +27,9 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" utilcache "k8s.io/apimachinery/pkg/util/cache" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apiserver/pkg/admission" - "k8s.io/client-go/util/clock" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion" diff --git a/plugin/pkg/admission/namespace/lifecycle/admission_test.go b/plugin/pkg/admission/namespace/lifecycle/admission_test.go index 433b0aa831b..39ce5f0da17 100644 --- a/plugin/pkg/admission/namespace/lifecycle/admission_test.go +++ b/plugin/pkg/admission/namespace/lifecycle/admission_test.go @@ -24,11 +24,11 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apiserver/pkg/admission" core "k8s.io/client-go/testing" - "k8s.io/client-go/util/clock" "k8s.io/kubernetes/pkg/api" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake" diff --git a/staging/src/k8s.io/apimachinery/pkg/util/cache/BUILD b/staging/src/k8s.io/apimachinery/pkg/util/cache/BUILD index 16908b0a747..2cbfb892ab4 100644 --- a/staging/src/k8s.io/apimachinery/pkg/util/cache/BUILD +++ b/staging/src/k8s.io/apimachinery/pkg/util/cache/BUILD @@ -18,7 +18,7 @@ go_test( tags = ["automanaged"], deps = [ "//vendor/github.com/golang/groupcache/lru:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", ], ) diff --git a/staging/src/k8s.io/apimachinery/pkg/util/cache/lruexpirecache_test.go b/staging/src/k8s.io/apimachinery/pkg/util/cache/lruexpirecache_test.go index 4990f56ca40..bd44f60d4c5 100644 --- a/staging/src/k8s.io/apimachinery/pkg/util/cache/lruexpirecache_test.go +++ b/staging/src/k8s.io/apimachinery/pkg/util/cache/lruexpirecache_test.go @@ -20,7 +20,7 @@ import ( "testing" "time" - "k8s.io/client-go/util/clock" + "k8s.io/apimachinery/pkg/util/clock" "github.com/golang/groupcache/lru" ) diff --git a/staging/src/k8s.io/apiserver/pkg/storage/BUILD b/staging/src/k8s.io/apiserver/pkg/storage/BUILD index 09a6e52d6b9..0e2f07eaf9e 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/BUILD +++ b/staging/src/k8s.io/apiserver/pkg/storage/BUILD @@ -27,13 +27,13 @@ go_test( "//vendor/k8s.io/apimachinery/pkg/labels:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", "//vendor/k8s.io/client-go/kubernetes/scheme:go_default_library", "//vendor/k8s.io/client-go/pkg/api/v1:go_default_library", "//vendor/k8s.io/client-go/tools/cache:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) @@ -62,12 +62,12 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/labels:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/trace:go_default_library", "//vendor/k8s.io/client-go/tools/cache:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) diff --git a/staging/src/k8s.io/apiserver/pkg/storage/watch_cache.go b/staging/src/k8s.io/apiserver/pkg/storage/watch_cache.go index b2d8f4a828b..beca63488d8 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/watch_cache.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/watch_cache.go @@ -28,10 +28,10 @@ import ( "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/watch" utiltrace "k8s.io/apiserver/pkg/util/trace" "k8s.io/client-go/tools/cache" - "k8s.io/client-go/util/clock" ) const ( diff --git a/staging/src/k8s.io/apiserver/pkg/storage/watch_cache_test.go b/staging/src/k8s.io/apiserver/pkg/storage/watch_cache_test.go index 4f8502d8989..744326d5ba6 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/watch_cache_test.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/watch_cache_test.go @@ -27,12 +27,12 @@ import ( "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/cache" - "k8s.io/client-go/util/clock" ) func makeTestPod(name string, resourceVersion uint64) *v1.Pod { diff --git a/staging/src/k8s.io/client-go/Godeps/Godeps.json b/staging/src/k8s.io/client-go/Godeps/Godeps.json index 637cd3476ec..884b82a9f17 100644 --- a/staging/src/k8s.io/client-go/Godeps/Godeps.json +++ b/staging/src/k8s.io/client-go/Godeps/Godeps.json @@ -390,6 +390,14 @@ "ImportPath": "k8s.io/apimachinery/pkg/types", "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/cache", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, + { + "ImportPath": "k8s.io/apimachinery/pkg/util/clock", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, { "ImportPath": "k8s.io/apimachinery/pkg/util/diff", "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" diff --git a/staging/src/k8s.io/client-go/rest/BUILD b/staging/src/k8s.io/client-go/rest/BUILD index 97e53ae609a..1719e5c8974 100644 --- a/staging/src/k8s.io/client-go/rest/BUILD +++ b/staging/src/k8s.io/client-go/rest/BUILD @@ -32,6 +32,7 @@ go_test( "//vendor/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/serializer/streaming:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/httpstream:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/intstr:go_default_library", @@ -41,7 +42,6 @@ go_test( "//vendor/k8s.io/client-go/pkg/apis/extensions/v1beta1:go_default_library", "//vendor/k8s.io/client-go/rest/watch:go_default_library", "//vendor/k8s.io/client-go/tools/clientcmd/api:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", "//vendor/k8s.io/client-go/util/flowcontrol:go_default_library", "//vendor/k8s.io/client-go/util/testing:go_default_library", ], diff --git a/staging/src/k8s.io/client-go/rest/request_test.go b/staging/src/k8s.io/client-go/rest/request_test.go index b4a7e68306c..15bf851d5a9 100755 --- a/staging/src/k8s.io/client-go/rest/request_test.go +++ b/staging/src/k8s.io/client-go/rest/request_test.go @@ -42,6 +42,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/apimachinery/pkg/runtime/serializer/streaming" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/diff" "k8s.io/apimachinery/pkg/util/httpstream" "k8s.io/apimachinery/pkg/util/intstr" @@ -49,7 +50,6 @@ import ( "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/pkg/api/v1" restclientwatch "k8s.io/client-go/rest/watch" - "k8s.io/client-go/util/clock" "k8s.io/client-go/util/flowcontrol" utiltesting "k8s.io/client-go/util/testing" ) diff --git a/staging/src/k8s.io/client-go/tools/cache/BUILD b/staging/src/k8s.io/client-go/tools/cache/BUILD index 115cffc741e..5bd088050b4 100644 --- a/staging/src/k8s.io/client-go/tools/cache/BUILD +++ b/staging/src/k8s.io/client-go/tools/cache/BUILD @@ -30,13 +30,13 @@ go_test( "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", "//vendor/k8s.io/client-go/kubernetes/scheme:go_default_library", "//vendor/k8s.io/client-go/pkg/api/v1:go_default_library", "//vendor/k8s.io/client-go/tools/cache/testing:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) @@ -72,6 +72,8 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/labels:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/cache:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", @@ -79,6 +81,5 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", "//vendor/k8s.io/client-go/kubernetes/scheme:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) diff --git a/staging/src/k8s.io/client-go/tools/cache/controller.go b/staging/src/k8s.io/client-go/tools/cache/controller.go index e8c6a0e1a0d..e8fe670651c 100644 --- a/staging/src/k8s.io/client-go/tools/cache/controller.go +++ b/staging/src/k8s.io/client-go/tools/cache/controller.go @@ -21,9 +21,9 @@ import ( "time" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/clock" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/client-go/util/clock" ) // Config contains all the settings for a Controller. diff --git a/staging/src/k8s.io/client-go/tools/cache/expiration_cache.go b/staging/src/k8s.io/client-go/tools/cache/expiration_cache.go index befac1c758d..fa88fc407e3 100644 --- a/staging/src/k8s.io/client-go/tools/cache/expiration_cache.go +++ b/staging/src/k8s.io/client-go/tools/cache/expiration_cache.go @@ -21,7 +21,7 @@ import ( "time" "github.com/golang/glog" - "k8s.io/client-go/util/clock" + "k8s.io/apimachinery/pkg/util/clock" ) // ExpirationCache implements the store interface diff --git a/staging/src/k8s.io/client-go/tools/cache/expiration_cache_fakes.go b/staging/src/k8s.io/client-go/tools/cache/expiration_cache_fakes.go index ab2f57687ef..a096765f6b4 100644 --- a/staging/src/k8s.io/client-go/tools/cache/expiration_cache_fakes.go +++ b/staging/src/k8s.io/client-go/tools/cache/expiration_cache_fakes.go @@ -17,8 +17,8 @@ limitations under the License. package cache import ( + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/client-go/util/clock" ) type fakeThreadSafeMap struct { diff --git a/staging/src/k8s.io/client-go/tools/cache/expiration_cache_test.go b/staging/src/k8s.io/client-go/tools/cache/expiration_cache_test.go index 17139d5940c..fac621cbc8b 100644 --- a/staging/src/k8s.io/client-go/tools/cache/expiration_cache_test.go +++ b/staging/src/k8s.io/client-go/tools/cache/expiration_cache_test.go @@ -21,9 +21,9 @@ import ( "testing" "time" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/client-go/util/clock" ) func TestTTLExpirationBasic(t *testing.T) { diff --git a/staging/src/k8s.io/client-go/tools/cache/reflector.go b/staging/src/k8s.io/client-go/tools/cache/reflector.go index b43f43a5e72..9a730610c62 100644 --- a/staging/src/k8s.io/client-go/tools/cache/reflector.go +++ b/staging/src/k8s.io/client-go/tools/cache/reflector.go @@ -38,10 +38,10 @@ import ( "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/clock" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" - "k8s.io/client-go/util/clock" ) // Reflector watches a specified resource and causes all changes to be reflected in the given store. diff --git a/staging/src/k8s.io/client-go/tools/cache/shared_informer.go b/staging/src/k8s.io/client-go/tools/cache/shared_informer.go index 7c28dc58afa..a0dbbb697b2 100644 --- a/staging/src/k8s.io/client-go/tools/cache/shared_informer.go +++ b/staging/src/k8s.io/client-go/tools/cache/shared_informer.go @@ -22,9 +22,9 @@ import ( "time" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/clock" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/client-go/util/clock" "github.com/golang/glog" ) diff --git a/staging/src/k8s.io/client-go/tools/cache/shared_informer_test.go b/staging/src/k8s.io/client-go/tools/cache/shared_informer_test.go index 525223b4578..216ba923c24 100644 --- a/staging/src/k8s.io/client-go/tools/cache/shared_informer_test.go +++ b/staging/src/k8s.io/client-go/tools/cache/shared_informer_test.go @@ -24,11 +24,11 @@ import ( "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/pkg/api/v1" fcache "k8s.io/client-go/tools/cache/testing" - "k8s.io/client-go/util/clock" ) type testListener struct { diff --git a/staging/src/k8s.io/client-go/tools/record/BUILD b/staging/src/k8s.io/client-go/tools/record/BUILD index 5bca64892fe..b9f2fe10880 100644 --- a/staging/src/k8s.io/client-go/tools/record/BUILD +++ b/staging/src/k8s.io/client-go/tools/record/BUILD @@ -20,13 +20,13 @@ go_test( "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library", "//vendor/k8s.io/client-go/kubernetes/scheme:go_default_library", "//vendor/k8s.io/client-go/pkg/api/v1:go_default_library", "//vendor/k8s.io/client-go/pkg/api/v1/ref:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) @@ -45,6 +45,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library", @@ -52,6 +53,5 @@ go_library( "//vendor/k8s.io/client-go/pkg/api/v1:go_default_library", "//vendor/k8s.io/client-go/pkg/api/v1/ref:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) diff --git a/staging/src/k8s.io/client-go/tools/record/event.go b/staging/src/k8s.io/client-go/tools/record/event.go index 999bd1cc480..6b2fad4096f 100644 --- a/staging/src/k8s.io/client-go/tools/record/event.go +++ b/staging/src/k8s.io/client-go/tools/record/event.go @@ -24,12 +24,12 @@ import ( "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/clock" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/watch" "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/pkg/api/v1/ref" restclient "k8s.io/client-go/rest" - "k8s.io/client-go/util/clock" "net/http" diff --git a/staging/src/k8s.io/client-go/tools/record/event_test.go b/staging/src/k8s.io/client-go/tools/record/event_test.go index 925990819ac..bc09f68fe96 100644 --- a/staging/src/k8s.io/client-go/tools/record/event_test.go +++ b/staging/src/k8s.io/client-go/tools/record/event_test.go @@ -28,12 +28,12 @@ import ( "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" k8sruntime "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/strategicpatch" "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/pkg/api/v1/ref" restclient "k8s.io/client-go/rest" - "k8s.io/client-go/util/clock" ) type testEventSink struct { diff --git a/staging/src/k8s.io/client-go/tools/record/events_cache.go b/staging/src/k8s.io/client-go/tools/record/events_cache.go index f9a9ba9dda6..f5c0ca35ff1 100644 --- a/staging/src/k8s.io/client-go/tools/record/events_cache.go +++ b/staging/src/k8s.io/client-go/tools/record/events_cache.go @@ -26,10 +26,10 @@ import ( "github.com/golang/groupcache/lru" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/strategicpatch" "k8s.io/client-go/pkg/api/v1" - "k8s.io/client-go/util/clock" ) const ( diff --git a/staging/src/k8s.io/client-go/tools/record/events_cache_test.go b/staging/src/k8s.io/client-go/tools/record/events_cache_test.go index b6b52881cd9..614b214ee49 100644 --- a/staging/src/k8s.io/client-go/tools/record/events_cache_test.go +++ b/staging/src/k8s.io/client-go/tools/record/events_cache_test.go @@ -23,9 +23,9 @@ import ( "time" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/diff" "k8s.io/client-go/pkg/api/v1" - "k8s.io/client-go/util/clock" ) func makeObjectReference(kind, name, namespace string) v1.ObjectReference { diff --git a/staging/src/k8s.io/client-go/util/flowcontrol/BUILD b/staging/src/k8s.io/client-go/util/flowcontrol/BUILD index 8509d7c2279..8b8a385199a 100644 --- a/staging/src/k8s.io/client-go/util/flowcontrol/BUILD +++ b/staging/src/k8s.io/client-go/util/flowcontrol/BUILD @@ -16,7 +16,7 @@ go_test( ], library = ":go_default_library", tags = ["automanaged"], - deps = ["//vendor/k8s.io/client-go/util/clock:go_default_library"], + deps = ["//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library"], ) go_library( @@ -28,7 +28,7 @@ go_library( tags = ["automanaged"], deps = [ "//vendor/github.com/juju/ratelimit:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/client-go/util/integer:go_default_library", ], ) diff --git a/staging/src/k8s.io/client-go/util/flowcontrol/backoff.go b/staging/src/k8s.io/client-go/util/flowcontrol/backoff.go index 030b15a5608..71d442a62b4 100644 --- a/staging/src/k8s.io/client-go/util/flowcontrol/backoff.go +++ b/staging/src/k8s.io/client-go/util/flowcontrol/backoff.go @@ -20,7 +20,7 @@ import ( "sync" "time" - "k8s.io/client-go/util/clock" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/client-go/util/integer" ) diff --git a/staging/src/k8s.io/client-go/util/flowcontrol/backoff_test.go b/staging/src/k8s.io/client-go/util/flowcontrol/backoff_test.go index 5d1e41347f1..23a6cbfa309 100644 --- a/staging/src/k8s.io/client-go/util/flowcontrol/backoff_test.go +++ b/staging/src/k8s.io/client-go/util/flowcontrol/backoff_test.go @@ -20,7 +20,7 @@ import ( "testing" "time" - "k8s.io/client-go/util/clock" + "k8s.io/apimachinery/pkg/util/clock" ) func TestSlowBackoff(t *testing.T) { diff --git a/staging/src/k8s.io/client-go/util/workqueue/BUILD b/staging/src/k8s.io/client-go/util/workqueue/BUILD index 9772567dd91..506bc8883e3 100644 --- a/staging/src/k8s.io/client-go/util/workqueue/BUILD +++ b/staging/src/k8s.io/client-go/util/workqueue/BUILD @@ -18,8 +18,8 @@ go_test( library = ":go_default_library", tags = ["automanaged"], deps = [ + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) @@ -37,8 +37,8 @@ go_library( tags = ["automanaged"], deps = [ "//vendor/github.com/juju/ratelimit:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library", - "//vendor/k8s.io/client-go/util/clock:go_default_library", ], ) diff --git a/staging/src/k8s.io/client-go/util/workqueue/delaying_queue.go b/staging/src/k8s.io/client-go/util/workqueue/delaying_queue.go index 660c6572c22..74fefd38b72 100644 --- a/staging/src/k8s.io/client-go/util/workqueue/delaying_queue.go +++ b/staging/src/k8s.io/client-go/util/workqueue/delaying_queue.go @@ -20,8 +20,8 @@ import ( "container/heap" "time" + "k8s.io/apimachinery/pkg/util/clock" utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/client-go/util/clock" ) // DelayingInterface is an Interface that can Add an item at a later time. This makes it easier to diff --git a/staging/src/k8s.io/client-go/util/workqueue/delaying_queue_test.go b/staging/src/k8s.io/client-go/util/workqueue/delaying_queue_test.go index 4c61939fa7e..3c8ebf13a3f 100644 --- a/staging/src/k8s.io/client-go/util/workqueue/delaying_queue_test.go +++ b/staging/src/k8s.io/client-go/util/workqueue/delaying_queue_test.go @@ -23,8 +23,8 @@ import ( "testing" "time" + "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/client-go/util/clock" ) func TestSimpleQueue(t *testing.T) { diff --git a/staging/src/k8s.io/client-go/util/workqueue/rate_limitting_queue_test.go b/staging/src/k8s.io/client-go/util/workqueue/rate_limitting_queue_test.go index f6b2c0f8e72..32d7fc90683 100644 --- a/staging/src/k8s.io/client-go/util/workqueue/rate_limitting_queue_test.go +++ b/staging/src/k8s.io/client-go/util/workqueue/rate_limitting_queue_test.go @@ -20,7 +20,7 @@ import ( "testing" "time" - "k8s.io/client-go/util/clock" + "k8s.io/apimachinery/pkg/util/clock" ) func TestRateLimitingQueue(t *testing.T) { From 5439cfd24571a1727aacf741d3ab8bd33f974cab Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Tue, 16 May 2017 23:59:47 -0400 Subject: [PATCH 06/10] Add a filtering resource handler for informers Allows an informer consumer to easily filter a set of changes out, possibly to maintain a smaller cache or to only operate on a known set of objects. --- .../client-go/tools/cache/controller.go | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/staging/src/k8s.io/client-go/tools/cache/controller.go b/staging/src/k8s.io/client-go/tools/cache/controller.go index e8fe670651c..2c97b86580c 100644 --- a/staging/src/k8s.io/client-go/tools/cache/controller.go +++ b/staging/src/k8s.io/client-go/tools/cache/controller.go @@ -207,6 +207,47 @@ func (r ResourceEventHandlerFuncs) OnDelete(obj interface{}) { } } +// FilteringResourceEventHandler applies the provided filter to all events coming +// in, ensuring the appropriate nested handler method is invoked. An object +// that starts passing the filter after an update is considered an add, and an +// object that stops passing the filter after an update is considered a delete. +type FilteringResourceEventHandler struct { + FilterFunc func(obj interface{}) bool + Handler ResourceEventHandler +} + +// OnAdd calls the nested handler only if the filter succeeds +func (r FilteringResourceEventHandler) OnAdd(obj interface{}) { + if !r.FilterFunc(obj) { + return + } + r.Handler.OnAdd(obj) +} + +// OnUpdate ensures the proper handler is called depending on whether the filter matches +func (r FilteringResourceEventHandler) OnUpdate(oldObj, newObj interface{}) { + newer := r.FilterFunc(newObj) + older := r.FilterFunc(oldObj) + switch { + case newer && older: + r.Handler.OnUpdate(oldObj, newObj) + case newer && !older: + r.Handler.OnAdd(newObj) + case !newer && older: + r.Handler.OnDelete(oldObj) + default: + // do nothing + } +} + +// OnDelete calls the nested handler only if the filter succeeds +func (r FilteringResourceEventHandler) OnDelete(obj interface{}) { + if !r.FilterFunc(obj) { + return + } + r.Handler.OnDelete(obj) +} + // DeletionHandlingMetaNamespaceKeyFunc checks for // DeletedFinalStateUnknown objects before calling // MetaNamespaceKeyFunc. From 5ac3214c427614ec5c4a53ddc05d952474402412 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Thu, 18 May 2017 18:25:37 -0400 Subject: [PATCH 07/10] Mutation cache should support retrieving items from ByIndex() Allows tokens controller to observe updates --- .../client-go/tools/cache/mutation_cache.go | 73 +++++++++++++++---- .../controller/status/naming_controller.go | 2 +- .../status/naming_controller_test.go | 3 +- 3 files changed, 60 insertions(+), 18 deletions(-) diff --git a/staging/src/k8s.io/client-go/tools/cache/mutation_cache.go b/staging/src/k8s.io/client-go/tools/cache/mutation_cache.go index f9f68fa46dd..0fa06bf77dd 100644 --- a/staging/src/k8s.io/client-go/tools/cache/mutation_cache.go +++ b/staging/src/k8s.io/client-go/tools/cache/mutation_cache.go @@ -20,16 +20,19 @@ import ( "fmt" "strconv" "sync" + "time" - lru "github.com/hashicorp/golang-lru" + "github.com/golang/glog" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" + utilcache "k8s.io/apimachinery/pkg/util/cache" utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/apimachinery/pkg/util/sets" ) // MutationCache is able to take the result of update operations and stores them in an LRU -// that can be used to provide a more current view of a requested object. It requires interpretting +// that can be used to provide a more current view of a requested object. It requires interpreting // resourceVersions for comparisons. // Implementations must be thread-safe. // TODO find a way to layer this into an informer/lister @@ -50,19 +53,20 @@ type ResourceVersionComparator interface { // - increases when updated // - is comparable across the same resource in a namespace // -// Most backends will have these semantics. Indexer may be nil. -func NewIntegerResourceVersionMutationCache(backingCache Store, indexer Indexer) MutationCache { - lru, err := lru.New(100) - if err != nil { - // errors only happen on invalid sizes, this would be programmer error - panic(err) - } - +// Most backends will have these semantics. Indexer may be nil. ttl controls how long an item +// remains in the mutation cache before it is removed. +// +// If includeAdds is true, objects in the mutation cache will be returned even if they don't exist +// in the underlying store. This is only safe if your use of the cache can handle mutation entries +// remaining in the cache for up to ttl when mutations and deletes occur very closely in time. +func NewIntegerResourceVersionMutationCache(backingCache Store, indexer Indexer, ttl time.Duration, includeAdds bool) MutationCache { return &mutationCache{ backingCache: backingCache, indexer: indexer, - mutationCache: lru, + mutationCache: utilcache.NewLRUExpireCache(100), comparator: etcdObjectVersioner{}, + ttl: ttl, + includeAdds: includeAdds, } } @@ -73,7 +77,9 @@ type mutationCache struct { lock sync.Mutex backingCache Store indexer Indexer - mutationCache *lru.Cache + mutationCache *utilcache.LRUExpireCache + includeAdds bool + ttl time.Duration comparator ResourceVersionComparator } @@ -90,9 +96,15 @@ func (c *mutationCache) GetByKey(key string) (interface{}, bool, error) { return nil, false, err } if !exists { - // we can't distinguish between, "didn't observe create" and "was deleted after create", so - // if the key is missing, we always return it as missing - return nil, false, nil + if !c.includeAdds { + // we can't distinguish between, "didn't observe create" and "was deleted after create", so + // if the key is missing, we always return it as missing + return nil, false, nil + } + obj, exists = c.mutationCache.Get(key) + if !exists { + return nil, false, nil + } } objRuntime, ok := obj.(runtime.Object) if !ok { @@ -114,7 +126,9 @@ func (c *mutationCache) ByIndex(name string, indexKey string) ([]interface{}, er return nil, err } var items []interface{} + keySet := sets.NewString() for _, key := range keys { + keySet.Insert(key) obj, exists, err := c.indexer.GetByKey(key) if err != nil { return nil, err @@ -128,6 +142,33 @@ func (c *mutationCache) ByIndex(name string, indexKey string) ([]interface{}, er items = append(items, obj) } } + + if c.includeAdds { + fn := c.indexer.GetIndexers()[name] + // Keys() is returned oldest to newest, so full traversal does not alter the LRU behavior + for _, key := range c.mutationCache.Keys() { + updated, ok := c.mutationCache.Get(key) + if !ok { + continue + } + if keySet.Has(key.(string)) { + continue + } + elements, err := fn(updated) + if err != nil { + glog.V(4).Info("Unable to calculate an index entry for mutation cache entry %s: %v", key, err) + continue + } + for _, inIndex := range elements { + if inIndex != indexKey { + continue + } + items = append(items, updated) + break + } + } + } + return items, nil } @@ -175,7 +216,7 @@ func (c *mutationCache) Mutation(obj interface{}) { } } } - c.mutationCache.Add(key, obj) + c.mutationCache.Add(key, obj, c.ttl) } // etcdObjectVersioner implements versioning and extracting etcd node information diff --git a/staging/src/k8s.io/kube-apiextensions-server/pkg/controller/status/naming_controller.go b/staging/src/k8s.io/kube-apiextensions-server/pkg/controller/status/naming_controller.go index 77f3c887ec5..9428cc7c0c0 100644 --- a/staging/src/k8s.io/kube-apiextensions-server/pkg/controller/status/naming_controller.go +++ b/staging/src/k8s.io/kube-apiextensions-server/pkg/controller/status/naming_controller.go @@ -71,7 +71,7 @@ func NewNamingConditionController( } informerIndexer := crdInformer.Informer().GetIndexer() - c.crdMutationCache = cache.NewIntegerResourceVersionMutationCache(informerIndexer, informerIndexer) + c.crdMutationCache = cache.NewIntegerResourceVersionMutationCache(informerIndexer, informerIndexer, 60*time.Second, false) crdInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ AddFunc: c.addCustomResourceDefinition, diff --git a/staging/src/k8s.io/kube-apiextensions-server/pkg/controller/status/naming_controller_test.go b/staging/src/k8s.io/kube-apiextensions-server/pkg/controller/status/naming_controller_test.go index 774015187f5..f79031a9644 100644 --- a/staging/src/k8s.io/kube-apiextensions-server/pkg/controller/status/naming_controller_test.go +++ b/staging/src/k8s.io/kube-apiextensions-server/pkg/controller/status/naming_controller_test.go @@ -20,6 +20,7 @@ import ( "reflect" "strings" "testing" + "time" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/tools/cache" @@ -242,7 +243,7 @@ func TestSync(t *testing.T) { c := NamingConditionController{ crdLister: listers.NewCustomResourceDefinitionLister(crdIndexer), - crdMutationCache: cache.NewIntegerResourceVersionMutationCache(crdIndexer, crdIndexer), + crdMutationCache: cache.NewIntegerResourceVersionMutationCache(crdIndexer, crdIndexer, 60*time.Second, false), } actualNames, actualCondition := c.calculateNames(tc.in) From 784e3ae5fa0d3135f35bf71d40be6662c6e1139f Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Wed, 17 May 2017 00:01:50 -0400 Subject: [PATCH 08/10] Switch the tokens controller to use shared informers Tokens controller previously needed a bit of extra help in order to be safe for concurrent use. The new MutationCache allows it to keep a local cache and still use a shared informer. The filtering event handler lets it only see changes to secrets it cares about. --- .../app/controllermanager.go | 10 +- .../serviceaccount/tokens_controller.go | 107 ++++++++---------- .../serviceaccount/tokens_controller_test.go | 36 ++++-- .../serviceaccount/service_account_test.go | 9 +- 4 files changed, 87 insertions(+), 75 deletions(-) diff --git a/cmd/kube-controller-manager/app/controllermanager.go b/cmd/kube-controller-manager/app/controllermanager.go index 9f347136ee0..a6c370bbd85 100644 --- a/cmd/kube-controller-manager/app/controllermanager.go +++ b/cmd/kube-controller-manager/app/controllermanager.go @@ -397,14 +397,20 @@ func StartControllers(controllers map[string]InitFunc, s *options.CMServer, root rootCA = rootClientBuilder.ConfigOrDie("tokens-controller").CAData } - go serviceaccountcontroller.NewTokensController( + controller := serviceaccountcontroller.NewTokensController( + sharedInformers.Core().V1().ServiceAccounts(), + sharedInformers.Core().V1().Secrets(), rootClientBuilder.ClientOrDie("tokens-controller"), serviceaccountcontroller.TokensControllerOptions{ TokenGenerator: serviceaccount.JWTTokenGenerator(privateKey), RootCA: rootCA, }, - ).Run(int(s.ConcurrentSATokenSyncs), stop) + ) time.Sleep(wait.Jitter(s.ControllerStartInterval.Duration, ControllerStartJitter)) + go controller.Run(int(s.ConcurrentSATokenSyncs), stop) + + // start the first set of informers now so that other controllers can start + sharedInformers.Start(stop) } } else { diff --git a/pkg/controller/serviceaccount/tokens_controller.go b/pkg/controller/serviceaccount/tokens_controller.go index 8850628523e..71df8e2eaee 100644 --- a/pkg/controller/serviceaccount/tokens_controller.go +++ b/pkg/controller/serviceaccount/tokens_controller.go @@ -24,20 +24,19 @@ import ( "github.com/golang/glog" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/fields" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/apimachinery/pkg/watch" "k8s.io/client-go/tools/cache" "k8s.io/client-go/util/workqueue" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" + informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions/core/v1" + listersv1 "k8s.io/kubernetes/pkg/client/listers/core/v1" clientretry "k8s.io/kubernetes/pkg/client/retry" + "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/registry/core/secret" "k8s.io/kubernetes/pkg/serviceaccount" "k8s.io/kubernetes/pkg/util/metrics" @@ -71,7 +70,7 @@ type TokensControllerOptions struct { } // NewTokensController returns a new *TokensController. -func NewTokensController(cl clientset.Interface, options TokensControllerOptions) *TokensController { +func NewTokensController(serviceAccounts informers.ServiceAccountInformer, secrets informers.SecretInformer, cl clientset.Interface, options TokensControllerOptions) *TokensController { maxRetries := options.MaxRetries if maxRetries == 0 { maxRetries = 10 @@ -91,44 +90,38 @@ func NewTokensController(cl clientset.Interface, options TokensControllerOptions metrics.RegisterMetricAndTrackRateLimiterUsage("serviceaccount_controller", cl.Core().RESTClient().GetRateLimiter()) } - e.serviceAccounts, e.serviceAccountController = cache.NewInformer( - &cache.ListWatch{ - ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { - return e.client.Core().ServiceAccounts(metav1.NamespaceAll).List(options) - }, - WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { - return e.client.Core().ServiceAccounts(metav1.NamespaceAll).Watch(options) - }, - }, - &v1.ServiceAccount{}, - options.ServiceAccountResync, + e.serviceAccounts = serviceAccounts.Lister() + e.serviceAccountSynced = serviceAccounts.Informer().HasSynced + serviceAccounts.Informer().AddEventHandlerWithResyncPeriod( cache.ResourceEventHandlerFuncs{ AddFunc: e.queueServiceAccountSync, UpdateFunc: e.queueServiceAccountUpdateSync, DeleteFunc: e.queueServiceAccountSync, }, + options.ServiceAccountResync, ) - tokenSelector := fields.SelectorFromSet(map[string]string{api.SecretTypeField: string(v1.SecretTypeServiceAccountToken)}) - e.secrets, e.secretController = cache.NewIndexerInformer( - &cache.ListWatch{ - ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { - options.FieldSelector = tokenSelector.String() - return e.client.Core().Secrets(metav1.NamespaceAll).List(options) + secretCache := secrets.Informer().GetIndexer() + e.updatedSecrets = cache.NewIntegerResourceVersionMutationCache(secretCache, secretCache, 60*time.Second, true) + e.secretSynced = secrets.Informer().HasSynced + secrets.Informer().AddEventHandlerWithResyncPeriod( + cache.FilteringResourceEventHandler{ + FilterFunc: func(obj interface{}) bool { + switch t := obj.(type) { + case *v1.Secret: + return t.Type == v1.SecretTypeServiceAccountToken + default: + utilruntime.HandleError(fmt.Errorf("object passed to %T that is not expected: %T", e, obj)) + return false + } }, - WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { - options.FieldSelector = tokenSelector.String() - return e.client.Core().Secrets(metav1.NamespaceAll).Watch(options) + Handler: cache.ResourceEventHandlerFuncs{ + AddFunc: e.queueSecretSync, + UpdateFunc: e.queueSecretUpdateSync, + DeleteFunc: e.queueSecretSync, }, }, - &v1.Secret{}, options.SecretResync, - cache.ResourceEventHandlerFuncs{ - AddFunc: e.queueSecretSync, - UpdateFunc: e.queueSecretUpdateSync, - DeleteFunc: e.queueSecretSync, - }, - cache.Indexers{"namespace": cache.MetaNamespaceIndexFunc}, ) return e @@ -141,12 +134,15 @@ type TokensController struct { rootCA []byte - serviceAccounts cache.Store - secrets cache.Indexer + serviceAccounts listersv1.ServiceAccountLister + // updatedSecrets is a wrapper around the shared cache which allows us to record + // and return our local mutations (since we're very likely to act on an updated + // secret before the watch reports it). + updatedSecrets cache.MutationCache // Since we join two objects, we'll watch both of them with controllers. - serviceAccountController cache.Controller - secretController cache.Controller + serviceAccountSynced cache.InformerSynced + secretSynced cache.InformerSynced // syncServiceAccountQueue handles service account events: // * ensures a referenced token exists for service accounts which still exist @@ -166,29 +162,22 @@ type TokensController struct { // Runs controller blocks until stopCh is closed func (e *TokensController) Run(workers int, stopCh <-chan struct{}) { + // Shut down queues defer utilruntime.HandleCrash() + defer e.syncServiceAccountQueue.ShutDown() + defer e.syncSecretQueue.ShutDown() - // Start controllers (to fill stores, call informers, fill work queues) - go e.serviceAccountController.Run(stopCh) - go e.secretController.Run(stopCh) - - // Wait for stores to fill - for !e.serviceAccountController.HasSynced() || !e.secretController.HasSynced() { - time.Sleep(100 * time.Millisecond) + if !controller.WaitForCacheSync("tokens", stopCh, e.serviceAccountSynced, e.secretSynced) { + return } - // Spawn workers to process work queues + glog.V(5).Infof("Starting workers") for i := 0; i < workers; i++ { go wait.Until(e.syncServiceAccount, 0, stopCh) go wait.Until(e.syncSecret, 0, stopCh) } - - // Block until stop channel is closed <-stopCh - - // Shut down queues - e.syncServiceAccountQueue.ShutDown() - e.syncSecretQueue.ShutDown() + glog.V(1).Infof("Shutting down") } func (e *TokensController) queueServiceAccountSync(obj interface{}) { @@ -423,7 +412,7 @@ func (e *TokensController) ensureReferencedToken(serviceAccount *v1.ServiceAccou } // Manually add the new token to the cache store. // This prevents the service account update (below) triggering another token creation, if the referenced token couldn't be found in the store - e.secrets.Add(createdToken) + e.updatedSecrets.Mutation(createdToken) // Try to add a reference to the newly created token to the service account addedReference := false @@ -626,15 +615,11 @@ func (e *TokensController) removeSecretReference(saNamespace string, saName stri func (e *TokensController) getServiceAccount(ns string, name string, uid types.UID, fetchOnCacheMiss bool) (*v1.ServiceAccount, error) { // Look up in cache - obj, exists, err := e.serviceAccounts.GetByKey(makeCacheKey(ns, name)) - if err != nil { + sa, err := e.serviceAccounts.ServiceAccounts(ns).Get(name) + if err != nil && !apierrors.IsNotFound(err) { return nil, err } - if exists { - sa, ok := obj.(*v1.ServiceAccount) - if !ok { - return nil, fmt.Errorf("expected *v1.ServiceAccount, got %#v", sa) - } + if sa != nil { // Ensure UID matches if given if len(uid) == 0 || uid == sa.UID { return sa, nil @@ -646,7 +631,7 @@ func (e *TokensController) getServiceAccount(ns string, name string, uid types.U } // Live lookup - sa, err := e.client.Core().ServiceAccounts(ns).Get(name, metav1.GetOptions{}) + sa, err = e.client.Core().ServiceAccounts(ns).Get(name, metav1.GetOptions{}) if apierrors.IsNotFound(err) { return nil, nil } @@ -662,7 +647,7 @@ func (e *TokensController) getServiceAccount(ns string, name string, uid types.U func (e *TokensController) getSecret(ns string, name string, uid types.UID, fetchOnCacheMiss bool) (*v1.Secret, error) { // Look up in cache - obj, exists, err := e.secrets.GetByKey(makeCacheKey(ns, name)) + obj, exists, err := e.updatedSecrets.GetByKey(makeCacheKey(ns, name)) if err != nil { return nil, err } @@ -699,7 +684,7 @@ func (e *TokensController) getSecret(ns string, name string, uid types.UID, fetc // listTokenSecrets returns a list of all of the ServiceAccountToken secrets that // reference the given service account's name and uid func (e *TokensController) listTokenSecrets(serviceAccount *v1.ServiceAccount) ([]*v1.Secret, error) { - namespaceSecrets, err := e.secrets.ByIndex("namespace", serviceAccount.Namespace) + namespaceSecrets, err := e.updatedSecrets.ByIndex("namespace", serviceAccount.Namespace) if err != nil { return nil, err } diff --git a/pkg/controller/serviceaccount/tokens_controller_test.go b/pkg/controller/serviceaccount/tokens_controller_test.go index 06b9e375b40..66308cb79d0 100644 --- a/pkg/controller/serviceaccount/tokens_controller_test.go +++ b/pkg/controller/serviceaccount/tokens_controller_test.go @@ -34,6 +34,8 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" + informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions" + "k8s.io/kubernetes/pkg/controller" ) type testGenerator struct { @@ -220,6 +222,7 @@ func TestTokenCreation(t *testing.T) { UpdatedServiceAccount *v1.ServiceAccount DeletedServiceAccount *v1.ServiceAccount AddedSecret *v1.Secret + AddedSecretLocal *v1.Secret UpdatedSecret *v1.Secret DeletedSecret *v1.Secret @@ -306,6 +309,13 @@ func TestTokenCreation(t *testing.T) { core.NewUpdateAction(schema.GroupVersionResource{Version: "v1", Resource: "serviceaccounts"}, metav1.NamespaceDefault, serviceAccount(addTokenSecretReference(missingSecretReferences()))), }, }, + "new serviceaccount with missing secrets and a local secret in the cache": { + ClientObjects: []runtime.Object{serviceAccount(missingSecretReferences())}, + + AddedServiceAccount: serviceAccount(tokenSecretReferences()), + AddedSecretLocal: serviceAccountTokenSecret(), + ExpectedActions: []core.Action{}, + }, "new serviceaccount with non-token secrets": { ClientObjects: []runtime.Object{serviceAccount(regularSecretReferences()), opaqueSecret()}, @@ -572,38 +582,44 @@ func TestTokenCreation(t *testing.T) { for _, reactor := range tc.Reactors { client.Fake.PrependReactor(reactor.verb, reactor.resource, reactor.reactor(t)) } - - controller := NewTokensController(client, TokensControllerOptions{TokenGenerator: generator, RootCA: []byte("CA Data"), MaxRetries: tc.MaxRetries}) + informers := informers.NewSharedInformerFactory(client, controller.NoResyncPeriodFunc()) + secretInformer := informers.Core().V1().Secrets().Informer() + secrets := secretInformer.GetStore() + serviceAccounts := informers.Core().V1().ServiceAccounts().Informer().GetStore() + controller := NewTokensController(informers.Core().V1().ServiceAccounts(), informers.Core().V1().Secrets(), client, TokensControllerOptions{TokenGenerator: generator, RootCA: []byte("CA Data"), MaxRetries: tc.MaxRetries}) if tc.ExistingServiceAccount != nil { - controller.serviceAccounts.Add(tc.ExistingServiceAccount) + serviceAccounts.Add(tc.ExistingServiceAccount) } for _, s := range tc.ExistingSecrets { - controller.secrets.Add(s) + secrets.Add(s) } if tc.AddedServiceAccount != nil { - controller.serviceAccounts.Add(tc.AddedServiceAccount) + serviceAccounts.Add(tc.AddedServiceAccount) controller.queueServiceAccountSync(tc.AddedServiceAccount) } if tc.UpdatedServiceAccount != nil { - controller.serviceAccounts.Add(tc.UpdatedServiceAccount) + serviceAccounts.Add(tc.UpdatedServiceAccount) controller.queueServiceAccountUpdateSync(nil, tc.UpdatedServiceAccount) } if tc.DeletedServiceAccount != nil { - controller.serviceAccounts.Delete(tc.DeletedServiceAccount) + serviceAccounts.Delete(tc.DeletedServiceAccount) controller.queueServiceAccountSync(tc.DeletedServiceAccount) } if tc.AddedSecret != nil { - controller.secrets.Add(tc.AddedSecret) + secrets.Add(tc.AddedSecret) controller.queueSecretSync(tc.AddedSecret) } + if tc.AddedSecretLocal != nil { + controller.updatedSecrets.Mutation(tc.AddedSecretLocal) + } if tc.UpdatedSecret != nil { - controller.secrets.Add(tc.UpdatedSecret) + secrets.Add(tc.UpdatedSecret) controller.queueSecretUpdateSync(nil, tc.UpdatedSecret) } if tc.DeletedSecret != nil { - controller.secrets.Delete(tc.DeletedSecret) + secrets.Delete(tc.DeletedSecret) controller.queueSecretSync(tc.DeletedSecret) } diff --git a/test/integration/serviceaccount/service_account_test.go b/test/integration/serviceaccount/service_account_test.go index 91e058e92c4..ce90fee2adf 100644 --- a/test/integration/serviceaccount/service_account_test.go +++ b/test/integration/serviceaccount/service_account_test.go @@ -408,6 +408,7 @@ func startServiceAccountTestServer(t *testing.T) (*clientset.Clientset, restclie serviceAccountAdmission.SetInternalKubeClientSet(internalRootClientset) internalInformers := internalinformers.NewSharedInformerFactory(internalRootClientset, controller.NoResyncPeriodFunc()) serviceAccountAdmission.SetInternalKubeInformerFactory(internalInformers) + informers := informers.NewSharedInformerFactory(rootClientset, controller.NoResyncPeriodFunc()) masterConfig := framework.NewMasterConfig() masterConfig.GenericConfig.EnableIndex = true @@ -418,10 +419,14 @@ func startServiceAccountTestServer(t *testing.T) (*clientset.Clientset, restclie // Start the service account and service account token controllers stopCh := make(chan struct{}) - tokenController := serviceaccountcontroller.NewTokensController(rootClientset, serviceaccountcontroller.TokensControllerOptions{TokenGenerator: serviceaccount.JWTTokenGenerator(serviceAccountKey)}) + tokenController := serviceaccountcontroller.NewTokensController( + informers.Core().V1().ServiceAccounts(), + informers.Core().V1().Secrets(), + rootClientset, + serviceaccountcontroller.TokensControllerOptions{TokenGenerator: serviceaccount.JWTTokenGenerator(serviceAccountKey)}, + ) go tokenController.Run(1, stopCh) - informers := informers.NewSharedInformerFactory(rootClientset, controller.NoResyncPeriodFunc()) serviceAccountController := serviceaccountcontroller.NewServiceAccountsController( informers.Core().V1().ServiceAccounts(), informers.Core().V1().Namespaces(), From 479f01d340b917ac3544f094f38edaed0ab44128 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Wed, 17 May 2017 00:03:25 -0400 Subject: [PATCH 09/10] Scheduler should use shared informer for pods Previously, the scheduler created two separate list watchers. This changes the scheduler to be able to leverage a shared informer, whether passed in externally or spawned using the new in place method. This removes the last use of a "special" informer in the codebase. Allows someone wrapping the scheduler to use a shared informer if they have more information avaliable. --- plugin/cmd/kube-scheduler/app/BUILD | 1 + plugin/cmd/kube-scheduler/app/configurator.go | 2 + plugin/cmd/kube-scheduler/app/server.go | 7 + .../defaults/compatibility_test.go | 1 + plugin/pkg/scheduler/factory/factory.go | 131 +++++++++++++----- plugin/pkg/scheduler/factory/factory_test.go | 8 ++ plugin/pkg/scheduler/scheduler.go | 15 +- test/integration/scheduler/extender_test.go | 1 + test/integration/scheduler/scheduler_test.go | 7 + test/integration/scheduler_perf/util.go | 1 + 10 files changed, 136 insertions(+), 38 deletions(-) diff --git a/plugin/cmd/kube-scheduler/app/BUILD b/plugin/cmd/kube-scheduler/app/BUILD index 2b95dc68e51..72a3c6b35b0 100644 --- a/plugin/cmd/kube-scheduler/app/BUILD +++ b/plugin/cmd/kube-scheduler/app/BUILD @@ -24,6 +24,7 @@ go_library( "//pkg/client/informers/informers_generated/externalversions/extensions/v1beta1:go_default_library", "//pkg/client/leaderelection:go_default_library", "//pkg/client/leaderelection/resourcelock:go_default_library", + "//pkg/controller:go_default_library", "//pkg/util/configz:go_default_library", "//plugin/cmd/kube-scheduler/app/options:go_default_library", "//plugin/pkg/scheduler:go_default_library", diff --git a/plugin/cmd/kube-scheduler/app/configurator.go b/plugin/cmd/kube-scheduler/app/configurator.go index f5f23c3f280..a40dbbb7976 100644 --- a/plugin/cmd/kube-scheduler/app/configurator.go +++ b/plugin/cmd/kube-scheduler/app/configurator.go @@ -77,6 +77,7 @@ func CreateScheduler( s *options.SchedulerServer, kubecli *clientset.Clientset, nodeInformer coreinformers.NodeInformer, + podInformer coreinformers.PodInformer, pvInformer coreinformers.PersistentVolumeInformer, pvcInformer coreinformers.PersistentVolumeClaimInformer, replicationControllerInformer coreinformers.ReplicationControllerInformer, @@ -89,6 +90,7 @@ func CreateScheduler( s.SchedulerName, kubecli, nodeInformer, + podInformer, pvInformer, pvcInformer, replicationControllerInformer, diff --git a/plugin/cmd/kube-scheduler/app/server.go b/plugin/cmd/kube-scheduler/app/server.go index c4ddae780c3..653e3398f49 100644 --- a/plugin/cmd/kube-scheduler/app/server.go +++ b/plugin/cmd/kube-scheduler/app/server.go @@ -31,9 +31,11 @@ import ( informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions" "k8s.io/kubernetes/pkg/client/leaderelection" "k8s.io/kubernetes/pkg/client/leaderelection/resourcelock" + "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/util/configz" "k8s.io/kubernetes/plugin/cmd/kube-scheduler/app/options" _ "k8s.io/kubernetes/plugin/pkg/scheduler/algorithmprovider" + "k8s.io/kubernetes/plugin/pkg/scheduler/factory" "github.com/golang/glog" "github.com/prometheus/client_golang/prometheus" @@ -71,11 +73,14 @@ func Run(s *options.SchedulerServer) error { recorder := createRecorder(kubecli, s) informerFactory := informers.NewSharedInformerFactory(kubecli, 0) + // cache only non-terminal pods + podInformer := factory.NewPodInformer(kubecli, 0) sched, err := CreateScheduler( s, kubecli, informerFactory.Core().V1().Nodes(), + podInformer, informerFactory.Core().V1().PersistentVolumes(), informerFactory.Core().V1().PersistentVolumeClaims(), informerFactory.Core().V1().ReplicationControllers(), @@ -92,9 +97,11 @@ func Run(s *options.SchedulerServer) error { stop := make(chan struct{}) defer close(stop) + go podInformer.Informer().Run(stop) informerFactory.Start(stop) // Waiting for all cache to sync before scheduling. informerFactory.WaitForCacheSync(stop) + controller.WaitForCacheSync("scheduler", stop, podInformer.Informer().HasSynced) run := func(_ <-chan struct{}) { sched.Run() diff --git a/plugin/pkg/scheduler/algorithmprovider/defaults/compatibility_test.go b/plugin/pkg/scheduler/algorithmprovider/defaults/compatibility_test.go index 267ba65cd4c..ccc57efc50b 100644 --- a/plugin/pkg/scheduler/algorithmprovider/defaults/compatibility_test.go +++ b/plugin/pkg/scheduler/algorithmprovider/defaults/compatibility_test.go @@ -352,6 +352,7 @@ func TestCompatibility_v1_Scheduler(t *testing.T) { "some-scheduler-name", client, informerFactory.Core().V1().Nodes(), + informerFactory.Core().V1().Pods(), informerFactory.Core().V1().PersistentVolumes(), informerFactory.Core().V1().PersistentVolumeClaims(), informerFactory.Core().V1().ReplicationControllers(), diff --git a/plugin/pkg/scheduler/factory/factory.go b/plugin/pkg/scheduler/factory/factory.go index 312276f122d..0409e2b0e2d 100644 --- a/plugin/pkg/scheduler/factory/factory.go +++ b/plugin/pkg/scheduler/factory/factory.go @@ -82,7 +82,7 @@ type ConfigFactory struct { // Close this to stop all reflectors StopEverything chan struct{} - scheduledPodPopulator cache.Controller + scheduledPodsHasSynced cache.InformerSynced schedulerCache schedulercache.Cache @@ -105,6 +105,7 @@ func NewConfigFactory( schedulerName string, client clientset.Interface, nodeInformer coreinformers.NodeInformer, + podInformer coreinformers.PodInformer, pvInformer coreinformers.PersistentVolumeInformer, pvcInformer coreinformers.PersistentVolumeClaimInformer, replicationControllerInformer coreinformers.ReplicationControllerInformer, @@ -132,23 +133,60 @@ func NewConfigFactory( hardPodAffinitySymmetricWeight: hardPodAffinitySymmetricWeight, } - // On add/delete to the scheduled pods, remove from the assumed pods. - // We construct this here instead of in CreateFromKeys because - // ScheduledPodLister is something we provide to plug in functions that - // they may need to call. - var scheduledPodIndexer cache.Indexer - scheduledPodIndexer, c.scheduledPodPopulator = cache.NewIndexerInformer( - c.createAssignedNonTerminatedPodLW(), - &v1.Pod{}, - 0, - cache.ResourceEventHandlerFuncs{ - AddFunc: c.addPodToCache, - UpdateFunc: c.updatePodInCache, - DeleteFunc: c.deletePodFromCache, + c.scheduledPodsHasSynced = podInformer.Informer().HasSynced + // scheduled pod cache + podInformer.Informer().AddEventHandler( + cache.FilteringResourceEventHandler{ + FilterFunc: func(obj interface{}) bool { + switch t := obj.(type) { + case *v1.Pod: + return assignedNonTerminatedPod(t) + default: + runtime.HandleError(fmt.Errorf("unable to handle object in %T: %T", c, obj)) + return false + } + }, + Handler: cache.ResourceEventHandlerFuncs{ + AddFunc: c.addPodToCache, + UpdateFunc: c.updatePodInCache, + DeleteFunc: c.deletePodFromCache, + }, }, - cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, ) - c.scheduledPodLister = corelisters.NewPodLister(scheduledPodIndexer) + // unscheduled pod queue + podInformer.Informer().AddEventHandler( + cache.FilteringResourceEventHandler{ + FilterFunc: func(obj interface{}) bool { + switch t := obj.(type) { + case *v1.Pod: + return unassignedNonTerminatedPod(t) + default: + runtime.HandleError(fmt.Errorf("unable to handle object in %T: %T", c, obj)) + return false + } + }, + Handler: cache.ResourceEventHandlerFuncs{ + AddFunc: func(obj interface{}) { + if err := c.podQueue.Add(obj); err != nil { + runtime.HandleError(fmt.Errorf("unable to queue %T: %v", obj, err)) + } + }, + UpdateFunc: func(oldObj, newObj interface{}) { + if err := c.podQueue.Update(newObj); err != nil { + runtime.HandleError(fmt.Errorf("unable to update %T: %v", newObj, err)) + } + }, + DeleteFunc: func(obj interface{}) { + if err := c.podQueue.Delete(obj); err != nil { + runtime.HandleError(fmt.Errorf("unable to dequeue %T: %v", obj, err)) + } + }, + }, + }, + ) + // ScheduledPodLister is something we provide to plug-in functions that + // they may need to call. + c.scheduledPodLister = podInformer.Lister() // Only nodes in the "Ready" condition with status == "True" are schedulable nodeInformer.Informer().AddEventHandlerWithResyncPeriod( @@ -369,7 +407,6 @@ func (f *ConfigFactory) CreateFromKeys(predicateKeys, priorityKeys sets.String, return nil, err } - f.Run() // TODO(resouer) use equivalence cache instead of nil here when #36238 get merged algo := core.NewGenericScheduler(f.schedulerCache, nil, predicateFuncs, predicateMetaProducer, priorityConfigs, priorityMetaProducer, extenders) podBackoff := util.CreateDefaultPodBackoff() @@ -381,7 +418,7 @@ func (f *ConfigFactory) CreateFromKeys(predicateKeys, priorityKeys sets.String, Binder: &binder{f.client}, PodConditionUpdater: &podConditionUpdater{f.client}, WaitForCacheSync: func() bool { - return cache.WaitForCacheSync(f.StopEverything, f.scheduledPodPopulator.HasSynced) + return cache.WaitForCacheSync(f.StopEverything, f.scheduledPodsHasSynced) }, NextPod: func() *v1.Pod { return f.getNextPod() @@ -450,14 +487,6 @@ func (f *ConfigFactory) getPluginArgs() (*PluginFactoryArgs, error) { }, nil } -func (f *ConfigFactory) Run() { - // Watch and queue pods that need scheduling. - cache.NewReflector(f.createUnassignedNonTerminatedPodLW(), &v1.Pod{}, f.podQueue, 0).RunUntil(f.StopEverything) - - // Begin populating scheduled pods. - go f.scheduledPodPopulator.Run(f.StopEverything) -} - func (f *ConfigFactory) getNextPod() *v1.Pod { for { pod := cache.Pop(f.podQueue).(*v1.Pod) @@ -500,19 +529,47 @@ func getNodeConditionPredicate() corelisters.NodeConditionPredicate { } } -// Returns a cache.ListWatch that finds all pods that need to be -// scheduled. -func (factory *ConfigFactory) createUnassignedNonTerminatedPodLW() *cache.ListWatch { - selector := fields.ParseSelectorOrDie("spec.nodeName==" + "" + ",status.phase!=" + string(v1.PodSucceeded) + ",status.phase!=" + string(v1.PodFailed)) - return cache.NewListWatchFromClient(factory.client.Core().RESTClient(), "pods", metav1.NamespaceAll, selector) +// unassignedNonTerminatedPod selects pods that are unassigned and non-terminal. +func unassignedNonTerminatedPod(pod *v1.Pod) bool { + if len(pod.Spec.NodeName) != 0 { + return false + } + if pod.Status.Phase == v1.PodSucceeded || pod.Status.Phase == v1.PodFailed { + return false + } + return true } -// Returns a cache.ListWatch that finds all pods that are -// already scheduled. -// TODO: return a ListerWatcher interface instead? -func (factory *ConfigFactory) createAssignedNonTerminatedPodLW() *cache.ListWatch { - selector := fields.ParseSelectorOrDie("spec.nodeName!=" + "" + ",status.phase!=" + string(v1.PodSucceeded) + ",status.phase!=" + string(v1.PodFailed)) - return cache.NewListWatchFromClient(factory.client.Core().RESTClient(), "pods", metav1.NamespaceAll, selector) +// assignedNonTerminatedPod selects pods that are assigned and non-terminal (scheduled and running). +func assignedNonTerminatedPod(pod *v1.Pod) bool { + if len(pod.Spec.NodeName) == 0 { + return false + } + if pod.Status.Phase == v1.PodSucceeded || pod.Status.Phase == v1.PodFailed { + return false + } + return true +} + +type podInformer struct { + informer cache.SharedIndexInformer +} + +func (i *podInformer) Informer() cache.SharedIndexInformer { + return i.informer +} + +func (i *podInformer) Lister() corelisters.PodLister { + return corelisters.NewPodLister(i.informer.GetIndexer()) +} + +// NewPodInformer creates a shared index informer that returns only non-terminal pods. +func NewPodInformer(client clientset.Interface, resyncPeriod time.Duration) coreinformers.PodInformer { + selector := fields.ParseSelectorOrDie("status.phase!=" + string(v1.PodSucceeded) + ",status.phase!=" + string(v1.PodFailed)) + lw := cache.NewListWatchFromClient(client.Core().RESTClient(), "pods", metav1.NamespaceAll, selector) + return &podInformer{ + informer: cache.NewSharedIndexInformer(lw, &v1.Pod{}, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}), + } } func (factory *ConfigFactory) MakeDefaultErrorFunc(backoff *util.PodBackoff, podQueue *cache.FIFO) func(pod *v1.Pod, err error) { diff --git a/plugin/pkg/scheduler/factory/factory_test.go b/plugin/pkg/scheduler/factory/factory_test.go index 572703ec726..d72e873a3c5 100644 --- a/plugin/pkg/scheduler/factory/factory_test.go +++ b/plugin/pkg/scheduler/factory/factory_test.go @@ -55,6 +55,7 @@ func TestCreate(t *testing.T) { v1.DefaultSchedulerName, client, informerFactory.Core().V1().Nodes(), + informerFactory.Core().V1().Pods(), informerFactory.Core().V1().PersistentVolumes(), informerFactory.Core().V1().PersistentVolumeClaims(), informerFactory.Core().V1().ReplicationControllers(), @@ -85,6 +86,7 @@ func TestCreateFromConfig(t *testing.T) { v1.DefaultSchedulerName, client, informerFactory.Core().V1().Nodes(), + informerFactory.Core().V1().Pods(), informerFactory.Core().V1().PersistentVolumes(), informerFactory.Core().V1().PersistentVolumeClaims(), informerFactory.Core().V1().ReplicationControllers(), @@ -138,6 +140,7 @@ func TestCreateFromEmptyConfig(t *testing.T) { v1.DefaultSchedulerName, client, informerFactory.Core().V1().Nodes(), + informerFactory.Core().V1().Pods(), informerFactory.Core().V1().PersistentVolumes(), informerFactory.Core().V1().PersistentVolumeClaims(), informerFactory.Core().V1().ReplicationControllers(), @@ -193,6 +196,7 @@ func TestDefaultErrorFunc(t *testing.T) { v1.DefaultSchedulerName, client, informerFactory.Core().V1().Nodes(), + informerFactory.Core().V1().Pods(), informerFactory.Core().V1().PersistentVolumes(), informerFactory.Core().V1().PersistentVolumeClaims(), informerFactory.Core().V1().ReplicationControllers(), @@ -304,6 +308,7 @@ func TestResponsibleForPod(t *testing.T) { v1.DefaultSchedulerName, client, informerFactory.Core().V1().Nodes(), + informerFactory.Core().V1().Pods(), informerFactory.Core().V1().PersistentVolumes(), informerFactory.Core().V1().PersistentVolumeClaims(), informerFactory.Core().V1().ReplicationControllers(), @@ -317,6 +322,7 @@ func TestResponsibleForPod(t *testing.T) { "foo-scheduler", client, informerFactory.Core().V1().Nodes(), + informerFactory.Core().V1().Pods(), informerFactory.Core().V1().PersistentVolumes(), informerFactory.Core().V1().PersistentVolumeClaims(), informerFactory.Core().V1().ReplicationControllers(), @@ -385,6 +391,7 @@ func TestInvalidHardPodAffinitySymmetricWeight(t *testing.T) { v1.DefaultSchedulerName, client, informerFactory.Core().V1().Nodes(), + informerFactory.Core().V1().Pods(), informerFactory.Core().V1().PersistentVolumes(), informerFactory.Core().V1().PersistentVolumeClaims(), informerFactory.Core().V1().ReplicationControllers(), @@ -429,6 +436,7 @@ func TestInvalidFactoryArgs(t *testing.T) { v1.DefaultSchedulerName, client, informerFactory.Core().V1().Nodes(), + informerFactory.Core().V1().Pods(), informerFactory.Core().V1().PersistentVolumes(), informerFactory.Core().V1().PersistentVolumeClaims(), informerFactory.Core().V1().ReplicationControllers(), diff --git a/plugin/pkg/scheduler/scheduler.go b/plugin/pkg/scheduler/scheduler.go index bebcc454fb9..8570427dc1a 100644 --- a/plugin/pkg/scheduler/scheduler.go +++ b/plugin/pkg/scheduler/scheduler.go @@ -20,10 +20,12 @@ import ( "time" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/record" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" corelisters "k8s.io/kubernetes/pkg/client/listers/core/v1" @@ -79,7 +81,6 @@ type Configurator interface { GetNodeLister() corelisters.NodeLister GetClient() clientset.Interface GetScheduledPodLister() corelisters.PodLister - Run() Create() (*Config, error) CreateFromProvider(providerName string) (*Config, error) @@ -171,6 +172,12 @@ func (sched *Scheduler) scheduleOne() { dest, err := sched.config.Algorithm.Schedule(pod, sched.config.NodeLister) if err != nil { glog.V(1).Infof("Failed to schedule pod: %v/%v", pod.Namespace, pod.Name) + copied, cerr := api.Scheme.Copy(pod) + if cerr != nil { + runtime.HandleError(err) + return + } + pod = copied.(*v1.Pod) sched.config.Error(pod, err) sched.config.Recorder.Eventf(pod, v1.EventTypeWarning, "FailedScheduling", "%v", err) sched.config.PodConditionUpdater.Update(pod, &v1.PodCondition{ @@ -232,6 +239,12 @@ func (sched *Scheduler) scheduleOne() { if err := sched.config.SchedulerCache.ForgetPod(&assumed); err != nil { glog.Errorf("scheduler cache ForgetPod failed: %v", err) } + copied, cerr := api.Scheme.Copy(pod) + if cerr != nil { + runtime.HandleError(err) + return + } + pod = copied.(*v1.Pod) sched.config.Error(pod, err) sched.config.Recorder.Eventf(pod, v1.EventTypeWarning, "FailedScheduling", "Binding rejected: %v", err) sched.config.PodConditionUpdater.Update(pod, &v1.PodCondition{ diff --git a/test/integration/scheduler/extender_test.go b/test/integration/scheduler/extender_test.go index 4a8a2b732fd..1c758a9bc57 100644 --- a/test/integration/scheduler/extender_test.go +++ b/test/integration/scheduler/extender_test.go @@ -326,6 +326,7 @@ func TestSchedulerExtender(t *testing.T) { v1.DefaultSchedulerName, clientSet, informerFactory.Core().V1().Nodes(), + informerFactory.Core().V1().Pods(), informerFactory.Core().V1().PersistentVolumes(), informerFactory.Core().V1().PersistentVolumeClaims(), informerFactory.Core().V1().ReplicationControllers(), diff --git a/test/integration/scheduler/scheduler_test.go b/test/integration/scheduler/scheduler_test.go index ae41c990dfd..0d02e8a9e92 100644 --- a/test/integration/scheduler/scheduler_test.go +++ b/test/integration/scheduler/scheduler_test.go @@ -122,6 +122,7 @@ func TestSchedulerCreationFromConfigMap(t *testing.T) { ss.PolicyConfigMapName = configPolicyName sched, err := app.CreateScheduler(ss, clientSet, informerFactory.Core().V1().Nodes(), + informerFactory.Core().V1().Pods(), informerFactory.Core().V1().PersistentVolumes(), informerFactory.Core().V1().PersistentVolumeClaims(), informerFactory.Core().V1().ReplicationControllers(), @@ -174,6 +175,7 @@ func TestSchedulerCreationFromNonExistentConfigMap(t *testing.T) { _, err := app.CreateScheduler(ss, clientSet, informerFactory.Core().V1().Nodes(), + informerFactory.Core().V1().Pods(), informerFactory.Core().V1().PersistentVolumes(), informerFactory.Core().V1().PersistentVolumeClaims(), informerFactory.Core().V1().ReplicationControllers(), @@ -211,6 +213,7 @@ func TestSchedulerCreationInLegacyMode(t *testing.T) { sched, err := app.CreateScheduler(ss, clientSet, informerFactory.Core().V1().Nodes(), + informerFactory.Core().V1().Pods(), informerFactory.Core().V1().PersistentVolumes(), informerFactory.Core().V1().PersistentVolumeClaims(), informerFactory.Core().V1().ReplicationControllers(), @@ -245,6 +248,7 @@ func TestUnschedulableNodes(t *testing.T) { v1.DefaultSchedulerName, clientSet, informerFactory.Core().V1().Nodes(), + informerFactory.Core().V1().Pods(), informerFactory.Core().V1().PersistentVolumes(), informerFactory.Core().V1().PersistentVolumeClaims(), informerFactory.Core().V1().ReplicationControllers(), @@ -527,6 +531,7 @@ func TestMultiScheduler(t *testing.T) { v1.DefaultSchedulerName, clientSet, informerFactory.Core().V1().Nodes(), + informerFactory.Core().V1().Pods(), informerFactory.Core().V1().PersistentVolumes(), informerFactory.Core().V1().PersistentVolumeClaims(), informerFactory.Core().V1().ReplicationControllers(), @@ -612,6 +617,7 @@ func TestMultiScheduler(t *testing.T) { "foo-scheduler", clientSet2, informerFactory.Core().V1().Nodes(), + informerFactory.Core().V1().Pods(), informerFactory.Core().V1().PersistentVolumes(), informerFactory.Core().V1().PersistentVolumeClaims(), informerFactory.Core().V1().ReplicationControllers(), @@ -721,6 +727,7 @@ func TestAllocatable(t *testing.T) { v1.DefaultSchedulerName, clientSet, informerFactory.Core().V1().Nodes(), + informerFactory.Core().V1().Pods(), informerFactory.Core().V1().PersistentVolumes(), informerFactory.Core().V1().PersistentVolumeClaims(), informerFactory.Core().V1().ReplicationControllers(), diff --git a/test/integration/scheduler_perf/util.go b/test/integration/scheduler_perf/util.go index 66e03925aea..2bf5c547a57 100644 --- a/test/integration/scheduler_perf/util.go +++ b/test/integration/scheduler_perf/util.go @@ -65,6 +65,7 @@ func mustSetupScheduler() (schedulerConfigurator scheduler.Configurator, destroy v1.DefaultSchedulerName, clientSet, informerFactory.Core().V1().Nodes(), + informerFactory.Core().V1().Pods(), informerFactory.Core().V1().PersistentVolumes(), informerFactory.Core().V1().PersistentVolumeClaims(), informerFactory.Core().V1().ReplicationControllers(), From ad720cc651916aedd1d3aca665eff901c3445a88 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Wed, 17 May 2017 00:08:02 -0400 Subject: [PATCH 10/10] generated: bazel --- pkg/controller/serviceaccount/BUILD | 4 ---- plugin/pkg/scheduler/BUILD | 2 ++ staging/src/k8s.io/apimachinery/Godeps/Godeps.json | 12 ++++++++++++ staging/src/k8s.io/apimachinery/pkg/util/cache/BUILD | 2 +- staging/src/k8s.io/apiserver/Godeps/Godeps.json | 4 ---- staging/src/k8s.io/client-go/tools/cache/BUILD | 1 - .../src/k8s.io/kube-aggregator/Godeps/Godeps.json | 4 ---- .../kube-apiextensions-server/Godeps/Godeps.json | 4 ---- .../src/k8s.io/sample-apiserver/Godeps/Godeps.json | 4 ---- 9 files changed, 15 insertions(+), 22 deletions(-) diff --git a/pkg/controller/serviceaccount/BUILD b/pkg/controller/serviceaccount/BUILD index e972988bbb8..8f7162786ff 100644 --- a/pkg/controller/serviceaccount/BUILD +++ b/pkg/controller/serviceaccount/BUILD @@ -18,7 +18,6 @@ go_library( ], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/informers/informers_generated/externalversions/core/v1:go_default_library", @@ -34,14 +33,11 @@ go_library( "//vendor/github.com/golang/glog:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/fields:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", "//vendor/k8s.io/apiserver/pkg/endpoints/request:go_default_library", "//vendor/k8s.io/apiserver/pkg/registry/generic:go_default_library", "//vendor/k8s.io/apiserver/pkg/storage/storagebackend:go_default_library", diff --git a/plugin/pkg/scheduler/BUILD b/plugin/pkg/scheduler/BUILD index 76af6a8b03b..86ebb604695 100644 --- a/plugin/pkg/scheduler/BUILD +++ b/plugin/pkg/scheduler/BUILD @@ -41,6 +41,7 @@ go_library( ], tags = ["automanaged"], deps = [ + "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/listers/core/v1:go_default_library", @@ -52,6 +53,7 @@ go_library( "//plugin/pkg/scheduler/util:go_default_library", "//vendor/github.com/golang/glog:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/k8s.io/client-go/tools/cache:go_default_library", diff --git a/staging/src/k8s.io/apimachinery/Godeps/Godeps.json b/staging/src/k8s.io/apimachinery/Godeps/Godeps.json index d5a66354c18..a737f0bf90d 100644 --- a/staging/src/k8s.io/apimachinery/Godeps/Godeps.json +++ b/staging/src/k8s.io/apimachinery/Godeps/Godeps.json @@ -74,6 +74,10 @@ "ImportPath": "github.com/golang/glog", "Rev": "44145f04b68cf362d9c4df2182967c2275eaefed" }, + { + "ImportPath": "github.com/golang/groupcache/lru", + "Rev": "02826c3e79038b59d737d3b1c0a1d937f71a4433" + }, { "ImportPath": "github.com/golang/protobuf/proto", "Rev": "4bd1920723d7b7c925de087aa32e2187708897f7" @@ -82,6 +86,14 @@ "ImportPath": "github.com/google/gofuzz", "Rev": "44d81051d367757e1c7c6a5a86423ece9afcf63c" }, + { + "ImportPath": "github.com/hashicorp/golang-lru", + "Rev": "a0d98a5f288019575c6d1f4bb1573fef2d1fcdc4" + }, + { + "ImportPath": "github.com/hashicorp/golang-lru/simplelru", + "Rev": "a0d98a5f288019575c6d1f4bb1573fef2d1fcdc4" + }, { "ImportPath": "github.com/mailru/easyjson/buffer", "Rev": "d5b7844b561a7bc640052f1b935f7b800330d7e0" diff --git a/staging/src/k8s.io/apimachinery/pkg/util/cache/BUILD b/staging/src/k8s.io/apimachinery/pkg/util/cache/BUILD index 2cbfb892ab4..46e0c6dfb16 100644 --- a/staging/src/k8s.io/apimachinery/pkg/util/cache/BUILD +++ b/staging/src/k8s.io/apimachinery/pkg/util/cache/BUILD @@ -29,5 +29,5 @@ go_library( "lruexpirecache.go", ], tags = ["automanaged"], - deps = ["//vendor/github.com/golang/groupcache/lru:go_default_library"], + deps = ["//vendor/github.com/hashicorp/golang-lru:go_default_library"], ) diff --git a/staging/src/k8s.io/apiserver/Godeps/Godeps.json b/staging/src/k8s.io/apiserver/Godeps/Godeps.json index 670b1135e5a..addbffaa66d 100644 --- a/staging/src/k8s.io/apiserver/Godeps/Godeps.json +++ b/staging/src/k8s.io/apiserver/Godeps/Godeps.json @@ -370,10 +370,6 @@ "ImportPath": "github.com/golang/glog", "Rev": "44145f04b68cf362d9c4df2182967c2275eaefed" }, - { - "ImportPath": "github.com/golang/groupcache/lru", - "Rev": "02826c3e79038b59d737d3b1c0a1d937f71a4433" - }, { "ImportPath": "github.com/golang/protobuf/jsonpb", "Rev": "4bd1920723d7b7c925de087aa32e2187708897f7" diff --git a/staging/src/k8s.io/client-go/tools/cache/BUILD b/staging/src/k8s.io/client-go/tools/cache/BUILD index 5bd088050b4..e2fd6f192ab 100644 --- a/staging/src/k8s.io/client-go/tools/cache/BUILD +++ b/staging/src/k8s.io/client-go/tools/cache/BUILD @@ -64,7 +64,6 @@ go_library( tags = ["automanaged"], deps = [ "//vendor/github.com/golang/glog:go_default_library", - "//vendor/github.com/hashicorp/golang-lru:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/staging/src/k8s.io/kube-aggregator/Godeps/Godeps.json b/staging/src/k8s.io/kube-aggregator/Godeps/Godeps.json index 30c6648408b..f3050e8720f 100644 --- a/staging/src/k8s.io/kube-aggregator/Godeps/Godeps.json +++ b/staging/src/k8s.io/kube-aggregator/Godeps/Godeps.json @@ -158,10 +158,6 @@ "ImportPath": "github.com/golang/glog", "Rev": "44145f04b68cf362d9c4df2182967c2275eaefed" }, - { - "ImportPath": "github.com/golang/groupcache/lru", - "Rev": "02826c3e79038b59d737d3b1c0a1d937f71a4433" - }, { "ImportPath": "github.com/golang/protobuf/jsonpb", "Rev": "4bd1920723d7b7c925de087aa32e2187708897f7" diff --git a/staging/src/k8s.io/kube-apiextensions-server/Godeps/Godeps.json b/staging/src/k8s.io/kube-apiextensions-server/Godeps/Godeps.json index bb142361ab8..f9cf1d0ffc0 100644 --- a/staging/src/k8s.io/kube-apiextensions-server/Godeps/Godeps.json +++ b/staging/src/k8s.io/kube-apiextensions-server/Godeps/Godeps.json @@ -150,10 +150,6 @@ "ImportPath": "github.com/golang/glog", "Rev": "44145f04b68cf362d9c4df2182967c2275eaefed" }, - { - "ImportPath": "github.com/golang/groupcache/lru", - "Rev": "02826c3e79038b59d737d3b1c0a1d937f71a4433" - }, { "ImportPath": "github.com/golang/protobuf/jsonpb", "Rev": "4bd1920723d7b7c925de087aa32e2187708897f7" diff --git a/staging/src/k8s.io/sample-apiserver/Godeps/Godeps.json b/staging/src/k8s.io/sample-apiserver/Godeps/Godeps.json index 4725f345aba..179f0469fd7 100644 --- a/staging/src/k8s.io/sample-apiserver/Godeps/Godeps.json +++ b/staging/src/k8s.io/sample-apiserver/Godeps/Godeps.json @@ -150,10 +150,6 @@ "ImportPath": "github.com/golang/glog", "Rev": "44145f04b68cf362d9c4df2182967c2275eaefed" }, - { - "ImportPath": "github.com/golang/groupcache/lru", - "Rev": "02826c3e79038b59d737d3b1c0a1d937f71a4433" - }, { "ImportPath": "github.com/golang/protobuf/jsonpb", "Rev": "4bd1920723d7b7c925de087aa32e2187708897f7"