CRS 内部控制台

判定任务sampler:judgement_task

有终态、完成即删、高频改写。它必须有超时,与 lease 同构。

为什么这张表必须有超时

DEV-sampler.md §七 · 这是回调可靠性的一部分,不是优化

调度器有两道兜底:lease 超时、domain_judgement_task 超时。采样器自己这道不能缺。没有它会这样:

step步骤what happens发生什么
1采样任务卡死(render 持续 429、goroutine 挂了、样本页全超时)
2采样器不回调
3调度器的判定任务超时兜住了,它会重投
4sampler:judgement_task 永远躺着
5该域名在采样器视角里是「处理中」,不是 unknown
6★ 它不会出现在待定池里

⚠️ 待定池只能看见「采样器知道自己失败了」的那批,看不见「卡住了自己不知道」的那批 —— 而后者最需要外部介入。这是整个待定池机制里最容易漏的一个洞。

⚠️ 本机制与调度器的 domain_judgement_task 超时两层不冲突:调度器那道只兜「采样器完全没回调」(进程挂了),本服务这道兜「任务卡住但进程还活着」。

超时回收流程

扫 sampler:judgement_task,first_submitted_at 超时的

step步骤action动作
1sampler:domain_ruleverdict = unknownundetermined_reason = judgement_timeout
2POST scheduling-url/v1/rules
3删除 judgement_task

⚠️ unknown 必须回调,不能静默不回,含任务超时的情况。否则该域名会永远卡在调度器的 domain_judgement_task 里。

⚠️ 回收时照常写 domain_rule。不写表,同一域名每被链接一次就重新采样,真烧 3~5 次渲染。

进行中的任务

sampler:judgement_task:{task_id} · 唯一写入方 采样器

in progress进行中
1,204
reason = new新域名
986
reason = recheck复核
193
reason = manual人工
25
task_id任务标识 domain域名 reason提交原因 first_submitted_at首次提交时间 page_sample_count已采样页数 elapsed已用时长 state状态
t-9f31a04cforum.example.twnew 2026-08-15T07:41:12Z37 分钟 采样中
t-2b8e77d1wiki.example.jpnew 2026-08-15T07:38:44Z59 分钟 判定中
t-6c04ba39news.example.hkrecheck 2026-08-15T07:20:03Z428 分钟 采样中
t-51da0e88slow.example.comnew 2026-08-15T05:12:39Z12 小时 35 分 接近超时
t-73fbc215stuck.example.netmanual 2026-08-15T03:58:07Z03 小时 49 分 下轮回收

⚠️ 最后一行 page_sample_count = 0 且已用 3 小时 49 分:典型的「卡住了自己不知道」。下一轮扫描会把它改判 unknown / judgement_timeout 并推进待定池 —— 这正是本机制存在的理由

⚠️ reason 取值只有 new / recheck / manual 三个,定义在 CONTRACT.md §四。不得新增第四个取值,新增要走三方确认。

⚠️ 本表完整字段以 keyspace/schema.go 为准。文档明确提到的只有 first_submitted_at 与任务状态本身,本页不替 schema 定名 —— 表清单从代码生成,代码是唯一来源。

样本页选取

DEV-sampler.md §三 · 样本代表性直接决定判定准确率

priority优先级source来源note说明
1sitemap.xmlshould_render = false 取,随机选 3~5 条内容页
2首页渲染后提链接同域链接,优先路径较深的
3首页本身兜底,标 page_sample_count = 1置信度低

⚠️ 只取首页会误判 —— 很多站首页是 SSR(为了 SEO 和首屏),内容页才是 CSR。

⚠️ 排除登录页 / 注册页(内容极少,必然误判为 CSR)与 404 / 错误页。