Skip to content

Commit ca8c49d

Browse files
committed
refactor(kubeclient): simplify node patch result
Return only whether a write occurred because production callers do not consume the updated Node object. Signed-off-by: Ajay Mishra <ajmishra@nvidia.com>
1 parent 1b642a3 commit ca8c49d

3 files changed

Lines changed: 23 additions & 19 deletions

File tree

commons/pkg/kubeclient/nodepatch.go

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,13 @@ func (p *NodePatcher) Patch(
4747
nodeName string,
4848
cached *v1.Node,
4949
mutate func(*v1.Node) error,
50-
) (*v1.Node, bool, error) {
50+
) (bool, error) {
5151
current, err := p.currentNode(ctx, nodes, nodeName, cached)
5252
if err != nil {
53-
return nil, false, err
53+
return false, err
5454
}
5555

56-
var (
57-
updated *v1.Node
58-
changed bool
59-
)
56+
changed := false
6057

6158
err = retry.OnError(nodePatchBackoff(), isRetryableNodePatchError, func() error {
6259
desired := current.DeepCopy()
@@ -71,11 +68,10 @@ func (p *NodePatcher) Patch(
7168
}
7269

7370
if patch == nil {
74-
updated = current
7571
return nil
7672
}
7773

78-
updated, err = nodes.Patch(ctx, nodeName, types.MergePatchType, patch, metav1.PatchOptions{})
74+
updated, err := nodes.Patch(ctx, nodeName, types.MergePatchType, patch, metav1.PatchOptions{})
7975
if err == nil {
8076
p.pendingVersions.Store(nodeName, updated.ResourceVersion)
8177

@@ -98,10 +94,10 @@ func (p *NodePatcher) Patch(
9894
return fmt.Errorf("patch node %q: %w", nodeName, err)
9995
})
10096
if err != nil {
101-
return nil, false, err
97+
return false, err
10298
}
10399

104-
return updated, changed, nil
100+
return changed, nil
105101
}
106102

107103
func (p *NodePatcher) currentNode(

commons/pkg/kubeclient/nodepatch_test.go

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func TestNodePatcher_CachedNode_UsesPatchAndSkipsNoOp(t *testing.T) {
5050
}
5151

5252
clientset.ClearActions()
53-
updated, changed, err := patcher.Patch(
53+
changed, err := patcher.Patch(
5454
context.Background(),
5555
clientset.CoreV1().Nodes(),
5656
current.Name,
@@ -64,8 +64,10 @@ func TestNodePatcher_CachedNode_UsesPatchAndSkipsNoOp(t *testing.T) {
6464
require.True(t, ok)
6565
assert.JSONEq(t, `{"metadata":{"labels":{"b":"2"}}}`, string(action.GetPatch()))
6666

67+
updated, err := clientset.CoreV1().Nodes().Get(t.Context(), current.Name, metav1.GetOptions{})
68+
require.NoError(t, err)
6769
clientset.ClearActions()
68-
_, changed, err = patcher.Patch(
70+
changed, err = patcher.Patch(
6971
context.Background(),
7072
clientset.CoreV1().Nodes(),
7173
current.Name,
@@ -82,7 +84,7 @@ func TestNodePatcher_PreviousWriteNotInCache_ReadsLiveNode(t *testing.T) {
8284
clientset := fake.NewSimpleClientset(current.DeepCopy())
8385
var patcher NodePatcher
8486

85-
updated, _, err := patcher.Patch(
87+
_, err := patcher.Patch(
8688
context.Background(),
8789
clientset.CoreV1().Nodes(),
8890
current.Name,
@@ -97,7 +99,7 @@ func TestNodePatcher_PreviousWriteNotInCache_ReadsLiveNode(t *testing.T) {
9799
stale := current.DeepCopy()
98100
stale.ResourceVersion = "stale"
99101
clientset.ClearActions()
100-
_, changed, err := patcher.Patch(
102+
changed, err := patcher.Patch(
101103
context.Background(),
102104
clientset.CoreV1().Nodes(),
103105
current.Name,
@@ -108,6 +110,9 @@ func TestNodePatcher_PreviousWriteNotInCache_ReadsLiveNode(t *testing.T) {
108110
assert.False(t, changed)
109111
require.Len(t, clientset.Actions(), 1)
110112
assert.Equal(t, "get", clientset.Actions()[0].GetVerb())
113+
114+
updated, err := clientset.CoreV1().Nodes().Get(t.Context(), current.Name, metav1.GetOptions{})
115+
require.NoError(t, err)
111116
assert.Equal(t, "2", updated.Labels["b"])
112117
}
113118

@@ -129,7 +134,7 @@ func TestNodePatcher_LiveReadFailure_PreservesPendingVersion(t *testing.T) {
129134
return false, nil, nil
130135
})
131136

132-
_, _, err := patcher.Patch(
137+
_, err := patcher.Patch(
133138
context.Background(),
134139
clientset.CoreV1().Nodes(),
135140
current.Name,
@@ -139,7 +144,7 @@ func TestNodePatcher_LiveReadFailure_PreservesPendingVersion(t *testing.T) {
139144
require.ErrorIs(t, err, assert.AnError)
140145
assert.ErrorContains(t, err, `refresh node "node-1" while pending write is not in cache`)
141146

142-
_, changed, err := patcher.Patch(
147+
changed, err := patcher.Patch(
143148
context.Background(),
144149
clientset.CoreV1().Nodes(),
145150
current.Name,
@@ -173,7 +178,7 @@ func TestNodePatcher_Conflict_RefreshesLiveNodeBeforeRetry(t *testing.T) {
173178
})
174179

175180
var patcher NodePatcher
176-
updated, changed, err := patcher.Patch(
181+
changed, err := patcher.Patch(
177182
context.Background(),
178183
clientset.CoreV1().Nodes(),
179184
cached.Name,
@@ -186,6 +191,9 @@ func TestNodePatcher_Conflict_RefreshesLiveNodeBeforeRetry(t *testing.T) {
186191
require.NoError(t, err)
187192
assert.True(t, changed)
188193
assert.Equal(t, 2, patchAttempts)
194+
195+
updated, err := clientset.CoreV1().Nodes().Get(t.Context(), cached.Name, metav1.GetOptions{})
196+
require.NoError(t, err)
189197
assert.Equal(t, "preserved", updated.Labels["concurrent"])
190198
assert.Equal(t, "true", updated.Labels["desired"])
191199
}

labeler/pkg/labeler/labeler.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -789,7 +789,7 @@ func (l *Labeler) updateNodeLabelsForPod(nodeName, expectedDCGMVersion, expected
789789
return nil
790790
}
791791

792-
_, _, err = l.nodePatcher.Patch(
792+
_, err = l.nodePatcher.Patch(
793793
l.ctx,
794794
l.clientset.CoreV1().Nodes(),
795795
nodeName,
@@ -850,7 +850,7 @@ func (l *Labeler) updateNodeLabelsAttempt(nodeName string) error {
850850
return fmt.Errorf("failed to calculate desired node labels for %s: %w", nodeName, err)
851851
}
852852

853-
_, _, err = l.nodePatcher.Patch(
853+
_, err = l.nodePatcher.Patch(
854854
l.ctx,
855855
l.clientset.CoreV1().Nodes(),
856856
nodeName,

0 commit comments

Comments
 (0)