Skip to content

Commit 21c16d2

Browse files
authored
[server] Register redis update listeners (#18202)
1 parent 44b1c35 commit 21c16d2

File tree

1 file changed

+21
-4
lines changed

1 file changed

+21
-4
lines changed

components/server/src/workspace/gitpod-server-impl.ts

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ import { goDurationToHumanReadable } from "@gitpod/gitpod-protocol/lib/util/time
201201
import { OrganizationPermission } from "../authorization/definitions";
202202
import { Authorizer } from "../authorization/authorizer";
203203
import { OrganizationService } from "../orgs/organization-service";
204+
import { RedisSubscriber } from "../messaging/redis-subscriber";
204205

205206
// shortcut
206207
export const traceWI = (ctx: TraceContext, wi: Omit<LogContext, "userId">) => TraceContext.setOWI(ctx, wi); // userId is already taken care of in WebsocketConnectionManager
@@ -276,8 +277,8 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
276277
@inject(BillingServiceDefinition.name) private readonly billingService: BillingServiceClient,
277278
@inject(EmailDomainFilterDB) private emailDomainFilterdb: EmailDomainFilterDB,
278279

279-
@inject(EnvVarService)
280-
private readonly envVarService: EnvVarService,
280+
@inject(EnvVarService) private readonly envVarService: EnvVarService,
281+
@inject(RedisSubscriber) private readonly subscriber: RedisSubscriber,
281282
) {}
282283

283284
/** Id the uniquely identifies this server instance */
@@ -474,6 +475,19 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
474475
},
475476
);
476477
this.disposables.push(resetListener);
478+
479+
const resetListenerFromRedis = this.subscriber.listenForWorkspaceInstanceUpdates(
480+
ws.ownerId,
481+
(ctx, instance) => {
482+
if (instance.id === wsi.id) {
483+
this.forwardInstanceUpdateToClient(ctx, instance);
484+
if (instance.status.phase === "stopped") {
485+
resetListenerFromRedis.dispose();
486+
}
487+
}
488+
},
489+
);
490+
this.disposables.push(resetListenerFromRedis);
477491
}
478492

479493
const result = makeResult(wsi.id);
@@ -543,11 +557,14 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
543557

544558
// TODO(cw): the instance update is not subject to resource access guards, hence provides instance info
545559
// to clients who might not otherwise have access to that information.
546-
this.disposables.push(
560+
this.disposables.pushAll([
547561
this.localMessageBroker.listenForWorkspaceInstanceUpdates(this.userID, (ctx, instance) =>
548562
this.forwardInstanceUpdateToClient(ctx, instance),
549563
),
550-
);
564+
this.subscriber.listenForWorkspaceInstanceUpdates(this.userID, (ctx, instance) =>
565+
this.forwardInstanceUpdateToClient(ctx, instance),
566+
),
567+
]);
551568
}
552569

553570
private forwardInstanceUpdateToClient(ctx: TraceContext, instance: WorkspaceInstance) {

0 commit comments

Comments
 (0)