Skip to content

生成任务的四处待处理:付费调用无上限、无优雅退出、起线程失败静默成功、生成期独占 DB 连接 #145

Description

@johnnyzhang-eng

四条在 xiaocheny214/DireSoul:feat/backend-dev @ 4ee4236#75 的 head)上核实。都涉及设计取舍,记在这里备查,不阻塞合并。

P0 · num_images / num_frames 无上限,直通付费循环

generation.py:88,101le=executor.py:367for _ in range(max(1, input.num_images)),循环体是付费 gen_image

实测 num_images=100000 被接受并原样落库。ratelimit.py:92 在 Redis 不可用时 return await call_next(request),即整体放行,每分钟 60 次的兜底也没有。

P0 · daemon 线程 + 无优雅退出

generation.py:149daemon=True 线程;bootstrap/app.py_lifespanyield 后无任何处理(docstring 写「关闭时无特殊处理」)。backend/packages/atexit|signal\.|\.join\(\)|on_shutdown|add_event_handler 零命中。

每次 deploy / reload 杀掉正在跑的 i2v:RUNNING 已 commit、费用已产生,COMPLETED 永不写入,重启后无扫描逻辑回收。生成数分钟,轮询上限 30 分钟(sufy.py:53-61)。

P1 · 起线程失败时静默返回 200

_dispatch_after_commitafter_commitget_session teardown 时触发,此刻响应已生成。Thread.start()RuntimeError 时客户端已拿到 200「任务已提交」+ task id,DB 里一行 pending 无人执行,前端一直轮询。

P1 · 生成全程独占一条 DB 连接

executor.py:165_load_constraints 发 SELECT(autobegin),:166_produce_action 随即跑数分钟,其间不 commit / close。实测生成期间 pool.checkedout() 恒为 1。

config/database.py:28-29pool_size=5, max_overflow=10,15 条封顶。15 个并发生成即耗尽连接池,此后所有 HTTP 请求(含前端轮询)阻塞在等连接,表现为整站假死。run_image_task 同(:302-303)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions