Commit Graph

259 Commits

Author SHA1 Message Date
Wojciech Tyczynski
3175d18b14 Support Close() in streaming decoder 2016-04-28 09:46:33 +02:00
Clayton Coleman
236925be87
Avoid allocations and a reflect.Call in conversion
reflect.Call is fairly expensive, performing 8 allocations and having to
set up a call stack. Using a fairly straightforward to generate switch
statement, we can bypass that early in conversion (as long as the
function takes responsibility for invocation). We may also be able to
avoid an allocation for the conversion scope, but not positive yet.

```
benchmark                    old ns/op     new ns/op     delta
BenchmarkPodConversion-8     14713         12173         -17.26%

benchmark                    old allocs     new allocs     delta
BenchmarkPodConversion-8     80             72             -10.00%

benchmark                    old bytes     new bytes     delta
BenchmarkPodConversion-8     9133          8712          -4.61%
```
2016-04-26 16:42:12 -04:00
Wojciech Tyczynski
c0020aff59 Merge pull request #24539 from smarterclayton/unify_stream_and_serial
Unify Streaming and normal Serializers
2016-04-25 11:25:16 +02:00
Clayton Coleman
668fae253f Generated spec and docs 2016-04-22 11:07:33 -04:00
Clayton Coleman
3111985564 Handle streaming serializers more consistently
Add tests to watch behavior in both protocols (http and websocket)
against all 3 media types. Adopt the
`application/vnd.kubernetes.protobuf;stream=watch` media type for the
content that comes back from a watch call so that it can be
distinguished from a Status result.
2016-04-22 11:07:24 -04:00
goltermann
dddc6cb6c8 Fix a few spellings. 2016-04-21 15:16:42 -07:00
Clayton Coleman
e16a7f2421 Initial protobuf generated files 2016-04-20 12:13:05 -04:00
Clayton Coleman
cea4c010a6 Strip the proto build guard 2016-04-20 12:12:29 -04:00
Wojciech Tyczynski
89e860e622 Remove old conversion generator 2016-04-15 12:07:57 +02:00
k8s-merge-robot
f5e8e7453b Merge pull request #23806 from smarterclayton/streaming_watch
Automatic merge from submit-queue

Implement a streaming serializer for watch

Changeover watch to use streaming serialization. Properly version the
watch objects. Implement simple framing for JSON and Protobuf (but not
YAML).

@wojtek-t @lavalamp
2016-04-13 05:18:17 -07:00
k8s-merge-robot
fcddb9cba5 Merge pull request #16964 from liggitt/json_precision
Automatic merge from submit-queue

Preserve int data when unmarshaling

There are several places we use `json.Unmarshal` into an unstructured map (StrategicMergePatch, UnstructuredJSONScheme, many others).

In this scenario, the json package converts all numbers to float64. This exposes many of the int64 fields in our API types to corruption when the unstructured map is marshalled back to json.

A simple example is a pod with an `"activeDeadlineSeconds": 1000000`. Trying to use `kubectl label`, `annotate`, `patch`, etc results in that int64 being converted to a float64, submitted to the server, and the server rejecting it with an error about "cannot unmarshal number 1e+6 into Go value of type int64"

The json package provides a way to defer conversion of numbers (`json.Decoder#UseNumber`), but does not actually do conversions to int or float. This PR makes use of that feature, and post-processes the unmarshalled map to convert json.Number objects to either int64 or float64 values
2016-04-12 07:09:32 -07:00
k8s-merge-robot
acf9492cb1 Merge pull request #23660 from goltermann/vetclean
Automatic merge from submit-queue

Additional go vet fixes

