diff --git a/components/gitpod-db/src/typeorm/workspace-cluster-db-impl.ts b/components/gitpod-db/src/typeorm/workspace-cluster-db-impl.ts index 40df731a32dfdb..85f5c039c98f20 100644 --- a/components/gitpod-db/src/typeorm/workspace-cluster-db-impl.ts +++ b/components/gitpod-db/src/typeorm/workspace-cluster-db-impl.ts @@ -34,12 +34,12 @@ export class WorkspaceClusterDBImpl implements WorkspaceClusterDB { async deleteByName(name: string, applicationCluster: string): Promise { const repo = await this.getRepo(); - await repo.delete({ name, applicationCluster }); + await repo.update({ name, applicationCluster }, { deleted: true }); } async findByName(name: string, applicationCluster: string): Promise { const repo = await this.getRepo(); - return repo.findOne({ name, applicationCluster }); + return repo.findOne({ name, applicationCluster, deleted: false }); } async findFiltered(predicate: WorkspaceClusterFilter): Promise { @@ -58,7 +58,7 @@ export class WorkspaceClusterDBImpl implements WorkspaceClusterDB { let qb = repo .createQueryBuilder("wsc") .select(Object.keys(prototype).map((k) => `wsc.${k}`)) - .where("TRUE = TRUE"); // make sure andWhere works + .where("wsc.deleted = 0"); if (predicate.name !== undefined) { qb = qb.andWhere("wsc.name = :name", predicate); } diff --git a/components/gitpod-db/src/workspace-cluster-db.spec.db.ts b/components/gitpod-db/src/workspace-cluster-db.spec.db.ts index 7b7a3c6deced9e..6732e3237c7500 100644 --- a/components/gitpod-db/src/workspace-cluster-db.spec.db.ts +++ b/components/gitpod-db/src/workspace-cluster-db.spec.db.ts @@ -242,6 +242,47 @@ export class WorkspaceClusterDBSpec { expect(wscs2.length).to.equal(2); expect(wscs2).to.deep.include.members(expectedClusters2); } + + @test public async testFindFilteredExcludesDeletedClusters() { + const wsc1: DBWorkspaceCluster = dbWorkspaceCluster({ + name: "eu71", + applicationCluster: "eu02", + url: "some-url", + state: "available", + score: 100, + maxScore: 100, + govern: true, + }); + const wsc1a: DBWorkspaceCluster = dbWorkspaceCluster({ + name: "eu71", + applicationCluster: "us02", + url: "some-url", + state: "cordoned", + score: 0, + maxScore: 0, + govern: false, + }); + const wsc2: DBWorkspaceCluster = dbWorkspaceCluster({ + name: "us71", + applicationCluster: "us02", + url: "some-url", + state: "available", + score: 100, + maxScore: 100, + govern: true, + }); + + await this.db.save(wsc1); + await this.db.save(wsc1a); + await this.db.save(wsc2); + + await this.db.deleteByName("eu71", "us02"); + + let wscs = await this.db.findFiltered({ applicationCluster: "us02" }); + expect(wscs.length).to.equal(1); + wscs = await this.db.findFiltered({ applicationCluster: "eu02" }); + expect(wscs.length).to.equal(1); + } } function dbWorkspaceCluster(cluster: Omit): DBWorkspaceCluster {