Skip to content

Commit fe29e0f

Browse files
authored
Merge pull request kubernetes#83131 from apelisse/remove-extra-yaml-parsing
Apply currently parses the yaml object 3 times, please remove 2
2 parents a5135ec + 31c644a commit fe29e0f

File tree

4 files changed

+2
-50
lines changed

4 files changed

+2
-50
lines changed

staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanager.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ func (f *fieldManager) Apply(liveObj runtime.Object, patch []byte, fieldManager
216216
}
217217
internal.RemoveObjectManagedFields(liveObjVersioned)
218218

219-
patchObjTyped, err := f.typeConverter.YAMLToTyped(patch)
219+
patchObjTyped, err := f.typeConverter.ObjectToTyped(patchObj)
220220
if err != nil {
221221
return nil, fmt.Errorf("failed to create typed patch object: %v", err)
222222
}

staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/BUILD

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ go_library(
2727
"//vendor/sigs.k8s.io/structured-merge-diff/merge:go_default_library",
2828
"//vendor/sigs.k8s.io/structured-merge-diff/typed:go_default_library",
2929
"//vendor/sigs.k8s.io/structured-merge-diff/value:go_default_library",
30-
"//vendor/sigs.k8s.io/yaml:go_default_library",
3130
],
3231
)
3332

staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/typeconverter.go

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,12 @@ import (
2525
"k8s.io/kube-openapi/pkg/util/proto"
2626
"sigs.k8s.io/structured-merge-diff/typed"
2727
"sigs.k8s.io/structured-merge-diff/value"
28-
"sigs.k8s.io/yaml"
2928
)
3029

3130
// TypeConverter allows you to convert from runtime.Object to
3231
// typed.TypedValue and the other way around.
3332
type TypeConverter interface {
3433
ObjectToTyped(runtime.Object) (*typed.TypedValue, error)
35-
YAMLToTyped([]byte) (*typed.TypedValue, error)
3634
TypedToObject(*typed.TypedValue) (runtime.Object, error)
3735
}
3836

@@ -58,11 +56,6 @@ func (DeducedTypeConverter) ObjectToTyped(obj runtime.Object) (*typed.TypedValue
5856
return typed.DeducedParseableType.FromUnstructured(u)
5957
}
6058

61-
// YAMLToTyped parses a yaml object into a TypedValue with a "deduced type".
62-
func (DeducedTypeConverter) YAMLToTyped(from []byte) (*typed.TypedValue, error) {
63-
return typed.DeducedParseableType.FromYAML(typed.YAMLObject(from))
64-
}
65-
6659
// TypedToObject transforms the typed value into a runtime.Object. That
6760
// is not specific to deduced type.
6861
func (DeducedTypeConverter) TypedToObject(value *typed.TypedValue) (runtime.Object, error) {
@@ -99,21 +92,6 @@ func (c *typeConverter) ObjectToTyped(obj runtime.Object) (*typed.TypedValue, er
9992
return t.FromUnstructured(u)
10093
}
10194

102-
func (c *typeConverter) YAMLToTyped(from []byte) (*typed.TypedValue, error) {
103-
unstructured := &unstructured.Unstructured{Object: map[string]interface{}{}}
104-
105-
if err := yaml.Unmarshal(from, &unstructured.Object); err != nil {
106-
return nil, fmt.Errorf("error decoding YAML: %v", err)
107-
}
108-
109-
gvk := unstructured.GetObjectKind().GroupVersionKind()
110-
t := c.parser.Type(gvk)
111-
if t == nil {
112-
return nil, newNoCorrespondingTypeError(gvk)
113-
}
114-
return t.FromYAML(typed.YAMLObject(string(from)))
115-
}
116-
11795
func (c *typeConverter) TypedToObject(value *typed.TypedValue) (runtime.Object, error) {
11896
return valueToObject(value.AsValue())
11997
}

staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/typeconverter_test.go

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,6 @@ spec:
124124
t.Run(fmt.Sprintf("%v ObjectToTyped with TypeConverter", testCase.name), func(t *testing.T) {
125125
testObjectToTyped(t, tc, testCase.yaml)
126126
})
127-
t.Run(fmt.Sprintf("%v YAMLToTyped with TypeConverter", testCase.name), func(t *testing.T) {
128-
testYAMLToTyped(t, tc, testCase.yaml)
129-
})
130127
t.Run(fmt.Sprintf("%v ObjectToTyped with DeducedTypeConverter", testCase.name), func(t *testing.T) {
131128
testObjectToTyped(t, dtc, testCase.yaml)
132129
})
@@ -155,31 +152,9 @@ Final object:
155152
}
156153
}
157154

158-
func testYAMLToTyped(t *testing.T, tc internal.TypeConverter, y string) {
159-
obj := &unstructured.Unstructured{Object: map[string]interface{}{}}
160-
if err := yaml.Unmarshal([]byte(y), &obj.Object); err != nil {
161-
t.Fatalf("Failed to parse yaml object: %v", err)
162-
}
163-
yamlTyped, err := tc.YAMLToTyped([]byte(y))
164-
if err != nil {
165-
t.Fatalf("Failed to convert yaml to typed: %v", err)
166-
}
167-
newObj, err := tc.TypedToObject(yamlTyped)
168-
if err != nil {
169-
t.Fatalf("Failed to convert typed to object: %v", err)
170-
}
171-
if !reflect.DeepEqual(obj, newObj) {
172-
t.Errorf(`YAML conversion resulted in different object failed:
173-
Original object:
174-
%#v
175-
Final object:
176-
%#v`, obj, newObj)
177-
}
178-
}
179-
180155
var result typed.TypedValue
181156

182-
func BenchmarkYAMLToTyped(b *testing.B) {
157+
func BenchmarkObjectToTyped(b *testing.B) {
183158
y := `
184159
apiVersion: extensions/v1beta1
185160
kind: Deployment

0 commit comments

Comments
 (0)