Mostly:
- pass lock by value
- bad syntax for struct tag value
- example functions not formatted properly
2016-04-12 06:22:16 -07:00
Jordan Liggitt
37c86041ca Preserve int64 data when patching 2016-04-11 16:23:28 -04:00
Clayton Coleman
3474911736 Implement a streaming serializer for watch
Changeover watch to use streaming serialization. Properly version the
watch objects. Implement simple framing for JSON and Protobuf (but not
YAML).
2016-04-11 11:22:05 -04:00
Clayton Coleman
87146c4255 Fix compilation errors in protobuf and add decode test 2016-04-11 11:22:04 -04:00
Clayton Coleman
bfc991646b Implement correct and memory safe framing and add tests 2016-04-11 11:22:04 -04:00
goltermann
696423e044 Vet fixes, mostly pass lock by value errors. 2016-04-06 11:27:40 -07:00
Wojciech Tyczynski
49d3c3962c Small improvements in conversion generator 2016-04-05 02:10:23 +02:00
k8s-merge-robot
d807690c39 Merge pull request #23387 from hongchaodeng/e
Automatic merge from submit-queue

storage.Interface KV impl. of etcd v3

This is the initial implementation of #22448.

The PR consists of two parts:
- add godep of "clientv3" and "integration" (for testing)
- create new package "etcd3" under "pkg/storage/"
- implement KV methods of storage.Interface using etcd v3 APIs
  - Create, Set, Get, Delete, GetToList, List, GuaranteedUpdate
2016-03-31 11:46:43 -07:00
Clayton Coleman
f2139b186c Add an experimental protobuf serializer
Provide a core protobuf serializer that can either write objects with
an envelope (a 4 byte prefix and a runtime.Object) or raw to a byte
array.
2016-03-31 10:41:11 -04:00
Hongchao Deng
00ddf0671d etcd (v3) store: implements KV methods of storage.Interface
This implements Get(), Create(), Delete(), GetToList(),
List(), GuaranteedUpdate().
2016-03-30 10:20:39 -07:00
k8s-merge-robot
1ad3049ed6 Merge pull request #23288 from smarterclayton/refactor_codec
Auto commit by PR queue bot
2016-03-26 10:47:58 -07:00
goltermann
32d569d6c7 Fixing all the "composite literal uses unkeyed fields" Vet errors. 2016-03-25 15:25:09 -07:00
k8s-merge-robot
4e4ad61260 Merge pull request #23366 from goltermann/vet
Auto commit by PR queue bot
2016-03-24 21:50:56 -07:00
k8s-merge-robot
8355cefb7b Merge pull request #23373 from wojtek-t/conversions_with_framework_3
Auto commit by PR queue bot
2016-03-24 01:39:23 -07:00
Wojciech Tyczynski
42e7ecda5a Fix bunch of issues with conversion generator. 2016-03-24 08:26:51 +01:00
Clayton Coleman
54eaa56b92 Add a streaming and "raw" abstraction to codec factory 2016-03-23 17:25:20 -04:00
k8s-merge-robot
4a6e6b3fbf Merge pull request #23213 from pweil-/generator-besteffort
Auto commit by PR queue bot
2016-03-23 07:50:09 -07:00
goltermann
34d4eaea08 Fixing several (but not all) go vet errors. Most are around string formatting, or unreachable code. 2016-03-22 17:26:50 -07:00
Paul Weil
dd4ff1690d provide best effort generation even if types are asymmetrical 2016-03-22 11:44:07 -04:00
harry
b0900bf0d4 Refactor diff into sub pkg 2016-03-21 20:21:39 +08:00
k8s-merge-robot
8fb0bfb0d3 Merge pull request #23179 from wojtek-t/remove_old_deep_copy_generator
Auto commit by PR queue bot
2016-03-18 19:35:54 -07:00
Wojciech Tyczynski
89585237cd Rename RawJSON to Raw in runtime.RawExtension and add ContentType & ContentEncoding. 2016-03-18 12:35:27 +01:00
Wojciech Tyczynski
ce9b2ab3e3 Remove old deep-copy generator. 2016-03-18 09:42:15 +01:00
Wojciech Tyczynski
7e2fdeae7b Regenerate autogenerate files 2016-03-17 15:22:19 +01:00
k8s-merge-robot
53c6b35b71 Merge pull request #23038 from wojtek-t/rename_raw_json_to_raw
Auto commit by PR queue bot
2016-03-17 04:05:43 -07:00
Wojciech Tyczynski
e610c137c0 Regenerate auto-generated files 2016-03-17 09:30:02 +01:00
Wojciech Tyczynski
218d3e5923 Rename RawJSON to Raw in runtime.Unknown and add ContentType & ContentEncoding. 2016-03-16 16:43:58 +01:00
Wojciech Tyczynski
b264805796 JSON serializer implements serializer interface 2016-03-10 13:26:05 +01:00
Clayton Coleman
f5c7f297b3 Set runtime OWNERS 2016-03-04 23:59:34 -05:00
k8s-merge-robot
c3a962bff5 Merge pull request #20351 from krousey/dynamic_client
Auto commit by PR queue bot
2016-02-19 10:00:54 -08:00
k8s-merge-robot
5acdb92126 Merge pull request #21177 from laushinka/spelling-fixes
Auto commit by PR queue bot
2016-02-18 10:29:49 -08:00
Piotr Szczesniak
c02e966d65 Applied comments from the review 2016-02-18 14:18:39 +01:00
laushinka
7ef585be22 Spelling fixes inspired by github.com/client9/misspell 2016-02-18 06:58:05 +07:00
Daniel Smith
74400c33ae changes for cross-group moves 2016-02-15 21:39:00 +01:00
deads2k
f89bd83664 fix group mapping and encoding order 2016-02-15 08:49:17 -05:00
Kris
4c58302b5b Adding dynamic client 2016-02-12 11:49:00 -08:00
Clayton Coleman
b8582f73da Ensure public conversion name packages are imported
The name of the package a public function is in may not be inside the
current package set, so it needs to be imported.
2016-02-08 17:24:44 -05:00
k8s-merge-robot
f769ecdabc Merge pull request #20487 from deads2k/fix-unstructured
Auto commit by PR queue bot
2016-02-06 06:49:13 -08:00
deads2k
067ecb4b60 expose unstructured scheme as codec 2016-02-04 11:14:16 -05:00
deads2k
26b91926b2 fix version detection for error 2016-02-04 08:20:41 -05:00
Clayton Coleman
60b66665e1 Move conversion.Scheme to runtime
There is only one type registry to rule them all
2016-01-30 14:12:40 -05:00
Clayton Coleman
6b2f70d553 Provide a JSON and YAML serializer, and a versioning wrapper
Add a recognizer that is capable of sniffing content type from data by
asking each serializer to try to decode - this is for a "universal
decoder/deserializer" which can be used by client logic.

