diff --git a/components/ws-manager-bridge/src/cluster-service-server.ts b/components/ws-manager-bridge/src/cluster-service-server.ts index 7b06e546895af3..05fca4e873b9f6 100644 --- a/components/ws-manager-bridge/src/cluster-service-server.ts +++ b/components/ws-manager-bridge/src/cluster-service-server.ts @@ -44,6 +44,8 @@ import { getSupportedWorkspaceClasses } from "./cluster-sync-service"; import { Configuration } from "./config"; import { GRPCError } from "./rpc"; import { isWorkspaceRegion } from "@gitpod/gitpod-protocol/lib/workspace-cluster"; +import { getExperimentsClientForBackend } from "@gitpod/gitpod-protocol/lib/experiments/configcat-server"; +import { GetWorkspacesRequest, WorkspaceManagerClient } from "@gitpod/ws-manager/lib"; export interface ClusterServiceServerOptions { port: number; @@ -148,8 +150,32 @@ export class ClusterService implements IClusterServiceServer { tls, }; - let classConstraints = await getSupportedWorkspaceClasses(this.clientProvider, newCluster, false); - newCluster.admissionConstraints = admissionConstraints.concat(classConstraints); + const enabled = await getExperimentsClientForBackend().getValueAsync( + "workspace_classes_backend", + false, + {}, + ); + if (enabled) { + let classConstraints = await getSupportedWorkspaceClasses(this.clientProvider, newCluster, false); + newCluster.admissionConstraints = admissionConstraints.concat(classConstraints); + } else { + // try to connect to validate the config. Throws an exception if it fails. + await new Promise((resolve, reject) => { + const c = this.clientProvider.createConnection(WorkspaceManagerClient, newCluster); + c.getWorkspaces(new GetWorkspacesRequest(), (err: any) => { + if (err) { + reject( + new GRPCError( + grpc.status.FAILED_PRECONDITION, + `cannot reach ${req.url}: ${err.message}`, + ), + ); + } else { + resolve(); + } + }); + }); + } await this.clusterDB.save(newCluster); log.info({}, "cluster registered", { cluster: req.name }); diff --git a/components/ws-manager-bridge/src/cluster-sync-service.ts b/components/ws-manager-bridge/src/cluster-sync-service.ts index 64ae32c7a13783..c0213075d29edd 100644 --- a/components/ws-manager-bridge/src/cluster-sync-service.ts +++ b/components/ws-manager-bridge/src/cluster-sync-service.ts @@ -42,6 +42,11 @@ export class ClusterSyncService { } private async reconcile() { + const enabled = await this.featureClient.getValueAsync("workspace_classes_backend", false, {}); + if (!enabled) { + return; + } + log.debug("reconciling workspace classes..."); let allClusters = await this.clusterDB.findFiltered({}); for (const cluster of allClusters) {