@@ -201,6 +201,7 @@ import { goDurationToHumanReadable } from "@gitpod/gitpod-protocol/lib/util/time
201
201
import { OrganizationPermission } from "../authorization/definitions" ;
202
202
import { Authorizer } from "../authorization/authorizer" ;
203
203
import { OrganizationService } from "../orgs/organization-service" ;
204
+ import { RedisSubscriber } from "../messaging/redis-subscriber" ;
204
205
205
206
// shortcut
206
207
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 {
276
277
@inject ( BillingServiceDefinition . name ) private readonly billingService : BillingServiceClient ,
277
278
@inject ( EmailDomainFilterDB ) private emailDomainFilterdb : EmailDomainFilterDB ,
278
279
279
- @inject ( EnvVarService )
280
- private readonly envVarService : EnvVarService ,
280
+ @inject ( EnvVarService ) private readonly envVarService : EnvVarService ,
281
+ @ inject ( RedisSubscriber ) private readonly subscriber : RedisSubscriber ,
281
282
) { }
282
283
283
284
/** Id the uniquely identifies this server instance */
@@ -474,6 +475,19 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
474
475
} ,
475
476
) ;
476
477
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 ) ;
477
491
}
478
492
479
493
const result = makeResult ( wsi . id ) ;
@@ -543,11 +557,14 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
543
557
544
558
// TODO(cw): the instance update is not subject to resource access guards, hence provides instance info
545
559
// to clients who might not otherwise have access to that information.
546
- this . disposables . push (
560
+ this . disposables . pushAll ( [
547
561
this . localMessageBroker . listenForWorkspaceInstanceUpdates ( this . userID , ( ctx , instance ) =>
548
562
this . forwardInstanceUpdateToClient ( ctx , instance ) ,
549
563
) ,
550
- ) ;
564
+ this . subscriber . listenForWorkspaceInstanceUpdates ( this . userID , ( ctx , instance ) =>
565
+ this . forwardInstanceUpdateToClient ( ctx , instance ) ,
566
+ ) ,
567
+ ] ) ;
551
568
}
552
569
553
570
private forwardInstanceUpdateToClient ( ctx : TraceContext , instance : WorkspaceInstance ) {
0 commit comments