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)。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions