1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Fix: Close current connections to LensProxy on quit

- This speeds up quitting

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2023-04-05 11:08:11 -04:00
parent 2c4a7ecfb4
commit 6c91224b17
3 changed files with 28 additions and 5 deletions

20
package-lock.json generated
View File

@ -10240,6 +10240,15 @@
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
"integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" "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": { "node_modules/@types/tar": {
"version": "6.1.4", "version": "6.1.4",
"resolved": "https://registry.npmjs.org/@types/tar/-/tar-6.1.4.tgz", "resolved": "https://registry.npmjs.org/@types/tar/-/tar-6.1.4.tgz",
@ -34609,6 +34618,15 @@
"node": ">= 0.4" "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": { "node_modules/stream-buffers": {
"version": "3.0.2", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz",
@ -38380,6 +38398,7 @@
"rfc6902": "^5.0.1", "rfc6902": "^5.0.1",
"selfsigned": "^2.1.1", "selfsigned": "^2.1.1",
"semver": "^7.3.8", "semver": "^7.3.8",
"stoppable": "^1.1.0",
"tar": "^6.1.13", "tar": "^6.1.13",
"tcp-port-used": "^1.0.2", "tcp-port-used": "^1.0.2",
"tempy": "1.0.1", "tempy": "1.0.1",
@ -38440,6 +38459,7 @@
"@types/react-window": "^1.8.5", "@types/react-window": "^1.8.5",
"@types/readable-stream": "^2.3.13", "@types/readable-stream": "^2.3.13",
"@types/semver": "^7.3.13", "@types/semver": "^7.3.13",
"@types/stoppable": "^1.1.1",
"@types/tar": "^6.1.4", "@types/tar": "^6.1.4",
"@types/tcp-port-used": "^1.0.1", "@types/tcp-port-used": "^1.0.1",
"@types/triple-beam": "^1.3.2", "@types/triple-beam": "^1.3.2",

View File

@ -168,6 +168,7 @@
"rfc6902": "^5.0.1", "rfc6902": "^5.0.1",
"selfsigned": "^2.1.1", "selfsigned": "^2.1.1",
"semver": "^7.3.8", "semver": "^7.3.8",
"stoppable": "^1.1.0",
"tar": "^6.1.13", "tar": "^6.1.13",
"tcp-port-used": "^1.0.2", "tcp-port-used": "^1.0.2",
"tempy": "1.0.1", "tempy": "1.0.1",
@ -228,6 +229,7 @@
"@types/react-window": "^1.8.5", "@types/react-window": "^1.8.5",
"@types/readable-stream": "^2.3.13", "@types/readable-stream": "^2.3.13",
"@types/semver": "^7.3.13", "@types/semver": "^7.3.13",
"@types/stoppable": "^1.1.1",
"@types/tar": "^6.1.4", "@types/tar": "^6.1.4",
"@types/tcp-port-used": "^1.0.1", "@types/tcp-port-used": "^1.0.1",
"@types/triple-beam": "^1.3.2", "@types/triple-beam": "^1.3.2",

View File

@ -18,6 +18,7 @@ import type { EmitAppEvent } from "../../common/app-event-bus/emit-event.injecta
import type { Logger } from "../../common/logger"; import type { Logger } from "../../common/logger";
import type { SelfSignedCert } from "selfsigned"; import type { SelfSignedCert } from "selfsigned";
import type { KubeAuthProxyServer } from "../cluster/kube-auth-proxy-server.injectable"; import type { KubeAuthProxyServer } from "../cluster/kube-auth-proxy-server.injectable";
import stoppable from "stoppable";
export type GetClusterForRequest = (req: http.IncomingMessage) => Cluster | undefined; export type GetClusterForRequest = (req: http.IncomingMessage) => Cluster | undefined;
export type ServerIncomingMessage = SetRequired<http.IncomingMessage, "url" | "method">; export type ServerIncomingMessage = SetRequired<http.IncomingMessage, "url" | "method">;
@ -65,14 +66,14 @@ const disallowedPorts = new Set([
]); ]);
export class LensProxy { export class LensProxy {
protected proxyServer: https.Server; protected readonly proxyServer: https.Server & stoppable.WithStop;
protected closed = false; protected closed = false;
protected retryCounters = new Map<string, number>(); protected readonly retryCounters = new Map<string, number>();
constructor(private readonly dependencies: Dependencies) { constructor(private readonly dependencies: Dependencies) {
this.configureProxy(dependencies.proxy); this.configureProxy(dependencies.proxy);
this.proxyServer = https.createServer( this.proxyServer = stoppable(https.createServer(
{ {
key: dependencies.certificate.private, key: dependencies.certificate.private,
cert: dependencies.certificate.cert, cert: dependencies.certificate.cert,
@ -80,7 +81,7 @@ export class LensProxy {
(req, res) => { (req, res) => {
this.handleRequest(req as ServerIncomingMessage, res); this.handleRequest(req as ServerIncomingMessage, res);
}, },
); ), 500);
this.proxyServer this.proxyServer
.on("upgrade", (req: ServerIncomingMessage, socket: net.Socket, head: Buffer) => { .on("upgrade", (req: ServerIncomingMessage, socket: net.Socket, head: Buffer) => {
@ -175,7 +176,7 @@ export class LensProxy {
this.dependencies.logger.info("[LENS-PROXY]: Closing server"); this.dependencies.logger.info("[LENS-PROXY]: Closing server");
return new Promise<void>((resolve) => { return new Promise<void>((resolve) => {
this.proxyServer.close(() => resolve()); this.proxyServer.stop(() => resolve());
}); });
} }