diff --git a/src/common/k8s-api/__tests__/kube-api.test.ts b/src/common/k8s-api/__tests__/kube-api.test.ts index 9244d5e6ab..4f67ed1401 100644 --- a/src/common/k8s-api/__tests__/kube-api.test.ts +++ b/src/common/k8s-api/__tests__/kube-api.test.ts @@ -592,7 +592,7 @@ describe("KubeApi", () => { it("requests the watch", () => { expect(fetchMock.mock.lastCall).toMatchObject([ - "http://127.0.0.1:9999/api-kube/api/v1/namespaces/kube-system/pods?watch=1&resourceVersion=", + "http://127.0.0.1:9999/api-kube/api/v1/namespaces/kube-system/pods?watch=1&resourceVersion=&timeoutSeconds=600", { headers: { "content-type": "application/json", @@ -606,7 +606,7 @@ describe("KubeApi", () => { beforeEach(async () => { await fetchMock.resolveSpecific( ([url, init]) => { - const isMatch = url === "http://127.0.0.1:9999/api-kube/api/v1/namespaces/kube-system/pods?watch=1&resourceVersion="; + const isMatch = url === "http://127.0.0.1:9999/api-kube/api/v1/namespaces/kube-system/pods?watch=1&resourceVersion=&timeoutSeconds=600"; if (isMatch) { init?.signal?.addEventListener("abort", () => { @@ -616,7 +616,7 @@ describe("KubeApi", () => { return isMatch; }, - createMockResponseFromStream("http://127.0.0.1:9999/api-kube/api/v1/namespaces/kube-system/pods?watch=1&resourceVersion=", stream), + createMockResponseFromStream("http://127.0.0.1:9999/api-kube/api/v1/namespaces/kube-system/pods?watch=1&resourceVersion=&timeoutSeconds=600", stream), ); }); @@ -688,7 +688,7 @@ describe("KubeApi", () => { it("requests the watch", () => { expect(fetchMock.mock.lastCall).toMatchObject([ - "http://127.0.0.1:9999/api-kube/api/v1/namespaces/kube-system/pods?watch=1&resourceVersion=", + "http://127.0.0.1:9999/api-kube/api/v1/namespaces/kube-system/pods?watch=1&resourceVersion=&timeoutSeconds=600", { headers: { "content-type": "application/json", @@ -702,7 +702,7 @@ describe("KubeApi", () => { beforeEach(async () => { await fetchMock.resolveSpecific( ([url, init]) => { - const isMatch = url === "http://127.0.0.1:9999/api-kube/api/v1/namespaces/kube-system/pods?watch=1&resourceVersion="; + const isMatch = url === "http://127.0.0.1:9999/api-kube/api/v1/namespaces/kube-system/pods?watch=1&resourceVersion=&timeoutSeconds=600"; if (isMatch) { init?.signal?.addEventListener("abort", () => { @@ -712,7 +712,7 @@ describe("KubeApi", () => { return isMatch; }, - createMockResponseFromStream("http://127.0.0.1:9999/api-kube/api/v1/namespaces/kube-system/pods?watch=1&resourceVersion=", stream), + createMockResponseFromStream("http://127.0.0.1:9999/api-kube/api/v1/namespaces/kube-system/pods?watch=1&resourceVersion=&timeoutSeconds=600", stream), ); }); diff --git a/src/common/k8s-api/kube-api.ts b/src/common/k8s-api/kube-api.ts index 593a1de38c..7ca2995906 100644 --- a/src/common/k8s-api/kube-api.ts +++ b/src/common/k8s-api/kube-api.ts @@ -14,7 +14,7 @@ import byline from "byline"; import type { IKubeWatchEvent } from "./kube-watch-event"; import type { KubeJsonApiData, KubeJsonApi } from "./kube-json-api"; import type { Disposer } from "../utils"; -import { setTimeoutFor, isDefined, noop, WrappedAbortController } from "../utils"; +import { isDefined, noop, WrappedAbortController } from "../utils"; import type { RequestInit, Response } from "node-fetch"; import type { Patch } from "rfc6902"; import assert from "assert"; @@ -639,7 +639,7 @@ export class KubeApi< namespace, callback = noop as KubeApiWatchCallback, retry = false, - timeout, + timeout = 600, watchId = `${this.kind.toLowerCase()}-${this.watchId++}`, } = opts ?? {}; @@ -651,8 +651,6 @@ export class KubeApi< clearTimeout(timedRetry); }); - setTimeoutFor(abortController, 600 * 1000); - const requestParams = timeout ? { query: { timeoutSeconds: timeout }} : {}; const watchUrl = this.getWatchUrl(namespace); const responsePromise = this.request.getResponse(watchUrl, requestParams, { @@ -695,8 +693,10 @@ export class KubeApi< }, timeout * 1000 * 1.1); } - if (!response.body) { - this.dependencies.logger.error(`[KUBE-API]: watch (${watchId}) did not return a body`); + if (!response.body || !response.body.readable) { + if (!response.body) { + this.dependencies.logger.warn(`[KUBE-API]: watch (${watchId}) did not return a body`); + } requestRetried = true; clearTimeout(timedRetry);