feat/export-service
main
针对「函数数量没有限制,可能生成数百 MB 的 SVG」,为导出链路增加资源上限:
app/plot/parser.py
_MAX_EXPRESSIONS = 16
FUNCTION_PLOT_TOO_MANY_EXPRESSIONS
app/export/exporters/html.py
_MAX_FUNCTION_PLOTS = 16
app/export/service.py
MAX_MARKDOWN_CHARS
MAX_EXPORT_BYTES
EXPORT_OPTIONS_INVALID
EXPORT_OUTPUT_TOO_LARGE
Export开发说明.md
🤖 Generated with Claude Code
审阅提交:124024a
124024a
上一轮提出的函数数量、输入大小和产物大小问题已经分别增加限制。本轮复审发现 1 个 P1、1 个 P3。
位置:backend/app/plot/parser.py:365–374
backend/app/plot/parser.py:365–374
当前分别限制了:
但是没有限制整篇文档的累计 AST 节点数或采样工作量,因此这些上限组合后仍然允许高开销输入。
实测一个包含 16 条表达式、每条由 150 项加法组成的图块:
包含 16 个此类图块的文档源码约 77 KB,仍低于输入上限,预计渲染约 13.7 秒,最终 SVG 也不会触发 20 MB 产物限制。
渲染运行在 asyncio.to_thread 中,期间无法响应取消信号。最多 100 个活动任务可同时进入队列,可能持续占满工作线程和 CPU。
asyncio.to_thread
建议:
位置:docs/development/Export开发说明.md:68–79
docs/development/Export开发说明.md:68–79
产物超限时:
POST /api/exports
202
failed
EXPORT_OUTPUT_TOO_LARGE`` 写入
GET
200
因此该错误不会通过 HTTP 413 返回。文档将它标记为 413,可能导致前端错误地按 HTTP 状态码处理。
413
建议将同步 HTTP 错误和异步任务错误分开记录,并注明该错误通过:
{ "status": "failed", "error_code": "EXPORT_OUTPUT_TOO_LARGE" }
返回,而不是 HTTP 413。
git diff --check
请修复组合资源预算问题并更新文档后再提交复审。
No dependencies set.
The note is not visible to the blocked user.
修复内容(PR #29 审阅 P1)
针对「函数数量没有限制,可能生成数百 MB 的 SVG」,为导出链路增加资源上限:
代码
app/plot/parser.py:单块 function-plot 表达式数量上限_MAX_EXPRESSIONS = 16,超限整块回退并记FUNCTION_PLOT_TOO_MANY_EXPRESSIONS诊断。app/export/exporters/html.py:单篇文档函数图像数量上限_MAX_FUNCTION_PLOTS = 16,超出部分回退为源码占位并记 warning。app/export/service.py:输入源MAX_MARKDOWN_CHARS(200k)与产物MAX_EXPORT_BYTES(20MB)上限,超限分别拒绝创建(EXPORT_OPTIONS_INVALID)或标记 failed(EXPORT_OUTPUT_TOO_LARGE)。测试
文档
Export开发说明.md资源上限章节与错误码表、契约 §10.5。🤖 Generated with Claude Code
审阅结论:请求修改,暂不建议合并
审阅提交:
124024a上一轮提出的函数数量、输入大小和产物大小问题已经分别增加限制。本轮复审发现 1 个 P1、1 个 P3。
[P1] 组合复杂度仍可长时间占满导出线程
位置:
backend/app/plot/parser.py:365–374当前分别限制了:
但是没有限制整篇文档的累计 AST 节点数或采样工作量,因此这些上限组合后仍然允许高开销输入。
实测一个包含 16 条表达式、每条由 150 项加法组成的图块:
包含 16 个此类图块的文档源码约 77 KB,仍低于输入上限,预计渲染约 13.7 秒,最终 SVG 也不会触发 20 MB 产物限制。
渲染运行在
asyncio.to_thread中,期间无法响应取消信号。最多 100 个活动任务可同时进入队列,可能持续占满工作线程和 CPU。建议:
[P3] `EXPORT_OUTPUT_TOO_LARGE`` 不会对应 HTTP 413
位置:
docs/development/Export开发说明.md:68–79产物超限时:
POST /api/exports已经返回202;failed;EXPORT_OUTPUT_TOO_LARGE`` 写入ExportJob.error_code`;GET请求取得任务状态,该请求仍返回200。因此该错误不会通过 HTTP
413返回。文档将它标记为413,可能导致前端错误地按 HTTP 状态码处理。建议将同步 HTTP 错误和异步任务错误分开记录,并注明该错误通过:
返回,而不是 HTTP 413。
验证结果
git diff --check:通过main:无冲突请修复组合资源预算问题并更新文档后再提交复审。
Pull request closed