Add codec factory, which provides the core primitives for content type
negotiation. Codec factories depend only on schemes, serializers, and
groupversion pairs.
2016-01-22 00:12:49 -05:00
Clayton Coleman
63a7a41ddf Simplify Codec and split responsibilities
Break Codec into two general purpose interfaces, Encoder and Decoder,
and move parameter codec responsibilities to ParameterCodec.

Make unversioned types explicit when registering - these types go
through conversion without modification.

Switch to use "__internal" instead of "" to represent the internal
version. Future commits will also add group defaulting (so that "" is
expanded internally into a known group version, and only cleared during
set).

For embedded types like runtime.Object -> runtime.RawExtension, put the
responsibility on the caller of Decode/Encode to handle transformation
into destination serialization. Future commits will expand RawExtension
and Unknown to accept a content encoding as well as bytes.

Make Unknown a bit more powerful and use it to carry unrecognized types.
2016-01-21 23:18:32 -05:00
Clayton Coleman
6582b4c2ea Remove codec awareness from conversion
Allow convertors to be specialized, some cleanup to how conversion
functions are stored internally to allow better reuse.
2016-01-21 23:18:32 -05:00
Clayton Coleman
3c1451af91 Use public conversion methods to avoid reflection
Replace many of the remaining s.Convert() invocations with direct
execution, and make generated methods public. Removes 10% of the
allocations during decode of a pod and ~20-40% of the total CPU time.
2015-12-29 10:38:42 -05:00
Clayton Coleman
173718059d Slice conversion requires destination package 2015-12-18 19:05:21 -05:00
k8s-merge-robot
e309583ff1 Merge pull request #18473 from smarterclayton/change_runtime_object
Auto commit by PR queue bot
2015-12-16 04:24:22 -08:00
Clayton Coleman
8f203a28f1 Change runtime.Object signature 2015-12-15 13:36:25 -05:00
deads2k
6e33403abf update CodecFor for GroupVersion 2015-12-15 10:56:00 -05:00
k8s-merge-robot
266ab4a796 Merge pull request #18487 from smarterclayton/guard_encode_decode
Auto commit by PR queue bot
2015-12-13 23:08:18 -08:00
Clayton Coleman
1e21054134 Hide common codec methods under helpers
The pending codec -> conversion split changes the signature of
Encode and Decode to be more complicated. Create a stub helper
with the exact semantics of today and do the simple mechanical
refactor here to reduce the cost of that change.
2015-12-09 21:15:02 -05:00
deads2k
519b4e80d1 update NewObject for groupversionkind 2015-12-09 08:13:15 -05:00
deads2k
2ee3dfe415 update testapi to eliminate redundant fields 2015-12-07 15:54:26 -05:00
deads2k
f764e0099c Update ObjectTyper to GroupVersion 2015-12-07 08:35:05 -05:00
Clayton Coleman
ac9fd648d3 Strip go2idl instructions from generated swagger doc
Ignore doc lines starting with +
2015-12-05 18:15:49 -05:00
Clayton Coleman
9fea762917 Add protobuf preparation objects, guarded by proto tag 2015-12-05 18:15:48 -05:00
Clayton Coleman
8046bb46df Update conversions to handle primitive conversion 2015-11-26 11:45:25 -05:00
deads2k
ed95a6d77f update scheme to use GroupVersion 2015-11-25 12:15:48 -05:00
deads2k
47e496364d update generators for groupVersion 2015-11-25 12:14:06 -05:00
deads2k
68b0572974 internal versions 2015-11-25 12:14:06 -05:00
deads2k
6231404682 update decoder to use GroupVersion 2015-11-25 12:14:06 -05:00
k8s-merge-robot
06ef4b0a83 Merge pull request #17156 from feihujiang/moveListFunctionsFromRuntimeToMetaPackage
Auto commit by PR queue bot
2015-11-23 14:13:25 -08:00
feihujiang
ad79fa6e84 Move list functions from runtime to meta package 2015-11-20 09:20:55 +08:00
Wojciech Tyczynski
d7b098b0e9 Add DecodeParametersInto method to Codec. 2015-11-18 09:56:04 +01:00
k8s-merge-robot
9981f99949 Merge pull request #16849 from feihujiang/cleanupDeprecatedV1beta1Content
Auto commit by PR queue bot
2015-11-07 04:15:32 -08:00
feihujiang
eac8d6a997 Cleanup the content of deprecated V1beta1 2015-11-06 13:42:51 +08:00
Wojciech Tyczynski
ce95f68d2a Changes in codec interfaces 2015-11-05 13:52:22 +01:00
kargakis
ef36b3e4f6 deep-copies: Structs cannot be nil 2015-10-12 15:21:30 +02:00
Brendan Burns
deb3514c02 Fix ExtractList to work with v1.List 2015-10-07 15:48:38 -07:00
Brian Grant
313918f561 Merge pull request #14148 from brendandburns/perf
Add a method for encoding directly to a io.Writer and use it for HTTP
2015-09-25 13:19:58 -07:00
Tim Hockin
fd91d3f0ec Make patch-up conversions simpler
Rather than an "all or nothing" approach to defining a custom conversion
function (which seems destined to cause problems eventually), this is an
attempt to make it possible to call the auto-generated code and then "fix it
up".

