Skip to content

Commit c512bb1

Browse files
committed
fix(kubeclient): add context to node patch errors
Identify the failed node operation while preserving wrapped Kubernetes errors for retry classification and callers. Signed-off-by: Ajay Mishra <ajmishra@nvidia.com>
1 parent ad268d4 commit c512bb1

2 files changed

Lines changed: 17 additions & 9 deletions

File tree

commons/pkg/kubeclient/nodepatch.go

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,12 @@ func (p *NodePatcher) Patch(
6262
desired := current.DeepCopy()
6363

6464
if err := mutate(desired); err != nil {
65-
return err
65+
return fmt.Errorf("mutate node %q: %w", nodeName, err)
6666
}
6767

6868
patch, err := NodeMergePatch(current, desired)
6969
if err != nil {
70-
return err
70+
return fmt.Errorf("build merge patch for node %q: %w", nodeName, err)
7171
}
7272

7373
if patch == nil {
@@ -89,13 +89,13 @@ func (p *NodePatcher) Patch(
8989

9090
current, err = nodes.Get(ctx, nodeName, metav1.GetOptions{})
9191
if err != nil {
92-
return err
92+
return fmt.Errorf("refresh node %q after patch conflict: %w", nodeName, err)
9393
}
9494

95-
return patchErr
95+
return fmt.Errorf("patch node %q: %w", nodeName, patchErr)
9696
}
9797

98-
return err
98+
return fmt.Errorf("patch node %q: %w", nodeName, err)
9999
})
100100
if err != nil {
101101
return nil, false, err
@@ -116,7 +116,12 @@ func (p *NodePatcher) currentNode(
116116
return cached, nil
117117
}
118118

119-
return nodes.Get(ctx, nodeName, metav1.GetOptions{})
119+
current, err := nodes.Get(ctx, nodeName, metav1.GetOptions{})
120+
if err != nil {
121+
return nil, fmt.Errorf("get node %q from API server: %w", nodeName, err)
122+
}
123+
124+
return current, nil
120125
}
121126

122127
writtenVersion, _ := writtenVersionValue.(string)
@@ -127,11 +132,13 @@ func (p *NodePatcher) currentNode(
127132
}
128133

129134
current, err := nodes.Get(ctx, nodeName, metav1.GetOptions{})
130-
if err == nil {
131-
p.pendingVersions.CompareAndDelete(nodeName, writtenVersionValue)
135+
if err != nil {
136+
return nil, fmt.Errorf("refresh node %q while pending write is not in cache: %w", nodeName, err)
132137
}
133138

134-
return current, err
139+
p.pendingVersions.CompareAndDelete(nodeName, writtenVersionValue)
140+
141+
return current, nil
135142
}
136143

137144
func nodePatchBackoff() wait.Backoff {

commons/pkg/kubeclient/nodepatch_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ func TestNodePatcher_LiveReadFailure_PreservesPendingVersion(t *testing.T) {
137137
func(*v1.Node) error { return nil },
138138
)
139139
require.ErrorIs(t, err, assert.AnError)
140+
assert.ErrorContains(t, err, `refresh node "node-1" while pending write is not in cache`)
140141

141142
_, changed, err := patcher.Patch(
142143
context.Background(),

0 commit comments

Comments
 (0)