mirror of
https://github.com/kubernetes/sample-controller.git
synced 2025-01-22 18:02:51 +08:00
ec723b2112
Automatic merge from submit-queue. If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. sample-controller: add example CRD controller **What this PR does / why we need it**: Adds a sample-controller example repository fixes #52752 **Special notes for your reviewer**: This is currently based on the sttts:sttts-codegen-scripts branch and should not be merged until that is (ref https://github.com/kubernetes/kubernetes/pull/52186) **Release note**: ``` Add sample-controller repository ``` /cc @sttts @nikhita @colemickens Kubernetes-commit: 9a7800f7d2efb88b397674672ac56f898826cf7c
52 lines
999 B
Go
52 lines
999 B
Go
// Copyright 2014 Canonical Ltd.
|
|
// Licensed under the LGPLv3 with static-linking exception.
|
|
// See LICENCE file for details.
|
|
|
|
package ratelimit
|
|
|
|
import "io"
|
|
|
|
type reader struct {
|
|
r io.Reader
|
|
bucket *Bucket
|
|
}
|
|
|
|
// Reader returns a reader that is rate limited by
|
|
// the given token bucket. Each token in the bucket
|
|
// represents one byte.
|
|
func Reader(r io.Reader, bucket *Bucket) io.Reader {
|
|
return &reader{
|
|
r: r,
|
|
bucket: bucket,
|
|
}
|
|
}
|
|
|
|
func (r *reader) Read(buf []byte) (int, error) {
|
|
n, err := r.r.Read(buf)
|
|
if n <= 0 {
|
|
return n, err
|
|
}
|
|
r.bucket.Wait(int64(n))
|
|
return n, err
|
|
}
|
|
|
|
type writer struct {
|
|
w io.Writer
|
|
bucket *Bucket
|
|
}
|
|
|
|
// Writer returns a reader that is rate limited by
|
|
// the given token bucket. Each token in the bucket
|
|
// represents one byte.
|
|
func Writer(w io.Writer, bucket *Bucket) io.Writer {
|
|
return &writer{
|
|
w: w,
|
|
bucket: bucket,
|
|
}
|
|
}
|
|
|
|
func (w *writer) Write(buf []byte) (int, error) {
|
|
w.bucket.Wait(int64(len(buf)))
|
|
return w.w.Write(buf)
|
|
}
|