Skip to content

Commit dd7ca9e

Browse files
committed
[server] Broadcast workspace instance update to listeners
1 parent 6fd9205 commit dd7ca9e

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
@@ -21,10 +21,14 @@ import { log } from "@gitpod/gitpod-protocol/lib/util/logging";
2121
import { getExperimentsClientForBackend } from "@gitpod/gitpod-protocol/lib/experiments/configcat-server";
2222
import { reportRedisUpdateCompleted, reportRedisUpdateReceived } from "../prometheus-metrics";
2323
import { Redis } from "ioredis";
24+
import { WorkspaceDB } from "@gitpod/gitpod-db/lib";
2425

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

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

@@ -75,6 +79,33 @@ export class RedisSubscriber implements LocalMessageBroker {
7579

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

80111
async stop() {

0 commit comments

Comments
 (0)