From 25e81b63b34d8363be3ccef0efd8e727d034d66e Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Sat, 16 Sep 2017 22:24:10 -0400 Subject: [PATCH 1/3] UPSTREAM: 52112: Allow watch cache disablement per type Backport the change that allows a global default watch cache size as well as being able to disable an individual watch cache item --- .../cmd/kube-apiserver/app/server.go | 13 ++- .../cmd/federation-apiserver/app/server.go | 14 ++- .../federation/registry/cluster/etcd/etcd.go | 2 - .../storage/storage.go | 2 - .../storage/storage.go | 2 - .../controllerrevision/storage/storage.go | 2 - .../apps/statefulset/storage/storage.go | 2 - .../storage/storage.go | 2 - .../registry/batch/cronjob/storage/storage.go | 2 - .../pkg/registry/batch/job/storage/storage.go | 2 - .../pkg/registry/cachesize/cachesize.go | 99 +++---------------- .../certificates/storage/storage.go | 2 - .../core/configmap/storage/storage.go | 2 - .../registry/core/endpoint/storage/storage.go | 2 - .../registry/core/event/storage/storage.go | 2 - .../core/limitrange/storage/storage.go | 2 - .../core/namespace/storage/storage.go | 2 - .../pkg/registry/core/node/storage/storage.go | 2 - .../core/persistentvolume/storage/storage.go | 2 - .../persistentvolumeclaim/storage/storage.go | 2 - .../pkg/registry/core/pod/storage/storage.go | 2 - .../core/podtemplate/storage/storage.go | 2 - .../replicationcontroller/storage/storage.go | 2 - .../core/resourcequota/storage/storage.go | 2 - .../registry/core/secret/storage/storage.go | 2 - .../registry/core/service/storage/storage.go | 2 - .../core/serviceaccount/storage/storage.go | 2 - .../extensions/daemonset/storage/storage.go | 2 - .../extensions/deployment/storage/storage.go | 2 - .../extensions/ingress/storage/storage.go | 2 - .../networkpolicy/storage/storage.go | 2 - .../podsecuritypolicy/storage/storage.go | 2 - .../extensions/replicaset/storage/storage.go | 2 - .../thirdpartyresource/storage/storage.go | 2 - .../thirdpartyresourcedata/storage/storage.go | 2 - .../networkpolicy/storage/storage.go | 2 - .../poddisruptionbudget/storage/storage.go | 2 - .../rbac/clusterrole/storage/storage.go | 2 - .../clusterrolebinding/storage/storage.go | 2 - .../pkg/registry/rbac/role/storage/storage.go | 2 - .../rbac/rolebinding/storage/storage.go | 2 - .../settings/podpreset/storage/storage.go | 2 - .../storage/storageclass/storage/storage.go | 2 - .../generic/registry/storage_factory.go | 17 ++-- .../pkg/registry/generic/registry/store.go | 5 - .../pkg/registry/generic/storage_decorator.go | 3 - .../apiserver/pkg/server/options/etcd.go | 69 ++++++++++++- .../pkg/server/options/server_run_options.go | 6 -- 48 files changed, 109 insertions(+), 197 deletions(-) diff --git a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/server.go b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/server.go index a08120464f0d..bf3d3716ee8d 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/server.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/server.go @@ -50,6 +50,7 @@ import ( genericregistry "k8s.io/apiserver/pkg/registry/generic" genericapiserver "k8s.io/apiserver/pkg/server" "k8s.io/apiserver/pkg/server/filters" + serveroptions "k8s.io/apiserver/pkg/server/options" "k8s.io/apiserver/pkg/server/options/encryptionconfig" serverstorage "k8s.io/apiserver/pkg/server/storage" aggregatorapiserver "k8s.io/kube-aggregator/pkg/apiserver" @@ -637,8 +638,16 @@ func defaultOptions(s *options.ServerRunOptions) error { } if s.Etcd.EnableWatchCache { glog.V(2).Infof("Initializing cache sizes based on %dMB limit", s.GenericServerRunOptions.TargetRAMMB) - cachesize.InitializeWatchCacheSizes(s.GenericServerRunOptions.TargetRAMMB) - cachesize.SetWatchCacheSizes(s.GenericServerRunOptions.WatchCacheSizes) + sizes := cachesize.NewHeuristicWatchCacheSizes(s.GenericServerRunOptions.TargetRAMMB) + if userSpecified, err := serveroptions.ParseWatchCacheSizes(s.Etcd.WatchCacheSizes); err == nil { + for resource, size := range userSpecified { + sizes[resource] = size + } + } + s.Etcd.WatchCacheSizes, err = serveroptions.WriteWatchCacheSizes(sizes) + if err != nil { + return err + } } return nil diff --git a/vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/server.go b/vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/server.go index e67e683fc443..fe6837d13269 100644 --- a/vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/server.go +++ b/vendor/k8s.io/kubernetes/federation/cmd/federation-apiserver/app/server.go @@ -36,6 +36,7 @@ import ( "k8s.io/apimachinery/pkg/util/sets" genericapiserver "k8s.io/apiserver/pkg/server" "k8s.io/apiserver/pkg/server/filters" + serveroptions "k8s.io/apiserver/pkg/server/options" serverstorage "k8s.io/apiserver/pkg/server/storage" federationv1beta1 "k8s.io/kubernetes/federation/apis/federation/v1beta1" "k8s.io/kubernetes/federation/cmd/federation-apiserver/app/options" @@ -229,8 +230,17 @@ func NonBlockingRun(s *options.ServerRunOptions, stopCh <-chan struct{}) error { // TODO: Move this to generic api server (Need to move the command line flag). if s.Etcd.EnableWatchCache { - cachesize.InitializeWatchCacheSizes(s.GenericServerRunOptions.TargetRAMMB) - cachesize.SetWatchCacheSizes(s.GenericServerRunOptions.WatchCacheSizes) + glog.V(2).Infof("Initializing cache sizes based on %dMB limit", s.GenericServerRunOptions.TargetRAMMB) + sizes := cachesize.NewHeuristicWatchCacheSizes(s.GenericServerRunOptions.TargetRAMMB) + if userSpecified, err := serveroptions.ParseWatchCacheSizes(s.Etcd.WatchCacheSizes); err == nil { + for resource, size := range userSpecified { + sizes[resource] = size + } + } + s.Etcd.WatchCacheSizes, err = serveroptions.WriteWatchCacheSizes(sizes) + if err != nil { + return err + } } m, err := genericConfig.Complete().New("federation", genericapiserver.EmptyDelegate) diff --git a/vendor/k8s.io/kubernetes/federation/registry/cluster/etcd/etcd.go b/vendor/k8s.io/kubernetes/federation/registry/cluster/etcd/etcd.go index 8f8c3be28c19..817db80c30e3 100644 --- a/vendor/k8s.io/kubernetes/federation/registry/cluster/etcd/etcd.go +++ b/vendor/k8s.io/kubernetes/federation/registry/cluster/etcd/etcd.go @@ -25,7 +25,6 @@ import ( "k8s.io/kubernetes/federation/apis/federation" "k8s.io/kubernetes/federation/registry/cluster" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/registry/cachesize" ) type REST struct { @@ -53,7 +52,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { NewListFunc: func() runtime.Object { return &federation.ClusterList{} }, PredicateFunc: cluster.MatchCluster, DefaultQualifiedResource: federation.Resource("clusters"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("clusters"), CreateStrategy: cluster.Strategy, UpdateStrategy: cluster.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/externaladmissionhookconfiguration/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/externaladmissionhookconfiguration/storage/storage.go index 8e7d570bcb0e..f49d8b849c71 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/externaladmissionhookconfiguration/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/externaladmissionhookconfiguration/storage/storage.go @@ -23,7 +23,6 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/admissionregistration" "k8s.io/kubernetes/pkg/registry/admissionregistration/externaladmissionhookconfiguration" - "k8s.io/kubernetes/pkg/registry/cachesize" ) // rest implements a RESTStorage for pod disruption budgets against etcd @@ -42,7 +41,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { }, PredicateFunc: externaladmissionhookconfiguration.MatchExternalAdmissionHookConfiguration, DefaultQualifiedResource: admissionregistration.Resource("externaladmissionhookconfigurations"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("externaladmissionhookconfigurations"), CreateStrategy: externaladmissionhookconfiguration.Strategy, UpdateStrategy: externaladmissionhookconfiguration.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration/storage/storage.go index becea1ae56be..5e7ec678ee9d 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration/storage/storage.go @@ -23,7 +23,6 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/admissionregistration" "k8s.io/kubernetes/pkg/registry/admissionregistration/initializerconfiguration" - "k8s.io/kubernetes/pkg/registry/cachesize" ) // rest implements a RESTStorage for pod disruption budgets against etcd @@ -42,7 +41,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { }, PredicateFunc: initializerconfiguration.MatchInitializerConfiguration, DefaultQualifiedResource: admissionregistration.Resource("initializerconfigurations"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("initializerconfigurations"), CreateStrategy: initializerconfiguration.Strategy, UpdateStrategy: initializerconfiguration.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/apps/controllerrevision/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/apps/controllerrevision/storage/storage.go index 556d5ef1be5c..06d68c0c8240 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/apps/controllerrevision/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/apps/controllerrevision/storage/storage.go @@ -23,7 +23,6 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/apps" "k8s.io/kubernetes/pkg/registry/apps/controllerrevision" - "k8s.io/kubernetes/pkg/registry/cachesize" ) // REST implements a RESTStorage for ControllerRevision @@ -39,7 +38,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { NewListFunc: func() runtime.Object { return &apps.ControllerRevisionList{} }, PredicateFunc: controllerrevision.MatchControllerRevision, DefaultQualifiedResource: apps.Resource("controllerrevisions"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("controllerrevisions"), CreateStrategy: controllerrevision.Strategy, UpdateStrategy: controllerrevision.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/apps/statefulset/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/apps/statefulset/storage/storage.go index d40f1d14c5e3..45fab6865147 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/apps/statefulset/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/apps/statefulset/storage/storage.go @@ -26,7 +26,6 @@ import ( "k8s.io/kubernetes/pkg/api" appsapi "k8s.io/kubernetes/pkg/apis/apps" "k8s.io/kubernetes/pkg/registry/apps/statefulset" - "k8s.io/kubernetes/pkg/registry/cachesize" ) // rest implements a RESTStorage for replication controllers against etcd @@ -42,7 +41,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { NewListFunc: func() runtime.Object { return &appsapi.StatefulSetList{} }, PredicateFunc: statefulset.MatchStatefulSet, DefaultQualifiedResource: appsapi.Resource("statefulsets"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("statefulsets"), CreateStrategy: statefulset.Strategy, UpdateStrategy: statefulset.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/autoscaling/horizontalpodautoscaler/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/autoscaling/horizontalpodautoscaler/storage/storage.go index 3421192cd074..3fee2e0a6bd7 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/autoscaling/horizontalpodautoscaler/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/autoscaling/horizontalpodautoscaler/storage/storage.go @@ -26,7 +26,6 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/autoscaling" "k8s.io/kubernetes/pkg/registry/autoscaling/horizontalpodautoscaler" - "k8s.io/kubernetes/pkg/registry/cachesize" ) type REST struct { @@ -41,7 +40,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { NewListFunc: func() runtime.Object { return &autoscaling.HorizontalPodAutoscalerList{} }, PredicateFunc: horizontalpodautoscaler.MatchAutoscaler, DefaultQualifiedResource: autoscaling.Resource("horizontalpodautoscalers"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("horizontalpodautoscalers"), CreateStrategy: horizontalpodautoscaler.Strategy, UpdateStrategy: horizontalpodautoscaler.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/storage/storage.go index cdc7cac6516e..085e596486bd 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/storage/storage.go @@ -26,7 +26,6 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/batch" "k8s.io/kubernetes/pkg/registry/batch/cronjob" - "k8s.io/kubernetes/pkg/registry/cachesize" ) // REST implements a RESTStorage for scheduled jobs against etcd @@ -42,7 +41,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { NewListFunc: func() runtime.Object { return &batch.CronJobList{} }, PredicateFunc: cronjob.MatchCronJob, DefaultQualifiedResource: batch.Resource("cronjobs"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("cronjobs"), CreateStrategy: cronjob.Strategy, UpdateStrategy: cronjob.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/batch/job/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/batch/job/storage/storage.go index aa52d251023c..5fda289ecbd8 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/batch/job/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/batch/job/storage/storage.go @@ -26,7 +26,6 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/batch" "k8s.io/kubernetes/pkg/registry/batch/job" - "k8s.io/kubernetes/pkg/registry/cachesize" ) // JobStorage includes dummy storage for Job. @@ -57,7 +56,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { NewListFunc: func() runtime.Object { return &batch.JobList{} }, PredicateFunc: job.MatchJob, DefaultQualifiedResource: batch.Resource("jobs"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("jobs"), CreateStrategy: job.Strategy, UpdateStrategy: job.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/cachesize/cachesize.go b/vendor/k8s.io/kubernetes/pkg/registry/cachesize/cachesize.go index b853cb5e6a8a..6babf5080dce 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/cachesize/cachesize.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/cachesize/cachesize.go @@ -14,65 +14,15 @@ See the License for the specific language governing permissions and limitations under the License. */ -//use for --watch-cache-sizes param of kube-apiserver -//make watch cache size of resources configurable package cachesize import ( - "strconv" - "strings" - - "github.com/golang/glog" -) - -type Resource string - -const ( - APIServices Resource = "apiservices" - CertificateSigningRequests Resource = "certificatesigningrequests" - ClusterRoles Resource = "clusterroles" - ClusterRoleBindings Resource = "clusterrolebindings" - ConfigMaps Resource = "configmaps" - Controllers Resource = "controllers" - Daemonsets Resource = "daemonsets" - Deployments Resource = "deployments" - Endpoints Resource = "endpoints" - HorizontalPodAutoscalers Resource = "horizontalpodautoscalers" - Ingress Resource = "ingress" - PodDisruptionBudget Resource = "poddisruptionbudgets" - StatefulSet Resource = "statefulset" - Jobs Resource = "jobs" - LimitRanges Resource = "limitranges" - Namespaces Resource = "namespaces" - NetworkPolicys Resource = "networkpolicies" - Nodes Resource = "nodes" - PersistentVolumes Resource = "persistentvolumes" - PersistentVolumeClaims Resource = "persistentvolumeclaims" - Pods Resource = "pods" - PodSecurityPolicies Resource = "podsecuritypolicies" - PodTemplates Resource = "podtemplates" - Replicasets Resource = "replicasets" - ResourceQuotas Resource = "resourcequotas" - CronJobs Resource = "cronjobs" - Roles Resource = "roles" - RoleBindings Resource = "rolebindings" - Secrets Resource = "secrets" - ServiceAccounts Resource = "serviceaccounts" - Services Resource = "services" - StorageClasses Resource = "storageclasses" + "k8s.io/apimachinery/pkg/runtime/schema" ) -// TODO: This shouldn't be a global variable. -var watchCacheSizes map[Resource]int - -func init() { - watchCacheSizes = make(map[Resource]int) -} - -func InitializeWatchCacheSizes(expectedRAMCapacityMB int) { - // This is the heuristics that from memory capacity is trying to infer - // the maximum number of nodes in the cluster and set cache sizes based - // on that value. +// NewHeuristicWatchCacheSizes returns a map of suggested watch cache sizes based on total +// memory. +func NewHeuristicWatchCacheSizes(expectedRAMCapacityMB int) map[schema.GroupResource]int { // From our documentation, we officially recommend 120GB machines for // 2000 nodes, and we scale from that point. Thus we assume ~60MB of // capacity per node. @@ -83,39 +33,14 @@ func InitializeWatchCacheSizes(expectedRAMCapacityMB int) { // is supposed to have non-default value. // // TODO: Figure out which resource we should have non-default value. - watchCacheSizes[Controllers] = maxInt(5*clusterSize, 100) - watchCacheSizes[Endpoints] = maxInt(10*clusterSize, 1000) - watchCacheSizes[Nodes] = maxInt(5*clusterSize, 1000) - watchCacheSizes[Pods] = maxInt(50*clusterSize, 1000) - watchCacheSizes[Services] = maxInt(5*clusterSize, 1000) - watchCacheSizes[APIServices] = maxInt(5*clusterSize, 1000) -} - -func SetWatchCacheSizes(cacheSizes []string) { - for _, c := range cacheSizes { - tokens := strings.Split(c, "#") - if len(tokens) != 2 { - glog.Errorf("invalid value of watch cache capabilities: %s", c) - continue - } - - size, err := strconv.Atoi(tokens[1]) - if err != nil { - glog.Errorf("invalid size of watch cache capabilities: %s", c) - continue - } - - watchCacheSizes[Resource(strings.ToLower(tokens[0]))] = size - } -} - -// GetWatchCacheSizeByResource returns the configured watch cache size for the given resource. -// A nil value means to use a default size, zero means to disable caching. -func GetWatchCacheSizeByResource(resource string) (ret *int) { // TODO this should use schema.GroupResource for lookups - if value, found := watchCacheSizes[Resource(resource)]; found { - return &value - } - return nil + watchCacheSizes := make(map[schema.GroupResource]int) + watchCacheSizes[schema.GroupResource{Resource: "replicationcontrollers"}] = maxInt(5*clusterSize, 100) + watchCacheSizes[schema.GroupResource{Resource: "endpoints"}] = maxInt(10*clusterSize, 1000) + watchCacheSizes[schema.GroupResource{Resource: "nodes"}] = maxInt(5*clusterSize, 1000) + watchCacheSizes[schema.GroupResource{Resource: "pods"}] = maxInt(50*clusterSize, 1000) + watchCacheSizes[schema.GroupResource{Resource: "services"}] = maxInt(5*clusterSize, 1000) + watchCacheSizes[schema.GroupResource{Resource: "apiservices", Group: "apiregistration.k8s.io"}] = maxInt(5*clusterSize, 1000) + return watchCacheSizes } func maxInt(a, b int) int { diff --git a/vendor/k8s.io/kubernetes/pkg/registry/certificates/certificates/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/certificates/certificates/storage/storage.go index 2da56ee106fb..2f6cfdab0fc9 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/certificates/certificates/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/certificates/certificates/storage/storage.go @@ -24,7 +24,6 @@ import ( "k8s.io/apiserver/pkg/registry/rest" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/certificates" - "k8s.io/kubernetes/pkg/registry/cachesize" csrregistry "k8s.io/kubernetes/pkg/registry/certificates/certificates" ) @@ -41,7 +40,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST, *Approva NewListFunc: func() runtime.Object { return &certificates.CertificateSigningRequestList{} }, PredicateFunc: csrregistry.Matcher, DefaultQualifiedResource: certificates.Resource("certificatesigningrequests"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("certificatesigningrequests"), CreateStrategy: csrregistry.Strategy, UpdateStrategy: csrregistry.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/configmap/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/core/configmap/storage/storage.go index 8aed341b7c0f..a9ebbfa4da1f 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/configmap/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/configmap/storage/storage.go @@ -22,7 +22,6 @@ import ( genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/apiserver/pkg/registry/rest" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/core/configmap" ) @@ -39,7 +38,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { NewListFunc: func() runtime.Object { return &api.ConfigMapList{} }, PredicateFunc: configmap.MatchConfigMap, DefaultQualifiedResource: api.Resource("configmaps"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("configmaps"), CreateStrategy: configmap.Strategy, UpdateStrategy: configmap.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/endpoint/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/core/endpoint/storage/storage.go index 44abfc437a81..fd38ad5a7281 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/endpoint/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/endpoint/storage/storage.go @@ -22,7 +22,6 @@ import ( genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/apiserver/pkg/registry/rest" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/core/endpoint" ) @@ -38,7 +37,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { NewListFunc: func() runtime.Object { return &api.EndpointsList{} }, PredicateFunc: endpoint.MatchEndpoints, DefaultQualifiedResource: api.Resource("endpoints"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("endpoints"), CreateStrategy: endpoint.Strategy, UpdateStrategy: endpoint.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/event/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/core/event/storage/storage.go index abc030be1fba..44507d307b99 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/event/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/event/storage/storage.go @@ -22,7 +22,6 @@ import ( genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/apiserver/pkg/registry/rest" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/core/event" ) @@ -51,7 +50,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter, ttl uint64) *REST { return ttl, nil }, DefaultQualifiedResource: resource, - WatchCacheSize: cachesize.GetWatchCacheSizeByResource(resource.Resource), CreateStrategy: event.Strategy, UpdateStrategy: event.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/limitrange/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/core/limitrange/storage/storage.go index ba29960e3624..7cf050264708 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/limitrange/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/limitrange/storage/storage.go @@ -22,7 +22,6 @@ import ( genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/apiserver/pkg/registry/rest" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/core/limitrange" ) @@ -38,7 +37,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { NewListFunc: func() runtime.Object { return &api.LimitRangeList{} }, PredicateFunc: limitrange.MatchLimitRange, DefaultQualifiedResource: api.Resource("limitranges"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("limitranges"), CreateStrategy: limitrange.Strategy, UpdateStrategy: limitrange.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/namespace/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/core/namespace/storage/storage.go index 0b3edf132d5a..da389c698d94 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/namespace/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/namespace/storage/storage.go @@ -31,7 +31,6 @@ import ( "k8s.io/apiserver/pkg/storage" storageerr "k8s.io/apiserver/pkg/storage/errors" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/core/namespace" ) @@ -59,7 +58,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST, *Finaliz NewListFunc: func() runtime.Object { return &api.NamespaceList{} }, PredicateFunc: namespace.MatchNamespace, DefaultQualifiedResource: api.Resource("namespaces"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("namespaces"), CreateStrategy: namespace.Strategy, UpdateStrategy: namespace.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/node/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/core/node/storage/storage.go index dc5be3dc7051..e894bb5051de 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/node/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/node/storage/storage.go @@ -30,7 +30,6 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/kubelet/client" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/core/node" noderest "k8s.io/kubernetes/pkg/registry/core/node/rest" ) @@ -77,7 +76,6 @@ func NewStorage(optsGetter generic.RESTOptionsGetter, kubeletClientConfig client NewListFunc: func() runtime.Object { return &api.NodeList{} }, PredicateFunc: node.MatchNode, DefaultQualifiedResource: api.Resource("nodes"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("nodes"), CreateStrategy: node.Strategy, UpdateStrategy: node.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolume/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolume/storage/storage.go index 7c69f7eb8129..a24aa391039d 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolume/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolume/storage/storage.go @@ -24,7 +24,6 @@ import ( genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/apiserver/pkg/registry/rest" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/core/persistentvolume" ) @@ -40,7 +39,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { NewListFunc: func() runtime.Object { return &api.PersistentVolumeList{} }, PredicateFunc: persistentvolume.MatchPersistentVolumes, DefaultQualifiedResource: api.Resource("persistentvolumes"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("persistentvolumes"), CreateStrategy: persistentvolume.Strategy, UpdateStrategy: persistentvolume.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolumeclaim/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolumeclaim/storage/storage.go index d5295dbf631b..78c6a1e04111 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolumeclaim/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/persistentvolumeclaim/storage/storage.go @@ -24,7 +24,6 @@ import ( genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/apiserver/pkg/registry/rest" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/core/persistentvolumeclaim" ) @@ -40,7 +39,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { NewListFunc: func() runtime.Object { return &api.PersistentVolumeClaimList{} }, PredicateFunc: persistentvolumeclaim.MatchPersistentVolumeClaim, DefaultQualifiedResource: api.Resource("persistentvolumeclaims"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("persistentvolumeclaims"), CreateStrategy: persistentvolumeclaim.Strategy, UpdateStrategy: persistentvolumeclaim.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/pod/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/core/pod/storage/storage.go index 83b20d588ef5..6cb38101d216 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/pod/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/pod/storage/storage.go @@ -38,7 +38,6 @@ import ( "k8s.io/kubernetes/pkg/printers" printersinternal "k8s.io/kubernetes/pkg/printers/internalversion" printerstorage "k8s.io/kubernetes/pkg/printers/storage" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/core/pod" podrest "k8s.io/kubernetes/pkg/registry/core/pod/rest" ) @@ -71,7 +70,6 @@ func NewStorage(optsGetter generic.RESTOptionsGetter, k client.ConnectionInfoGet NewListFunc: func() runtime.Object { return &api.PodList{} }, PredicateFunc: pod.MatchPod, DefaultQualifiedResource: api.Resource("pods"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("pods"), CreateStrategy: pod.Strategy, UpdateStrategy: pod.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/podtemplate/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/core/podtemplate/storage/storage.go index 13d1d4365945..cee6f0d71a4b 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/podtemplate/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/podtemplate/storage/storage.go @@ -21,7 +21,6 @@ import ( "k8s.io/apiserver/pkg/registry/generic" genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/core/podtemplate" ) @@ -37,7 +36,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { NewListFunc: func() runtime.Object { return &api.PodTemplateList{} }, PredicateFunc: podtemplate.MatchPodTemplate, DefaultQualifiedResource: api.Resource("podtemplates"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("podtemplates"), CreateStrategy: podtemplate.Strategy, UpdateStrategy: podtemplate.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/replicationcontroller/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/core/replicationcontroller/storage/storage.go index 1d0bb1e76e98..c9fce60d8c8a 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/replicationcontroller/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/replicationcontroller/storage/storage.go @@ -32,7 +32,6 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/autoscaling" "k8s.io/kubernetes/pkg/apis/autoscaling/validation" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/core/replicationcontroller" ) @@ -66,7 +65,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { NewListFunc: func() runtime.Object { return &api.ReplicationControllerList{} }, PredicateFunc: replicationcontroller.MatchController, DefaultQualifiedResource: api.Resource("replicationcontrollers"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("replicationcontrollers"), CreateStrategy: replicationcontroller.Strategy, UpdateStrategy: replicationcontroller.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/resourcequota/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/core/resourcequota/storage/storage.go index 90638de8a6fc..d5d46241cf71 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/resourcequota/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/resourcequota/storage/storage.go @@ -24,7 +24,6 @@ import ( genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/apiserver/pkg/registry/rest" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/core/resourcequota" ) @@ -40,7 +39,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { NewListFunc: func() runtime.Object { return &api.ResourceQuotaList{} }, PredicateFunc: resourcequota.MatchResourceQuota, DefaultQualifiedResource: api.Resource("resourcequotas"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("resourcequotas"), CreateStrategy: resourcequota.Strategy, UpdateStrategy: resourcequota.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/secret/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/core/secret/storage/storage.go index 8dc5592eed0f..fe823f7aad97 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/secret/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/secret/storage/storage.go @@ -21,7 +21,6 @@ import ( "k8s.io/apiserver/pkg/registry/generic" genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/core/secret" ) @@ -37,7 +36,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { NewListFunc: func() runtime.Object { return &api.SecretList{} }, PredicateFunc: secret.Matcher, DefaultQualifiedResource: api.Resource("secrets"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("secrets"), CreateStrategy: secret.Strategy, UpdateStrategy: secret.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/service/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/core/service/storage/storage.go index 6192b2842c8b..5726ac270d8e 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/service/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/service/storage/storage.go @@ -24,7 +24,6 @@ import ( genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/apiserver/pkg/registry/rest" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/core/service" ) @@ -40,7 +39,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { NewListFunc: func() runtime.Object { return &api.ServiceList{} }, PredicateFunc: service.MatchServices, DefaultQualifiedResource: api.Resource("services"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("services"), CreateStrategy: service.Strategy, UpdateStrategy: service.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/core/serviceaccount/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/core/serviceaccount/storage/storage.go index 3c9b1d26e94e..58133a41eb9b 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/core/serviceaccount/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/core/serviceaccount/storage/storage.go @@ -22,7 +22,6 @@ import ( genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/apiserver/pkg/registry/rest" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/core/serviceaccount" ) @@ -38,7 +37,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { NewListFunc: func() runtime.Object { return &api.ServiceAccountList{} }, PredicateFunc: serviceaccount.Matcher, DefaultQualifiedResource: api.Resource("serviceaccounts"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("serviceaccounts"), CreateStrategy: serviceaccount.Strategy, UpdateStrategy: serviceaccount.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/extensions/daemonset/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/extensions/daemonset/storage/storage.go index 86e7e45c2fb1..28cdde76a747 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/extensions/daemonset/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/extensions/daemonset/storage/storage.go @@ -25,7 +25,6 @@ import ( "k8s.io/apiserver/pkg/registry/rest" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/extensions/daemonset" ) @@ -42,7 +41,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { NewListFunc: func() runtime.Object { return &extensions.DaemonSetList{} }, PredicateFunc: daemonset.MatchDaemonSet, DefaultQualifiedResource: extensions.Resource("daemonsets"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("daemonsets"), CreateStrategy: daemonset.Strategy, UpdateStrategy: daemonset.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/extensions/deployment/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/extensions/deployment/storage/storage.go index d747ecad8af6..133fba16d810 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/extensions/deployment/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/extensions/deployment/storage/storage.go @@ -32,7 +32,6 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" extvalidation "k8s.io/kubernetes/pkg/apis/extensions/validation" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/extensions/deployment" ) @@ -68,7 +67,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST, *Rollbac NewListFunc: func() runtime.Object { return &extensions.DeploymentList{} }, PredicateFunc: deployment.MatchDeployment, DefaultQualifiedResource: extensions.Resource("deployments"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("deployments"), CreateStrategy: deployment.Strategy, UpdateStrategy: deployment.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/extensions/ingress/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/extensions/ingress/storage/storage.go index 8b891a6209ad..55c8befe93bb 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/extensions/ingress/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/extensions/ingress/storage/storage.go @@ -25,7 +25,6 @@ import ( "k8s.io/apiserver/pkg/registry/rest" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/extensions/ingress" ) @@ -42,7 +41,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { NewListFunc: func() runtime.Object { return &extensions.IngressList{} }, PredicateFunc: ingress.MatchIngress, DefaultQualifiedResource: extensions.Resource("ingresses"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("ingresses"), CreateStrategy: ingress.Strategy, UpdateStrategy: ingress.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/extensions/networkpolicy/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/extensions/networkpolicy/storage/storage.go index 8bb412a4a0dc..a6d484b99f51 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/extensions/networkpolicy/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/extensions/networkpolicy/storage/storage.go @@ -22,7 +22,6 @@ import ( genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/kubernetes/pkg/api" extensionsapi "k8s.io/kubernetes/pkg/apis/extensions" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/extensions/networkpolicy" ) @@ -39,7 +38,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { NewListFunc: func() runtime.Object { return &extensionsapi.NetworkPolicyList{} }, PredicateFunc: networkpolicy.MatchNetworkPolicy, DefaultQualifiedResource: extensionsapi.Resource("networkpolicies"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("networkpolicies"), CreateStrategy: networkpolicy.Strategy, UpdateStrategy: networkpolicy.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/extensions/podsecuritypolicy/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/extensions/podsecuritypolicy/storage/storage.go index eff8d11b76e5..699bb0f9a14f 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/extensions/podsecuritypolicy/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/extensions/podsecuritypolicy/storage/storage.go @@ -22,7 +22,6 @@ import ( genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/extensions/podsecuritypolicy" ) @@ -39,7 +38,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { NewListFunc: func() runtime.Object { return &extensions.PodSecurityPolicyList{} }, PredicateFunc: podsecuritypolicy.MatchPodSecurityPolicy, DefaultQualifiedResource: extensions.Resource("podsecuritypolicies"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("podsecuritypolicies"), CreateStrategy: podsecuritypolicy.Strategy, UpdateStrategy: podsecuritypolicy.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/extensions/replicaset/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/extensions/replicaset/storage/storage.go index b10c455ae911..90314a840219 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/extensions/replicaset/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/extensions/replicaset/storage/storage.go @@ -31,7 +31,6 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" extvalidation "k8s.io/kubernetes/pkg/apis/extensions/validation" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/extensions/replicaset" ) @@ -65,7 +64,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { NewListFunc: func() runtime.Object { return &extensions.ReplicaSetList{} }, PredicateFunc: replicaset.MatchReplicaSet, DefaultQualifiedResource: extensions.Resource("replicasets"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("replicasets"), CreateStrategy: replicaset.Strategy, UpdateStrategy: replicaset.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/extensions/thirdpartyresource/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/extensions/thirdpartyresource/storage/storage.go index 120cfdc82061..1910e5f02103 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/extensions/thirdpartyresource/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/extensions/thirdpartyresource/storage/storage.go @@ -22,7 +22,6 @@ import ( genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/extensions/thirdpartyresource" ) @@ -48,7 +47,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { NewListFunc: func() runtime.Object { return &extensions.ThirdPartyResourceList{} }, PredicateFunc: thirdpartyresource.Matcher, DefaultQualifiedResource: resource, - WatchCacheSize: cachesize.GetWatchCacheSizeByResource(resource.Resource), CreateStrategy: thirdpartyresource.Strategy, UpdateStrategy: thirdpartyresource.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/extensions/thirdpartyresourcedata/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/extensions/thirdpartyresourcedata/storage/storage.go index ccf18ecb2630..e89477a33d5a 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/extensions/thirdpartyresourcedata/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/extensions/thirdpartyresourcedata/storage/storage.go @@ -30,7 +30,6 @@ import ( "k8s.io/apiserver/pkg/registry/rest" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/extensions/thirdpartyresourcedata" ) @@ -104,7 +103,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter, group, kind string) *REST { NewListFunc: func() runtime.Object { return &extensions.ThirdPartyResourceDataList{} }, PredicateFunc: thirdpartyresourcedata.Matcher, DefaultQualifiedResource: resource, - WatchCacheSize: cachesize.GetWatchCacheSizeByResource(resource.Resource), CreateStrategy: thirdpartyresourcedata.Strategy, UpdateStrategy: thirdpartyresourcedata.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/networking/networkpolicy/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/networking/networkpolicy/storage/storage.go index e29b501b547d..48823519c2d5 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/networking/networkpolicy/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/networking/networkpolicy/storage/storage.go @@ -22,7 +22,6 @@ import ( genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/kubernetes/pkg/api" networkingapi "k8s.io/kubernetes/pkg/apis/networking" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/networking/networkpolicy" ) @@ -39,7 +38,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { NewListFunc: func() runtime.Object { return &networkingapi.NetworkPolicyList{} }, PredicateFunc: networkpolicy.Matcher, DefaultQualifiedResource: networkingapi.Resource("networkpolicies"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("networkpolicies"), CreateStrategy: networkpolicy.Strategy, UpdateStrategy: networkpolicy.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/policy/poddisruptionbudget/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/policy/poddisruptionbudget/storage/storage.go index 2daa230365d1..0686d70893ed 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/policy/poddisruptionbudget/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/policy/poddisruptionbudget/storage/storage.go @@ -25,7 +25,6 @@ import ( "k8s.io/apiserver/pkg/registry/rest" "k8s.io/kubernetes/pkg/api" policyapi "k8s.io/kubernetes/pkg/apis/policy" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/policy/poddisruptionbudget" ) @@ -42,7 +41,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST) { NewListFunc: func() runtime.Object { return &policyapi.PodDisruptionBudgetList{} }, PredicateFunc: poddisruptionbudget.MatchPodDisruptionBudget, DefaultQualifiedResource: policyapi.Resource("poddisruptionbudgets"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("poddisruptionbudgets"), CreateStrategy: poddisruptionbudget.Strategy, UpdateStrategy: poddisruptionbudget.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrole/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrole/storage/storage.go index e434280a4098..b83a79267f98 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrole/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrole/storage/storage.go @@ -22,7 +22,6 @@ import ( genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/rbac" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/rbac/clusterrole" ) @@ -39,7 +38,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { NewListFunc: func() runtime.Object { return &rbac.ClusterRoleList{} }, PredicateFunc: clusterrole.Matcher, DefaultQualifiedResource: rbac.Resource("clusterroles"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("clusterroles"), CreateStrategy: clusterrole.Strategy, UpdateStrategy: clusterrole.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrolebinding/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrolebinding/storage/storage.go index 2cb178ca63f0..790c34df6888 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrolebinding/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/rbac/clusterrolebinding/storage/storage.go @@ -22,7 +22,6 @@ import ( genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/rbac" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/rbac/clusterrolebinding" ) @@ -39,7 +38,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { NewListFunc: func() runtime.Object { return &rbac.ClusterRoleBindingList{} }, PredicateFunc: clusterrolebinding.Matcher, DefaultQualifiedResource: rbac.Resource("clusterrolebindings"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("clusterrolebindings"), CreateStrategy: clusterrolebinding.Strategy, UpdateStrategy: clusterrolebinding.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/rbac/role/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/rbac/role/storage/storage.go index 18f178672527..4744420d0e63 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/rbac/role/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/rbac/role/storage/storage.go @@ -22,7 +22,6 @@ import ( genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/rbac" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/rbac/role" ) @@ -39,7 +38,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { NewListFunc: func() runtime.Object { return &rbac.RoleList{} }, PredicateFunc: role.Matcher, DefaultQualifiedResource: rbac.Resource("roles"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("roles"), CreateStrategy: role.Strategy, UpdateStrategy: role.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/rbac/rolebinding/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/rbac/rolebinding/storage/storage.go index 3ccf4f72cf6e..cafd8ce47973 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/rbac/rolebinding/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/rbac/rolebinding/storage/storage.go @@ -22,7 +22,6 @@ import ( genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/rbac" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/rbac/rolebinding" ) @@ -39,7 +38,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { NewListFunc: func() runtime.Object { return &rbac.RoleBindingList{} }, PredicateFunc: rolebinding.Matcher, DefaultQualifiedResource: rbac.Resource("rolebindings"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("rolebindings"), CreateStrategy: rolebinding.Strategy, UpdateStrategy: rolebinding.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/settings/podpreset/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/settings/podpreset/storage/storage.go index 4d1c7ca54b50..78ffe711598e 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/settings/podpreset/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/settings/podpreset/storage/storage.go @@ -22,7 +22,6 @@ import ( genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/kubernetes/pkg/api" settingsapi "k8s.io/kubernetes/pkg/apis/settings" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/settings/podpreset" ) @@ -39,7 +38,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { NewListFunc: func() runtime.Object { return &settingsapi.PodPresetList{} }, PredicateFunc: podpreset.Matcher, DefaultQualifiedResource: settingsapi.Resource("podpresets"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("podpresets"), CreateStrategy: podpreset.Strategy, UpdateStrategy: podpreset.Strategy, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/storageclass/storage/storage.go b/vendor/k8s.io/kubernetes/pkg/registry/storage/storageclass/storage/storage.go index 3dcb18a301f7..7e8d293eb3a0 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/storage/storageclass/storage/storage.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/storageclass/storage/storage.go @@ -23,7 +23,6 @@ import ( "k8s.io/apiserver/pkg/registry/rest" "k8s.io/kubernetes/pkg/api" storageapi "k8s.io/kubernetes/pkg/apis/storage" - "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/storage/storageclass" ) @@ -39,7 +38,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { NewListFunc: func() runtime.Object { return &storageapi.StorageClassList{} }, PredicateFunc: storageclass.MatchStorageClasses, DefaultQualifiedResource: storageapi.Resource("storageclasses"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("storageclass"), CreateStrategy: storageclass.Strategy, UpdateStrategy: storageclass.Strategy, diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/storage_factory.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/storage_factory.go index 9554e5234996..c193f01cc2a8 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/storage_factory.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/storage_factory.go @@ -17,6 +17,8 @@ limitations under the License. package registry import ( + "github.com/golang/glog" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/apiserver/pkg/registry/generic" "k8s.io/apiserver/pkg/storage" @@ -26,11 +28,10 @@ import ( ) // Creates a cacher based given storageConfig. -func StorageWithCacher(defaultCapacity int) generic.StorageDecorator { +func StorageWithCacher(capacity int) generic.StorageDecorator { return func( copier runtime.ObjectCopier, storageConfig *storagebackend.Config, - requestedSize *int, objectType runtime.Object, resourcePrefix string, keyFunc func(obj runtime.Object) (string, error), @@ -38,15 +39,13 @@ func StorageWithCacher(defaultCapacity int) generic.StorageDecorator { getAttrsFunc storage.AttrFunc, triggerFunc storage.TriggerPublisherFunc) (storage.Interface, factory.DestroyFunc) { - capacity := defaultCapacity - if requestedSize != nil && *requestedSize == 0 { - panic("StorageWithCacher must not be called with zero cache size") - } - if requestedSize != nil { - capacity = *requestedSize + s, d := generic.NewRawStorage(storageConfig) + if capacity == 0 { + glog.V(5).Infof("Storage caching is disabled for %T", objectType) + return s, d } + glog.V(5).Infof("Storage caching is enabled for %T with capacity %v", objectType, capacity) - s, d := generic.NewRawStorage(storageConfig) // TODO: we would change this later to make storage always have cacher and hide low level KV layer inside. // Currently it has two layers of same storage interface -- cacher and low level kv. cacherConfig := storage.CacherConfig{ diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store.go index 7654dc4e76af..dc5c445cc5ab 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store.go @@ -167,10 +167,6 @@ type Store struct { Storage storage.Interface // Called to cleanup clients used by the underlying Storage; optional. DestroyFunc func() - // Maximum size of the watch history cached in memory, in number of entries. - // This value is ignored if Storage is non-nil. Nil is replaced with a default value. - // A zero integer will disable caching. - WatchCacheSize *int } // Note: the rest.StandardStorage interface aggregates the common REST verbs @@ -1313,7 +1309,6 @@ func (e *Store) CompleteWithOptions(options *generic.StoreOptions) error { e.Storage, e.DestroyFunc = opts.Decorator( e.Copier, opts.StorageConfig, - e.WatchCacheSize, e.NewFunc(), prefix, keyFunc, diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/registry/generic/storage_decorator.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/registry/generic/storage_decorator.go index ab9aeb42adcf..6c65230f35be 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/registry/generic/storage_decorator.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/registry/generic/storage_decorator.go @@ -26,11 +26,9 @@ import ( // StorageDecorator is a function signature for producing a storage.Interface // and an associated DestroyFunc from given parameters. -// A zero capacity means to disable caching, nil means to use a default. type StorageDecorator func( copier runtime.ObjectCopier, config *storagebackend.Config, - capacity *int, objectType runtime.Object, resourcePrefix string, keyFunc func(obj runtime.Object) (string, error), @@ -43,7 +41,6 @@ type StorageDecorator func( func UndecoratedStorage( copier runtime.ObjectCopier, config *storagebackend.Config, - capacity *int, objectType runtime.Object, resourcePrefix string, keyFunc func(obj runtime.Object) (string, error), diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/etcd.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/etcd.go index bdaa0f2af674..7386637bc976 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/etcd.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/etcd.go @@ -18,6 +18,8 @@ package options import ( "fmt" + "strconv" + "strings" "github.com/spf13/pflag" @@ -45,6 +47,8 @@ type EtcdOptions struct { EnableWatchCache bool // Set DefaultWatchCacheSize to zero to disable watch caches for those resources that have no explicit cache size set DefaultWatchCacheSize int + // WatchCacheSizes represents override to a given resource + WatchCacheSizes []string } func NewEtcdOptions(backendConfig *storagebackend.Config) *EtcdOptions { @@ -83,10 +87,17 @@ func (s *EtcdOptions) AddFlags(fs *pflag.FlagSet) { "Enables the generic garbage collector. MUST be synced with the corresponding flag "+ "of the kube-controller-manager.") - // TODO: enable cache in integration tests. fs.BoolVar(&s.EnableWatchCache, "watch-cache", s.EnableWatchCache, "Enable watch caching in the apiserver") + fs.IntVar(&s.DefaultWatchCacheSize, "default-watch-cache-size", s.DefaultWatchCacheSize, + "Default watch cache size. If zero, watch cache will be disabled for resources that do not have a default watch size set.") + + fs.StringSliceVar(&s.WatchCacheSizes, "watch-cache-sizes", s.WatchCacheSizes, ""+ + "List of watch cache sizes for every resource (pods, nodes, etc.), comma separated. "+ + "The individual override format: resource#size, where size is a number. It takes effect "+ + "when watch-cache is enabled.") + fs.StringVar(&s.StorageConfig.Type, "storage-backend", s.StorageConfig.Type, "The storage backend for persistence. Options: 'etcd3' (default), 'etcd2'.") @@ -138,7 +149,15 @@ func (f *SimpleRestOptionsFactory) GetRESTOptions(resource schema.GroupResource) ResourcePrefix: resource.Group + "/" + resource.Resource, } if f.Options.EnableWatchCache { - ret.Decorator = genericregistry.StorageWithCacher(f.Options.DefaultWatchCacheSize) + sizes, err := ParseWatchCacheSizes(f.Options.WatchCacheSizes) + if err != nil { + return generic.RESTOptions{}, err + } + cacheSize, ok := sizes[resource] + if !ok { + cacheSize = f.Options.DefaultWatchCacheSize + } + ret.Decorator = genericregistry.StorageWithCacher(cacheSize) } return ret, nil } @@ -162,8 +181,52 @@ func (f *storageFactoryRestOptionsFactory) GetRESTOptions(resource schema.GroupR ResourcePrefix: f.StorageFactory.ResourcePrefix(resource), } if f.Options.EnableWatchCache { - ret.Decorator = genericregistry.StorageWithCacher(f.Options.DefaultWatchCacheSize) + sizes, err := ParseWatchCacheSizes(f.Options.WatchCacheSizes) + if err != nil { + return generic.RESTOptions{}, err + } + cacheSize, ok := sizes[resource] + if !ok { + cacheSize = f.Options.DefaultWatchCacheSize + } + ret.Decorator = genericregistry.StorageWithCacher(cacheSize) } return ret, nil } + +// ParseWatchCacheSizes turns a list of cache size values into a map of group resources +// to requested sizes. +func ParseWatchCacheSizes(cacheSizes []string) (map[schema.GroupResource]int, error) { + watchCacheSizes := make(map[schema.GroupResource]int) + for _, c := range cacheSizes { + tokens := strings.Split(c, "#") + if len(tokens) != 2 { + return nil, fmt.Errorf("invalid value of watch cache size: %s", c) + } + + size, err := strconv.Atoi(tokens[1]) + if err != nil { + return nil, fmt.Errorf("invalid size of watch cache size: %s", c) + } + if size < 0 { + return nil, fmt.Errorf("watch cache size cannot be negative: %s", c) + } + + watchCacheSizes[schema.ParseGroupResource(tokens[0])] = size + } + return watchCacheSizes, nil +} + +// WriteWatchCacheSizes turns a map of cache size values into a list of string specifications. +func WriteWatchCacheSizes(watchCacheSizes map[schema.GroupResource]int) ([]string, error) { + var cacheSizes []string + + for resource, size := range watchCacheSizes { + if size < 0 { + return nil, fmt.Errorf("watch cache size cannot be negative for resource %s", resource) + } + cacheSizes = append(cacheSizes, fmt.Sprintf("%s#%d", resource.String(), size)) + } + return cacheSizes, nil +} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/server_run_options.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/server_run_options.go index 0ca9d5973a1a..be5d37424409 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/server_run_options.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/server_run_options.go @@ -41,7 +41,6 @@ type ServerRunOptions struct { MaxMutatingRequestsInFlight int MinRequestTimeout int TargetRAMMB int - WatchCacheSizes []string } func NewServerRunOptions() *ServerRunOptions { @@ -128,10 +127,5 @@ func (s *ServerRunOptions) AddUniversalFlags(fs *pflag.FlagSet) { "handler, which picks a randomized value above this number as the connection timeout, "+ "to spread out load.") - fs.StringSliceVar(&s.WatchCacheSizes, "watch-cache-sizes", s.WatchCacheSizes, ""+ - "List of watch cache sizes for every resource (pods, nodes, etc.), comma separated. "+ - "The individual override format: resource#size, where size is a number. It takes effect "+ - "when watch-cache is enabled.") - utilfeature.DefaultFeatureGate.AddFlag(fs) } From 929dc828b0bb7495138af426a47837f79cc0ede9 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Sat, 16 Sep 2017 23:46:44 -0400 Subject: [PATCH 2/3] React to changes in watch cache initialization Remove some complexity in RESTOptionsGetter and add default watch cache sizes for resources that are read by nodes. --- contrib/completions/bash/openshift | 2 + contrib/completions/zsh/openshift | 2 + .../server/kubernetes/master/master_config.go | 20 ++-- .../server/kubernetes/master/master_test.go | 3 +- .../securitycontextconstraints/etcd/etcd.go | 2 - pkg/util/restoptions/configgetter.go | 101 ++++++++---------- 6 files changed, 62 insertions(+), 68 deletions(-) diff --git a/contrib/completions/bash/openshift b/contrib/completions/bash/openshift index 02686fa81446..52c32de7c4f1 100644 --- a/contrib/completions/bash/openshift +++ b/contrib/completions/bash/openshift @@ -32111,6 +32111,8 @@ _openshift_start_kubernetes_apiserver() local_nonpersistent_flags+=("--contention-profiling") flags+=("--cors-allowed-origins=") local_nonpersistent_flags+=("--cors-allowed-origins=") + flags+=("--default-watch-cache-size=") + local_nonpersistent_flags+=("--default-watch-cache-size=") flags+=("--delete-collection-workers=") local_nonpersistent_flags+=("--delete-collection-workers=") flags+=("--deserialization-cache-size=") diff --git a/contrib/completions/zsh/openshift b/contrib/completions/zsh/openshift index 86bbd19182e8..8e5b4ab1a639 100644 --- a/contrib/completions/zsh/openshift +++ b/contrib/completions/zsh/openshift @@ -32260,6 +32260,8 @@ _openshift_start_kubernetes_apiserver() local_nonpersistent_flags+=("--contention-profiling") flags+=("--cors-allowed-origins=") local_nonpersistent_flags+=("--cors-allowed-origins=") + flags+=("--default-watch-cache-size=") + local_nonpersistent_flags+=("--default-watch-cache-size=") flags+=("--delete-collection-workers=") local_nonpersistent_flags+=("--delete-collection-workers=") flags+=("--deserialization-cache-size=") diff --git a/pkg/cmd/server/kubernetes/master/master_config.go b/pkg/cmd/server/kubernetes/master/master_config.go index 1c1555bb5c53..06cf334b554f 100644 --- a/pkg/cmd/server/kubernetes/master/master_config.go +++ b/pkg/cmd/server/kubernetes/master/master_config.go @@ -507,6 +507,20 @@ func buildKubeApiserverConfig( return originLongRunningRequestRE.MatchString(r.URL.Path) || kubeLongRunningFunc(r, requestInfo) } + if apiserverOptions.Etcd.EnableWatchCache { + glog.V(2).Infof("Initializing cache sizes based on %dMB limit", apiserverOptions.GenericServerRunOptions.TargetRAMMB) + sizes := cachesize.NewHeuristicWatchCacheSizes(apiserverOptions.GenericServerRunOptions.TargetRAMMB) + if userSpecified, err := genericoptions.ParseWatchCacheSizes(apiserverOptions.Etcd.WatchCacheSizes); err == nil { + for resource, size := range userSpecified { + sizes[resource] = size + } + } + apiserverOptions.Etcd.WatchCacheSizes, err = genericoptions.WriteWatchCacheSizes(sizes) + if err != nil { + return nil, err + } + } + if err := apiserverOptions.Etcd.ApplyWithStorageFactoryTo(storageFactory, genericConfig); err != nil { return nil, err } @@ -566,12 +580,6 @@ func buildKubeApiserverConfig( EnableCoreControllers: true, } - if apiserverOptions.Etcd.EnableWatchCache { - // TODO(rebase): upstream also does the following: - // cachesize.InitializeWatchCacheSizes(s.GenericServerRunOptions.TargetRAMMB) - cachesize.SetWatchCacheSizes(apiserverOptions.GenericServerRunOptions.WatchCacheSizes) - } - if kubeApiserverConfig.EnableCoreControllers { ttl := masterConfig.KubernetesMasterConfig.MasterEndpointReconcileTTL interval := ttl * 2 / 3 diff --git a/pkg/cmd/server/kubernetes/master/master_test.go b/pkg/cmd/server/kubernetes/master/master_test.go index 994904fae990..3dd9573dca8b 100644 --- a/pkg/cmd/server/kubernetes/master/master_test.go +++ b/pkg/cmd/server/kubernetes/master/master_test.go @@ -25,8 +25,7 @@ func TestNewMasterLeasesHasCorrectTTL(t *testing.T) { } restOptions := generic.RESTOptions{StorageConfig: etcdStorage, Decorator: generic.UndecoratedStorage, DeleteCollectionWorkers: 1} - watchCacheDisabled := 0 - storageInterface, _ := restOptions.Decorator(kapi.Scheme, restOptions.StorageConfig, &watchCacheDisabled, nil, "masterleases", nil, nil, nil, nil) + storageInterface, _ := restOptions.Decorator(kapi.Scheme, restOptions.StorageConfig, nil, "masterleases", nil, nil, nil, nil) defer server.Terminate(t) masterLeases := newMasterLeases(storageInterface, 15) diff --git a/pkg/security/registry/securitycontextconstraints/etcd/etcd.go b/pkg/security/registry/securitycontextconstraints/etcd/etcd.go index 732da909aed0..6df70ab3f303 100644 --- a/pkg/security/registry/securitycontextconstraints/etcd/etcd.go +++ b/pkg/security/registry/securitycontextconstraints/etcd/etcd.go @@ -6,7 +6,6 @@ import ( "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/apiserver/pkg/registry/rest" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/registry/cachesize" securityapi "github.com/openshift/origin/pkg/security/apis/security" "github.com/openshift/origin/pkg/security/registry/securitycontextconstraints" @@ -30,7 +29,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) *REST { }, PredicateFunc: securitycontextconstraints.Matcher, DefaultQualifiedResource: securityapi.Resource("securitycontextconstraints"), - WatchCacheSize: cachesize.GetWatchCacheSizeByResource("securitycontextconstraints"), CreateStrategy: securitycontextconstraints.Strategy, UpdateStrategy: securitycontextconstraints.Strategy, diff --git a/pkg/util/restoptions/configgetter.go b/pkg/util/restoptions/configgetter.go index bb50b8beafc9..87147026812f 100644 --- a/pkg/util/restoptions/configgetter.go +++ b/pkg/util/restoptions/configgetter.go @@ -1,22 +1,16 @@ package restoptions import ( - "fmt" - "strconv" - "strings" "sync" - "k8s.io/apimachinery/pkg/runtime" + "github.com/golang/glog" + "k8s.io/apimachinery/pkg/runtime/schema" - kerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apiserver/pkg/registry/generic" "k8s.io/apiserver/pkg/registry/generic/registry" + "k8s.io/apiserver/pkg/server/options" serverstorage "k8s.io/apiserver/pkg/server/storage" - "k8s.io/apiserver/pkg/storage" - "k8s.io/apiserver/pkg/storage/storagebackend" - "k8s.io/apiserver/pkg/storage/storagebackend/factory" - "github.com/golang/glog" configapi "github.com/openshift/origin/pkg/cmd/server/api" kubernetes "github.com/openshift/origin/pkg/cmd/server/kubernetes/master" ) @@ -41,7 +35,6 @@ type configRESTOptionsGetter struct { } // NewConfigGetter returns a restoptions.Getter implemented using information from the provided master config. -// By default, the etcd watch cache is enabled with a size of 1000 per resource type. // TODO: this class should either not need to know about configapi.MasterConfig, or not be in pkg/util func NewConfigGetter(masterOptions configapi.MasterConfig, defaultResourceConfig *serverstorage.ResourceConfig, resourcePrefixOverrides map[schema.GroupResource]string, enforcedStorageVersions map[schema.GroupResource]schema.GroupVersion, quorumResources map[schema.GroupResource]struct{}) (Getter, error) { apiserverOptions, err := kubernetes.BuildKubeAPIserverOptions(masterOptions) @@ -55,27 +48,24 @@ func NewConfigGetter(masterOptions configapi.MasterConfig, defaultResourceConfig storageFactory.DefaultResourcePrefixes = resourcePrefixOverrides storageFactory.StorageConfig.Prefix = masterOptions.EtcdStorageConfig.OpenShiftStoragePrefix - // TODO: refactor vendor/k8s.io/kubernetes/pkg/registry/cachesize to remove our custom cache size code - errs := []error{} - cacheSizes := map[schema.GroupResource]int{} - for _, c := range apiserverOptions.GenericServerRunOptions.WatchCacheSizes { - tokens := strings.Split(c, "#") - if len(tokens) != 2 { - errs = append(errs, fmt.Errorf("invalid watch cache size value '%s', expecting # format (e.g. builds#100)", c)) - continue + // perform watch cache heuristic like upstream + if apiserverOptions.Etcd.EnableWatchCache { + glog.V(2).Infof("Initializing cache sizes based on %dMB limit", apiserverOptions.GenericServerRunOptions.TargetRAMMB) + sizes := newHeuristicWatchCacheSizes(apiserverOptions.GenericServerRunOptions.TargetRAMMB) + if userSpecified, err := options.ParseWatchCacheSizes(apiserverOptions.Etcd.WatchCacheSizes); err == nil { + for resource, size := range userSpecified { + sizes[resource] = size + } } - - resource := schema.ParseGroupResource(tokens[0]) - - size, err := strconv.Atoi(tokens[1]) + apiserverOptions.Etcd.WatchCacheSizes, err = options.WriteWatchCacheSizes(sizes) if err != nil { - errs = append(errs, fmt.Errorf("invalid watch cache size value '%s': %v", c, err)) - continue + return nil, err } - cacheSizes[resource] = size } - if len(errs) > 0 { - return nil, kerrors.NewAggregate(errs) + + cacheSizes, err := options.ParseWatchCacheSizes(apiserverOptions.Etcd.WatchCacheSizes) + if err != nil { + return nil, err } return &configRESTOptionsGetter{ @@ -108,41 +98,14 @@ func (g *configRESTOptionsGetter) GetRESTOptions(resource schema.GroupResource) config.Quorum = true } - configuredCacheSize, specified := g.cacheSizes[resource] - if !specified || configuredCacheSize < 0 { - configuredCacheSize = g.defaultCacheSize - } - storageWithCacher := registry.StorageWithCacher(configuredCacheSize) - - decorator := func( - copier runtime.ObjectCopier, - storageConfig *storagebackend.Config, - requestedSize *int, - objectType runtime.Object, - resourcePrefix string, - keyFunc func(obj runtime.Object) (string, error), - newListFn func() runtime.Object, - getAttrsFunc storage.AttrFunc, - triggerFn storage.TriggerPublisherFunc, - ) (storage.Interface, factory.DestroyFunc) { - // use the origin default cache size, not the one in registry.StorageWithCacher - capacity := &configuredCacheSize - if requestedSize != nil { - capacity = requestedSize - } - - if *capacity == 0 || !g.cacheEnabled { - glog.V(5).Infof("using uncached watch storage for %s (quorum=%t)", resource.String(), storageConfig.Quorum) - return generic.UndecoratedStorage(copier, storageConfig, capacity, objectType, resourcePrefix, keyFunc, newListFn, getAttrsFunc, triggerFn) - } - - glog.V(5).Infof("using watch cache storage (capacity=%v, quorum=%t) for %s %#v", *capacity, storageConfig.Quorum, resource.String(), storageConfig) - return storageWithCacher(copier, storageConfig, capacity, objectType, resourcePrefix, keyFunc, newListFn, getAttrsFunc, triggerFn) + cacheSize, ok := g.cacheSizes[resource] + if !ok { + cacheSize = g.defaultCacheSize } resourceOptions := generic.RESTOptions{ StorageConfig: config, - Decorator: decorator, + Decorator: registry.StorageWithCacher(cacheSize), DeleteCollectionWorkers: g.deleteCollectionWorkers, EnableGarbageCollection: g.enableGarbageCollection, ResourcePrefix: g.storageFactory.ResourcePrefix(resource), @@ -151,3 +114,25 @@ func (g *configRESTOptionsGetter) GetRESTOptions(resource schema.GroupResource) return resourceOptions, nil } + +// newHeuristicWatchCacheSizes returns a map of suggested watch cache sizes based on total +// memory. It reuses the upstream heuristic and adds OpenShift specific resources. +func newHeuristicWatchCacheSizes(expectedRAMCapacityMB int) map[schema.GroupResource]int { + // TODO: Revisit this heuristic, copied from upstream + clusterSize := expectedRAMCapacityMB / 60 + + // default enable watch caches for resources that will have a high number of clients accessing it + // and where the write rate may be significant + watchCacheSizes := make(map[schema.GroupResource]int) + watchCacheSizes[schema.GroupResource{Group: "network.openshift.io", Resource: "hostsubnets"}] = maxInt(5*clusterSize, 100) + watchCacheSizes[schema.GroupResource{Group: "network.openshift.io", Resource: "netnamespaces"}] = maxInt(5*clusterSize, 100) + watchCacheSizes[schema.GroupResource{Group: "network.openshift.io", Resource: "egressnetworkpolicies"}] = maxInt(10*clusterSize, 100) + return watchCacheSizes +} + +func maxInt(a, b int) int { + if a > b { + return a + } + return b +} From 01aeb239fdcc77309b9a68551f4b36399ab4e9a1 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Sat, 16 Sep 2017 23:47:41 -0400 Subject: [PATCH 3/3] Disable the watch cache for most resources by default Any resource named by the heuristics gets a watch cache by default. Admins can restore the previous behavior by setting `--default-watch-cache-size` to a positive integer. This reduces the amount of total memory allocated on large cluster significantly at minor cost in CPU on the etcd process and an increase in network bandwidth to etcd. --- pkg/cmd/server/kubernetes/master/master_config.go | 4 +--- test/integration/watch_cache_test.go | 11 +++++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/pkg/cmd/server/kubernetes/master/master_config.go b/pkg/cmd/server/kubernetes/master/master_config.go index 06cf334b554f..c190af7f326e 100644 --- a/pkg/cmd/server/kubernetes/master/master_config.go +++ b/pkg/cmd/server/kubernetes/master/master_config.go @@ -80,8 +80,6 @@ import ( "github.com/openshift/origin/pkg/version" ) -const DefaultWatchCacheSize = 1000 - // request paths that match this regular expression will be treated as long running // and not subjected to the default server timeout. const originLongRunningEndpointsRE = "(/|^)(buildconfigs/.*/instantiatebinary|imagestreamimports)$" @@ -150,7 +148,7 @@ func BuildKubeAPIserverOptions(masterConfig configapi.MasterConfig) (*kapiserver server.Etcd.StorageConfig.KeyFile = masterConfig.EtcdClientInfo.ClientCert.KeyFile server.Etcd.StorageConfig.CertFile = masterConfig.EtcdClientInfo.ClientCert.CertFile server.Etcd.StorageConfig.CAFile = masterConfig.EtcdClientInfo.CA - server.Etcd.DefaultWatchCacheSize = DefaultWatchCacheSize + server.Etcd.DefaultWatchCacheSize = 0 server.GenericServerRunOptions.CorsAllowedOriginList = masterConfig.CORSAllowedOrigins server.GenericServerRunOptions.MaxRequestsInFlight = masterConfig.ServingInfo.MaxRequestsInFlight diff --git a/test/integration/watch_cache_test.go b/test/integration/watch_cache_test.go index a298fb862d51..52d70a26f920 100644 --- a/test/integration/watch_cache_test.go +++ b/test/integration/watch_cache_test.go @@ -15,7 +15,6 @@ import ( coreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion" configapi "github.com/openshift/origin/pkg/cmd/server/api" - serverkube "github.com/openshift/origin/pkg/cmd/server/kubernetes/master" testutil "github.com/openshift/origin/test/util" testserver "github.com/openshift/origin/test/util/server" ) @@ -124,9 +123,13 @@ func TestDefaultWatchCacheSize(t *testing.T) { etcdOptions := apiserveroptions.NewEtcdOptions(&storagebackend.Config{}) kubeDefaultCacheSize := etcdOptions.DefaultWatchCacheSize if kubeDefaultCacheSize != 100 { - t.Fatalf("upstream DefaultWatchCacheSize changed from 100 to %q", kubeDefaultCacheSize) + t.Fatalf("upstream DefaultWatchCacheSize changed to %d", kubeDefaultCacheSize) } - testWatchCacheWithConfig(t, master, serverkube.DefaultWatchCacheSize, kubeDefaultCacheSize) + if master.KubernetesMasterConfig.APIServerArguments == nil { + master.KubernetesMasterConfig.APIServerArguments = configapi.ExtendedArguments{} + } + master.KubernetesMasterConfig.APIServerArguments["watch-cache-sizes"] = []string{"namespaces#100"} + testWatchCacheWithConfig(t, master, 100, 0) } func TestWatchCacheSizeWithFlag(t *testing.T) { @@ -140,5 +143,5 @@ func TestWatchCacheSizeWithFlag(t *testing.T) { } master.KubernetesMasterConfig.APIServerArguments["watch-cache-sizes"] = []string{"namespaces#2000"} - testWatchCacheWithConfig(t, master, 2000, serverkube.DefaultWatchCacheSize) + testWatchCacheWithConfig(t, master, 2000, 0) }