mirror of https://github.com/k3s-io/k3s
replace client-go/util/buffer with k8s.io/utils/buffer
parent
0bc5508aca
commit
2358e75da3
|
@ -177,7 +177,6 @@ filegroup(
|
||||||
"//staging/src/k8s.io/client-go/tools/remotecommand:all-srcs",
|
"//staging/src/k8s.io/client-go/tools/remotecommand:all-srcs",
|
||||||
"//staging/src/k8s.io/client-go/tools/watch:all-srcs",
|
"//staging/src/k8s.io/client-go/tools/watch:all-srcs",
|
||||||
"//staging/src/k8s.io/client-go/transport:all-srcs",
|
"//staging/src/k8s.io/client-go/transport:all-srcs",
|
||||||
"//staging/src/k8s.io/client-go/util/buffer:all-srcs",
|
|
||||||
"//staging/src/k8s.io/client-go/util/cert:all-srcs",
|
"//staging/src/k8s.io/client-go/util/cert:all-srcs",
|
||||||
"//staging/src/k8s.io/client-go/util/certificate:all-srcs",
|
"//staging/src/k8s.io/client-go/util/certificate:all-srcs",
|
||||||
"//staging/src/k8s.io/client-go/util/connrotation:all-srcs",
|
"//staging/src/k8s.io/client-go/util/connrotation:all-srcs",
|
||||||
|
|
|
@ -81,9 +81,9 @@ go_library(
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/rest:go_default_library",
|
"//staging/src/k8s.io/client-go/rest:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/tools/pager:go_default_library",
|
"//staging/src/k8s.io/client-go/tools/pager:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/util/buffer:go_default_library",
|
|
||||||
"//staging/src/k8s.io/client-go/util/retry:go_default_library",
|
"//staging/src/k8s.io/client-go/util/retry:go_default_library",
|
||||||
"//vendor/k8s.io/klog:go_default_library",
|
"//vendor/k8s.io/klog:go_default_library",
|
||||||
|
"//vendor/k8s.io/utils/buffer:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -25,8 +25,8 @@ import (
|
||||||
"k8s.io/apimachinery/pkg/util/clock"
|
"k8s.io/apimachinery/pkg/util/clock"
|
||||||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
"k8s.io/apimachinery/pkg/util/wait"
|
||||||
"k8s.io/client-go/util/buffer"
|
|
||||||
"k8s.io/client-go/util/retry"
|
"k8s.io/client-go/util/retry"
|
||||||
|
"k8s.io/utils/buffer"
|
||||||
|
|
||||||
"k8s.io/klog"
|
"k8s.io/klog"
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
|
|
||||||
|
|
||||||
go_library(
|
|
||||||
name = "go_default_library",
|
|
||||||
srcs = ["ring_growing.go"],
|
|
||||||
importmap = "k8s.io/kubernetes/vendor/k8s.io/client-go/util/buffer",
|
|
||||||
importpath = "k8s.io/client-go/util/buffer",
|
|
||||||
visibility = ["//visibility:public"],
|
|
||||||
)
|
|
||||||
|
|
||||||
go_test(
|
|
||||||
name = "go_default_test",
|
|
||||||
srcs = ["ring_growing_test.go"],
|
|
||||||
embed = [":go_default_library"],
|
|
||||||
deps = ["//vendor/github.com/stretchr/testify/assert:go_default_library"],
|
|
||||||
)
|
|
||||||
|
|
||||||
filegroup(
|
|
||||||
name = "package-srcs",
|
|
||||||
srcs = glob(["**"]),
|
|
||||||
tags = ["automanaged"],
|
|
||||||
visibility = ["//visibility:private"],
|
|
||||||
)
|
|
||||||
|
|
||||||
filegroup(
|
|
||||||
name = "all-srcs",
|
|
||||||
srcs = [":package-srcs"],
|
|
||||||
tags = ["automanaged"],
|
|
||||||
visibility = ["//visibility:public"],
|
|
||||||
)
|
|
|
@ -1,72 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2017 The Kubernetes Authors.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package buffer
|
|
||||||
|
|
||||||
// RingGrowing is a growing ring buffer.
|
|
||||||
// Not thread safe.
|
|
||||||
type RingGrowing struct {
|
|
||||||
data []interface{}
|
|
||||||
n int // Size of Data
|
|
||||||
beg int // First available element
|
|
||||||
readable int // Number of data items available
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewRingGrowing constructs a new RingGrowing instance with provided parameters.
|
|
||||||
func NewRingGrowing(initialSize int) *RingGrowing {
|
|
||||||
return &RingGrowing{
|
|
||||||
data: make([]interface{}, initialSize),
|
|
||||||
n: initialSize,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ReadOne reads (consumes) first item from the buffer if it is available, otherwise returns false.
|
|
||||||
func (r *RingGrowing) ReadOne() (data interface{}, ok bool) {
|
|
||||||
if r.readable == 0 {
|
|
||||||
return nil, false
|
|
||||||
}
|
|
||||||
r.readable--
|
|
||||||
element := r.data[r.beg]
|
|
||||||
r.data[r.beg] = nil // Remove reference to the object to help GC
|
|
||||||
if r.beg == r.n-1 {
|
|
||||||
// Was the last element
|
|
||||||
r.beg = 0
|
|
||||||
} else {
|
|
||||||
r.beg++
|
|
||||||
}
|
|
||||||
return element, true
|
|
||||||
}
|
|
||||||
|
|
||||||
// WriteOne adds an item to the end of the buffer, growing it if it is full.
|
|
||||||
func (r *RingGrowing) WriteOne(data interface{}) {
|
|
||||||
if r.readable == r.n {
|
|
||||||
// Time to grow
|
|
||||||
newN := r.n * 2
|
|
||||||
newData := make([]interface{}, newN)
|
|
||||||
to := r.beg + r.readable
|
|
||||||
if to <= r.n {
|
|
||||||
copy(newData, r.data[r.beg:to])
|
|
||||||
} else {
|
|
||||||
copied := copy(newData, r.data[r.beg:])
|
|
||||||
copy(newData[copied:], r.data[:(to%r.n)])
|
|
||||||
}
|
|
||||||
r.beg = 0
|
|
||||||
r.data = newData
|
|
||||||
r.n = newN
|
|
||||||
}
|
|
||||||
r.data[(r.readable+r.beg)%r.n] = data
|
|
||||||
r.readable++
|
|
||||||
}
|
|
|
@ -1,50 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2017 The Kubernetes Authors.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package buffer
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestGrowth(t *testing.T) {
|
|
||||||
t.Parallel()
|
|
||||||
x := 10
|
|
||||||
g := NewRingGrowing(1)
|
|
||||||
for i := 0; i < x; i++ {
|
|
||||||
assert.Equal(t, i, g.readable)
|
|
||||||
g.WriteOne(i)
|
|
||||||
}
|
|
||||||
read := 0
|
|
||||||
for g.readable > 0 {
|
|
||||||
v, ok := g.ReadOne()
|
|
||||||
assert.True(t, ok)
|
|
||||||
assert.Equal(t, read, v)
|
|
||||||
read++
|
|
||||||
}
|
|
||||||
assert.Equalf(t, x, read, "expected to have read %d items: %d", x, read)
|
|
||||||
assert.Zerof(t, g.readable, "expected readable to be zero: %d", g.readable)
|
|
||||||
assert.Equalf(t, 16, g.n, "expected N to be 16: %d", g.n)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestEmpty(t *testing.T) {
|
|
||||||
t.Parallel()
|
|
||||||
g := NewRingGrowing(1)
|
|
||||||
_, ok := g.ReadOne()
|
|
||||||
assert.False(t, ok)
|
|
||||||
}
|
|
Loading…
Reference in New Issue