Max workspaces and strong consistency locks
parent
f05bb6f142
commit
721ee4089f
|
|
@ -897,7 +897,6 @@ const test_1 = __importDefault(__nccwpck_require__(63007));
|
||||||
const local_1 = __importDefault(__nccwpck_require__(66575));
|
const local_1 = __importDefault(__nccwpck_require__(66575));
|
||||||
const local_docker_1 = __importDefault(__nccwpck_require__(55723));
|
const local_docker_1 = __importDefault(__nccwpck_require__(55723));
|
||||||
const github_1 = __importDefault(__nccwpck_require__(83654));
|
const github_1 = __importDefault(__nccwpck_require__(83654));
|
||||||
const cloud_runner_options_1 = __importDefault(__nccwpck_require__(96552));
|
|
||||||
const shared_workspace_locking_1 = __importDefault(__nccwpck_require__(87562));
|
const shared_workspace_locking_1 = __importDefault(__nccwpck_require__(87562));
|
||||||
class CloudRunner {
|
class CloudRunner {
|
||||||
static setup(buildParameters) {
|
static setup(buildParameters) {
|
||||||
|
|
@ -943,19 +942,19 @@ class CloudRunner {
|
||||||
CloudRunner.setup(buildParameters);
|
CloudRunner.setup(buildParameters);
|
||||||
try {
|
try {
|
||||||
if (buildParameters.retainWorkspace) {
|
if (buildParameters.retainWorkspace) {
|
||||||
const workspace = `test-workspace-${CloudRunner.buildParameters.buildGuid}`;
|
CloudRunner.lockedWorkspace = `retained-workspace-${CloudRunner.buildParameters.buildGuid}`;
|
||||||
const result = (yield shared_workspace_locking_1.default.GetOrCreateLockedWorkspace(workspace, CloudRunner.buildParameters.buildGuid, CloudRunner.buildParameters)) || CloudRunner.buildParameters.buildGuid;
|
const result = yield shared_workspace_locking_1.default.GetOrCreateLockedWorkspace(CloudRunner.lockedWorkspace, CloudRunner.buildParameters.buildGuid, CloudRunner.buildParameters);
|
||||||
if (result) {
|
if (result) {
|
||||||
cloud_runner_logger_1.default.logLine(`Using retained workspace ${workspace}`);
|
cloud_runner_logger_1.default.logLine(`Using retained workspace ${CloudRunner.lockedWorkspace}`);
|
||||||
CloudRunner.lockedWorkspace = workspace;
|
|
||||||
CloudRunner.cloudRunnerEnvironmentVariables = [
|
CloudRunner.cloudRunnerEnvironmentVariables = [
|
||||||
...CloudRunner.cloudRunnerEnvironmentVariables,
|
...CloudRunner.cloudRunnerEnvironmentVariables,
|
||||||
{ name: `LOCKED_WORKSPACE`, value: workspace },
|
{ name: `LOCKED_WORKSPACE`, value: CloudRunner.lockedWorkspace },
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
cloud_runner_logger_1.default.log(`Max retained workspaces reached ${buildParameters.maxRetainedWorkspaces}`);
|
cloud_runner_logger_1.default.log(`Max retained workspaces reached ${buildParameters.maxRetainedWorkspaces}`);
|
||||||
buildParameters.retainWorkspace = false;
|
buildParameters.retainWorkspace = false;
|
||||||
|
CloudRunner.lockedWorkspace = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!CloudRunner.buildParameters.isCliMode)
|
if (!CloudRunner.buildParameters.isCliMode)
|
||||||
|
|
@ -970,8 +969,8 @@ class CloudRunner {
|
||||||
cloud_runner_logger_1.default.log(`Cleanup complete`);
|
cloud_runner_logger_1.default.log(`Cleanup complete`);
|
||||||
if (!CloudRunner.buildParameters.isCliMode)
|
if (!CloudRunner.buildParameters.isCliMode)
|
||||||
core.endGroup();
|
core.endGroup();
|
||||||
if (cloud_runner_options_1.default.retainWorkspaces) {
|
if (CloudRunner.buildParameters.retainWorkspace) {
|
||||||
yield shared_workspace_locking_1.default.ReleaseWorkspace(`test-workspace-${CloudRunner.buildParameters.buildGuid}`, CloudRunner.buildParameters.buildGuid, CloudRunner.buildParameters);
|
yield shared_workspace_locking_1.default.ReleaseWorkspace(CloudRunner.lockedWorkspace || ``, CloudRunner.buildParameters.buildGuid, CloudRunner.buildParameters);
|
||||||
CloudRunner.lockedWorkspace = undefined;
|
CloudRunner.lockedWorkspace = undefined;
|
||||||
}
|
}
|
||||||
return output;
|
return output;
|
||||||
|
|
@ -5176,7 +5175,7 @@ class SharedWorkspaceLocking {
|
||||||
.sort((x) => x.timestamp);
|
.sort((x) => x.timestamp);
|
||||||
const lockMatches = locks.filter((x) => x.name.includes(runId));
|
const lockMatches = locks.filter((x) => x.name.includes(runId));
|
||||||
const includesRunLock = lockMatches.length > 0 && locks.indexOf(lockMatches[0]) === 0;
|
const includesRunLock = lockMatches.length > 0 && locks.indexOf(lockMatches[0]) === 0;
|
||||||
cloud_runner_logger_1.default.log(`Checking has workspace lock, workspace: ${workspace} \n success: ${includesRunLock} \n locks: ${JSON.stringify(locks, undefined, 4)}`);
|
cloud_runner_logger_1.default.log(`Checking has workspace lock, runId: ${runId} workspace: ${workspace} success: ${includesRunLock} \n Num of LockMatches for Run Agent: ${lockMatches.length} Num of Locks ${locks.length} orderedLockIndex for Run Agent ${locks.indexOf(lockMatches[0])}`);
|
||||||
return includesRunLock;
|
return includesRunLock;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -5250,6 +5249,7 @@ class SharedWorkspaceLocking {
|
||||||
const workspaces = yield SharedWorkspaceLocking.ReadLines(`aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}${buildParametersContext.cacheKey}/`);
|
const workspaces = yield SharedWorkspaceLocking.ReadLines(`aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}${buildParametersContext.cacheKey}/`);
|
||||||
cloud_runner_logger_1.default.log(`All workspaces ${workspaces}`);
|
cloud_runner_logger_1.default.log(`All workspaces ${workspaces}`);
|
||||||
if (yield SharedWorkspaceLocking.IsWorkspaceBelowMax(workspace, buildParametersContext)) {
|
if (yield SharedWorkspaceLocking.IsWorkspaceBelowMax(workspace, buildParametersContext)) {
|
||||||
|
cloud_runner_logger_1.default.log(`Workspace is below max ${workspaces} ${buildParametersContext.maxRetainedWorkspaces}`);
|
||||||
yield SharedWorkspaceLocking.CleanupWorkspace(workspace, buildParametersContext);
|
yield SharedWorkspaceLocking.CleanupWorkspace(workspace, buildParametersContext);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -14,7 +14,6 @@ import TestCloudRunner from './providers/test';
|
||||||
import LocalCloudRunner from './providers/local';
|
import LocalCloudRunner from './providers/local';
|
||||||
import LocalDockerCloudRunner from './providers/local-docker';
|
import LocalDockerCloudRunner from './providers/local-docker';
|
||||||
import GitHub from '../github';
|
import GitHub from '../github';
|
||||||
import CloudRunnerOptions from './cloud-runner-options';
|
|
||||||
import SharedWorkspaceLocking from './services/shared-workspace-locking';
|
import SharedWorkspaceLocking from './services/shared-workspace-locking';
|
||||||
|
|
||||||
class CloudRunner {
|
class CloudRunner {
|
||||||
|
|
@ -67,24 +66,24 @@ class CloudRunner {
|
||||||
CloudRunner.setup(buildParameters);
|
CloudRunner.setup(buildParameters);
|
||||||
try {
|
try {
|
||||||
if (buildParameters.retainWorkspace) {
|
if (buildParameters.retainWorkspace) {
|
||||||
const workspace = `test-workspace-${CloudRunner.buildParameters.buildGuid}`;
|
CloudRunner.lockedWorkspace = `retained-workspace-${CloudRunner.buildParameters.buildGuid}`;
|
||||||
const result =
|
|
||||||
(await SharedWorkspaceLocking.GetOrCreateLockedWorkspace(
|
const result = await SharedWorkspaceLocking.GetOrCreateLockedWorkspace(
|
||||||
workspace,
|
CloudRunner.lockedWorkspace,
|
||||||
CloudRunner.buildParameters.buildGuid,
|
CloudRunner.buildParameters.buildGuid,
|
||||||
CloudRunner.buildParameters,
|
CloudRunner.buildParameters,
|
||||||
)) || CloudRunner.buildParameters.buildGuid;
|
);
|
||||||
|
|
||||||
if (result) {
|
if (result) {
|
||||||
CloudRunnerLogger.logLine(`Using retained workspace ${workspace}`);
|
CloudRunnerLogger.logLine(`Using retained workspace ${CloudRunner.lockedWorkspace}`);
|
||||||
CloudRunner.lockedWorkspace = workspace;
|
|
||||||
CloudRunner.cloudRunnerEnvironmentVariables = [
|
CloudRunner.cloudRunnerEnvironmentVariables = [
|
||||||
...CloudRunner.cloudRunnerEnvironmentVariables,
|
...CloudRunner.cloudRunnerEnvironmentVariables,
|
||||||
{ name: `LOCKED_WORKSPACE`, value: workspace },
|
{ name: `LOCKED_WORKSPACE`, value: CloudRunner.lockedWorkspace },
|
||||||
];
|
];
|
||||||
} else {
|
} else {
|
||||||
CloudRunnerLogger.log(`Max retained workspaces reached ${buildParameters.maxRetainedWorkspaces}`);
|
CloudRunnerLogger.log(`Max retained workspaces reached ${buildParameters.maxRetainedWorkspaces}`);
|
||||||
buildParameters.retainWorkspace = false;
|
buildParameters.retainWorkspace = false;
|
||||||
|
CloudRunner.lockedWorkspace = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!CloudRunner.buildParameters.isCliMode) core.startGroup('Setup shared cloud runner resources');
|
if (!CloudRunner.buildParameters.isCliMode) core.startGroup('Setup shared cloud runner resources');
|
||||||
|
|
@ -108,9 +107,9 @@ class CloudRunner {
|
||||||
CloudRunnerLogger.log(`Cleanup complete`);
|
CloudRunnerLogger.log(`Cleanup complete`);
|
||||||
if (!CloudRunner.buildParameters.isCliMode) core.endGroup();
|
if (!CloudRunner.buildParameters.isCliMode) core.endGroup();
|
||||||
|
|
||||||
if (CloudRunnerOptions.retainWorkspaces) {
|
if (CloudRunner.buildParameters.retainWorkspace) {
|
||||||
await SharedWorkspaceLocking.ReleaseWorkspace(
|
await SharedWorkspaceLocking.ReleaseWorkspace(
|
||||||
`test-workspace-${CloudRunner.buildParameters.buildGuid}`,
|
CloudRunner.lockedWorkspace || ``,
|
||||||
CloudRunner.buildParameters.buildGuid,
|
CloudRunner.buildParameters.buildGuid,
|
||||||
CloudRunner.buildParameters,
|
CloudRunner.buildParameters,
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -89,11 +89,9 @@ export class SharedWorkspaceLocking {
|
||||||
const lockMatches = locks.filter((x) => x.name.includes(runId));
|
const lockMatches = locks.filter((x) => x.name.includes(runId));
|
||||||
const includesRunLock = lockMatches.length > 0 && locks.indexOf(lockMatches[0]) === 0;
|
const includesRunLock = lockMatches.length > 0 && locks.indexOf(lockMatches[0]) === 0;
|
||||||
CloudRunnerLogger.log(
|
CloudRunnerLogger.log(
|
||||||
`Checking has workspace lock, workspace: ${workspace} \n success: ${includesRunLock} \n locks: ${JSON.stringify(
|
`Checking has workspace lock, runId: ${runId} workspace: ${workspace} success: ${includesRunLock} \n Num of LockMatches for Run Agent: ${
|
||||||
locks,
|
lockMatches.length
|
||||||
undefined,
|
} Num of Locks ${locks.length} orderedLockIndex for Run Agent ${locks.indexOf(lockMatches[0])}`,
|
||||||
4,
|
|
||||||
)}`,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
return includesRunLock;
|
return includesRunLock;
|
||||||
|
|
@ -200,6 +198,7 @@ export class SharedWorkspaceLocking {
|
||||||
|
|
||||||
CloudRunnerLogger.log(`All workspaces ${workspaces}`);
|
CloudRunnerLogger.log(`All workspaces ${workspaces}`);
|
||||||
if (await SharedWorkspaceLocking.IsWorkspaceBelowMax(workspace, buildParametersContext)) {
|
if (await SharedWorkspaceLocking.IsWorkspaceBelowMax(workspace, buildParametersContext)) {
|
||||||
|
CloudRunnerLogger.log(`Workspace is below max ${workspaces} ${buildParametersContext.maxRetainedWorkspaces}`);
|
||||||
await SharedWorkspaceLocking.CleanupWorkspace(workspace, buildParametersContext);
|
await SharedWorkspaceLocking.CleanupWorkspace(workspace, buildParametersContext);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue