Skip to content

Commit b3be5bc

Browse files
committed
v7
1 parent dfb8ec6 commit b3be5bc

File tree

3 files changed

+22
-4
lines changed

3 files changed

+22
-4
lines changed

components/server/ee/src/workspace/workspace-factory.ts

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import * as uuidv4 from 'uuid/v4';
88
import { WorkspaceFactory } from "../../../src/workspace/workspace-factory";
99
import { injectable, inject } from "inversify";
1010
import { TraceContext } from "@gitpod/gitpod-protocol/lib/util/tracing";
11-
import { User, StartPrebuildContext, Workspace, CommitContext, PrebuiltWorkspaceContext, WorkspaceContext, WithSnapshot, WithPrebuild } from "@gitpod/gitpod-protocol";
11+
import { User, StartPrebuildContext, Workspace, CommitContext, PrebuiltWorkspaceContext, WorkspaceContext, WithSnapshot, WithPrebuild, TaskConfig } from "@gitpod/gitpod-protocol";
1212
import { log } from '@gitpod/gitpod-protocol/lib/util/logging';
1313
import { LicenseEvaluator } from '@gitpod/licensor/lib';
1414
import { Feature } from '@gitpod/licensor/lib/api';
@@ -66,21 +66,37 @@ export class WorkspaceFactoryEE extends WorkspaceFactory {
6666
if (!parentPrebuild) {
6767
continue;
6868
}
69-
log.debug(`Considering parent prebuild for ${commitContext.revision}`, parentPrebuild);
7069
if (parentPrebuild.state !== 'available') {
7170
continue;
7271
}
72+
log.debug(`Considering parent prebuild for ${commitContext.revision}`, parentPrebuild);
7373
const buildWorkspace = await this.db.trace({span}).findById(parentPrebuild.buildWorkspaceId);
7474
if (!buildWorkspace) {
7575
continue;
7676
}
7777
if (!!buildWorkspace.basedOnPrebuildId) {
7878
continue;
7979
}
80-
if (buildWorkspace.imageSource !== imageSource) {
80+
if (JSON.stringify(imageSource) !== JSON.stringify(buildWorkspace.imageSource)) {
81+
log.debug(`Skipping parent prebuild: Outdated image`, {
82+
imageSource,
83+
parentImageSource: buildWorkspace.imageSource,
84+
});
8185
continue;
8286
}
83-
if (buildWorkspace.config.tasks !== config.tasks) {
87+
const filterPrebuildTasks = (tasks: TaskConfig[] = []) => (tasks
88+
.map(task => Object.keys(task)
89+
.filter(key => ['before', 'init', 'prebuild'].includes(key))
90+
// @ts-ignore
91+
.reduce((obj, key) => ({ ...obj, [key]: task[key] }), {}))
92+
.filter(task => Object.keys(task).length > 0));
93+
const prebuildTasks = filterPrebuildTasks(config.tasks);
94+
const parentPrebuildTasks = filterPrebuildTasks(buildWorkspace.config.tasks);
95+
if (JSON.stringify(prebuildTasks) !== JSON.stringify(parentPrebuildTasks)) {
96+
log.debug(`Skipping parent prebuild: Outdated prebuild tasks`, {
97+
prebuildTasks,
98+
parentPrebuildTasks,
99+
});
84100
continue;
85101
}
86102
const incrementalPrebuildContext: PrebuiltWorkspaceContext = {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,7 @@ export class WorkspaceStarter {
596596
}
597597
}
598598
const initializerPromise = this.createInitializer(traceCtx, workspace, workspace.context, user);
599+
// TODO: Longer timeout for full/parent prebuild? (if incremental prebuilds are enabled)
599600
const userTimeoutPromise = this.userService.getDefaultWorkspaceTimeout(user);
600601

601602
const featureFlags = instance.configuration!.featureFlags || [];

components/ws-manager/pkg/manager/status.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -732,6 +732,7 @@ func (m *Manager) isWorkspaceTimedOut(wso workspaceObjects) (reason string, err
732732

733733
case api.WorkspacePhase_RUNNING:
734734
if wso.IsWorkspaceHeadless() {
735+
// TODO(janx): Longer-running parent prebuilds. Maybe honor `customTimeoutAnnotation` for headless workspaces too?
735736
return decide(start, m.Config.Timeouts.HeadlessWorkspace, activityRunningHeadless)
736737
} else if lastActivity == nil {
737738
// the workspace is up and running, but the user has never produced any activity

0 commit comments

Comments
 (0)