Skip to content

Commit 5d6f77a

Browse files
committed
fix: check k8s-api error for response before assuming it's there
1 parent 0fa06a7 commit 5d6f77a

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

src/supervisor/kuberenetes-api-wrappers.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ export async function retryKubernetesApiRequest(func: IKubernetesApiFunction) {
1212
try {
1313
return await func();
1414
} catch (err) {
15+
if (!(err.response)) {
16+
throw err;
17+
}
18+
1519
const response = err.response;
1620
if (response.statusCode !== 429) {
1721
throw err;

test/unit/supervisor/kubernetes-api-wrappers.test.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,3 +100,20 @@ tap.test('retryKubernetesApiRequest for non-retryable errors', async (t) => {
100100
);
101101
t.equals(failures, 1, 'did not retry even once for non-retryable error code');
102102
});
103+
104+
tap.test('retryKubernetesApiRequest for errors without response', async (t) => {
105+
const errorWithoutResponse = 'there\'s butter on my face!';
106+
107+
let failures = 0;
108+
const functionThatFails = () => {
109+
failures +=1;
110+
return Promise.reject(new Error(errorWithoutResponse));
111+
};
112+
113+
t.rejects(
114+
() => kubernetesApiWrappers.retryKubernetesApiRequest(functionThatFails),
115+
new Error(errorWithoutResponse),
116+
'errors without a response property are immediately rethrown',
117+
);
118+
t.equals(failures, 1, 'did not retry even once for non-retryable error code');
119+
});

0 commit comments

Comments
 (0)