四条在 xiaocheny214/DireSoul:feat/backend-dev @ 4ee4236(#75 的 head)上核实。都涉及设计取舍,记在这里备查,不阻塞合并。
P0 · num_images / num_frames 无上限,直通付费循环
generation.py:88,101 无 le=;executor.py:367 为 for _ 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:149 起 daemon=True 线程;bootstrap/app.py 的 _lifespan 在 yield 后无任何处理(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_commit 的 after_commit 在 get_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-29 为 pool_size=5, max_overflow=10,15 条封顶。15 个并发生成即耗尽连接池,此后所有 HTTP 请求(含前端轮询)阻塞在等连接,表现为整站假死。run_image_task 同(:302-303)。
四条在
xiaocheny214/DireSoul:feat/backend-dev@4ee4236(#75 的 head)上核实。都涉及设计取舍,记在这里备查,不阻塞合并。P0 ·
num_images/num_frames无上限,直通付费循环generation.py:88,101无le=;executor.py:367为for _ 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:149起daemon=True线程;bootstrap/app.py的_lifespan在yield后无任何处理(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_commit的after_commit在get_sessionteardown 时触发,此刻响应已生成。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-29为pool_size=5, max_overflow=10,15 条封顶。15 个并发生成即耗尽连接池,此后所有 HTTP 请求(含前端轮询)阻塞在等连接,表现为整站假死。run_image_task同(:302-303)。