Skip to content

analytics dataset 路由:另有九处「作者/调用方形状」的 dataset 拒收仍答 500 —— 它们从来没进过 #5352 的正则名单,所以 #5367 的信封化也没覆盖到 #5716

Description

@os-zhuang

背景

#5352 / PR #5366POST /analytics/dataset/query 的 catch 先读 ADR-0112 信封,并留下一串写死的 message 正则兜底(六族)。#5367 / PR(本单的来源)把其中五族信封化成 DATASET_INVALID / 400 并删掉对应正则条目,只留 read-scope-sql 一条。

实现 #5367 时逐条读了 service-analytics 的全部 throw new Error(...),发现一个 #5352#5367 都没覆盖的集合:另有九处同样是调用方 / dataset 作者形状的拒收,它们既没有信封、也从来没进过那串正则,所以今天答的是 500 ANALYTICS_QUERY_FAILED —— 与已修好的五族是同一个缺陷,只是当初没被点名,因此也没有被任何退休时间表接管。

清单(行号基于 origin/main + #5367 的提交)

packages/services/service-analytics/src/dataset-compiler.ts

拒收 触发者
237 dataset 的 JOIN 跨 datasource(#5115 的编译期闸门) dataset 作者
260 include 里的 relationship 在对象上不存在 dataset 作者
271 include 路径超过 MAX_JOIN_HOPS 跳数上限 dataset 作者

packages/services/service-analytics/src/dataset-executor.ts

拒收 触发者
466 dateRange 里的日期解析不出来 请求(selection.timeDimensions[].dateRange)
511 compareTo.dimension 点名的 timeDimension 没有 dateRange 请求(selection.compareTo)
524 compareTo 但整个 selection 没有任何带 dateRange 的 timeDimension 请求
532 compareTo.dimension 有歧义(多个 timeDimension 带 dateRange) 请求

packages/services/service-analytics/src/strategies/native-sql-strategy.ts

拒收 触发者
468 cube 上没有这个 measure(#4157COUNT(*) 静默兜底改成拒收的那一处) 请求(selection.measures)
487 measure 的 type 不认识 cube / dataset 作者

七处的输入直接来自 HTTP 请求体的 selection,两处来自调用方内联 POST 的 dataset(Studio 预览)或作者保存的 dataset。全部符合 4xx。

为什么值得单独立一条

明确不在此列

验收建议

  1. 逐处判 code/status(给出理由),通过 datasetInvalidError 或按需新增同形构造器抛出。
  2. 每处至少一条生产方单测(code/status/message 指名内容)+ 端到端 REST 断言,形状照 packages/rest/src/analytics-dataset-refusal-envelope.test.ts
  3. changeset 必须写明这是可见的行为变更(500 → 4xx),照 analytics 的 filter 拒收到不了调用方:service 侧多数拒收没有 ADR-0112 信封,REST 面又用 message 正则嗅探,一律答 500 #5352 changeset 里 "Observable behaviour change — read this if you alert or retry on status" 那一段的写法。

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions