Skip to content

Commit 17cea1b

Browse files
authored
Merge pull request #2224 from brendandburns/listErr
Fix a bug where an error on request wouldn't propogate.
2 parents ec09910 + 8632d50 commit 17cea1b

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

src/cache.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
ObjectCallback,
1111
UPDATE,
1212
} from './informer.js';
13-
import { KubernetesObject } from './types.js';
13+
import { KubernetesObject, KubernetesListObject } from './types.js';
1414
import { ObjectSerializer } from './serializer.js';
1515
import { Watch } from './watch.js';
1616

@@ -143,8 +143,14 @@ export class ListWatch implements ObjectCache, In
143143
}
144144
this.callbackCache[CONNECT].forEach((elt: ErrorCallback) => elt(undefined));
145145
if (!this.resourceVersion) {
146-
const promise = this.listFn();
147-
const list = await promise;
146+
let list: KubernetesListObject<T>;
147+
try {
148+
const promise = this.listFn();
149+
list = await promise;
150+
} catch (err) {
151+
this.callbackCache[ERROR].forEach((elt: ErrorCallback) => elt(err));
152+
return;
153+
}
148154
this.objects = deleteItems(this.objects, list.items, this.callbackCache[DELETE].slice());
149155
this.addOrUpdateItems(list.items);
150156
this.resourceVersion = list.metadata!.resourceVersion || '';

src/cache_test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1460,4 +1460,25 @@ describe('delete items', () => {
14601460

14611461
strictEqual(await connectPromise, true);
14621462
});
1463+
1464+
it('should correctly handle errors in the initial list', async () => {
1465+
const fake = mock.mock(Watch);
1466+
const requestErr = Error('request failed');
1467+
const listFn: ListPromise<V1Namespace> = function (): Promise<V1NamespaceList> {
1468+
return new Promise<V1NamespaceList>((resolve, reject) => {
1469+
reject(requestErr);
1470+
});
1471+
};
1472+
const lw = new ListWatch('/some/path', fake, listFn);
1473+
let gotErr: Error | null = null;
1474+
const errCalled = new Promise<void>((resolve, reject) => {
1475+
lw.on('error', (err) => {
1476+
gotErr = err;
1477+
resolve();
1478+
});
1479+
});
1480+
await lw.start();
1481+
await errCalled;
1482+
strictEqual(gotErr, requestErr);
1483+
});
14631484
});

0 commit comments

Comments
 (0)