From 6c91224b17b6fdece4c5edd2727560a1c7547ba3 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Wed, 5 Apr 2023 11:08:11 -0400 Subject: [PATCH] Fix: Close current connections to LensProxy on quit - This speeds up quitting Signed-off-by: Sebastian Malton --- package-lock.json | 20 +++++++++++++++++++ packages/core/package.json | 2 ++ .../core/src/main/lens-proxy/lens-proxy.ts | 11 +++++----- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6309313309..2cf7804a82 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10240,6 +10240,15 @@ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, + "node_modules/@types/stoppable": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/stoppable/-/stoppable-1.1.1.tgz", + "integrity": "sha512-b8N+fCADRIYYrGZOcmOR8ZNBOqhktWTB/bMUl5LvGtT201QKJZOOH5UsFyI3qtteM6ZAJbJqZoBcLqqxKIwjhw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/tar": { "version": "6.1.4", "resolved": "https://registry.npmjs.org/@types/tar/-/tar-6.1.4.tgz", @@ -34609,6 +34618,15 @@ "node": ">= 0.4" } }, + "node_modules/stoppable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", + "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", + "engines": { + "node": ">=4", + "npm": ">=6" + } + }, "node_modules/stream-buffers": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", @@ -38380,6 +38398,7 @@ "rfc6902": "^5.0.1", "selfsigned": "^2.1.1", "semver": "^7.3.8", + "stoppable": "^1.1.0", "tar": "^6.1.13", "tcp-port-used": "^1.0.2", "tempy": "1.0.1", @@ -38440,6 +38459,7 @@ "@types/react-window": "^1.8.5", "@types/readable-stream": "^2.3.13", "@types/semver": "^7.3.13", + "@types/stoppable": "^1.1.1", "@types/tar": "^6.1.4", "@types/tcp-port-used": "^1.0.1", "@types/triple-beam": "^1.3.2", diff --git a/packages/core/package.json b/packages/core/package.json index 5896bef8f8..9d5407a7e1 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -168,6 +168,7 @@ "rfc6902": "^5.0.1", "selfsigned": "^2.1.1", "semver": "^7.3.8", + "stoppable": "^1.1.0", "tar": "^6.1.13", "tcp-port-used": "^1.0.2", "tempy": "1.0.1", @@ -228,6 +229,7 @@ "@types/react-window": "^1.8.5", "@types/readable-stream": "^2.3.13", "@types/semver": "^7.3.13", + "@types/stoppable": "^1.1.1", "@types/tar": "^6.1.4", "@types/tcp-port-used": "^1.0.1", "@types/triple-beam": "^1.3.2", diff --git a/packages/core/src/main/lens-proxy/lens-proxy.ts b/packages/core/src/main/lens-proxy/lens-proxy.ts index ce5a54bdf1..92624cdf44 100644 --- a/packages/core/src/main/lens-proxy/lens-proxy.ts +++ b/packages/core/src/main/lens-proxy/lens-proxy.ts @@ -18,6 +18,7 @@ import type { EmitAppEvent } from "../../common/app-event-bus/emit-event.injecta import type { Logger } from "../../common/logger"; import type { SelfSignedCert } from "selfsigned"; import type { KubeAuthProxyServer } from "../cluster/kube-auth-proxy-server.injectable"; +import stoppable from "stoppable"; export type GetClusterForRequest = (req: http.IncomingMessage) => Cluster | undefined; export type ServerIncomingMessage = SetRequired; @@ -65,14 +66,14 @@ const disallowedPorts = new Set([ ]); export class LensProxy { - protected proxyServer: https.Server; + protected readonly proxyServer: https.Server & stoppable.WithStop; protected closed = false; - protected retryCounters = new Map(); + protected readonly retryCounters = new Map(); constructor(private readonly dependencies: Dependencies) { this.configureProxy(dependencies.proxy); - this.proxyServer = https.createServer( + this.proxyServer = stoppable(https.createServer( { key: dependencies.certificate.private, cert: dependencies.certificate.cert, @@ -80,7 +81,7 @@ export class LensProxy { (req, res) => { this.handleRequest(req as ServerIncomingMessage, res); }, - ); + ), 500); this.proxyServer .on("upgrade", (req: ServerIncomingMessage, socket: net.Socket, head: Buffer) => { @@ -175,7 +176,7 @@ export class LensProxy { this.dependencies.logger.info("[LENS-PROXY]: Closing server"); return new Promise((resolve) => { - this.proxyServer.close(() => resolve()); + this.proxyServer.stop(() => resolve()); }); }