Use cache key to segment lock folders

pull/461/head
Frostebite 2022-10-05 19:32:05 +01:00
parent 7952083ef0
commit ffc99d1acf
3 changed files with 28 additions and 11 deletions

18
dist/index.js vendored
View File

@ -654,6 +654,12 @@ class SharedWorkspaceLocking {
return (yield SharedWorkspaceLocking.ReadLines(`aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}${buildParametersContext.cacheKey}/`)).map((x) => x.replace(`/`, ``)); return (yield SharedWorkspaceLocking.ReadLines(`aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}${buildParametersContext.cacheKey}/`)).map((x) => x.replace(`/`, ``));
}); });
} }
static DoesWorkspaceTopLevelExist(buildParametersContext) {
return __awaiter(this, void 0, void 0, function* () {
const results = (yield SharedWorkspaceLocking.ReadLines(`aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}`)).map((x) => x.replace(`/`, ``));
return results.includes(buildParametersContext.cacheKey);
});
}
static GetAllLocks(workspace, buildParametersContext) { static GetAllLocks(workspace, buildParametersContext) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
if (!(yield SharedWorkspaceLocking.DoesWorkspaceExist(workspace, buildParametersContext))) { if (!(yield SharedWorkspaceLocking.DoesWorkspaceExist(workspace, buildParametersContext))) {
@ -668,11 +674,13 @@ class SharedWorkspaceLocking {
return; return;
} }
cloud_runner_logger_1.default.log(`run agent ${runId} is trying to access a workspace`); cloud_runner_logger_1.default.log(`run agent ${runId} is trying to access a workspace`);
const workspaces = yield SharedWorkspaceLocking.GetFreeWorkspaces(buildParametersContext); if (yield SharedWorkspaceLocking.DoesWorkspaceTopLevelExist(buildParametersContext)) {
for (const element of workspaces) { const workspaces = yield SharedWorkspaceLocking.GetFreeWorkspaces(buildParametersContext);
if (yield SharedWorkspaceLocking.LockWorkspace(element, runId, buildParametersContext)) { for (const element of workspaces) {
cloud_runner_logger_1.default.log(`run agent ${runId} locked workspace: ${element}`); if (yield SharedWorkspaceLocking.LockWorkspace(element, runId, buildParametersContext)) {
return element; cloud_runner_logger_1.default.log(`run agent ${runId} locked workspace: ${element}`);
return element;
}
} }
} }
const workspace = yield SharedWorkspaceLocking.CreateWorkspace(workspaceIfCreated, buildParametersContext, runId); const workspace = yield SharedWorkspaceLocking.CreateWorkspace(workspaceIfCreated, buildParametersContext, runId);

2
dist/index.js.map vendored

File diff suppressed because one or more lines are too long

View File

@ -16,6 +16,13 @@ export class SharedWorkspaceLocking {
) )
).map((x) => x.replace(`/`, ``)); ).map((x) => x.replace(`/`, ``));
} }
public static async DoesWorkspaceTopLevelExist(buildParametersContext: BuildParameters) {
const results = (await SharedWorkspaceLocking.ReadLines(`aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}`)).map(
(x) => x.replace(`/`, ``),
);
return results.includes(buildParametersContext.cacheKey);
}
public static async GetAllLocks(workspace: string, buildParametersContext: BuildParameters): Promise<string[]> { public static async GetAllLocks(workspace: string, buildParametersContext: BuildParameters): Promise<string[]> {
if (!(await SharedWorkspaceLocking.DoesWorkspaceExist(workspace, buildParametersContext))) { if (!(await SharedWorkspaceLocking.DoesWorkspaceExist(workspace, buildParametersContext))) {
throw new Error("Workspace doesn't exist, can't call get all locks"); throw new Error("Workspace doesn't exist, can't call get all locks");
@ -38,12 +45,14 @@ export class SharedWorkspaceLocking {
CloudRunnerLogger.log(`run agent ${runId} is trying to access a workspace`); CloudRunnerLogger.log(`run agent ${runId} is trying to access a workspace`);
const workspaces = await SharedWorkspaceLocking.GetFreeWorkspaces(buildParametersContext); if (await SharedWorkspaceLocking.DoesWorkspaceTopLevelExist(buildParametersContext)) {
for (const element of workspaces) { const workspaces = await SharedWorkspaceLocking.GetFreeWorkspaces(buildParametersContext);
if (await SharedWorkspaceLocking.LockWorkspace(element, runId, buildParametersContext)) { for (const element of workspaces) {
CloudRunnerLogger.log(`run agent ${runId} locked workspace: ${element}`); if (await SharedWorkspaceLocking.LockWorkspace(element, runId, buildParametersContext)) {
CloudRunnerLogger.log(`run agent ${runId} locked workspace: ${element}`);
return element; return element;
}
} }
} }