mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 14:07:14 +00:00
Update recorders to wrap kubernetes.Client
This commit is contained in:
parent
249ad2a613
commit
066c1c05d7
@ -180,42 +180,42 @@ func TestList(t *testing.T) {
|
|||||||
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ConsistentListFromCache, false)
|
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ConsistentListFromCache, false)
|
||||||
ctx, cacher, server, terminate := testSetupWithEtcdServer(t)
|
ctx, cacher, server, terminate := testSetupWithEtcdServer(t)
|
||||||
t.Cleanup(terminate)
|
t.Cleanup(terminate)
|
||||||
storagetesting.RunTestList(ctx, t, cacher, compactStorage(cacher, server.V3Client), true)
|
storagetesting.RunTestList(ctx, t, cacher, compactStorage(cacher, server.V3Client.Client), true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestListWithConsistentListFromCache(t *testing.T) {
|
func TestListWithConsistentListFromCache(t *testing.T) {
|
||||||
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ConsistentListFromCache, true)
|
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ConsistentListFromCache, true)
|
||||||
ctx, cacher, server, terminate := testSetupWithEtcdServer(t)
|
ctx, cacher, server, terminate := testSetupWithEtcdServer(t)
|
||||||
t.Cleanup(terminate)
|
t.Cleanup(terminate)
|
||||||
storagetesting.RunTestList(ctx, t, cacher, compactStorage(cacher, server.V3Client), true)
|
storagetesting.RunTestList(ctx, t, cacher, compactStorage(cacher, server.V3Client.Client), true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestConsistentList(t *testing.T) {
|
func TestConsistentList(t *testing.T) {
|
||||||
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ConsistentListFromCache, false)
|
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ConsistentListFromCache, false)
|
||||||
ctx, cacher, server, terminate := testSetupWithEtcdServer(t)
|
ctx, cacher, server, terminate := testSetupWithEtcdServer(t)
|
||||||
t.Cleanup(terminate)
|
t.Cleanup(terminate)
|
||||||
storagetesting.RunTestConsistentList(ctx, t, cacher, compactStorage(cacher, server.V3Client), true, false)
|
storagetesting.RunTestConsistentList(ctx, t, cacher, compactStorage(cacher, server.V3Client.Client), true, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestConsistentListWithConsistentListFromCache(t *testing.T) {
|
func TestConsistentListWithConsistentListFromCache(t *testing.T) {
|
||||||
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ConsistentListFromCache, true)
|
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ConsistentListFromCache, true)
|
||||||
ctx, cacher, server, terminate := testSetupWithEtcdServer(t)
|
ctx, cacher, server, terminate := testSetupWithEtcdServer(t)
|
||||||
t.Cleanup(terminate)
|
t.Cleanup(terminate)
|
||||||
storagetesting.RunTestConsistentList(ctx, t, cacher, compactStorage(cacher, server.V3Client), true, true)
|
storagetesting.RunTestConsistentList(ctx, t, cacher, compactStorage(cacher, server.V3Client.Client), true, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetListNonRecursive(t *testing.T) {
|
func TestGetListNonRecursive(t *testing.T) {
|
||||||
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ConsistentListFromCache, false)
|
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ConsistentListFromCache, false)
|
||||||
ctx, cacher, server, terminate := testSetupWithEtcdServer(t)
|
ctx, cacher, server, terminate := testSetupWithEtcdServer(t)
|
||||||
t.Cleanup(terminate)
|
t.Cleanup(terminate)
|
||||||
storagetesting.RunTestGetListNonRecursive(ctx, t, compactStorage(cacher, server.V3Client), cacher)
|
storagetesting.RunTestGetListNonRecursive(ctx, t, compactStorage(cacher, server.V3Client.Client), cacher)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetListNonRecursiveWithConsistentListFromCache(t *testing.T) {
|
func TestGetListNonRecursiveWithConsistentListFromCache(t *testing.T) {
|
||||||
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ConsistentListFromCache, true)
|
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ConsistentListFromCache, true)
|
||||||
ctx, cacher, server, terminate := testSetupWithEtcdServer(t)
|
ctx, cacher, server, terminate := testSetupWithEtcdServer(t)
|
||||||
t.Cleanup(terminate)
|
t.Cleanup(terminate)
|
||||||
storagetesting.RunTestGetListNonRecursive(ctx, t, compactStorage(cacher, server.V3Client), cacher)
|
storagetesting.RunTestGetListNonRecursive(ctx, t, compactStorage(cacher, server.V3Client.Client), cacher)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetListRecursivePrefix(t *testing.T) {
|
func TestGetListRecursivePrefix(t *testing.T) {
|
||||||
@ -301,7 +301,7 @@ func TestWatch(t *testing.T) {
|
|||||||
func TestWatchFromZero(t *testing.T) {
|
func TestWatchFromZero(t *testing.T) {
|
||||||
ctx, cacher, server, terminate := testSetupWithEtcdServer(t)
|
ctx, cacher, server, terminate := testSetupWithEtcdServer(t)
|
||||||
t.Cleanup(terminate)
|
t.Cleanup(terminate)
|
||||||
storagetesting.RunTestWatchFromZero(ctx, t, cacher, compactStorage(cacher, server.V3Client))
|
storagetesting.RunTestWatchFromZero(ctx, t, cacher, compactStorage(cacher, server.V3Client.Client))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDeleteTriggerWatch(t *testing.T) {
|
func TestDeleteTriggerWatch(t *testing.T) {
|
||||||
|
@ -27,7 +27,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestCompact(t *testing.T) {
|
func TestCompact(t *testing.T) {
|
||||||
client := testserver.RunEtcd(t, nil)
|
client := testserver.RunEtcd(t, nil).Client
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|
||||||
putResp, err := client.Put(ctx, "/somekey", "data")
|
putResp, err := client.Put(ctx, "/somekey", "data")
|
||||||
@ -56,7 +56,7 @@ func TestCompact(t *testing.T) {
|
|||||||
// - C1 compacts first. It will succeed.
|
// - C1 compacts first. It will succeed.
|
||||||
// - C2 compacts after. It will fail. But it will get latest logical time, which should be larger by one.
|
// - C2 compacts after. It will fail. But it will get latest logical time, which should be larger by one.
|
||||||
func TestCompactConflict(t *testing.T) {
|
func TestCompactConflict(t *testing.T) {
|
||||||
client := testserver.RunEtcd(t, nil)
|
client := testserver.RunEtcd(t, nil).Client
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|
||||||
putResp, err := client.Put(ctx, "/somekey", "data")
|
putResp, err := client.Put(ctx, "/somekey", "data")
|
||||||
|
@ -27,7 +27,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
clientv3 "go.etcd.io/etcd/client/v3"
|
clientv3 "go.etcd.io/etcd/client/v3"
|
||||||
_ "go.etcd.io/etcd/client/v3/kubernetes"
|
"go.etcd.io/etcd/client/v3/kubernetes"
|
||||||
"go.opentelemetry.io/otel/attribute"
|
"go.opentelemetry.io/otel/attribute"
|
||||||
|
|
||||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
@ -73,7 +73,7 @@ func (d authenticatedDataString) AuthenticatedData() []byte {
|
|||||||
var _ value.Context = authenticatedDataString("")
|
var _ value.Context = authenticatedDataString("")
|
||||||
|
|
||||||
type store struct {
|
type store struct {
|
||||||
client *clientv3.Client
|
client *kubernetes.Client
|
||||||
codec runtime.Codec
|
codec runtime.Codec
|
||||||
versioner storage.Versioner
|
versioner storage.Versioner
|
||||||
transformer value.Transformer
|
transformer value.Transformer
|
||||||
@ -100,11 +100,11 @@ type objState struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// New returns an etcd3 implementation of storage.Interface.
|
// New returns an etcd3 implementation of storage.Interface.
|
||||||
func New(c *clientv3.Client, codec runtime.Codec, newFunc, newListFunc func() runtime.Object, prefix, resourcePrefix string, groupResource schema.GroupResource, transformer value.Transformer, leaseManagerConfig LeaseManagerConfig, decoder Decoder, versioner storage.Versioner) storage.Interface {
|
func New(c *kubernetes.Client, codec runtime.Codec, newFunc, newListFunc func() runtime.Object, prefix, resourcePrefix string, groupResource schema.GroupResource, transformer value.Transformer, leaseManagerConfig LeaseManagerConfig, decoder Decoder, versioner storage.Versioner) storage.Interface {
|
||||||
return newStore(c, codec, newFunc, newListFunc, prefix, resourcePrefix, groupResource, transformer, leaseManagerConfig, decoder, versioner)
|
return newStore(c, codec, newFunc, newListFunc, prefix, resourcePrefix, groupResource, transformer, leaseManagerConfig, decoder, versioner)
|
||||||
}
|
}
|
||||||
|
|
||||||
func newStore(c *clientv3.Client, codec runtime.Codec, newFunc, newListFunc func() runtime.Object, prefix, resourcePrefix string, groupResource schema.GroupResource, transformer value.Transformer, leaseManagerConfig LeaseManagerConfig, decoder Decoder, versioner storage.Versioner) *store {
|
func newStore(c *kubernetes.Client, codec runtime.Codec, newFunc, newListFunc func() runtime.Object, prefix, resourcePrefix string, groupResource schema.GroupResource, transformer value.Transformer, leaseManagerConfig LeaseManagerConfig, decoder Decoder, versioner storage.Versioner) *store {
|
||||||
// for compatibility with etcd2 impl.
|
// for compatibility with etcd2 impl.
|
||||||
// no-op for default prefix of '/registry'.
|
// no-op for default prefix of '/registry'.
|
||||||
// keeps compatibility with etcd2 impl for custom prefixes that don't start with '/'
|
// keeps compatibility with etcd2 impl for custom prefixes that don't start with '/'
|
||||||
@ -115,7 +115,7 @@ func newStore(c *clientv3.Client, codec runtime.Codec, newFunc, newListFunc func
|
|||||||
}
|
}
|
||||||
|
|
||||||
w := &watcher{
|
w := &watcher{
|
||||||
client: c,
|
client: c.Client,
|
||||||
codec: codec,
|
codec: codec,
|
||||||
newFunc: newFunc,
|
newFunc: newFunc,
|
||||||
groupResource: groupResource,
|
groupResource: groupResource,
|
||||||
@ -136,7 +136,7 @@ func newStore(c *clientv3.Client, codec runtime.Codec, newFunc, newListFunc func
|
|||||||
groupResource: groupResource,
|
groupResource: groupResource,
|
||||||
groupResourceString: groupResource.String(),
|
groupResourceString: groupResource.String(),
|
||||||
watcher: w,
|
watcher: w,
|
||||||
leaseManager: newDefaultLeaseManager(c, leaseManagerConfig),
|
leaseManager: newDefaultLeaseManager(c.Client, leaseManagerConfig),
|
||||||
decoder: decoder,
|
decoder: decoder,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ import (
|
|||||||
|
|
||||||
"github.com/go-logr/logr"
|
"github.com/go-logr/logr"
|
||||||
clientv3 "go.etcd.io/etcd/client/v3"
|
clientv3 "go.etcd.io/etcd/client/v3"
|
||||||
|
"go.etcd.io/etcd/client/v3/kubernetes"
|
||||||
"go.etcd.io/etcd/server/v3/embed"
|
"go.etcd.io/etcd/server/v3/embed"
|
||||||
"google.golang.org/grpc/grpclog"
|
"google.golang.org/grpc/grpclog"
|
||||||
|
|
||||||
@ -95,7 +96,7 @@ func checkStorageInvariants(etcdClient *clientv3.Client, codec runtime.Codec) st
|
|||||||
|
|
||||||
func TestCreate(t *testing.T) {
|
func TestCreate(t *testing.T) {
|
||||||
ctx, store, etcdClient := testSetup(t)
|
ctx, store, etcdClient := testSetup(t)
|
||||||
storagetesting.RunTestCreate(ctx, t, store, checkStorageInvariants(etcdClient, store.codec))
|
storagetesting.RunTestCreate(ctx, t, store, checkStorageInvariants(etcdClient.Client, store.codec))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCreateWithTTL(t *testing.T) {
|
func TestCreateWithTTL(t *testing.T) {
|
||||||
@ -170,7 +171,7 @@ func TestListPaging(t *testing.T) {
|
|||||||
|
|
||||||
func TestGetListNonRecursive(t *testing.T) {
|
func TestGetListNonRecursive(t *testing.T) {
|
||||||
ctx, store, client := testSetup(t)
|
ctx, store, client := testSetup(t)
|
||||||
storagetesting.RunTestGetListNonRecursive(ctx, t, compactStorage(client), store)
|
storagetesting.RunTestGetListNonRecursive(ctx, t, compactStorage(client.Client), store)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetListRecursivePrefix(t *testing.T) {
|
func TestGetListRecursivePrefix(t *testing.T) {
|
||||||
@ -194,8 +195,8 @@ func (s *storeWithPrefixTransformer) UpdatePrefixTransformer(modifier storagetes
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestGuaranteedUpdate(t *testing.T) {
|
func TestGuaranteedUpdate(t *testing.T) {
|
||||||
ctx, store, etcdClient := testSetup(t)
|
ctx, store, client := testSetup(t)
|
||||||
storagetesting.RunTestGuaranteedUpdate(ctx, t, &storeWithPrefixTransformer{store}, checkStorageInvariants(etcdClient, store.codec))
|
storagetesting.RunTestGuaranteedUpdate(ctx, t, &storeWithPrefixTransformer{store}, checkStorageInvariants(client.Client, store.codec))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGuaranteedUpdateWithTTL(t *testing.T) {
|
func TestGuaranteedUpdateWithTTL(t *testing.T) {
|
||||||
@ -225,12 +226,12 @@ func TestTransformationFailure(t *testing.T) {
|
|||||||
|
|
||||||
func TestList(t *testing.T) {
|
func TestList(t *testing.T) {
|
||||||
ctx, store, client := testSetup(t)
|
ctx, store, client := testSetup(t)
|
||||||
storagetesting.RunTestList(ctx, t, store, compactStorage(client), false)
|
storagetesting.RunTestList(ctx, t, store, compactStorage(client.Client), false)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestConsistentList(t *testing.T) {
|
func TestConsistentList(t *testing.T) {
|
||||||
ctx, store, client := testSetup(t)
|
ctx, store, client := testSetup(t)
|
||||||
storagetesting.RunTestConsistentList(ctx, t, store, compactStorage(client), false, true)
|
storagetesting.RunTestConsistentList(ctx, t, store, compactStorage(client.Client), false, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkStorageCallsInvariants(transformer *storagetesting.PrefixTransformer, recorder *clientRecorder) storagetesting.CallsValidation {
|
func checkStorageCallsInvariants(transformer *storagetesting.PrefixTransformer, recorder *clientRecorder) storagetesting.CallsValidation {
|
||||||
@ -258,29 +259,29 @@ func checkStorageCallsInvariants(transformer *storagetesting.PrefixTransformer,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if reads := recorder.GetReadsAndReset(); reads != estimatedGetCalls {
|
if reads := recorder.GetReadsAndReset(); reads != estimatedGetCalls {
|
||||||
t.Errorf("unexpected reads: %d", reads)
|
t.Fatalf("unexpected reads: %d, want: %d", reads, estimatedGetCalls)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestListContinuation(t *testing.T) {
|
func TestListContinuation(t *testing.T) {
|
||||||
ctx, store, etcdClient := testSetup(t, withRecorder())
|
ctx, store, client := testSetup(t, withRecorder())
|
||||||
validation := checkStorageCallsInvariants(
|
validation := checkStorageCallsInvariants(
|
||||||
store.transformer.(*storagetesting.PrefixTransformer), etcdClient.KV.(*clientRecorder))
|
store.transformer.(*storagetesting.PrefixTransformer), client.KV.(*clientRecorder))
|
||||||
storagetesting.RunTestListContinuation(ctx, t, store, validation)
|
storagetesting.RunTestListContinuation(ctx, t, store, validation)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestListPaginationRareObject(t *testing.T) {
|
func TestListPaginationRareObject(t *testing.T) {
|
||||||
ctx, store, etcdClient := testSetup(t, withRecorder())
|
ctx, store, client := testSetup(t, withRecorder())
|
||||||
validation := checkStorageCallsInvariants(
|
validation := checkStorageCallsInvariants(
|
||||||
store.transformer.(*storagetesting.PrefixTransformer), etcdClient.KV.(*clientRecorder))
|
store.transformer.(*storagetesting.PrefixTransformer), client.KV.(*clientRecorder))
|
||||||
storagetesting.RunTestListPaginationRareObject(ctx, t, store, validation)
|
storagetesting.RunTestListPaginationRareObject(ctx, t, store, validation)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestListContinuationWithFilter(t *testing.T) {
|
func TestListContinuationWithFilter(t *testing.T) {
|
||||||
ctx, store, etcdClient := testSetup(t, withRecorder())
|
ctx, store, client := testSetup(t, withRecorder())
|
||||||
validation := checkStorageCallsInvariants(
|
validation := checkStorageCallsInvariants(
|
||||||
store.transformer.(*storagetesting.PrefixTransformer), etcdClient.KV.(*clientRecorder))
|
store.transformer.(*storagetesting.PrefixTransformer), client.KV.(*clientRecorder))
|
||||||
storagetesting.RunTestListContinuationWithFilter(ctx, t, store, validation)
|
storagetesting.RunTestListContinuationWithFilter(ctx, t, store, validation)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -299,7 +300,7 @@ func compactStorage(etcdClient *clientv3.Client) storagetesting.Compaction {
|
|||||||
|
|
||||||
func TestListInconsistentContinuation(t *testing.T) {
|
func TestListInconsistentContinuation(t *testing.T) {
|
||||||
ctx, store, client := testSetup(t)
|
ctx, store, client := testSetup(t)
|
||||||
storagetesting.RunTestListInconsistentContinuation(ctx, t, store, compactStorage(client))
|
storagetesting.RunTestListInconsistentContinuation(ctx, t, store, compactStorage(client.Client))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestListResourceVersionMatch(t *testing.T) {
|
func TestListResourceVersionMatch(t *testing.T) {
|
||||||
@ -499,7 +500,7 @@ func (r *clientRecorder) GetReadsAndReset() uint64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type setupOptions struct {
|
type setupOptions struct {
|
||||||
client func(testing.TB) *clientv3.Client
|
client func(testing.TB) *kubernetes.Client
|
||||||
codec runtime.Codec
|
codec runtime.Codec
|
||||||
newFunc func() runtime.Object
|
newFunc func() runtime.Object
|
||||||
newListFunc func() runtime.Object
|
newListFunc func() runtime.Object
|
||||||
@ -516,7 +517,7 @@ type setupOption func(*setupOptions)
|
|||||||
|
|
||||||
func withClientConfig(config *embed.Config) setupOption {
|
func withClientConfig(config *embed.Config) setupOption {
|
||||||
return func(options *setupOptions) {
|
return func(options *setupOptions) {
|
||||||
options.client = func(t testing.TB) *clientv3.Client {
|
options.client = func(t testing.TB) *kubernetes.Client {
|
||||||
return testserver.RunEtcd(t, config)
|
return testserver.RunEtcd(t, config)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -541,7 +542,7 @@ func withRecorder() setupOption {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func withDefaults(options *setupOptions) {
|
func withDefaults(options *setupOptions) {
|
||||||
options.client = func(t testing.TB) *clientv3.Client {
|
options.client = func(t testing.TB) *kubernetes.Client {
|
||||||
return testserver.RunEtcd(t, nil)
|
return testserver.RunEtcd(t, nil)
|
||||||
}
|
}
|
||||||
options.codec = apitesting.TestCodec(codecs, examplev1.SchemeGroupVersion)
|
options.codec = apitesting.TestCodec(codecs, examplev1.SchemeGroupVersion)
|
||||||
@ -556,7 +557,7 @@ func withDefaults(options *setupOptions) {
|
|||||||
|
|
||||||
var _ setupOption = withDefaults
|
var _ setupOption = withDefaults
|
||||||
|
|
||||||
func testSetup(t testing.TB, opts ...setupOption) (context.Context, *store, *clientv3.Client) {
|
func testSetup(t testing.TB, opts ...setupOption) (context.Context, *store, *kubernetes.Client) {
|
||||||
setupOpts := setupOptions{}
|
setupOpts := setupOptions{}
|
||||||
opts = append([]setupOption{withDefaults}, opts...)
|
opts = append([]setupOption{withDefaults}, opts...)
|
||||||
for _, opt := range opts {
|
for _, opt := range opts {
|
||||||
|
@ -19,7 +19,7 @@ package testing
|
|||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
clientv3 "go.etcd.io/etcd/client/v3"
|
"go.etcd.io/etcd/client/v3/kubernetes"
|
||||||
|
|
||||||
"k8s.io/apiserver/pkg/storage/etcd3/testserver"
|
"k8s.io/apiserver/pkg/storage/etcd3/testserver"
|
||||||
"k8s.io/apiserver/pkg/storage/storagebackend"
|
"k8s.io/apiserver/pkg/storage/storagebackend"
|
||||||
@ -27,7 +27,7 @@ import (
|
|||||||
|
|
||||||
// EtcdTestServer encapsulates the datastructures needed to start local instance for testing
|
// EtcdTestServer encapsulates the datastructures needed to start local instance for testing
|
||||||
type EtcdTestServer struct {
|
type EtcdTestServer struct {
|
||||||
V3Client *clientv3.Client
|
V3Client *kubernetes.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *EtcdTestServer) Terminate(t testing.TB) {
|
func (e *EtcdTestServer) Terminate(t testing.TB) {
|
||||||
|
@ -26,6 +26,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
clientv3 "go.etcd.io/etcd/client/v3"
|
clientv3 "go.etcd.io/etcd/client/v3"
|
||||||
|
"go.etcd.io/etcd/client/v3/kubernetes"
|
||||||
"go.etcd.io/etcd/server/v3/embed"
|
"go.etcd.io/etcd/server/v3/embed"
|
||||||
"go.uber.org/zap/zapcore"
|
"go.uber.org/zap/zapcore"
|
||||||
"go.uber.org/zap/zaptest"
|
"go.uber.org/zap/zaptest"
|
||||||
@ -81,7 +82,7 @@ func NewTestConfig(t testing.TB) *embed.Config {
|
|||||||
// RunEtcd starts an embedded etcd server with the provided config
|
// RunEtcd starts an embedded etcd server with the provided config
|
||||||
// (or NewTestConfig(t) if nil), and returns a client connected to the server.
|
// (or NewTestConfig(t) if nil), and returns a client connected to the server.
|
||||||
// The server is terminated when the test ends.
|
// The server is terminated when the test ends.
|
||||||
func RunEtcd(t testing.TB, cfg *embed.Config) *clientv3.Client {
|
func RunEtcd(t testing.TB, cfg *embed.Config) *kubernetes.Client {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
|
|
||||||
if cfg == nil {
|
if cfg == nil {
|
||||||
@ -112,7 +113,7 @@ func RunEtcd(t testing.TB, cfg *embed.Config) *clientv3.Client {
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
client, err := clientv3.New(clientv3.Config{
|
client, err := kubernetes.New(clientv3.Config{
|
||||||
TLS: tlsConfig,
|
TLS: tlsConfig,
|
||||||
Endpoints: e.Server.Cluster().ClientURLs(),
|
Endpoints: e.Server.Cluster().ClientURLs(),
|
||||||
DialTimeout: 10 * time.Second,
|
DialTimeout: 10 * time.Second,
|
||||||
|
@ -64,7 +64,7 @@ func TestDeleteTriggerWatch(t *testing.T) {
|
|||||||
|
|
||||||
func TestWatchFromZero(t *testing.T) {
|
func TestWatchFromZero(t *testing.T) {
|
||||||
ctx, store, client := testSetup(t)
|
ctx, store, client := testSetup(t)
|
||||||
storagetesting.RunTestWatchFromZero(ctx, t, store, compactStorage(client))
|
storagetesting.RunTestWatchFromZero(ctx, t, store, compactStorage(client.Client))
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestWatchFromNonZero tests that
|
// TestWatchFromNonZero tests that
|
||||||
|
@ -33,6 +33,7 @@ import (
|
|||||||
"go.etcd.io/etcd/client/pkg/v3/logutil"
|
"go.etcd.io/etcd/client/pkg/v3/logutil"
|
||||||
"go.etcd.io/etcd/client/pkg/v3/transport"
|
"go.etcd.io/etcd/client/pkg/v3/transport"
|
||||||
clientv3 "go.etcd.io/etcd/client/v3"
|
clientv3 "go.etcd.io/etcd/client/v3"
|
||||||
|
"go.etcd.io/etcd/client/v3/kubernetes"
|
||||||
"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
|
"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
"go.uber.org/zap/zapcore"
|
"go.uber.org/zap/zapcore"
|
||||||
@ -228,7 +229,7 @@ func newETCD3ProberMonitor(c storagebackend.Config) (*etcd3ProberMonitor, error)
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return &etcd3ProberMonitor{
|
return &etcd3ProberMonitor{
|
||||||
client: client,
|
client: client.Client,
|
||||||
prefix: c.Prefix,
|
prefix: c.Prefix,
|
||||||
endpoints: c.Transport.ServerList,
|
endpoints: c.Transport.ServerList,
|
||||||
}, nil
|
}, nil
|
||||||
@ -282,7 +283,7 @@ func (t *etcd3ProberMonitor) Monitor(ctx context.Context) (metrics.StorageMetric
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var newETCD3Client = func(c storagebackend.TransportConfig) (*clientv3.Client, error) {
|
var newETCD3Client = func(c storagebackend.TransportConfig) (*kubernetes.Client, error) {
|
||||||
tlsInfo := transport.TLSInfo{
|
tlsInfo := transport.TLSInfo{
|
||||||
CertFile: c.CertFile,
|
CertFile: c.CertFile,
|
||||||
KeyFile: c.KeyFile,
|
KeyFile: c.KeyFile,
|
||||||
@ -352,7 +353,7 @@ var newETCD3Client = func(c storagebackend.TransportConfig) (*clientv3.Client, e
|
|||||||
Logger: etcd3ClientLogger,
|
Logger: etcd3ClientLogger,
|
||||||
}
|
}
|
||||||
|
|
||||||
return clientv3.New(cfg)
|
return kubernetes.New(cfg)
|
||||||
}
|
}
|
||||||
|
|
||||||
type runningCompactor struct {
|
type runningCompactor struct {
|
||||||
@ -384,10 +385,11 @@ func startCompactorOnce(c storagebackend.TransportConfig, interval time.Duration
|
|||||||
}
|
}
|
||||||
key := fmt.Sprintf("%v", c) // gives: {[server1 server2] keyFile certFile caFile}
|
key := fmt.Sprintf("%v", c) // gives: {[server1 server2] keyFile certFile caFile}
|
||||||
if compactor, foundBefore := compactors[key]; !foundBefore || compactor.interval > interval {
|
if compactor, foundBefore := compactors[key]; !foundBefore || compactor.interval > interval {
|
||||||
compactorClient, err := newETCD3Client(c)
|
client, err := newETCD3Client(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
compactorClient := client.Client
|
||||||
|
|
||||||
if foundBefore {
|
if foundBefore {
|
||||||
// replace compactor
|
// replace compactor
|
||||||
@ -439,7 +441,7 @@ func newETCD3Storage(c storagebackend.ConfigForResource, newFunc, newListFunc fu
|
|||||||
// decorate the KV instance so we can track etcd latency per request.
|
// decorate the KV instance so we can track etcd latency per request.
|
||||||
client.KV = etcd3.NewETCDLatencyTracker(client.KV)
|
client.KV = etcd3.NewETCDLatencyTracker(client.KV)
|
||||||
|
|
||||||
stopDBSizeMonitor, err := startDBSizeMonitorPerEndpoint(client, c.DBMetricPollInterval)
|
stopDBSizeMonitor, err := startDBSizeMonitorPerEndpoint(client.Client, c.DBMetricPollInterval)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
clientv3 "go.etcd.io/etcd/client/v3"
|
clientv3 "go.etcd.io/etcd/client/v3"
|
||||||
|
"go.etcd.io/etcd/client/v3/kubernetes"
|
||||||
"k8s.io/apiserver/pkg/storage/etcd3/testserver"
|
"k8s.io/apiserver/pkg/storage/etcd3/testserver"
|
||||||
"k8s.io/apiserver/pkg/storage/storagebackend"
|
"k8s.io/apiserver/pkg/storage/storagebackend"
|
||||||
)
|
)
|
||||||
@ -111,7 +112,7 @@ func TestCreateHealthcheck(t *testing.T) {
|
|||||||
t.Run(tc.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
ready := make(chan struct{})
|
ready := make(chan struct{})
|
||||||
tc.cfg.Transport.ServerList = client.Endpoints()
|
tc.cfg.Transport.ServerList = client.Endpoints()
|
||||||
newETCD3Client = func(c storagebackend.TransportConfig) (*clientv3.Client, error) {
|
newETCD3Client = func(c storagebackend.TransportConfig) (*kubernetes.Client, error) {
|
||||||
defer close(ready)
|
defer close(ready)
|
||||||
dummyKV := mockKV{
|
dummyKV := mockKV{
|
||||||
get: func(ctx context.Context) (*clientv3.GetResponse, error) {
|
get: func(ctx context.Context) (*clientv3.GetResponse, error) {
|
||||||
@ -211,7 +212,7 @@ func TestCreateReadycheck(t *testing.T) {
|
|||||||
t.Run(tc.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
ready := make(chan struct{})
|
ready := make(chan struct{})
|
||||||
tc.cfg.Transport.ServerList = client.Endpoints()
|
tc.cfg.Transport.ServerList = client.Endpoints()
|
||||||
newETCD3Client = func(c storagebackend.TransportConfig) (*clientv3.Client, error) {
|
newETCD3Client = func(c storagebackend.TransportConfig) (*kubernetes.Client, error) {
|
||||||
defer close(ready)
|
defer close(ready)
|
||||||
dummyKV := mockKV{
|
dummyKV := mockKV{
|
||||||
get: func(ctx context.Context) (*clientv3.GetResponse, error) {
|
get: func(ctx context.Context) (*clientv3.GetResponse, error) {
|
||||||
@ -277,7 +278,7 @@ func TestRateLimitHealthcheck(t *testing.T) {
|
|||||||
ready := make(chan struct{})
|
ready := make(chan struct{})
|
||||||
|
|
||||||
var counter uint64
|
var counter uint64
|
||||||
newETCD3Client = func(c storagebackend.TransportConfig) (*clientv3.Client, error) {
|
newETCD3Client = func(c storagebackend.TransportConfig) (*kubernetes.Client, error) {
|
||||||
defer close(ready)
|
defer close(ready)
|
||||||
dummyKV := mockKV{
|
dummyKV := mockKV{
|
||||||
get: func(ctx context.Context) (*clientv3.GetResponse, error) {
|
get: func(ctx context.Context) (*clientv3.GetResponse, error) {
|
||||||
@ -373,7 +374,7 @@ func TestTimeTravelHealthcheck(t *testing.T) {
|
|||||||
signal := make(chan struct{})
|
signal := make(chan struct{})
|
||||||
|
|
||||||
var counter uint64
|
var counter uint64
|
||||||
newETCD3Client = func(c storagebackend.TransportConfig) (*clientv3.Client, error) {
|
newETCD3Client = func(c storagebackend.TransportConfig) (*kubernetes.Client, error) {
|
||||||
defer close(ready)
|
defer close(ready)
|
||||||
dummyKV := mockKV{
|
dummyKV := mockKV{
|
||||||
get: func(ctx context.Context) (*clientv3.GetResponse, error) {
|
get: func(ctx context.Context) (*clientv3.GetResponse, error) {
|
||||||
|
Loading…
Reference in New Issue
Block a user