Compare commits

..

3 Commits

Author SHA1 Message Date
Kubernetes Publisher
3b9a60428f Update dependencies to v0.31.0-alpha.2 tag 2024-06-18 18:27:51 +00:00
Kubernetes Publisher
963dc5786f Merge pull request #124509 from p0lyn0mial/upstream-watch-list-code-gen
client-go: add support for API streaming

Kubernetes-commit: 6ac60160c5729ade462b041b170ec8ac0f1eb3bc
2024-06-14 14:34:00 +00:00
Lukasz Szaszkiewicz
2c1742bca0 make update
Kubernetes-commit: f62c80f965934eeeb2e028497bede7bcc632995d
2024-06-13 10:25:56 +02:00
3 changed files with 45 additions and 17 deletions

8
go.mod
View File

@@ -6,10 +6,10 @@ go 1.22.0
require (
golang.org/x/time v0.3.0
k8s.io/api v0.31.0-alpha.1
k8s.io/apimachinery v0.31.0-alpha.1
k8s.io/client-go v0.31.0-alpha.1
k8s.io/code-generator v0.31.0-alpha.1
k8s.io/api v0.31.0-alpha.2
k8s.io/apimachinery v0.31.0-alpha.2
k8s.io/client-go v0.31.0-alpha.2
k8s.io/code-generator v0.31.0-alpha.2
k8s.io/klog/v2 v2.120.1
)

16
go.sum
View File

@@ -146,14 +146,14 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
k8s.io/api v0.31.0-alpha.1 h1:bqP3HCFURMWuwBWyNSkUw3quOGwLnJkdBF7ZDcUJtmA=
k8s.io/api v0.31.0-alpha.1/go.mod h1:6gj0GOF5xlFkXPQ92XTe9DXSLJ6X8uelYZvydZYxoFM=
k8s.io/apimachinery v0.31.0-alpha.1 h1:ZWYSLeKpvdx5GLJdIkFDMz7I1qS/Gwb2QiJT2feQpRg=
k8s.io/apimachinery v0.31.0-alpha.1/go.mod h1:3nAExNh3CrzC6eKT9a32j/rv+uJ8Zod87oOmgUjZNAY=
k8s.io/client-go v0.31.0-alpha.1 h1:/j4wbqNHbgWZzVcRK4WvexBvgnp2pirEnmLoA0Df1Go=
k8s.io/client-go v0.31.0-alpha.1/go.mod h1:Zs3nIhffR3mUuvDCRE/A3JDAMf1l/5DI4XRKojXjZ78=
k8s.io/code-generator v0.31.0-alpha.1 h1:fFr7xJfD0O7s2mUzn5dpzmWYyd2FR3jKpQGImk1JHno=
k8s.io/code-generator v0.31.0-alpha.1/go.mod h1:Z9Xk/Qi7LaGD99lQ9y2/XMUK1wv1vNFOj6zTwoldS04=
k8s.io/api v0.31.0-alpha.2 h1:azMbpAFERqtGmgDtg/f7efnxgPBW+8ieyHNKxT97EMI=
k8s.io/api v0.31.0-alpha.2/go.mod h1:S1X5UjUV8NZmR1vmKIkUpruhr0AWAvocZVZ5zxKMvi4=
k8s.io/apimachinery v0.31.0-alpha.2 h1:jya7Ax6yRLH+CSW/osUEO+hxe4rVNrXU8lNB0fZcGkk=
k8s.io/apimachinery v0.31.0-alpha.2/go.mod h1:3nAExNh3CrzC6eKT9a32j/rv+uJ8Zod87oOmgUjZNAY=
k8s.io/client-go v0.31.0-alpha.2 h1:13UCBphjOLcqQ1ROBA+y9sr9Bmc/Ss1ypHQEDb6uKas=
k8s.io/client-go v0.31.0-alpha.2/go.mod h1:wF4N5QBYqOoXntvUsYd5eyfDLqskc/UNDyEF6WvaFIk=
k8s.io/code-generator v0.31.0-alpha.2 h1:ZgL/AgAXFbZ4P32Rrv2FFxQPU2MKTdNd4RTVAipCQlE=
k8s.io/code-generator v0.31.0-alpha.2/go.mod h1:4hS5z9BqvAr5Lup7NsSAh2iXug1I6KVB5x9bnQD1w8k=
k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 h1:NGrVE502P0s0/1hudf8zjgwki1X/TByhmAoILTarmzo=
k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8=
k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw=

View File

@@ -27,6 +27,8 @@ import (
watch "k8s.io/apimachinery/pkg/watch"
rest "k8s.io/client-go/rest"
consistencydetector "k8s.io/client-go/util/consistencydetector"
watchlist "k8s.io/client-go/util/watchlist"
"k8s.io/klog/v2"
v1alpha1 "k8s.io/sample-controller/pkg/apis/samplecontroller/v1alpha1"
scheme "k8s.io/sample-controller/pkg/generated/clientset/versioned/scheme"
)
@@ -79,13 +81,22 @@ func (c *foos) Get(ctx context.Context, name string, options v1.GetOptions) (res
}
// List takes label and field selectors, and returns the list of Foos that match those selectors.
func (c *foos) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.FooList, err error) {
defer func() {
func (c *foos) List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.FooList, error) {
if watchListOptions, hasWatchListOptionsPrepared, watchListOptionsErr := watchlist.PrepareWatchListOptionsFromListOptions(opts); watchListOptionsErr != nil {
klog.Warningf("Failed preparing watchlist options for foos, falling back to the standard LIST semantics, err = %v", watchListOptionsErr)
} else if hasWatchListOptionsPrepared {
result, err := c.watchList(ctx, watchListOptions)
if err == nil {
consistencydetector.CheckListFromCacheDataConsistencyIfRequested(ctx, "list request for foos", c.list, opts, result)
consistencydetector.CheckWatchListFromCacheDataConsistencyIfRequested(ctx, "watchlist request for foos", c.list, opts, result)
return result, nil
}
}()
return c.list(ctx, opts)
klog.Warningf("The watchlist request for foos ended with an error, falling back to the standard LIST semantics, err = %v", err)
}
result, err := c.list(ctx, opts)
if err == nil {
consistencydetector.CheckListFromCacheDataConsistencyIfRequested(ctx, "list request for foos", c.list, opts, result)
}
return result, err
}
// list takes label and field selectors, and returns the list of Foos that match those selectors.
@@ -105,6 +116,23 @@ func (c *foos) list(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.
return
}
// watchList establishes a watch stream with the server and returns the list of Foos
func (c *foos) watchList(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.FooList, err error) {
var timeout time.Duration
if opts.TimeoutSeconds != nil {
timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
}
result = &v1alpha1.FooList{}
err = c.client.Get().
Namespace(c.ns).
Resource("foos").
VersionedParams(&opts, scheme.ParameterCodec).
Timeout(timeout).
WatchList(ctx).
Into(result)
return
}
// Watch returns a watch.Interface that watches the requested foos.
func (c *foos) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
var timeout time.Duration