Only update managedFields on update if it already exists

This commit is contained in:
jennybuckley
2019-06-05 14:09:08 -07:00
committed by Jennifer Buckley
parent a1f1f0b599
commit 9a12e37a6d
5 changed files with 48 additions and 11 deletions

View File

@@ -1178,7 +1178,6 @@ var podBytes = []byte(`
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2019-07-08T09:31:18Z"
labels:
app: some-app
plugin1: some-value
@@ -1194,8 +1193,6 @@ metadata:
kind: ReplicaSet
name: some-name
uid: 0a9d2b9e-779e-11e7-b422-42010a8001be
selfLink: /api/v1/namespaces/pah
uid: 23e8f548-a163-11e9-abe4-42010a80026b
spec:
containers:
- args:
@@ -1329,22 +1326,27 @@ func BenchmarkNoServerSideApply(b *testing.B) {
}
func getPodSizeWhenEnabled(b *testing.B, pod v1.Pod) int {
return len(getPodBytesWhenEnabled(b, pod, "application/vnd.kubernetes.protobuf"))
}
func getPodBytesWhenEnabled(b *testing.B, pod v1.Pod, format string) []byte {
defer featuregatetesting.SetFeatureGateDuringTest(b, utilfeature.DefaultFeatureGate, genericfeatures.ServerSideApply, true)()
_, client, closeFn := setup(b)
defer closeFn()
flag.Lookup("v").Value.Set("0")
pod.Name = "size-pod"
podB, err := client.CoreV1().RESTClient().Post().
podB, err := client.CoreV1().RESTClient().Patch(types.ApplyPatchType).
Name(pod.Name).
Namespace("default").
Param("fieldManager", "apply_test").
Resource("pods").
SetHeader("Content-Type", "application/yaml").
SetHeader("Accept", "application/vnd.kubernetes.protobuf").
SetHeader("Accept", format).
Body(encodePod(pod)).DoRaw()
if err != nil {
b.Fatalf("Failed to create object: %v", err)
b.Fatalf("Failed to create object: %#v", err)
}
return len(podB)
return podB
}
func BenchmarkNoServerSideApplyButSameSize(b *testing.B) {
@@ -1385,16 +1387,24 @@ func BenchmarkNoServerSideApplyButSameSize(b *testing.B) {
}
func BenchmarkServerSideApply(b *testing.B) {
podBytesWhenEnabled := getPodBytesWhenEnabled(b, decodePod(podBytes), "application/yaml")
defer featuregatetesting.SetFeatureGateDuringTest(b, utilfeature.DefaultFeatureGate, genericfeatures.ServerSideApply, true)()
_, client, closeFn := setup(b)
defer closeFn()
flag.Lookup("v").Value.Set("0")
benchAll(b, client, decodePod(podBytes))
benchAll(b, client, decodePod(podBytesWhenEnabled))
}
func benchAll(b *testing.B, client kubernetes.Interface, pod v1.Pod) {
// Make sure pod is ready to post
pod.ObjectMeta.CreationTimestamp = metav1.Time{}
pod.ObjectMeta.ResourceVersion = ""
pod.ObjectMeta.UID = ""
pod.ObjectMeta.SelfLink = ""
// Create pod for repeated-updates
pod.Name = "repeated-pod"
_, err := client.CoreV1().RESTClient().Post().