Skip to content

Commit

Permalink
Merge pull request #75 from kubernetes-sigs/feat/kind-upgrade
Browse files Browse the repository at this point in the history
Feat: Kine upgrade
  • Loading branch information
k8s-ci-robot committed Apr 3, 2022
2 parents 90c1cb3 + b92d8aa commit 3f43b5f
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 10 deletions.
15 changes: 9 additions & 6 deletions pkg/builder/rest/rest.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,20 +39,20 @@ func New(obj resource.Object) ResourceHandlerProvider {
ObjectTyper: scheme,
TableConvertor: rest.NewDefaultTableConvertor(gvr.GroupResource()),
}
return newStore(obj.New, obj.NewList, gvr, s, optsGetter, nil)
return newStore(scheme, obj.New, obj.NewList, gvr, s, optsGetter, nil)
}
}

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

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

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

// newStore returns a RESTStorage object that will work against API services.
func newStore(
single, list func() runtime.Object, gvr schema.GroupVersionResource,
scheme *runtime.Scheme,
single, list func() runtime.Object,
gvr schema.GroupVersionResource,
s Strategy, optsGetter generic.RESTOptionsGetter, fn StoreFn) (*genericregistry.Store, error) {
store := &genericregistry.Store{
NewFunc: single,
Expand All @@ -80,11 +82,12 @@ func newStore(
CreateStrategy: s,
UpdateStrategy: s,
DeleteStrategy: s,
StorageVersioner: gvr.GroupVersion(),
}

options := &generic.StoreOptions{RESTOptions: optsGetter, AttrFunc: GetAttrs}
if fn != nil {
fn(store, options)
fn(scheme, store, options)
}
if err := store.CompleteWithOptions(options); err != nil {
return nil, err
Expand Down
1 change: 1 addition & 0 deletions pkg/builder/rest/rest_subresource.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ func NewSubResourceWithStrategy(parent resource.Object, subResource resource.Sub
fullResourceName := parent.GetGroupVersionResource().Resource + "/" + subResource.SubResourceName()
gvr := parent.GetGroupVersionResource().GroupVersion().WithResource(fullResourceName)
return newStore(
scheme,
parent.New,
parent.NewList,
gvr,
Expand Down
18 changes: 14 additions & 4 deletions pkg/experimental/storage/mysql/kine.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ import (
"time"

"github.com/k3s-io/kine/pkg/endpoint"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/runtime/serializer"
"k8s.io/apimachinery/pkg/runtime/serializer/json"
"k8s.io/apiserver/pkg/registry/generic"
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
"k8s.io/apiserver/pkg/storage/storagebackend"
Expand Down Expand Up @@ -35,15 +38,19 @@ func NewMysqlStorageProvider(host string, port int32, username, password, databa
port,
database)

return func(s *genericregistry.Store, options *generic.StoreOptions) {
return func(scheme *runtime.Scheme, s *genericregistry.Store, options *generic.StoreOptions) {
options.RESTOptions = &kineProxiedRESTOptionsGetter{
dsn: dsn,
scheme: scheme,
dsn: dsn,
groupVersioner: s.StorageVersioner,
}
}
}

type kineProxiedRESTOptionsGetter struct {
dsn string
scheme *runtime.Scheme
dsn string
groupVersioner runtime.GroupVersioner
}

// GetRESTOptions implements RESTOptionsGetter interface.
Expand All @@ -54,18 +61,21 @@ func (g *kineProxiedRESTOptionsGetter) GetRESTOptions(resource schema.GroupResou
if err != nil {
return generic.RESTOptions{}, err
}
s := json.NewSerializer(json.DefaultMetaFactory, g.scheme, g.scheme, false)
codec := serializer.NewCodecFactory(g.scheme).
CodecForVersions(s, s, g.groupVersioner, g.groupVersioner)
restOptions := generic.RESTOptions{
ResourcePrefix: resource.String(),
Decorator: genericregistry.StorageWithCacher(),
EnableGarbageCollection: true,
DeleteCollectionWorkers: 1,
CountMetricPollPeriod: time.Minute,
StorageObjectCountTracker: request.NewStorageObjectCountTracker(context.Background().Done()),

StorageConfig: &storagebackend.ConfigForResource{
GroupResource: resource,
Config: storagebackend.Config{
Prefix: "/kine/",
Codec: codec,
Transport: storagebackend.TransportConfig{
ServerList: etcdConfig.Endpoints,
TrustedCAFile: etcdConfig.TLSConfig.CAFile,
Expand Down

0 comments on commit 3f43b5f

Please sign in to comment.