Skip to content

Commit a205440

Browse files
committed
Dispatching error code handling
1 parent 10be6f2 commit a205440

File tree

5 files changed

+19
-7
lines changed

5 files changed

+19
-7
lines changed

packages/adapters/src/docker-instance-adapter.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ IComponent {
185185
}
186186

187187
// eslint-disable-next-line complexity
188-
async dispatch(config: InstanceConfig, instancesServerPort: number, instanceId: string, sequenceInfo: SequenceInfo, payload: RunnerConnectInfo): Promise<void> {
188+
async dispatch(config: InstanceConfig, instancesServerPort: number, instanceId: string, sequenceInfo: SequenceInfo, payload: RunnerConnectInfo): Promise<ExitCode> {
189189
if (!(config.type === "docker" && "container" in config)) {
190190
throw new Error("Docker instance adapter run with invalid runner config");
191191
}
@@ -241,6 +241,8 @@ IComponent {
241241
this.resources.containerId = containerId; // doesnt matter
242242

243243
this.logger.trace("Container is running", containerId);
244+
245+
return 0;
244246
}
245247

246248
async waitUntilExit(config: InstanceConfig, instanceId:string, _sequenceInfo: SequenceInfo): Promise<number> {

packages/adapters/src/kubernetes-instance-adapter.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,13 @@ IComponent {
9595
}
9696
};
9797
}
98-
async dispatch(config: InstanceConfig, instancesServerPort: number, instanceId: string, sequenceInfo: SequenceInfo, payload: RunnerConnectInfo): Promise<void> {
98+
async dispatch(config: InstanceConfig, instancesServerPort: number, instanceId: string, sequenceInfo: SequenceInfo, payload: RunnerConnectInfo): Promise<number> {
9999
if (config.type !== "kubernetes") {
100100
throw new Error(`Invalid config type for kubernetes adapter: ${config.type}`);
101101
}
102102

103103
if (this.adapterConfig.quotaName && await this.kubeClient.isPodsLimitReached(this.adapterConfig.quotaName)) {
104-
throw Error(RunnerExitCode.PODS_LIMIT_REACHED.toString());
104+
return RunnerExitCode.PODS_LIMIT_REACHED;
105105
}
106106

107107
this.limits = config.limits;
@@ -163,7 +163,7 @@ IComponent {
163163
// This means runner pod was unable to start. So it went from "Pending" to "Failed" state directly.
164164
// Return 1 which is Linux exit code for "General Error" since we are not able
165165
// to determine what happened exactly.
166-
return;
166+
return RunnerExitCode.UNCAUGHT_EXCEPTION;
167167
}
168168

169169
this.logger.debug("Copy sequence files to Runner");
@@ -176,6 +176,8 @@ IComponent {
176176
await this.kubeClient.exec(runnerName, runnerName, ["unpack.sh", "/package"], process.stdout, this.stdErrorStream, compressedStream, 2);
177177

178178
this.logger.debug("Copy command done");
179+
180+
return 0;
179181
}
180182

181183
async waitUntilExit(_config: InstanceConfig, instanceId: string, _sequenceInfo: SequenceInfo): Promise<ExitCode> {

packages/adapters/src/process-instance-adapter.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ class ProcessInstanceAdapter implements
138138
return this.waitUntilExit(config, instanceId, sequenceInfo);
139139
}
140140

141-
async dispatch(config: InstanceConfig, instancesServerPort: number, instanceId: string, sequenceInfo: SequenceInfo, payload: RunnerConnectInfo): Promise<void> {
141+
async dispatch(config: InstanceConfig, instancesServerPort: number, instanceId: string, sequenceInfo: SequenceInfo, payload: RunnerConnectInfo): Promise<ExitCode> {
142142
if (config.type !== "process") {
143143
throw new Error("Process instance adapter run with invalid runner config");
144144
}
@@ -182,6 +182,8 @@ class ProcessInstanceAdapter implements
182182
this.runnerProcess = runnerProcess;
183183

184184
this.logger.trace("Runner process is running", runnerProcess.pid);
185+
186+
return 0;
185187
}
186188

187189
getRunnerInfo(): RunnerConnectInfo["system"] {

packages/host/src/lib/csi-dispatcher.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,14 +234,20 @@ export class CSIDispatcher extends TypedEmitter<Events> {
234234

235235
this.logger.debug("Dispatching...");
236236

237-
await instanceAdapter.dispatch(
237+
const dispatchResultCode = await instanceAdapter.dispatch(
238238
instanceConfig,
239239
this.STHConfig.host.instancesServerPort,
240240
id,
241241
sequence,
242242
payload
243243
);
244244

245+
this.logger.warn("Dispatch result code:", dispatchResultCode);
246+
247+
if (dispatchResultCode !== 0) {
248+
throw await mapRunnerExitCode(dispatchResultCode, sequence);
249+
}
250+
245251
this.logger.debug("Dispatched.");
246252
this.logger.debug("Waiting for connection...");
247253

packages/types/src/lifecycle-adapters.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export interface ILifeCycleAdapterRun extends ILifeCycleAdapterMain {
4646
* @param {InstanceConfig} Runner configuration.
4747
* @returns {ExitCode} Runner exit code.
4848
*/
49-
dispatch(config: InstanceConfig, instancesServerPort: number, instanceId: string, sequenceInfo: SequenceInfo, payload: RunnerConnectInfo): Promise<void>;
49+
dispatch(config: InstanceConfig, instancesServerPort: number, instanceId: string, sequenceInfo: SequenceInfo, payload: RunnerConnectInfo): Promise<number>;
5050

5151
/**
5252
* Starts Runner - in essence does `dispatch` and then `waitUntilExit`.

0 commit comments

Comments
 (0)