1 parent
eeec91e892
commit
a3cdcc7796
2 files changed
+4
-4
No files matched your search
@@ -83,7 +83,7 @@ export async function runSandbox<J extends SandboxJobName>(
|
|||||||
}).spawn();
|
}).spawn();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
inProcessReason = (e as Error).message;
|
inProcessReason = (e as Error).message;
|
||||||
console.warn(`[sandbox] 起不来子进程,退回进程内执行:${inProcessReason}`);
|
console.warn(`[sandbox] 起不来子进程,退回进程内执行:${inProcessReason}`);
|
||||||
return runInProcess(job, input, timeoutMs) as Promise<SandboxOutput<J>>;
|
return runInProcess(job, input, timeoutMs) as Promise<SandboxOutput<J>>;
|
||||||
}
|
}
|
||||||
stats.spawned += 1;
|
stats.spawned += 1;
|
||||||
@@ -128,7 +128,7 @@ export async function runSandbox<J extends SandboxJobName>(
|
|||||||
msg = JSON.parse(line);
|
msg = JSON.parse(line);
|
||||||
} catch {
|
} catch {
|
||||||
stats.crashes += 1;
|
stats.crashes += 1;
|
||||||
throw new SandboxError("crash", `沙箱任务 ${job} 异常退出(code ${status.code}):${stderr.trim().slice(-300)}`);
|
throw new SandboxError("crash", `沙箱任务 ${job} 异常退出(code ${status.code}):${stderr.trim().slice(-300)}`);
|
||||||
}
|
}
|
||||||
if (!msg.ok) throw new SandboxError("job", msg.error ?? "沙箱任务失败");
|
if (!msg.ok) throw new SandboxError("job", msg.error ?? "沙箱任务失败");
|
||||||
return msg.result as SandboxOutput<J>;
|
return msg.result as SandboxOutput<J>;
|
||||||
@@ -150,7 +150,7 @@ async function runInProcess<J extends SandboxJobName>(
|
|||||||
return await Promise.race([
|
return await Promise.race([
|
||||||
Promise.resolve().then(() => fn(input)),
|
Promise.resolve().then(() => fn(input)),
|
||||||
new Promise<never>((_, reject) => {
|
new Promise<never>((_, reject) => {
|
||||||
timer = setTimeout(() => reject(new SandboxError("timeout", `沙箱任务 ${job} 超时(进程内)`)), timeoutMs);
|
timer = setTimeout(() => reject(new SandboxError("timeout", `沙箱任务 ${job} 超时(进程内)`)), timeoutMs);
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ export async function sandboxWorkerMain(): Promise<void> {
|
|||||||
try {
|
try {
|
||||||
const req = JSON.parse(await new Response(Deno.stdin.readable).text()) as { job: string; input: unknown };
|
const req = JSON.parse(await new Response(Deno.stdin.readable).text()) as { job: string; input: unknown };
|
||||||
const fn = (SANDBOX_JOBS as Record<string, (i: unknown) => unknown>)[req.job];
|
const fn = (SANDBOX_JOBS as Record<string, (i: unknown) => unknown>)[req.job];
|
||||||
if (!fn) throw new Error(`没有这个沙箱任务:${req.job}`);
|
if (!fn) throw new Error(`没有这个沙箱任务:${req.job}`);
|
||||||
out = { ok: true, result: await fn(req.input) };
|
out = { ok: true, result: await fn(req.input) };
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
out = { ok: false, error: `${(e as Error).name}: ${(e as Error).message}`.slice(0, 2000) };
|
out = { ok: false, error: `${(e as Error).name}: ${(e as Error).message}`.slice(0, 2000) };
|
||||||
|
|||||||
Reference in new issue
Block a user