Skip to content

Commit c88286b

Browse files
openshift-cherrypick-robotEric Stroczynski
and
Eric Stroczynski
authored
[v1.8.x] fix(helm-operator): do not send empty patch requests to kube apiserver (#4971)
Adding a check to filter out empty patch requests from an empty map out of the 3-way merge. Signed-off-by: Cheuk Lam <[email protected]> Co-authored-by: Eric Stroczynski <[email protected]>
1 parent d3bd87c commit c88286b

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
entries:
2+
- description: >
3+
For helm-based operators, empty patch requests generated from the 3-way merge are filtered to avoid unnecessary requests to the kube apiserver.
4+
kind: bugfix

internal/helm/release/manager.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,15 @@ func createPatch(existing runtime.Object, expected *resource.Info) ([]byte, apit
322322
}
323323

324324
patch, err := strategicpatch.CreateThreeWayMergePatch(expectedJSON, expectedJSON, existingJSON, patchMeta, true)
325-
return patch, apitypes.StrategicMergePatchType, err
325+
if err != nil {
326+
return nil, apitypes.StrategicMergePatchType, err
327+
}
328+
// An empty patch could be in the form of "{}" which represents an empty map out of the 3-way merge;
329+
// filter them out here too to avoid sending the apiserver empty patch requests.
330+
if len(patch) == 0 || bytes.Equal(patch, []byte("{}")) {
331+
return nil, apitypes.StrategicMergePatchType, nil
332+
}
333+
return patch, apitypes.StrategicMergePatchType, nil
326334
}
327335

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

internal/helm/release/manager_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ func TestManagerGenerateStrategicMergePatch(t *testing.T) {
164164
o2: newTestDeployment([]v1.Container{
165165
{Name: "test1", LivenessProbe: nil},
166166
}),
167-
patch: `{}`,
167+
patch: ``,
168168
patchType: apitypes.StrategicMergePatchType,
169169
},
170170
{
@@ -197,7 +197,7 @@ func TestManagerGenerateStrategicMergePatch(t *testing.T) {
197197
},
198198
Spec: appsv1.DeploymentSpec{},
199199
},
200-
patch: `{}`,
200+
patch: ``,
201201
patchType: apitypes.StrategicMergePatchType,
202202
},
203203
}

0 commit comments

Comments
 (0)