From 4ec184826d2d347aea7e3d05c1ce01acef5b83bd Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Wed, 22 Feb 2017 19:28:53 -0500 Subject: [PATCH] Allow config to accept a Transformer Kubernetes-commit: 4f27d8feea0cbb7634554ef8af1ad6265738a2a1 --- pkg/storage/storagebackend/config.go | 7 ++++++- pkg/storage/storagebackend/factory/etcd3.go | 18 +++++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/pkg/storage/storagebackend/config.go b/pkg/storage/storagebackend/config.go index dc55bc428..2a88ddf74 100644 --- a/pkg/storage/storagebackend/config.go +++ b/pkg/storage/storagebackend/config.go @@ -16,7 +16,10 @@ limitations under the License. package storagebackend -import "k8s.io/apimachinery/pkg/runtime" +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apiserver/pkg/storage/value" +) const ( StorageTypeUnset = "" @@ -45,6 +48,8 @@ type Config struct { Codec runtime.Codec Copier runtime.ObjectCopier + // Transformer allows the value to be transformed prior to persisting into etcd. + Transformer value.Transformer } func NewDefaultConfig(prefix string, copier runtime.ObjectCopier, codec runtime.Codec) *Config { diff --git a/pkg/storage/storagebackend/factory/etcd3.go b/pkg/storage/storagebackend/factory/etcd3.go index d0da84cde..2c838a09c 100644 --- a/pkg/storage/storagebackend/factory/etcd3.go +++ b/pkg/storage/storagebackend/factory/etcd3.go @@ -17,14 +17,14 @@ limitations under the License. package factory import ( + "github.com/coreos/etcd/clientv3" + "github.com/coreos/etcd/pkg/transport" + "golang.org/x/net/context" + "k8s.io/apiserver/pkg/storage" "k8s.io/apiserver/pkg/storage/etcd3" "k8s.io/apiserver/pkg/storage/storagebackend" "k8s.io/apiserver/pkg/storage/value" - - "github.com/coreos/etcd/clientv3" - "github.com/coreos/etcd/pkg/transport" - "golang.org/x/net/context" ) func newETCD3Storage(c storagebackend.Config) (storage.Interface, DestroyFunc, error) { @@ -56,8 +56,12 @@ func newETCD3Storage(c storagebackend.Config) (storage.Interface, DestroyFunc, e cancel() client.Close() } - if c.Quorum { - return etcd3.New(client, c.Codec, c.Prefix, value.IdentityTransformer), destroyFunc, nil + transformer := c.Transformer + if transformer == nil { + transformer = value.IdentityTransformer } - return etcd3.NewWithNoQuorumRead(client, c.Codec, c.Prefix, value.IdentityTransformer), destroyFunc, nil + if c.Quorum { + return etcd3.New(client, c.Codec, c.Prefix, transformer), destroyFunc, nil + } + return etcd3.NewWithNoQuorumRead(client, c.Codec, c.Prefix, transformer), destroyFunc, nil }