Specifically, consider you have a fooBar struct.  If you don't define a
conversion for FooBar, you will get a generated function like:
    convert_v1_FooBar_To_api_FooBar()

Before this PR, if you define your own conversion function, you get no
generated function.  After this PR you get:
    autoconvert_v1_FooBar_To_api_FooBar()
...which you can call yourself in your custom function.
2015-09-24 17:21:07 -07:00
Brendan Burns
8998219686 Add a method for encoding directly to a io.Writer and use it for HTTPx 2015-09-24 15:52:09 -07:00
tummychow
78ce5da988 Move util.StringSet into its own package
A lot of packages use StringSet, but they don't use anything else from
the util package. Moving StringSet into another package will shrink
their dependency trees significantly.
2015-09-10 12:04:15 -07:00
Chao Xu
9fc79e9d99 refactor testapi and test scripts to prepare for multiple API groups. 2015-09-04 18:01:32 -07:00
Anastasis Andronidis
9f21ae21e8 swagger type documentation generator 2015-08-22 02:26:03 +02:00
Piotr Szczesniak
eb01d49783 Merge pull request #12556 from uluyol/copynilinterface
Properly handle nil interfaces in DeepCopy.
2015-08-12 09:54:02 +02:00
Muhammed Uluyol
bc8bc37282 Properly handle nil interfaces in DeepCopy.
Running reflect.ValueOf(X) where X is a nil interface will return
a zero Value. We cannot get the type (because no concrete type is
known) and cannot check if the Value is nil later on due to the way
reflect.Value works. So we should handle this case by immediately
returning nil. We cannot type-assert a nil interface to another
interface type (as no concrete type is assigned), so we must add
another check to see if the returned interface is nil.
2015-08-11 17:59:32 -07:00
Muhammed Uluyol
4d5899955e Remove redundant tests. We already check that no changes have been made in hack/verify-generated-*.sh. 2015-08-11 16:51:44 -07:00
Kris Rousey
565189f5b8 Correcting all go vet errors 2015-08-11 13:55:37 -07:00
Paul Weil
26d80cdb7f use package from out value 2015-08-10 14:00:20 -04:00
Marek Grabowski
5f9cefc1d8 Merge pull request #12441 from vlajos/typofixes-vlajos-20150807
typofix - https://github.com/vlajos/misspell_fixer
2015-08-10 16:33:52 +02:00
Veres Lajos
9f77e49109 typofix - https://github.com/vlajos/misspell_fixer 2015-08-08 22:31:48 +01:00
Kris Rousey
6e64a63a84 Adding a way to decode to a specified version.
This is largely needed as a way to get a versioned client without
requiring everyone to switch to versioned types at once.
2015-08-07 14:16:24 -07:00
Mike Danese
8e33cbfa28 rewrite go imports 2015-08-05 17:30:03 -07:00
Alex Mohr
366b382901 Merge pull request #10200 from caesarxuchao/resthandler-validate-version
verify and default APIVersion in createHandler, verify APIVersion in UpdateResource
2015-08-04 13:09:31 -07:00
Chao Xu
664d20c572 Add DecodeIntoWithSpecifiedVersionKind() to Decoder interface.
The function validate/default the body with the passed in apiVersion and Kind.
It's called in createHandler and UpdateResource
2015-08-03 15:30:00 -07:00
Clayton Coleman
532e1ca20c Update generator tests to passing 2015-07-30 15:15:28 -04:00
Clayton Coleman
0f9fdcafea Revert "Revert "Improve conversion to support multiple packages""
This reverts commit 94a387d5d1.
2015-07-30 15:15:14 -04:00
Mike Danese
94a387d5d1 Revert "Improve conversion to support multiple packages" 2015-07-30 10:51:40 -07:00