From 2b76a1826e598223e2deac1ee549e1e22803fc6b Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Mon, 17 Jul 2017 22:53:14 -0400 Subject: [PATCH] Enable paging for all list watchers Kubernetes-commit: 500b130ff0a2c744b21cfb8e6d09e94b707dec61 --- tools/cache/BUILD | 2 ++ tools/cache/listwatch.go | 11 +++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/tools/cache/BUILD b/tools/cache/BUILD index e79cce62..3531eba7 100644 --- a/tools/cache/BUILD +++ b/tools/cache/BUILD @@ -63,6 +63,7 @@ go_library( ], deps = [ "//vendor/github.com/golang/glog:go_default_library", + "//vendor/golang.org/x/net/context: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", @@ -79,6 +80,7 @@ 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/tools/pager:go_default_library", ], ) diff --git a/tools/cache/listwatch.go b/tools/cache/listwatch.go index 4c976533..cab48ae0 100644 --- a/tools/cache/listwatch.go +++ b/tools/cache/listwatch.go @@ -19,12 +19,15 @@ package cache import ( "time" + "golang.org/x/net/context" + "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/watch" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/pager" ) // ListerWatcher is any object that knows how to perform an initial list and start a watch on a resource. @@ -46,8 +49,9 @@ type WatchFunc func(options metav1.ListOptions) (watch.Interface, error) // It is a convenience function for users of NewReflector, etc. // ListFunc and WatchFunc must not be nil type ListWatch struct { - ListFunc ListFunc - WatchFunc WatchFunc + ListFunc ListFunc + WatchFunc WatchFunc + DisablePaging bool } // Getter interface knows how to access Get method from RESTClient. @@ -87,6 +91,9 @@ func timeoutFromListOptions(options metav1.ListOptions) time.Duration { // List a set of apiserver resources func (lw *ListWatch) List(options metav1.ListOptions) (runtime.Object, error) { + if !lw.DisablePaging { + return pager.New(pager.SimplePageFunc(lw.ListFunc)).List(context.TODO(), options) + } return lw.ListFunc(options) }