Skip to content

Commit e71bf0b

Browse files
committed
fixup! Attempt to start list watch from last resourceVersion
1 parent e7f758e commit e71bf0b

File tree

3 files changed

+19
-12
lines changed

3 files changed

+19
-12
lines changed

src/cache.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ export class ListWatch<T extends KubernetesObject> implements ObjectCache<T>, In
120120

121121
private async doneHandler(err: any): Promise<any> {
122122
this._stop();
123-
if (err?.message === 'Gone') {
123+
if (err && err.statusCode === 410) {
124124
this.resourceVersion = '';
125125
} else if (err) {
126126
this.callbackCache[ERROR].forEach((elt: ErrorCallback) => elt(err));
@@ -131,12 +131,6 @@ export class ListWatch<T extends KubernetesObject> implements ObjectCache<T>, In
131131
return;
132132
}
133133
this.callbackCache[CONNECT].forEach((elt: ErrorCallback) => elt(undefined));
134-
const queryParams = {
135-
resourceVersion: this.resourceVersion
136-
} as {
137-
resourceVersion: string | undefined;
138-
labelSelector: string | undefined;
139-
};
140134
if (!this.resourceVersion) {
141135
const promise = this.listFn();
142136
const result = await promise;
@@ -151,8 +145,14 @@ export class ListWatch<T extends KubernetesObject> implements ObjectCache<T>, In
151145
}
152146
});
153147
this.addOrUpdateItems(list.items);
154-
queryParams.resourceVersion = list.metadata!.resourceVersion;
148+
this.resourceVersion = list.metadata!.resourceVersion!;
155149
}
150+
const queryParams = {
151+
resourceVersion: this.resourceVersion,
152+
} as {
153+
resourceVersion: string | undefined;
154+
labelSelector: string | undefined;
155+
};
156156
if (this.labelSelector !== undefined) {
157157
queryParams.labelSelector = ObjectSerializer.serialize(this.labelSelector, 'string');
158158
}

src/cache_test.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,9 @@ describe('ListWatchCache', () => {
197197
} as V1ObjectMeta,
198198
} as V1Namespace);
199199

200-
await doneHandler(null);
200+
const error = new Error('Gone') as Error & { statusCode: number | undefined };
201+
error.statusCode = 410;
202+
await doneHandler(error);
201203
expect(cache.list().length, 'all namespace list').to.equal(1);
202204
expect(cache.list('default').length, 'default namespace list').to.equal(1);
203205
expect(cache.list('other'), 'other namespace list').to.be.undefined;
@@ -570,7 +572,9 @@ describe('ListWatchCache', () => {
570572
});
571573
});
572574
listObj.items = list2;
573-
doneHandler(null);
575+
const error = new Error('Gone') as Error & { statusCode: number | undefined };
576+
error.statusCode = 410;
577+
await doneHandler(error);
574578
await promise;
575579
expect(addObjects).to.deep.equal(list);
576580
expect(updateObjects).to.deep.equal(list2);
@@ -1172,7 +1176,8 @@ describe('ListWatchCache', () => {
11721176

11731177
const [, , , doneHandler] = mock.capture(fakeWatch.watch).last();
11741178

1175-
const error = new Error('Gone');
1179+
const error = new Error('Gone') as Error & { statusCode: number | undefined };
1180+
error.statusCode = 410;
11761181
await doneHandler(error);
11771182

11781183
mock.verify(

src/watch.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ export class DefaultRequest implements RequestInterface {
4747
if (resp.statusCode === 200) {
4848
req.resume();
4949
} else {
50-
req.emit('error', new Error(resp.statusMessage));
50+
const error = new Error(resp.statusMessage) as Error & { statusCode: number | undefined };
51+
error.statusCode = resp.statusCode;
52+
req.emit('error', error);
5153
}
5254
});
5355
return req;

0 commit comments

Comments
 (0)