Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
36a5ffbe
Unverified
Commit
36a5ffbe
authored
May 22, 2016
by
Clayton Coleman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove EncodeToStream(..., []unversioned.GroupVersion)
Was not being used.
parent
60c1ec8e
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
108 additions
and
101 deletions
+108
-101
serialization_proto_test.go
pkg/api/serialization_proto_test.go
+1
-1
serialization_test.go
pkg/api/serialization_test.go
+3
-3
apiserver.go
pkg/apiserver/apiserver.go
+4
-4
apiserver_test.go
pkg/apiserver/apiserver_test.go
+45
-2
watch.go
pkg/apiserver/watch.go
+3
-3
client.go
pkg/client/typed/dynamic/client.go
+2
-2
client_test.go
pkg/client/typed/dynamic/client_test.go
+2
-2
codec.go
pkg/registry/thirdpartyresourcedata/codec.go
+3
-3
codec.go
pkg/runtime/codec.go
+5
-5
helper.go
pkg/runtime/helper.go
+2
-2
interfaces.go
pkg/runtime/interfaces.go
+3
-4
codec_factory.go
pkg/runtime/serializer/codec_factory.go
+2
-2
codec_test.go
pkg/runtime/serializer/codec_test.go
+12
-15
json.go
pkg/runtime/serializer/json/json.go
+2
-2
protobuf.go
pkg/runtime/serializer/protobuf/protobuf.go
+4
-4
streaming.go
pkg/runtime/serializer/streaming/streaming.go
+4
-4
versioning.go
pkg/runtime/serializer/versioning/versioning.go
+7
-37
versioning_test.go
pkg/runtime/serializer/versioning/versioning_test.go
+3
-5
unstructured.go
pkg/runtime/unstructured.go
+1
-1
No files found.
pkg/api/serialization_proto_test.go
View file @
36a5ffbe
...
@@ -51,7 +51,7 @@ func TestUniversalDeserializer(t *testing.T) {
...
@@ -51,7 +51,7 @@ func TestUniversalDeserializer(t *testing.T) {
t
.
Fatal
(
mediaType
)
t
.
Fatal
(
mediaType
)
}
}
buf
:=
&
bytes
.
Buffer
{}
buf
:=
&
bytes
.
Buffer
{}
if
err
:=
e
.
Encode
ToStream
(
expected
,
buf
);
err
!=
nil
{
if
err
:=
e
.
Encode
(
expected
,
buf
);
err
!=
nil
{
t
.
Fatalf
(
"%s: %v"
,
mediaType
,
err
)
t
.
Fatalf
(
"%s: %v"
,
mediaType
,
err
)
}
}
obj
,
_
,
err
:=
d
.
Decode
(
buf
.
Bytes
(),
&
unversioned
.
GroupVersionKind
{
Kind
:
"Pod"
,
Version
:
"v1"
},
nil
)
obj
,
_
,
err
:=
d
.
Decode
(
buf
.
Bytes
(),
&
unversioned
.
GroupVersionKind
{
Kind
:
"Pod"
,
Version
:
"v1"
},
nil
)
...
...
pkg/api/serialization_test.go
View file @
36a5ffbe
...
@@ -308,7 +308,7 @@ func TestObjectWatchFraming(t *testing.T) {
...
@@ -308,7 +308,7 @@ func TestObjectWatchFraming(t *testing.T) {
// write a single object through the framer and back out
// write a single object through the framer and back out
obj
:=
&
bytes
.
Buffer
{}
obj
:=
&
bytes
.
Buffer
{}
if
err
:=
s
.
Encode
ToStream
(
v1secret
,
obj
);
err
!=
nil
{
if
err
:=
s
.
Encode
(
v1secret
,
obj
);
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
out
:=
&
bytes
.
Buffer
{}
out
:=
&
bytes
.
Buffer
{}
...
@@ -330,13 +330,13 @@ func TestObjectWatchFraming(t *testing.T) {
...
@@ -330,13 +330,13 @@ func TestObjectWatchFraming(t *testing.T) {
// write a watch event through and back out
// write a watch event through and back out
obj
=
&
bytes
.
Buffer
{}
obj
=
&
bytes
.
Buffer
{}
if
err
:=
embedded
.
Encode
ToStream
(
v1secret
,
obj
);
err
!=
nil
{
if
err
:=
embedded
.
Encode
(
v1secret
,
obj
);
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
event
:=
&
versioned
.
Event
{
Type
:
string
(
watch
.
Added
)}
event
:=
&
versioned
.
Event
{
Type
:
string
(
watch
.
Added
)}
event
.
Object
.
Raw
=
obj
.
Bytes
()
event
.
Object
.
Raw
=
obj
.
Bytes
()
obj
=
&
bytes
.
Buffer
{}
obj
=
&
bytes
.
Buffer
{}
if
err
:=
s
.
Encode
ToStream
(
event
,
obj
);
err
!=
nil
{
if
err
:=
s
.
Encode
(
event
,
obj
);
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
out
=
&
bytes
.
Buffer
{}
out
=
&
bytes
.
Buffer
{}
...
...
pkg/apiserver/apiserver.go
View file @
36a5ffbe
...
@@ -255,9 +255,9 @@ type stripVersionEncoder struct {
...
@@ -255,9 +255,9 @@ type stripVersionEncoder struct {
serializer
runtime
.
Serializer
serializer
runtime
.
Serializer
}
}
func
(
c
stripVersionEncoder
)
Encode
ToStream
(
obj
runtime
.
Object
,
w
io
.
Writer
,
overrides
...
unversioned
.
GroupVersion
)
error
{
func
(
c
stripVersionEncoder
)
Encode
(
obj
runtime
.
Object
,
w
io
.
Writer
)
error
{
buf
:=
bytes
.
NewBuffer
([]
byte
{})
buf
:=
bytes
.
NewBuffer
([]
byte
{})
err
:=
c
.
encoder
.
Encode
ToStream
(
obj
,
buf
,
overrides
...
)
err
:=
c
.
encoder
.
Encode
(
obj
,
buf
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
@@ -268,7 +268,7 @@ func (c stripVersionEncoder) EncodeToStream(obj runtime.Object, w io.Writer, ove
...
@@ -268,7 +268,7 @@ func (c stripVersionEncoder) EncodeToStream(obj runtime.Object, w io.Writer, ove
gvk
.
Group
=
""
gvk
.
Group
=
""
gvk
.
Version
=
""
gvk
.
Version
=
""
roundTrippedObj
.
GetObjectKind
()
.
SetGroupVersionKind
(
*
gvk
)
roundTrippedObj
.
GetObjectKind
()
.
SetGroupVersionKind
(
*
gvk
)
return
c
.
serializer
.
Encode
ToStream
(
roundTrippedObj
,
w
)
return
c
.
serializer
.
Encode
(
roundTrippedObj
,
w
)
}
}
// StripVersionNegotiatedSerializer will return stripVersionEncoder when
// StripVersionNegotiatedSerializer will return stripVersionEncoder when
...
@@ -443,7 +443,7 @@ func writeNegotiated(s runtime.NegotiatedSerializer, gv unversioned.GroupVersion
...
@@ -443,7 +443,7 @@ func writeNegotiated(s runtime.NegotiatedSerializer, gv unversioned.GroupVersion
w
.
WriteHeader
(
statusCode
)
w
.
WriteHeader
(
statusCode
)
encoder
:=
s
.
EncoderForVersion
(
serializer
,
gv
)
encoder
:=
s
.
EncoderForVersion
(
serializer
,
gv
)
if
err
:=
encoder
.
Encode
ToStream
(
object
,
w
);
err
!=
nil
{
if
err
:=
encoder
.
Encode
(
object
,
w
);
err
!=
nil
{
errorJSONFatal
(
err
,
encoder
,
w
)
errorJSONFatal
(
err
,
encoder
,
w
)
}
}
}
}
...
...
pkg/apiserver/apiserver_test.go
View file @
36a5ffbe
...
@@ -2372,7 +2372,7 @@ func TestCreateChecksDecode(t *testing.T) {
...
@@ -2372,7 +2372,7 @@ func TestCreateChecksDecode(t *testing.T) {
client
:=
http
.
Client
{}
client
:=
http
.
Client
{}
simple
:=
&
api
.
Pod
{}
simple
:=
&
api
.
Pod
{}
data
,
err
:=
runtime
.
Encode
(
codec
,
simple
,
testGroupVersion
)
data
,
err
:=
runtime
.
Encode
(
testCodec
,
simple
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %v"
,
err
)
t
.
Errorf
(
"unexpected error: %v"
,
err
)
}
}
...
@@ -2598,7 +2598,7 @@ func TestUpdateChecksDecode(t *testing.T) {
...
@@ -2598,7 +2598,7 @@ func TestUpdateChecksDecode(t *testing.T) {
client
:=
http
.
Client
{}
client
:=
http
.
Client
{}
simple
:=
&
api
.
Pod
{}
simple
:=
&
api
.
Pod
{}
data
,
err
:=
runtime
.
Encode
(
codec
,
simple
,
testGroupVersion
)
data
,
err
:=
runtime
.
Encode
(
testCodec
,
simple
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %v"
,
err
)
t
.
Errorf
(
"unexpected error: %v"
,
err
)
}
}
...
@@ -3293,3 +3293,46 @@ func readBodyOrDie(r io.Reader) []byte {
...
@@ -3293,3 +3293,46 @@ func readBodyOrDie(r io.Reader) []byte {
}
}
return
body
return
body
}
}
// BenchmarkUpdateProtobuf measures the cost of processing an update on the server in proto
func
BenchmarkUpdateProtobuf
(
b
*
testing
.
B
)
{
items
:=
benchmarkItems
()
simpleStorage
:=
&
SimpleRESTStorage
{}
handler
:=
handle
(
map
[
string
]
rest
.
Storage
{
"simples"
:
simpleStorage
})
server
:=
httptest
.
NewServer
(
handler
)
defer
server
.
Close
()
client
:=
http
.
Client
{}
dest
,
_
:=
url
.
Parse
(
server
.
URL
)
dest
.
Path
=
"/"
+
prefix
+
"/"
+
newGroupVersion
.
Group
+
"/"
+
newGroupVersion
.
Version
+
"/namespaces/foo/simples/bar"
dest
.
RawQuery
=
""
info
,
_
:=
api
.
Codecs
.
SerializerForMediaType
(
"application/vnd.kubernetes.protobuf"
,
nil
)
e
:=
api
.
Codecs
.
EncoderForVersion
(
info
.
Serializer
,
newGroupVersion
)
data
,
err
:=
runtime
.
Encode
(
e
,
&
items
[
0
])
if
err
!=
nil
{
b
.
Fatal
(
err
)
}
b
.
ResetTimer
()
for
i
:=
0
;
i
<
b
.
N
;
i
++
{
request
,
err
:=
http
.
NewRequest
(
"PUT"
,
dest
.
String
(),
bytes
.
NewReader
(
data
))
if
err
!=
nil
{
b
.
Fatalf
(
"unexpected error: %v"
,
err
)
}
request
.
Header
.
Set
(
"Accept"
,
"application/vnd.kubernetes.protobuf"
)
request
.
Header
.
Set
(
"Content-Type"
,
"application/vnd.kubernetes.protobuf"
)
response
,
err
:=
client
.
Do
(
request
)
if
err
!=
nil
{
b
.
Fatalf
(
"unexpected error: %v"
,
err
)
}
if
response
.
StatusCode
!=
http
.
StatusBadRequest
{
body
,
_
:=
ioutil
.
ReadAll
(
response
.
Body
)
b
.
Fatalf
(
"Unexpected response %#v
\n
%s"
,
response
,
body
)
}
_
,
_
=
ioutil
.
ReadAll
(
response
.
Body
)
response
.
Body
.
Close
()
}
b
.
StopTimer
()
}
pkg/apiserver/watch.go
View file @
36a5ffbe
...
@@ -185,7 +185,7 @@ func (s *WatchServer) ServeHTTP(w http.ResponseWriter, req *http.Request) {
...
@@ -185,7 +185,7 @@ func (s *WatchServer) ServeHTTP(w http.ResponseWriter, req *http.Request) {
obj
:=
event
.
Object
obj
:=
event
.
Object
s
.
fixup
(
obj
)
s
.
fixup
(
obj
)
if
err
:=
s
.
embeddedEncoder
.
Encode
ToStream
(
obj
,
buf
);
err
!=
nil
{
if
err
:=
s
.
embeddedEncoder
.
Encode
(
obj
,
buf
);
err
!=
nil
{
// unexpected error
// unexpected error
utilruntime
.
HandleError
(
fmt
.
Errorf
(
"unable to encode watch object: %v"
,
err
))
utilruntime
.
HandleError
(
fmt
.
Errorf
(
"unable to encode watch object: %v"
,
err
))
return
return
...
@@ -235,7 +235,7 @@ func (s *WatchServer) HandleWS(ws *websocket.Conn) {
...
@@ -235,7 +235,7 @@ func (s *WatchServer) HandleWS(ws *websocket.Conn) {
}
}
obj
:=
event
.
Object
obj
:=
event
.
Object
s
.
fixup
(
obj
)
s
.
fixup
(
obj
)
if
err
:=
s
.
embeddedEncoder
.
Encode
ToStream
(
obj
,
buf
);
err
!=
nil
{
if
err
:=
s
.
embeddedEncoder
.
Encode
(
obj
,
buf
);
err
!=
nil
{
// unexpected error
// unexpected error
utilruntime
.
HandleError
(
fmt
.
Errorf
(
"unable to encode watch object: %v"
,
err
))
utilruntime
.
HandleError
(
fmt
.
Errorf
(
"unable to encode watch object: %v"
,
err
))
return
return
...
@@ -248,7 +248,7 @@ func (s *WatchServer) HandleWS(ws *websocket.Conn) {
...
@@ -248,7 +248,7 @@ func (s *WatchServer) HandleWS(ws *websocket.Conn) {
// the internal event will be versioned by the encoder
// the internal event will be versioned by the encoder
*
internalEvent
=
versioned
.
InternalEvent
(
event
)
*
internalEvent
=
versioned
.
InternalEvent
(
event
)
if
err
:=
s
.
encoder
.
Encode
ToStream
(
internalEvent
,
streamBuf
);
err
!=
nil
{
if
err
:=
s
.
encoder
.
Encode
(
internalEvent
,
streamBuf
);
err
!=
nil
{
// encoding error
// encoding error
utilruntime
.
HandleError
(
fmt
.
Errorf
(
"unable to encode event: %v"
,
err
))
utilruntime
.
HandleError
(
fmt
.
Errorf
(
"unable to encode event: %v"
,
err
))
s
.
watching
.
Stop
()
s
.
watching
.
Stop
()
...
...
pkg/client/typed/dynamic/client.go
View file @
36a5ffbe
...
@@ -253,8 +253,8 @@ func (dynamicCodec) Decode(data []byte, gvk *unversioned.GroupVersionKind, obj r
...
@@ -253,8 +253,8 @@ func (dynamicCodec) Decode(data []byte, gvk *unversioned.GroupVersionKind, obj r
return
obj
,
gvk
,
nil
return
obj
,
gvk
,
nil
}
}
func
(
dynamicCodec
)
Encode
ToStream
(
obj
runtime
.
Object
,
w
io
.
Writer
,
overrides
...
unversioned
.
GroupVersion
)
error
{
func
(
dynamicCodec
)
Encode
(
obj
runtime
.
Object
,
w
io
.
Writer
)
error
{
return
runtime
.
UnstructuredJSONScheme
.
Encode
ToStream
(
obj
,
w
,
overrides
...
)
return
runtime
.
UnstructuredJSONScheme
.
Encode
(
obj
,
w
)
}
}
// paramaterCodec is a codec converts an API object to query
// paramaterCodec is a codec converts an API object to query
...
...
pkg/client/typed/dynamic/client_test.go
View file @
36a5ffbe
...
@@ -235,7 +235,7 @@ func TestDelete(t *testing.T) {
...
@@ -235,7 +235,7 @@ func TestDelete(t *testing.T) {
}
}
w
.
Header
()
.
Set
(
"Content-Type"
,
runtime
.
ContentTypeJSON
)
w
.
Header
()
.
Set
(
"Content-Type"
,
runtime
.
ContentTypeJSON
)
runtime
.
UnstructuredJSONScheme
.
Encode
ToStream
(
statusOK
,
w
)
runtime
.
UnstructuredJSONScheme
.
Encode
(
statusOK
,
w
)
})
})
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"unexpected error when creating client: %v"
,
err
)
t
.
Errorf
(
"unexpected error when creating client: %v"
,
err
)
...
@@ -284,7 +284,7 @@ func TestDeleteCollection(t *testing.T) {
...
@@ -284,7 +284,7 @@ func TestDeleteCollection(t *testing.T) {
}
}
w
.
Header
()
.
Set
(
"Content-Type"
,
runtime
.
ContentTypeJSON
)
w
.
Header
()
.
Set
(
"Content-Type"
,
runtime
.
ContentTypeJSON
)
runtime
.
UnstructuredJSONScheme
.
Encode
ToStream
(
statusOK
,
w
)
runtime
.
UnstructuredJSONScheme
.
Encode
(
statusOK
,
w
)
})
})
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"unexpected error when creating client: %v"
,
err
)
t
.
Errorf
(
"unexpected error when creating client: %v"
,
err
)
...
...
pkg/registry/thirdpartyresourcedata/codec.go
View file @
36a5ffbe
...
@@ -483,10 +483,10 @@ func encodeToJSON(obj *extensions.ThirdPartyResourceData, stream io.Writer) erro
...
@@ -483,10 +483,10 @@ func encodeToJSON(obj *extensions.ThirdPartyResourceData, stream io.Writer) erro
return
encoder
.
Encode
(
objMap
)
return
encoder
.
Encode
(
objMap
)
}
}
func
(
t
*
thirdPartyResourceDataEncoder
)
Encode
ToStream
(
obj
runtime
.
Object
,
stream
io
.
Writer
,
overrides
...
unversioned
.
GroupVersion
)
(
err
error
)
{
func
(
t
*
thirdPartyResourceDataEncoder
)
Encode
(
obj
runtime
.
Object
,
stream
io
.
Writer
)
(
err
error
)
{
switch
obj
:=
obj
.
(
type
)
{
switch
obj
:=
obj
.
(
type
)
{
case
*
versioned
.
InternalEvent
:
case
*
versioned
.
InternalEvent
:
return
t
.
delegate
.
Encode
ToStream
(
obj
,
stream
,
overrides
...
)
return
t
.
delegate
.
Encode
(
obj
,
stream
)
case
*
extensions
.
ThirdPartyResourceData
:
case
*
extensions
.
ThirdPartyResourceData
:
return
encodeToJSON
(
obj
,
stream
)
return
encodeToJSON
(
obj
,
stream
)
case
*
extensions
.
ThirdPartyResourceDataList
:
case
*
extensions
.
ThirdPartyResourceDataList
:
...
@@ -504,7 +504,7 @@ func (t *thirdPartyResourceDataEncoder) EncodeToStream(obj runtime.Object, strea
...
@@ -504,7 +504,7 @@ func (t *thirdPartyResourceDataEncoder) EncodeToStream(obj runtime.Object, strea
fmt
.
Fprintf
(
stream
,
template
,
t
.
gvk
.
Kind
+
"List"
,
gv
.
String
(),
strings
.
Join
(
dataStrings
,
","
))
fmt
.
Fprintf
(
stream
,
template
,
t
.
gvk
.
Kind
+
"List"
,
gv
.
String
(),
strings
.
Join
(
dataStrings
,
","
))
return
nil
return
nil
case
*
unversioned
.
Status
,
*
unversioned
.
APIResourceList
:
case
*
unversioned
.
Status
,
*
unversioned
.
APIResourceList
:
return
t
.
delegate
.
Encode
ToStream
(
obj
,
stream
,
overrides
...
)
return
t
.
delegate
.
Encode
(
obj
,
stream
)
default
:
default
:
return
fmt
.
Errorf
(
"unexpected object to encode: %#v"
,
obj
)
return
fmt
.
Errorf
(
"unexpected object to encode: %#v"
,
obj
)
}
}
...
...
pkg/runtime/codec.go
View file @
36a5ffbe
...
@@ -40,10 +40,10 @@ func NewCodec(e Encoder, d Decoder) Codec {
...
@@ -40,10 +40,10 @@ func NewCodec(e Encoder, d Decoder) Codec {
}
}
// Encode is a convenience wrapper for encoding to a []byte from an Encoder
// Encode is a convenience wrapper for encoding to a []byte from an Encoder
func
Encode
(
e
Encoder
,
obj
Object
,
overrides
...
unversioned
.
GroupVersion
)
([]
byte
,
error
)
{
func
Encode
(
e
Encoder
,
obj
Object
)
([]
byte
,
error
)
{
// TODO: reuse buffer
// TODO: reuse buffer
buf
:=
&
bytes
.
Buffer
{}
buf
:=
&
bytes
.
Buffer
{}
if
err
:=
e
.
Encode
ToStream
(
obj
,
buf
,
overrides
...
);
err
!=
nil
{
if
err
:=
e
.
Encode
(
obj
,
buf
);
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
return
buf
.
Bytes
(),
nil
return
buf
.
Bytes
(),
nil
...
@@ -98,7 +98,7 @@ type NoopEncoder struct {
...
@@ -98,7 +98,7 @@ type NoopEncoder struct {
var
_
Serializer
=
NoopEncoder
{}
var
_
Serializer
=
NoopEncoder
{}
func
(
n
NoopEncoder
)
Encode
ToStream
(
obj
Object
,
w
io
.
Writer
,
overrides
...
unversioned
.
GroupVersion
)
error
{
func
(
n
NoopEncoder
)
Encode
(
obj
Object
,
w
io
.
Writer
)
error
{
return
fmt
.
Errorf
(
"encoding is not allowed for this codec: %v"
,
reflect
.
TypeOf
(
n
.
Decoder
))
return
fmt
.
Errorf
(
"encoding is not allowed for this codec: %v"
,
reflect
.
TypeOf
(
n
.
Decoder
))
}
}
...
@@ -181,9 +181,9 @@ func NewBase64Serializer(s Serializer) Serializer {
...
@@ -181,9 +181,9 @@ func NewBase64Serializer(s Serializer) Serializer {
return
&
base64Serializer
{
s
}
return
&
base64Serializer
{
s
}
}
}
func
(
s
base64Serializer
)
Encode
ToStream
(
obj
Object
,
stream
io
.
Writer
,
overrides
...
unversioned
.
GroupVersion
)
error
{
func
(
s
base64Serializer
)
Encode
(
obj
Object
,
stream
io
.
Writer
)
error
{
e
:=
base64
.
NewEncoder
(
base64
.
StdEncoding
,
stream
)
e
:=
base64
.
NewEncoder
(
base64
.
StdEncoding
,
stream
)
err
:=
s
.
Serializer
.
Encode
ToStream
(
obj
,
e
,
overrides
...
)
err
:=
s
.
Serializer
.
Encode
(
obj
,
e
)
e
.
Close
()
e
.
Close
()
return
err
return
err
}
}
...
...
pkg/runtime/helper.go
View file @
36a5ffbe
...
@@ -113,10 +113,10 @@ func FieldPtr(v reflect.Value, fieldName string, dest interface{}) error {
...
@@ -113,10 +113,10 @@ func FieldPtr(v reflect.Value, fieldName string, dest interface{}) error {
// EncodeList ensures that each object in an array is converted to a Unknown{} in serialized form.
// EncodeList ensures that each object in an array is converted to a Unknown{} in serialized form.
// TODO: accept a content type.
// TODO: accept a content type.
func
EncodeList
(
e
Encoder
,
objects
[]
Object
,
overrides
...
unversioned
.
GroupVersion
)
error
{
func
EncodeList
(
e
Encoder
,
objects
[]
Object
)
error
{
var
errs
[]
error
var
errs
[]
error
for
i
:=
range
objects
{
for
i
:=
range
objects
{
data
,
err
:=
Encode
(
e
,
objects
[
i
]
,
overrides
...
)
data
,
err
:=
Encode
(
e
,
objects
[
i
])
if
err
!=
nil
{
if
err
!=
nil
{
errs
=
append
(
errs
,
err
)
errs
=
append
(
errs
,
err
)
continue
continue
...
...
pkg/runtime/interfaces.go
View file @
36a5ffbe
...
@@ -31,10 +31,9 @@ const (
...
@@ -31,10 +31,9 @@ const (
)
)
type
Encoder
interface
{
type
Encoder
interface
{
// EncodeToStream writes an object to a stream. Override versions may be provided for each group
// Encode writes an object to a stream. Implementations may return errors if the versions are
// that enforce a certain versioning. Implementations may return errors if the versions are incompatible,
// incompatible, or if no conversion is defined.
// or if no conversion is defined.
Encode
(
obj
Object
,
w
io
.
Writer
)
error
EncodeToStream
(
obj
Object
,
stream
io
.
Writer
,
overrides
...
unversioned
.
GroupVersion
)
error
}
}
type
Decoder
interface
{
type
Decoder
interface
{
...
...
pkg/runtime/serializer/codec_factory.go
View file @
36a5ffbe
...
@@ -339,7 +339,7 @@ type DirectCodec struct {
...
@@ -339,7 +339,7 @@ type DirectCodec struct {
}
}
// EncodeToStream does not do conversion. It sets the gvk during serialization. overrides are ignored.
// EncodeToStream does not do conversion. It sets the gvk during serialization. overrides are ignored.
func
(
c
DirectCodec
)
Encode
ToStream
(
obj
runtime
.
Object
,
stream
io
.
Writer
,
overrides
...
unversioned
.
GroupVersion
)
error
{
func
(
c
DirectCodec
)
Encode
(
obj
runtime
.
Object
,
stream
io
.
Writer
)
error
{
gvks
,
_
,
err
:=
c
.
ObjectTyper
.
ObjectKinds
(
obj
)
gvks
,
_
,
err
:=
c
.
ObjectTyper
.
ObjectKinds
(
obj
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
...
@@ -347,7 +347,7 @@ func (c DirectCodec) EncodeToStream(obj runtime.Object, stream io.Writer, overri
...
@@ -347,7 +347,7 @@ func (c DirectCodec) EncodeToStream(obj runtime.Object, stream io.Writer, overri
kind
:=
obj
.
GetObjectKind
()
kind
:=
obj
.
GetObjectKind
()
oldGVK
:=
kind
.
GroupVersionKind
()
oldGVK
:=
kind
.
GroupVersionKind
()
kind
.
SetGroupVersionKind
(
gvks
[
0
])
kind
.
SetGroupVersionKind
(
gvks
[
0
])
err
=
c
.
Serializer
.
Encode
ToStream
(
obj
,
stream
,
overrides
...
)
err
=
c
.
Serializer
.
Encode
(
obj
,
stream
)
kind
.
SetGroupVersionKind
(
oldGVK
)
kind
.
SetGroupVersionKind
(
oldGVK
)
return
err
return
err
}
}
...
...
pkg/runtime/serializer/codec_test.go
View file @
36a5ffbe
...
@@ -250,31 +250,28 @@ func TestTypes(t *testing.T) {
...
@@ -250,31 +250,28 @@ func TestTypes(t *testing.T) {
}
}
func
TestVersionedEncoding
(
t
*
testing
.
T
)
{
func
TestVersionedEncoding
(
t
*
testing
.
T
)
{
s
,
codec
:=
GetTestScheme
()
s
,
_
:=
GetTestScheme
()
out
,
err
:=
runtime
.
Encode
(
codec
,
&
TestType1
{},
unversioned
.
GroupVersion
{
Version
:
"v2"
})
cf
:=
newCodecFactory
(
s
,
newSerializersForScheme
(
s
,
testMetaFactory
{}))
encoder
,
_
:=
cf
.
SerializerForFileExtension
(
"json"
)
codec
:=
cf
.
CodecForVersions
(
encoder
,
nil
,
[]
unversioned
.
GroupVersion
{{
Version
:
"v2"
}},
nil
)
out
,
err
:=
runtime
.
Encode
(
codec
,
&
TestType1
{})
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
if
string
(
out
)
!=
`{"myVersionKey":"v2","myKindKey":"TestType1"}`
+
"
\n
"
{
if
string
(
out
)
!=
`{"myVersionKey":"v2","myKindKey":"TestType1"}`
+
"
\n
"
{
t
.
Fatal
(
string
(
out
))
t
.
Fatal
(
string
(
out
))
}
}
_
,
err
=
runtime
.
Encode
(
codec
,
&
TestType1
{},
unversioned
.
GroupVersion
{
Version
:
"v3"
})
if
err
==
nil
{
t
.
Fatal
(
err
)
}
cf
:=
newCodecFactory
(
s
,
newSerializersForScheme
(
s
,
testMetaFactory
{}))
codec
=
cf
.
CodecForVersions
(
encoder
,
nil
,
[]
unversioned
.
GroupVersion
{{
Version
:
"v3"
}},
nil
)
encoder
,
_
:=
cf
.
SerializerForFileExtension
(
"json"
)
_
,
err
=
runtime
.
Encode
(
codec
,
&
TestType1
{})
if
err
==
nil
{
// codec that is unversioned uses the target version
unversionedCodec
:=
cf
.
CodecForVersions
(
encoder
,
nil
,
nil
,
nil
)
_
,
err
=
runtime
.
Encode
(
unversionedCodec
,
&
TestType1
{},
unversioned
.
GroupVersion
{
Version
:
"v3"
})
if
err
==
nil
||
!
runtime
.
IsNotRegisteredError
(
err
)
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
// unversioned encode with no versions is written directly to wire
// unversioned encode with no versions is written directly to wire
out
,
err
=
runtime
.
Encode
(
unversionedCodec
,
&
TestType1
{})
codec
=
cf
.
CodecForVersions
(
encoder
,
nil
,
nil
,
nil
)
out
,
err
=
runtime
.
Encode
(
codec
,
&
TestType1
{})
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -426,7 +423,7 @@ func TestDirectCodec(t *testing.T) {
...
@@ -426,7 +423,7 @@ func TestDirectCodec(t *testing.T) {
}
}
directEncoder
:=
df
.
EncoderForVersion
(
serializer
,
ignoredGV
)
directEncoder
:=
df
.
EncoderForVersion
(
serializer
,
ignoredGV
)
directDecoder
:=
df
.
DecoderToVersion
(
serializer
,
ignoredGV
)
directDecoder
:=
df
.
DecoderToVersion
(
serializer
,
ignoredGV
)
out
,
err
:=
runtime
.
Encode
(
directEncoder
,
&
ExternalTestType1
{}
,
ignoredGV
)
out
,
err
:=
runtime
.
Encode
(
directEncoder
,
&
ExternalTestType1
{})
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
...
pkg/runtime/serializer/json/json.go
View file @
36a5ffbe
...
@@ -159,8 +159,8 @@ func (s *Serializer) Decode(originalData []byte, gvk *unversioned.GroupVersionKi
...
@@ -159,8 +159,8 @@ func (s *Serializer) Decode(originalData []byte, gvk *unversioned.GroupVersionKi
return
obj
,
actual
,
nil
return
obj
,
actual
,
nil
}
}
// Encode
ToStream serializes the provided object to the given writer. Overrides is ignored
.
// Encode
serializes the provided object to the given writer
.
func
(
s
*
Serializer
)
Encode
ToStream
(
obj
runtime
.
Object
,
w
io
.
Writer
,
overrides
...
unversioned
.
GroupVersion
)
error
{
func
(
s
*
Serializer
)
Encode
(
obj
runtime
.
Object
,
w
io
.
Writer
)
error
{
if
s
.
yaml
{
if
s
.
yaml
{
json
,
err
:=
json
.
Marshal
(
obj
)
json
,
err
:=
json
.
Marshal
(
obj
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
pkg/runtime/serializer/protobuf/protobuf.go
View file @
36a5ffbe
...
@@ -165,8 +165,8 @@ func (s *Serializer) Decode(originalData []byte, gvk *unversioned.GroupVersionKi
...
@@ -165,8 +165,8 @@ func (s *Serializer) Decode(originalData []byte, gvk *unversioned.GroupVersionKi
return
unmarshalToObject
(
s
.
typer
,
s
.
creater
,
&
actual
,
into
,
unk
.
Raw
)
return
unmarshalToObject
(
s
.
typer
,
s
.
creater
,
&
actual
,
into
,
unk
.
Raw
)
}
}
// Encode
ToStream serializes the provided object to the given writer. Overrides is ignored
.
// Encode
serializes the provided object to the given writer
.
func
(
s
*
Serializer
)
Encode
ToStream
(
obj
runtime
.
Object
,
w
io
.
Writer
,
overrides
...
unversioned
.
GroupVersion
)
error
{
func
(
s
*
Serializer
)
Encode
(
obj
runtime
.
Object
,
w
io
.
Writer
)
error
{
var
unk
runtime
.
Unknown
var
unk
runtime
.
Unknown
kind
:=
obj
.
GetObjectKind
()
.
GroupVersionKind
()
kind
:=
obj
.
GetObjectKind
()
.
GroupVersionKind
()
unk
=
runtime
.
Unknown
{
unk
=
runtime
.
Unknown
{
...
@@ -388,8 +388,8 @@ func unmarshalToObject(typer runtime.ObjectTyper, creater runtime.ObjectCreater,
...
@@ -388,8 +388,8 @@ func unmarshalToObject(typer runtime.ObjectTyper, creater runtime.ObjectCreater,
return
obj
,
actual
,
nil
return
obj
,
actual
,
nil
}
}
// Encode
ToStream
serializes the provided object to the given writer. Overrides is ignored.
// Encode serializes the provided object to the given writer. Overrides is ignored.
func
(
s
*
RawSerializer
)
Encode
ToStream
(
obj
runtime
.
Object
,
w
io
.
Writer
,
overrides
...
unversioned
.
GroupVersion
)
error
{
func
(
s
*
RawSerializer
)
Encode
(
obj
runtime
.
Object
,
w
io
.
Writer
)
error
{
switch
t
:=
obj
.
(
type
)
{
switch
t
:=
obj
.
(
type
)
{
case
bufferedMarshaller
:
case
bufferedMarshaller
:
// this path performs a single allocation during write but requires the caller to implement
// this path performs a single allocation during write but requires the caller to implement
...
...
pkg/runtime/serializer/streaming/streaming.go
View file @
36a5ffbe
...
@@ -30,8 +30,8 @@ import (
...
@@ -30,8 +30,8 @@ import (
// Encoder is a runtime.Encoder on a stream.
// Encoder is a runtime.Encoder on a stream.
type
Encoder
interface
{
type
Encoder
interface
{
// Encode will write the provided object to the stream or return an error. It obeys the same
// Encode will write the provided object to the stream or return an error. It obeys the same
// contract as runtime.Encoder.
// contract as runtime.
Versioned
Encoder.
Encode
(
obj
runtime
.
Object
,
overrides
...
unversioned
.
GroupVersion
)
error
Encode
(
obj
runtime
.
Object
)
error
}
}
// Decoder is a runtime.Decoder from a stream.
// Decoder is a runtime.Decoder from a stream.
...
@@ -127,8 +127,8 @@ func NewEncoder(w io.Writer, e runtime.Encoder) Encoder {
...
@@ -127,8 +127,8 @@ func NewEncoder(w io.Writer, e runtime.Encoder) Encoder {
}
}
// Encode writes the provided object to the nested writer.
// Encode writes the provided object to the nested writer.
func
(
e
*
encoder
)
Encode
(
obj
runtime
.
Object
,
overrides
...
unversioned
.
GroupVersion
)
error
{
func
(
e
*
encoder
)
Encode
(
obj
runtime
.
Object
)
error
{
if
err
:=
e
.
encoder
.
Encode
ToStream
(
obj
,
e
.
buf
,
overrides
...
);
err
!=
nil
{
if
err
:=
e
.
encoder
.
Encode
(
obj
,
e
.
buf
);
err
!=
nil
{
return
err
return
err
}
}
_
,
err
:=
e
.
writer
.
Write
(
e
.
buf
.
Bytes
())
_
,
err
:=
e
.
writer
.
Write
(
e
.
buf
.
Bytes
())
...
...
pkg/runtime/serializer/versioning/versioning.go
View file @
36a5ffbe
...
@@ -222,11 +222,11 @@ func (c *codec) Decode(data []byte, defaultGVK *unversioned.GroupVersionKind, in
...
@@ -222,11 +222,11 @@ func (c *codec) Decode(data []byte, defaultGVK *unversioned.GroupVersionKind, in
return
out
,
gvk
,
nil
return
out
,
gvk
,
nil
}
}
// Encode
ToStream ensures the provided object is output in the right scheme. If overrides are specified, when
// Encode
ensures the provided object is output in the appropriate group and version, invoking
//
encoding the object the first override that matches the object's group is used. Other overrides are ignored
.
//
conversion if necessary. Unversioned objects (according to the ObjectTyper) are output as is
.
func
(
c
*
codec
)
Encode
ToStream
(
obj
runtime
.
Object
,
w
io
.
Writer
,
overrides
...
unversioned
.
GroupVersion
)
error
{
func
(
c
*
codec
)
Encode
(
obj
runtime
.
Object
,
w
io
.
Writer
)
error
{
if
_
,
ok
:=
obj
.
(
*
runtime
.
Unknown
);
ok
{
if
_
,
ok
:=
obj
.
(
*
runtime
.
Unknown
);
ok
{
return
c
.
encoder
.
Encode
ToStream
(
obj
,
w
,
overrides
...
)
return
c
.
encoder
.
Encode
(
obj
,
w
)
}
}
gvks
,
isUnversioned
,
err
:=
c
.
typer
.
ObjectKinds
(
obj
)
gvks
,
isUnversioned
,
err
:=
c
.
typer
.
ObjectKinds
(
obj
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -234,38 +234,21 @@ func (c *codec) EncodeToStream(obj runtime.Object, w io.Writer, overrides ...unv
...
@@ -234,38 +234,21 @@ func (c *codec) EncodeToStream(obj runtime.Object, w io.Writer, overrides ...unv
}
}
gvk
:=
gvks
[
0
]
gvk
:=
gvks
[
0
]
if
(
c
.
encodeVersion
==
nil
&&
len
(
overrides
)
==
0
)
||
isUnversioned
{
if
c
.
encodeVersion
==
nil
||
isUnversioned
{
objectKind
:=
obj
.
GetObjectKind
()
objectKind
:=
obj
.
GetObjectKind
()
old
:=
objectKind
.
GroupVersionKind
()
old
:=
objectKind
.
GroupVersionKind
()
objectKind
.
SetGroupVersionKind
(
gvk
)
objectKind
.
SetGroupVersionKind
(
gvk
)
err
=
c
.
encoder
.
Encode
ToStream
(
obj
,
w
,
overrides
...
)
err
=
c
.
encoder
.
Encode
(
obj
,
w
)
objectKind
.
SetGroupVersionKind
(
old
)
objectKind
.
SetGroupVersionKind
(
old
)
return
err
return
err
}
}
targetGV
,
ok
:=
c
.
encodeVersion
[
gvk
.
Group
]
targetGV
,
ok
:=
c
.
encodeVersion
[
gvk
.
Group
]
// use override if provided
for
i
,
override
:=
range
overrides
{
if
override
.
Group
==
gvk
.
Group
{
ok
=
true
targetGV
=
override
// swap the position of the override
overrides
[
0
],
overrides
[
i
]
=
targetGV
,
overrides
[
0
]
break
}
}
// attempt a conversion to the sole encode version
// attempt a conversion to the sole encode version
if
!
ok
&&
c
.
preferredEncodeVersion
!=
nil
{
if
!
ok
&&
c
.
preferredEncodeVersion
!=
nil
{
ok
=
true
ok
=
true
targetGV
=
c
.
preferredEncodeVersion
[
0
]
targetGV
=
c
.
preferredEncodeVersion
[
0
]
if
len
(
overrides
)
>
0
{
// ensure the target override is first
overrides
=
promoteOrPrependGroupVersion
(
targetGV
,
overrides
)
}
else
{
// avoids allocating a new array for each call to EncodeToVersion
overrides
=
c
.
preferredEncodeVersion
}
}
}
// if no fallback is available, error
// if no fallback is available, error
...
@@ -285,21 +268,8 @@ func (c *codec) EncodeToStream(obj runtime.Object, w io.Writer, overrides ...unv
...
@@ -285,21 +268,8 @@ func (c *codec) EncodeToStream(obj runtime.Object, w io.Writer, overrides ...unv
obj
=
out
obj
=
out
}
}
// Conversion is responsible for setting the proper group, version, and kind onto the outgoing object
// Conversion is responsible for setting the proper group, version, and kind onto the outgoing object
err
=
c
.
encoder
.
Encode
ToStream
(
obj
,
w
,
overrides
...
)
err
=
c
.
encoder
.
Encode
(
obj
,
w
)
// restore the old GVK, in case conversion returned the same object
// restore the old GVK, in case conversion returned the same object
objectKind
.
SetGroupVersionKind
(
old
)
objectKind
.
SetGroupVersionKind
(
old
)
return
err
return
err
}
}
// promoteOrPrependGroupVersion finds the group version in the provided group versions that has the same group as target.
// If the group is found the returned array will have that group version in the first position - if the group is not found
// the returned array will have target in the first position.
func
promoteOrPrependGroupVersion
(
target
unversioned
.
GroupVersion
,
gvs
[]
unversioned
.
GroupVersion
)
[]
unversioned
.
GroupVersion
{
for
i
,
gv
:=
range
gvs
{
if
gv
.
Group
==
target
.
Group
{
gvs
[
0
],
gvs
[
i
]
=
gvs
[
i
],
gvs
[
0
]
return
gvs
}
}
return
append
([]
unversioned
.
GroupVersion
{
target
},
gvs
...
)
}
pkg/runtime/serializer/versioning/versioning_test.go
View file @
36a5ffbe
...
@@ -261,9 +261,8 @@ func (c *checkConvertor) ConvertFieldLabel(version, kind, label, value string) (
...
@@ -261,9 +261,8 @@ func (c *checkConvertor) ConvertFieldLabel(version, kind, label, value string) (
}
}
type
mockSerializer
struct
{
type
mockSerializer
struct
{
err
error
err
error
obj
runtime
.
Object
obj
runtime
.
Object
versions
[]
unversioned
.
GroupVersion
defaults
,
actual
*
unversioned
.
GroupVersionKind
defaults
,
actual
*
unversioned
.
GroupVersionKind
into
runtime
.
Object
into
runtime
.
Object
...
@@ -275,9 +274,8 @@ func (s *mockSerializer) Decode(data []byte, defaults *unversioned.GroupVersionK
...
@@ -275,9 +274,8 @@ func (s *mockSerializer) Decode(data []byte, defaults *unversioned.GroupVersionK
return
s
.
obj
,
s
.
actual
,
s
.
err
return
s
.
obj
,
s
.
actual
,
s
.
err
}
}
func
(
s
*
mockSerializer
)
Encode
ToStream
(
obj
runtime
.
Object
,
w
io
.
Writer
,
versions
...
unversioned
.
GroupVersion
)
error
{
func
(
s
*
mockSerializer
)
Encode
(
obj
runtime
.
Object
,
w
io
.
Writer
)
error
{
s
.
obj
=
obj
s
.
obj
=
obj
s
.
versions
=
versions
return
s
.
err
return
s
.
err
}
}
...
...
pkg/runtime/unstructured.go
View file @
36a5ffbe
...
@@ -54,7 +54,7 @@ func (s unstructuredJSONScheme) Decode(data []byte, _ *unversioned.GroupVersionK
...
@@ -54,7 +54,7 @@ func (s unstructuredJSONScheme) Decode(data []byte, _ *unversioned.GroupVersionK
return
obj
,
&
gvk
,
nil
return
obj
,
&
gvk
,
nil
}
}
func
(
unstructuredJSONScheme
)
Encode
ToStream
(
obj
Object
,
w
io
.
Writer
,
overrides
...
unversioned
.
GroupVersion
)
error
{
func
(
unstructuredJSONScheme
)
Encode
(
obj
Object
,
w
io
.
Writer
)
error
{
switch
t
:=
obj
.
(
type
)
{
switch
t
:=
obj
.
(
type
)
{
case
*
Unstructured
:
case
*
Unstructured
:
return
json
.
NewEncoder
(
w
)
.
Encode
(
t
.
Object
)
return
json
.
NewEncoder
(
w
)
.
Encode
(
t
.
Object
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment