Skip to content

Commit ddd06f0

Browse files
committed
[bridge] Extracting updating of prebuilds into PrebuildUpdater
1 parent 8625b65 commit ddd06f0

File tree

5 files changed

+64
-23
lines changed

5 files changed

+64
-23
lines changed

components/ws-manager-bridge/ee/src/container-module.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
*/
66

77
import { ContainerModule } from "inversify";
8-
import { WorkspaceManagerBridgeEE } from "./bridge";
9-
import { WorkspaceManagerBridge } from "../../src/bridge";
8+
import { PrebuildUpdater } from "../../src/prebuild-updater";
9+
import { PrebuildUpdaterDB } from "./prebuild-updater-db";
1010

1111
export const containerModuleEE = new ContainerModule((bind, unbind, isBound, rebind) => {
12-
rebind(WorkspaceManagerBridge).to(WorkspaceManagerBridgeEE).inRequestScope();
12+
rebind(PrebuildUpdater).to(PrebuildUpdaterDB).inSingletonScope();
1313
});

components/ws-manager-bridge/ee/src/bridge.ts renamed to components/ws-manager-bridge/ee/src/prebuild-updater-db.ts

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,37 @@
11
/**
2-
* Copyright (c) 2020 Gitpod GmbH. All rights reserved.
2+
* Copyright (c) 2022 Gitpod GmbH. All rights reserved.
33
* Licensed under the Gitpod Enterprise Source Code License,
44
* See License.enterprise.txt in the project root folder.
55
*/
66

7-
import { WorkspaceManagerBridge } from "../../src/bridge";
87
import { inject, injectable } from "inversify";
98
import { TraceContext } from "@gitpod/gitpod-protocol/lib/util/tracing";
109
import { WorkspaceStatus, WorkspaceType } from "@gitpod/ws-manager/lib";
1110
import { HeadlessWorkspaceEvent } from "@gitpod/gitpod-protocol/lib/headless-workspace-log";
1211
import { WorkspaceInstance } from "@gitpod/gitpod-protocol";
1312
import { log, LogContext } from "@gitpod/gitpod-protocol/lib/util/logging";
1413
import { PrebuildStateMapper } from "../../src/prebuild-state-mapper";
14+
import { PrebuildUpdater } from "../../src/prebuild-updater";
15+
import { DBWithTracing, TracedWorkspaceDB } from "@gitpod/gitpod-db/lib/traced-db";
16+
import { WorkspaceDB } from "@gitpod/gitpod-db/lib/workspace-db";
17+
import { MessageBusIntegration } from "../../src/messagebus-integration";
18+
import { PrometheusMetricsExporter } from "../../src/prometheus-metrics-exporter";
1519

1620
@injectable()
17-
export class WorkspaceManagerBridgeEE extends WorkspaceManagerBridge {
21+
export class PrebuildUpdaterDB implements PrebuildUpdater {
1822
@inject(PrebuildStateMapper)
1923
protected readonly prebuildStateMapper: PrebuildStateMapper;
2024

21-
protected async updatePrebuiltWorkspace(
25+
@inject(TracedWorkspaceDB)
26+
protected readonly workspaceDB: DBWithTracing<WorkspaceDB>;
27+
28+
@inject(MessageBusIntegration)
29+
protected readonly messagebus: MessageBusIntegration;
30+
31+
@inject(PrometheusMetricsExporter)
32+
protected readonly prometheusExporter: PrometheusMetricsExporter;
33+
34+
async updatePrebuiltWorkspace(
2235
ctx: TraceContext,
2336
userId: string,
2437
status: WorkspaceStatus.AsObject,
@@ -91,7 +104,7 @@ export class WorkspaceManagerBridgeEE extends WorkspaceManagerBridge {
91104
}
92105
}
93106

94-
protected async stopPrebuildInstance(ctx: TraceContext, instance: WorkspaceInstance): Promise<void> {
107+
async stopPrebuildInstance(ctx: TraceContext, instance: WorkspaceInstance): Promise<void> {
95108
const span = TraceContext.startSpan("stopPrebuildInstance", ctx);
96109

97110
const prebuild = await this.workspaceDB.trace({}).findPrebuildByWorkspaceID(instance.workspaceId);

components/ws-manager-bridge/src/bridge.ts

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import { WorkspaceCluster } from "@gitpod/gitpod-protocol/lib/workspace-cluster"
3737
import { repeat } from "@gitpod/gitpod-protocol/lib/util/repeat";
3838
import { PreparingUpdateEmulator, PreparingUpdateEmulatorFactory } from "./preparing-update-emulator";
3939
import { performance } from "perf_hooks";
40+
import { PrebuildUpdater } from "./prebuild-updater";
4041

4142
export const WorkspaceManagerBridgeFactory = Symbol("WorkspaceManagerBridgeFactory");
4243

@@ -73,6 +74,9 @@ export class WorkspaceManagerBridge implements Disposable {
7374
@inject(IAnalyticsWriter)
7475
protected readonly analytics: IAnalyticsWriter;
7576

77+
@inject(PrebuildUpdater)
78+
protected readonly prebuildUpdater: PrebuildUpdater;
79+
7680
protected readonly disposables = new DisposableCollection();
7781
protected readonly queues = new Map<string, Queue>();
7882

@@ -352,7 +356,7 @@ export class WorkspaceManagerBridge implements Disposable {
352356
span.setTag("after", JSON.stringify(instance));
353357

354358
// now notify all prebuild listeners about updates - and update DB if needed
355-
await this.updatePrebuiltWorkspace({ span }, userId, status, writeToDB);
359+
await this.prebuildUpdater.updatePrebuiltWorkspace({ span }, userId, status, writeToDB);
356360

357361
// update volume snapshot information
358362
if (
@@ -466,24 +470,11 @@ export class WorkspaceManagerBridge implements Disposable {
466470
instance.stoppedTime = new Date().toISOString();
467471
promises.push(this.workspaceDB.trace({}).storeInstance(instance));
468472
promises.push(this.onInstanceStopped({}, ri.workspace.ownerId, instance));
469-
promises.push(this.stopPrebuildInstance(ctx, instance));
473+
promises.push(this.prebuildUpdater.stopPrebuildInstance(ctx, instance));
470474
}
471475
await Promise.all(promises);
472476
}
473477

474-
protected async updatePrebuiltWorkspace(
475-
ctx: TraceContext,
476-
userId: string,
477-
status: WorkspaceStatus.AsObject,
478-
writeToDB: boolean,
479-
) {
480-
// prebuilds are an EE feature - we just need the hook here
481-
}
482-
483-
protected async stopPrebuildInstance(ctx: TraceContext, instance: WorkspaceInstance): Promise<void> {
484-
// prebuilds are an EE feature - we just need the hook here
485-
}
486-
487478
protected async onInstanceStopped(
488479
ctx: TraceContext,
489480
ownerUserID: string,

components/ws-manager-bridge/src/container-module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import { IClientCallMetrics } from "@gitpod/content-service/lib/client-call-metr
3434
import { PrometheusClientCallMetrics } from "@gitpod/gitpod-protocol/lib/messaging/client-call-metrics";
3535
import { PreparingUpdateEmulator, PreparingUpdateEmulatorFactory } from "./preparing-update-emulator";
3636
import { PrebuildStateMapper } from "./prebuild-state-mapper";
37+
import { PrebuildUpdater, PrebuildUpdaterNoOp } from "./prebuild-updater";
3738

3839
export const containerModule = new ContainerModule((bind) => {
3940
bind(MessagebusConfiguration).toSelf().inSingletonScope();
@@ -83,4 +84,5 @@ export const containerModule = new ContainerModule((bind) => {
8384
bind(PreparingUpdateEmulatorFactory).toAutoFactory(PreparingUpdateEmulator);
8485

8586
bind(PrebuildStateMapper).toSelf().inSingletonScope();
87+
bind(PrebuildUpdater).to(PrebuildUpdaterNoOp).inSingletonScope();
8688
});
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3+
* Licensed under the Gitpod Enterprise Source Code License,
4+
* See License.enterprise.txt in the project root folder.
5+
*/
6+
7+
import { TraceContext } from "@gitpod/gitpod-protocol/lib/util/tracing";
8+
import { WorkspaceStatus } from "@gitpod/ws-manager/lib";
9+
import { WorkspaceInstance } from "@gitpod/gitpod-protocol";
10+
import { injectable } from "inversify";
11+
12+
export const PrebuildUpdater = Symbol("PrebuildUpdater");
13+
14+
export interface PrebuildUpdater {
15+
updatePrebuiltWorkspace(
16+
ctx: TraceContext,
17+
userId: string,
18+
status: WorkspaceStatus.AsObject,
19+
writeToDB: boolean,
20+
): Promise<void>;
21+
22+
stopPrebuildInstance(ctx: TraceContext, instance: WorkspaceInstance): Promise<void>;
23+
}
24+
25+
@injectable()
26+
export class PrebuildUpdaterNoOp implements PrebuildUpdater {
27+
async updatePrebuiltWorkspace(
28+
ctx: TraceContext,
29+
userId: string,
30+
status: WorkspaceStatus.AsObject,
31+
writeToDB: boolean,
32+
): Promise<void> {}
33+
34+
async stopPrebuildInstance(ctx: TraceContext, instance: WorkspaceInstance): Promise<void> {}
35+
}

0 commit comments

Comments
 (0)