getsentry / getsentry/sentry-javascript

Link cache-hits to the trace that filled the cache entry

未关闭
#24,294 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
javascript
主要语言
TypeScript
星标
8.7k
派生
1.8k
平均合并
1 天 17 小时
30 天内合并 PR
523

描述

*Example:* a product page uses

```
async function getProducts() {
'use cache';
cacheLife('hours');
return db.query('SELECT * FROM products');
}
```

Visitor A at 09:00 misses. The DB query runs, 800 ms, trace A. Visitor B at 14:00 gets a 2 ms hit and complains about yesterday's price. B's trace shows a fast green `cache.get` and nothing else. Trace A, where the content came from, cannot be found from B.

*Solves:* you can navigate from any cache hit to the render that produced the content. One bad render can serve thousands of visitors, and today the render is the one trace you cannot reach.

*Fix idea:* at handler `set`, store the active trace context keyed by cache-key digest (mechanism per the transport decision, 3.2). At a `get` hit, always attach a real span link: `span.addLink()` with `sentry.link.type: 'cache_origin'` pointing at the fill span. The link is unconditional and the durable data model; it renders in the span drawer today and needs no SDK change once Sentry stores links first-class. Separately, duplicate it into the flat bridge attribute, but only if the backend meeting lands on "EAP links take too long". The prototype verified the link round-trips. Acceptance: an E2E miss/hit pair shows the span link on the hit transaction, independent of the bridge attribute.

贡献指南

打开贡献指南

调研方向

首先定位 cache handler 的 set 和 get 路径,并检查第 3.2 节中的传输决策,然后检查现有 prototype 的 round-trip 行为。添加一个端到端的 miss/hit 用例,并验证 hit 事务会独立于扁平 bridge 属性显示 cache_origin span link。

由索引模型根据 Issue 内容生成。

评估

技术栈
typescript
领域
observability
Issue 类型
功能
难度
4/5
预计耗时
3-5 天
活跃度
活跃
描述清晰度
基本清楚
新手友好度
48/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。