From 500b130ff0a2c744b21cfb8e6d09e94b707dec61 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 --- pkg/client/tests/listwatch_test.go | 1 + staging/src/k8s.io/client-go/tools/cache/BUILD | 2 ++ staging/src/k8s.io/client-go/tools/cache/listwatch.go | 11 +++++++++-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/pkg/client/tests/listwatch_test.go b/pkg/client/tests/listwatch_test.go index 76a19169c87..fe6c3351f2f 100644 --- a/pkg/client/tests/listwatch_test.go +++ b/pkg/client/tests/listwatch_test.go @@ -104,6 +104,7 @@ func TestListWatchesCanList(t *testing.T) { defer server.Close() client := clientset.NewForConfigOrDie(&restclient.Config{Host: server.URL, ContentConfig: restclient.ContentConfig{GroupVersion: &api.Registry.GroupOrDie(v1.GroupName).GroupVersion}}) lw := NewListWatchFromClient(client.Core().RESTClient(), item.resource, item.namespace, item.fieldSelector) + lw.DisablePaging = true // This test merely tests that the correct request is made. lw.List(metav1.ListOptions{}) handler.ValidateRequest(t, item.location, "GET", nil) diff --git a/staging/src/k8s.io/client-go/tools/cache/BUILD b/staging/src/k8s.io/client-go/tools/cache/BUILD index e79cce629cc..3531eba74c1 100644 --- a/staging/src/k8s.io/client-go/tools/cache/BUILD +++ b/staging/src/k8s.io/client-go/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/staging/src/k8s.io/client-go/tools/cache/listwatch.go b/staging/src/k8s.io/client-go/tools/cache/listwatch.go index 4c976533b01..cab48ae00a2 100644 --- a/staging/src/k8s.io/client-go/tools/cache/listwatch.go +++ b/staging/src/k8s.io/client-go/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) }