Skip to main content

Module execute

Module execute 

Source
Expand description

代码执行 server functions:StartExec / GetExecResult。

StartExec 流程:速率限制 → 语言白名单 → 源码大小校验 → 入队(DashMap) → spawn 后台 task(信号量限并发 + clamp_limits + run_in_container)。 返回 task_id 供前端轮询。GetExecResult 读取任务条目。

错误脱敏:匿名可见错误(不支持的语言、超限、限流)返回中文消息;系统内部 异常(容器拉起失败等)记服务端日志,对前端返回统一「系统暂时不可用」。

双目标可见性:本模块 cfg-gate(server function 需对 WASM 可见以便客户端 调用),但所有 server-only 的 use 与全局静态量都单独 gate,使 WASM 侧仅保留 函数签名(body 被 server 宏剥离)。与 posts 模块的约定一致。

Statics§

RUNNER_SEMAPHORE
并发容器控制信号量,限制同时在跑的容器数量(CODE_RUNNER_MAX_CONCURRENT)。

Functions§

check_rate_limit_for_user 🔒
速率限制检查(admin 放行)。
client_ip 🔒
从 FullstackContext 提取客户端 IP(无上下文时退回 “unknown”)。
get_exec_result
查询任务执行结果(前端轮询)。
spawn_exec_task 🔒
后台执行容器任务的核心:信号量限并发 → clamp_limits → 调用 runner → 写 EXEC_TASKS。
start_exec
提交一次代码执行请求。
start_exec_stream
提交一次流式代码执行请求。
validate_exec_request 🔒
公共校验逻辑:速率限制 + 语言白名单 + 源码大小。