Skip to content

Commit d4bb555

Browse files
committed
[server] don't error on project not_found
1 parent 5a7b346 commit d4bb555

File tree

3 files changed

+33
-25
lines changed

3 files changed

+33
-25
lines changed

components/server/src/workspace/gitpod-server-impl.ts

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -848,7 +848,7 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
848848
const user = await this.checkUser("getTeamMembersByProject");
849849
if (projectId) {
850850
const project = await this.projectsService.getProject(user.id, projectId);
851-
if (project && project.teamId) {
851+
if (project.teamId) {
852852
return await this.organizationService.listMembers(user.id, project.teamId);
853853
}
854854
}
@@ -977,9 +977,23 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
977977
throw new ApplicationError(ErrorCodes.PERMISSION_DENIED, "Cannot (re-)start a deleted workspace.");
978978
}
979979
const envVarsPromise = this.envVarService.resolve(workspace);
980-
const projectPromise = workspace.projectId
981-
? this.projectsService.getProject(user.id, workspace.projectId)
982-
: Promise.resolve(undefined);
980+
981+
const projectPromise = new Deferred<Project>();
982+
if (workspace.projectId) {
983+
try {
984+
const project = await this.projectsService.getProject(user.id, workspace.projectId);
985+
projectPromise.resolve(project);
986+
} catch (error) {
987+
if (ApplicationError.hasErrorCode(error) && error.code === ErrorCodes.NOT_FOUND) {
988+
log.info({ userId: user.id, workspaceId }, "cannot resolve project", error);
989+
projectPromise.resolve(undefined);
990+
} else {
991+
throw error;
992+
}
993+
}
994+
} else {
995+
projectPromise.resolve(undefined);
996+
}
983997

984998
await mayStartPromise;
985999

@@ -990,7 +1004,7 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
9901004
ctx,
9911005
workspace,
9921006
user,
993-
await projectPromise,
1007+
await projectPromise.promise,
9941008
await envVarsPromise,
9951009
options,
9961010
);
@@ -1593,9 +1607,6 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
15931607
const user = await this.checkAndBlockUser("getPrebuildEvents");
15941608

15951609
const project = await this.projectsService.getProject(user.id, projectId);
1596-
if (!project) {
1597-
throw new ApplicationError(ErrorCodes.NOT_FOUND, "Project not found");
1598-
}
15991610
await this.guardProjectOperation(user, projectId, "get");
16001611

16011612
const events = await this.projectsService.getPrebuildEvents(user.id, project.cloneUrl);
@@ -1612,9 +1623,6 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
16121623
const user = await this.checkAndBlockUser("triggerPrebuild");
16131624

16141625
const project = await this.projectsService.getProject(user.id, projectId);
1615-
if (!project) {
1616-
throw new ApplicationError(ErrorCodes.NOT_FOUND, "Project not found");
1617-
}
16181626
await this.guardProjectOperation(user, projectId, "update");
16191627

16201628
const branchDetails = !!branchName
@@ -2810,9 +2818,6 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
28102818

28112819
private async guardProjectOperation(user: User, projectId: string, op: ResourceAccessOp): Promise<void> {
28122820
const project = await this.projectsService.getProject(user.id, projectId);
2813-
if (!project) {
2814-
throw new ApplicationError(ErrorCodes.NOT_FOUND, "Project not found");
2815-
}
28162821
// Anyone who can read a team's information (i.e. any team member) can manage team projects
28172822
await this.guardTeamOperation(project.teamId, "get", "not_implemented");
28182823
}
@@ -2954,10 +2959,7 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
29542959

29552960
const user = await this.checkAndBlockUser("cancelPrebuild");
29562961

2957-
const project = await this.projectsService.getProject(user.id, projectId);
2958-
if (!project) {
2959-
throw new ApplicationError(ErrorCodes.NOT_FOUND, "Project not found");
2960-
}
2962+
await this.projectsService.getProject(user.id, projectId);
29612963
await this.guardProjectOperation(user, projectId, "update");
29622964

29632965
const prebuild = await this.workspaceDb.trace(ctx).findPrebuildByID(prebuildId);

components/server/src/workspace/headless-log-controller.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import { BearerAuth } from "../auth/bearer-authenticator";
3434
import { ProjectsService } from "../projects/projects-service";
3535
import { HostContextProvider } from "../auth/host-context-provider";
3636
import { TraceContext } from "@gitpod/gitpod-protocol/lib/util/tracing";
37+
import { ApplicationError, ErrorCodes } from "@gitpod/gitpod-protocol/lib/messaging/error";
3738

3839
export const HEADLESS_LOGS_PATH_PREFIX = "/headless-logs";
3940
export const HEADLESS_LOG_DOWNLOAD_PATH_PREFIX = "/headless-log-download";
@@ -214,9 +215,17 @@ export class HeadlessLogController {
214215

215216
let teamMembers: TeamMemberInfo[] = [];
216217
if (workspace?.projectId) {
217-
const p = await this.projectService.getProject(user.id, workspace.projectId);
218-
if (p?.teamId) {
219-
teamMembers = await this.teamDb.findMembersByTeam(p.teamId);
218+
try {
219+
const p = await this.projectService.getProject(user.id, workspace.projectId);
220+
if (p?.teamId) {
221+
teamMembers = await this.teamDb.findMembersByTeam(p.teamId);
222+
}
223+
} catch (error) {
224+
if (ApplicationError.hasErrorCode(error) && error.code === ErrorCodes.NOT_FOUND) {
225+
// ignore
226+
} else {
227+
throw error;
228+
}
220229
}
221230
}
222231

components/server/src/workspace/workspace-starter.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -696,10 +696,7 @@ export class WorkspaceStarter {
696696
metadata.setMetaId(workspace.id);
697697
if (workspace.projectId) {
698698
metadata.setProject(workspace.projectId);
699-
const project = await this.projectDB.findProjectById(workspace.projectId);
700-
if (project && project.teamId) {
701-
metadata.setTeam(project.teamId);
702-
}
699+
metadata.setTeam(workspace.organizationId);
703700
}
704701

705702
return metadata;

0 commit comments

Comments
 (0)