Skip to content

Commit 59edcca

Browse files
committed
[server] allow user custom global timeout
1 parent 6ab9dc4 commit 59edcca

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

components/server/src/workspace/workspace-starter.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ import {
5757
Project,
5858
GitpodServer,
5959
IDESettings,
60+
WorkspaceTimeoutDuration,
6061
} from "@gitpod/gitpod-protocol";
6162
import { IAnalyticsWriter } from "@gitpod/gitpod-protocol/lib/analytics";
6263
import { log } from "@gitpod/gitpod-protocol/lib/util/logging";
@@ -1437,6 +1438,7 @@ export class WorkspaceStarter {
14371438
lastValidWorkspaceInstanceId,
14381439
);
14391440
const userTimeoutPromise = this.entitlementService.getDefaultWorkspaceTimeout(user, new Date());
1441+
const allowSetTimeoutPromise = this.entitlementService.maySetTimeout(user, new Date());
14401442

14411443
let featureFlags = instance.configuration!.featureFlags || [];
14421444

@@ -1467,7 +1469,19 @@ export class WorkspaceStarter {
14671469
spec.setClass(instance.workspaceClass!);
14681470

14691471
if (workspace.type === "regular") {
1470-
spec.setTimeout(await userTimeoutPromise);
1472+
const [defaultTimeout, allowSetTimeout] = await Promise.all([userTimeoutPromise, allowSetTimeoutPromise]);
1473+
spec.setTimeout(defaultTimeout);
1474+
if (allowSetTimeout) {
1475+
if (user.additionalData?.workspaceTimeout) {
1476+
try {
1477+
let timeout = WorkspaceTimeoutDuration.validate(user.additionalData?.workspaceTimeout);
1478+
spec.setTimeout(timeout);
1479+
} catch (err) {}
1480+
}
1481+
if (user.additionalData?.disabledClosedTimeout === true) {
1482+
spec.setClosedTimeout("0");
1483+
}
1484+
}
14711485
}
14721486
spec.setAdmission(admissionLevel);
14731487
const sshKeys = await this.userDB.trace(traceCtx).getSSHPublicKeys(user.id);

0 commit comments

Comments
 (0)