Skip to content

Commit f609974

Browse files
committed
[server] Broadcast workspace instance update to listeners
1 parent a5fce48 commit f609974

File tree

1 file changed

+32
-1
lines changed

1 file changed

+32
-1
lines changed

components/server/src/messaging/redis-subscriber.ts

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,14 @@ import { getExperimentsClientForBackend } from "@gitpod/gitpod-protocol/lib/expe
2222
import { Attributes } from "@gitpod/gitpod-protocol/lib/experiments/types";
2323
import { reportRedisUpdateCompleted, reportRedisUpdateReceived } from "../prometheus-metrics";
2424
import { Redis } from "ioredis";
25+
import { WorkspaceDB } from "@gitpod/gitpod-db/lib";
2526

2627
@injectable()
2728
export class RedisSubscriber implements LocalMessageBroker {
28-
constructor(@inject(Redis) private readonly redis: Redis) {}
29+
constructor(
30+
@inject(Redis) private readonly redis: Redis,
31+
@inject(WorkspaceDB) private readonly workspaceDB: WorkspaceDB,
32+
) {}
2933

3034
protected workspaceInstanceUpdateListeners: Map<string, WorkspaceInstanceUpdateListener[]> = new Map();
3135

@@ -73,6 +77,33 @@ export class RedisSubscriber implements LocalMessageBroker {
7377

7478
private async onInstanceUpdate(update: RedisWorkspaceInstanceUpdate): Promise<void> {
7579
log.debug("[redis] Received instance update", { update });
80+
81+
if (!update.ownerID || !update.instanceID) {
82+
return;
83+
}
84+
85+
const listeners = this.workspaceInstanceUpdateListeners.get(update.ownerID) || [];
86+
if (listeners.length === 0) {
87+
return;
88+
}
89+
90+
const ctx = {};
91+
const instance = await this.workspaceDB.findInstanceById(update.instanceID);
92+
if (!instance) {
93+
return;
94+
}
95+
96+
for (const l of listeners) {
97+
try {
98+
l(ctx, instance);
99+
} catch (err) {
100+
log.error(
101+
{ userId: update.ownerID, instanceId: instance.id, workspaceId: update.workspaceID },
102+
"Failed to broadcast workspace instance update.",
103+
err,
104+
);
105+
}
106+
}
76107
}
77108

78109
async stop() {

0 commit comments

Comments
 (0)