From a7f1c11f3078d3100d0c5a77cceab0417c6b43dd Mon Sep 17 00:00:00 2001 From: Milan Pavlik Date: Wed, 15 Mar 2023 09:19:11 +0000 Subject: [PATCH] Revert "Remove workspace_classes_backend feature flag (#16825)" This reverts commit afb724660182fcd480dc2e7fc06c45291b0023ad. --- .../src/cluster-service-server.ts | 30 +++++++++++++++++-- .../src/cluster-sync-service.ts | 5 ++++ 2 files changed, 33 insertions(+), 2 deletions(-) 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) {