fix: docker 默认 runner 支持 env + 并发开通竞态复用
翻转实弹暴露的两个 #88 缺口: - _docker_default_runner 不接受 env,_call_runner 遇 env 即 loud fail, 导致 sub2api 路径下所有 docker 任务失败(xcmapi 路径不传 env, 此前未暴露)。默认 runner 现接受 env 并与进程环境合并后传给 docker CLI 子进程(-e <名> 由此解析,值绝不进 argv)。 - 同一用户两任务并发开通时建号撞 email 已存在:现轮询复用 胜出者入库的行,等不到再原错抛出。 测试:sub2api 16、docker 沙箱 29;全量 cloud 789(4 跳过)、 host 65、deploy 19 全绿。
This commit is contained in:
1 parent
99efa93bd3
commit
4936db3c47
4 files changed
+90
-5
No files matched your search
+13
-3
@@ -1382,10 +1382,20 @@ def _parse_host_result(task_id, fake):
|
||||
}
|
||||
|
||||
|
||||
def _docker_default_runner(cmd, timeout=None):
|
||||
"""docker 的默认 runner:subprocess.run,支持 timeout。"""
|
||||
def _docker_default_runner(cmd, timeout=None, env=None):
|
||||
"""docker 的默认 runner:subprocess.run,支持 timeout 与 env。
|
||||
|
||||
env 非空时与当前进程环境合并后传给 docker CLI 子进程
|
||||
(-e <名> 的密钥值由此解析,绝不进 argv;只替换不合并会
|
||||
丢 PATH/HOME,docker CLI 本身都跑不起来)。#88 只给
|
||||
_call_runner 加了 env 透传却没给默认 runner 加 env 参数,
|
||||
导致生产 docker 任务一律 loud fail,本补丁补上。
|
||||
"""
|
||||
full_env = dict(os.environ)
|
||||
if env:
|
||||
full_env.update(env)
|
||||
return subprocess.run(cmd, capture_output=True, text=True,
|
||||
timeout=timeout)
|
||||
timeout=timeout, env=full_env)
|
||||
|
||||
|
||||
class CloudExecutor(Executor):
|
||||
|
||||
Reference in new issue
Block a user