Skip to content

Commit 2c20f02

Browse files
fix(helm-operator): do not send empty patch requests to kube apiserver (#139)
The change filters out empty patches generated from the 3-way merge, which could be in the form of the "{}" byte array that represents an empty map. Reference: operator-framework/operator-sdk#4957 Co-authored-by: Cheuk Lam
1 parent de4f99a commit 2c20f02

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

pkg/client/actionclient.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,9 +264,17 @@ func createPatch(existing runtime.Object, expected *resource.Info) ([]byte, apit
264264
if err != nil {
265265
return nil, apitypes.StrategicMergePatchType, err
266266
}
267-
268267
patch, err := strategicpatch.CreateThreeWayMergePatch(expectedJSON, expectedJSON, existingJSON, patchMeta, true)
269-
return patch, apitypes.StrategicMergePatchType, err
268+
if err != nil {
269+
return nil, apitypes.StrategicMergePatchType, err
270+
}
271+
272+
// An empty patch could be in the form of "{}" which represents an empty map out of the 3-way merge;
273+
// filter them out here too to avoid sending the apiserver empty patch requests.
274+
if len(patch) == 0 || bytes.Equal(patch, []byte("{}")) {
275+
return nil, apitypes.StrategicMergePatchType, nil
276+
}
277+
return patch, apitypes.StrategicMergePatchType, nil
270278
}
271279

272280
func createJSONMergePatch(existingJSON, expectedJSON []byte) ([]byte, error) {

pkg/client/actionclient_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ var _ = Describe("ActionClient", func() {
470470
}
471471
patch, patchType, err := createPatch(o1, o2)
472472
Expect(err).To(BeNil())
473-
Expect(string(patch)).To(Equal(`{}`))
473+
Expect(patch).To(BeNil())
474474
Expect(patchType).To(Equal(apitypes.StrategicMergePatchType))
475475
})
476476
It("replaces incorrect fields in core types", func() {
@@ -511,7 +511,7 @@ var _ = Describe("ActionClient", func() {
511511
}
512512
patch, patchType, err := createPatch(o1, o2)
513513
Expect(err).To(BeNil())
514-
Expect(string(patch)).To(Equal(`{}`))
514+
Expect(patch).To(BeNil())
515515
Expect(patchType).To(Equal(apitypes.StrategicMergePatchType))
516516
})
517517
})

0 commit comments

Comments
 (0)