getsentry / getsentry/sentry-javascript
Link cache-hits to the trace that filled the cache entry
- 主要语言
- 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