Skip to content

Commit 3f43b5f

Browse files
authored
Merge pull request #75 from kubernetes-sigs/feat/kind-upgrade
Feat: Kine upgrade
2 parents 90c1cb3 + b92d8aa commit 3f43b5f

File tree

3 files changed

+24
-10
lines changed

3 files changed

+24
-10
lines changed

pkg/builder/rest/rest.go

+9-6
Original file line numberDiff line numberDiff line change
@@ -39,20 +39,20 @@ func New(obj resource.Object) ResourceHandlerProvider {
3939
ObjectTyper: scheme,
4040
TableConvertor: rest.NewDefaultTableConvertor(gvr.GroupResource()),
4141
}
42-
return newStore(obj.New, obj.NewList, gvr, s, optsGetter, nil)
42+
return newStore(scheme, obj.New, obj.NewList, gvr, s, optsGetter, nil)
4343
}
4444
}
4545

4646
// NewWithStrategy returns a new etcd backed request handler using the provided Strategy.
4747
func NewWithStrategy(obj resource.Object, s Strategy) ResourceHandlerProvider {
4848
return func(scheme *runtime.Scheme, optsGetter generic.RESTOptionsGetter) (rest.Storage, error) {
4949
gvr := obj.GetGroupVersionResource()
50-
return newStore(obj.New, obj.NewList, gvr, s, optsGetter, nil)
50+
return newStore(scheme, obj.New, obj.NewList, gvr, s, optsGetter, nil)
5151
}
5252
}
5353

5454
// StoreFn defines a function which modifies the Store before it is initialized.
55-
type StoreFn func(*genericregistry.Store, *generic.StoreOptions)
55+
type StoreFn func(*runtime.Scheme, *genericregistry.Store, *generic.StoreOptions)
5656

5757
// NewWithFn returns a new etcd backed request handler, applying the StoreFn to the Store.
5858
func NewWithFn(obj resource.Object, fn StoreFn) ResourceHandlerProvider {
@@ -63,13 +63,15 @@ func NewWithFn(obj resource.Object, fn StoreFn) ResourceHandlerProvider {
6363
ObjectTyper: scheme,
6464
TableConvertor: rest.NewDefaultTableConvertor(gvr.GroupResource()),
6565
}
66-
return newStore(obj.New, obj.NewList, gvr, s, optsGetter, fn)
66+
return newStore(scheme, obj.New, obj.NewList, gvr, s, optsGetter, fn)
6767
}
6868
}
6969

7070
// newStore returns a RESTStorage object that will work against API services.
7171
func newStore(
72-
single, list func() runtime.Object, gvr schema.GroupVersionResource,
72+
scheme *runtime.Scheme,
73+
single, list func() runtime.Object,
74+
gvr schema.GroupVersionResource,
7375
s Strategy, optsGetter generic.RESTOptionsGetter, fn StoreFn) (*genericregistry.Store, error) {
7476
store := &genericregistry.Store{
7577
NewFunc: single,
@@ -80,11 +82,12 @@ func newStore(
8082
CreateStrategy: s,
8183
UpdateStrategy: s,
8284
DeleteStrategy: s,
85+
StorageVersioner: gvr.GroupVersion(),
8386
}
8487

8588
options := &generic.StoreOptions{RESTOptions: optsGetter, AttrFunc: GetAttrs}
8689
if fn != nil {
87-
fn(store, options)
90+
fn(scheme, store, options)
8891
}
8992
if err := store.CompleteWithOptions(options); err != nil {
9093
return nil, err

pkg/builder/rest/rest_subresource.go

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ func NewSubResourceWithStrategy(parent resource.Object, subResource resource.Sub
2929
fullResourceName := parent.GetGroupVersionResource().Resource + "/" + subResource.SubResourceName()
3030
gvr := parent.GetGroupVersionResource().GroupVersion().WithResource(fullResourceName)
3131
return newStore(
32+
scheme,
3233
parent.New,
3334
parent.NewList,
3435
gvr,

pkg/experimental/storage/mysql/kine.go

+14-4
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ import (
77
"time"
88

99
"github.com/k3s-io/kine/pkg/endpoint"
10+
"k8s.io/apimachinery/pkg/runtime"
1011
"k8s.io/apimachinery/pkg/runtime/schema"
12+
"k8s.io/apimachinery/pkg/runtime/serializer"
13+
"k8s.io/apimachinery/pkg/runtime/serializer/json"
1114
"k8s.io/apiserver/pkg/registry/generic"
1215
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
1316
"k8s.io/apiserver/pkg/storage/storagebackend"
@@ -35,15 +38,19 @@ func NewMysqlStorageProvider(host string, port int32, username, password, databa
3538
port,
3639
database)
3740

38-
return func(s *genericregistry.Store, options *generic.StoreOptions) {
41+
return func(scheme *runtime.Scheme, s *genericregistry.Store, options *generic.StoreOptions) {
3942
options.RESTOptions = &kineProxiedRESTOptionsGetter{
40-
dsn: dsn,
43+
scheme: scheme,
44+
dsn: dsn,
45+
groupVersioner: s.StorageVersioner,
4146
}
4247
}
4348
}
4449

4550
type kineProxiedRESTOptionsGetter struct {
46-
dsn string
51+
scheme *runtime.Scheme
52+
dsn string
53+
groupVersioner runtime.GroupVersioner
4754
}
4855

4956
// GetRESTOptions implements RESTOptionsGetter interface.
@@ -54,18 +61,21 @@ func (g *kineProxiedRESTOptionsGetter) GetRESTOptions(resource schema.GroupResou
5461
if err != nil {
5562
return generic.RESTOptions{}, err
5663
}
64+
s := json.NewSerializer(json.DefaultMetaFactory, g.scheme, g.scheme, false)
65+
codec := serializer.NewCodecFactory(g.scheme).
66+
CodecForVersions(s, s, g.groupVersioner, g.groupVersioner)
5767
restOptions := generic.RESTOptions{
5868
ResourcePrefix: resource.String(),
5969
Decorator: genericregistry.StorageWithCacher(),
6070
EnableGarbageCollection: true,
6171
DeleteCollectionWorkers: 1,
6272
CountMetricPollPeriod: time.Minute,
6373
StorageObjectCountTracker: request.NewStorageObjectCountTracker(context.Background().Done()),
64-
6574
StorageConfig: &storagebackend.ConfigForResource{
6675
GroupResource: resource,
6776
Config: storagebackend.Config{
6877
Prefix: "/kine/",
78+
Codec: codec,
6979
Transport: storagebackend.TransportConfig{
7080
ServerList: etcdConfig.Endpoints,
7181
TrustedCAFile: etcdConfig.TLSConfig.CAFile,

0 commit comments

Comments
 (0)