Skip to content

Include deployment id in cacheHandlers keys#93453

Merged
mischnic merged 5 commits into
canaryfrom
mischnic/use-cache-key-build-id
May 4, 2026
Merged

Include deployment id in cacheHandlers keys#93453
mischnic merged 5 commits into
canaryfrom
mischnic/use-cache-key-build-id

Conversation

@mischnic

@mischnic mischnic commented May 4, 2026

Copy link
Copy Markdown
Member

How was this ever working for dev? In that case, buildId = "development" and so it always uses the same cache key

mischnic commented May 4, 2026

Copy link
Copy Markdown
Member Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@mischnic mischnic changed the title Add test Include deployment id in cacheHandlers keys May 4, 2026
@mischnic mischnic marked this pull request as ready for review May 4, 2026 08:00
@mischnic mischnic requested review from unstubbable and ztanner May 4, 2026 08:19
@github-actions

github-actions Bot commented May 4, 2026

Copy link
Copy Markdown
Contributor

Tests Passed

Commit: c3228ce

@unstubbable unstubbable left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How was this ever working for dev? In that case, buildId = "development" and so it always uses the same cache key

In dev we also have the hmrRefreshHash as part of the cache key.

Comment thread test/e2e/app-dir/use-cache-cross-deployment/app/page.tsx Outdated
Comment thread test/e2e/app-dir/use-cache-cross-deployment/use-cache-cross-deployment.test.ts Outdated
Comment thread test/e2e/app-dir/use-cache-cross-deployment/use-cache-cross-deployment.test.ts Outdated
let key1 = await execute('value-1')
let key2 = await execute('value-2')
// Second run should not use the same key
expect(key1).not.toBe(key2)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This assertion doesn't work in dev.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It indeed fails because it reuses the cache. But is that intended behavior? What happens if you use a remote cache in dev?

@unstubbable unstubbable May 4, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

'use cache: remote' doesn't have that problem because it also only uses the in-memory one with next dev (or next start). But a custom remote cache handler would indeed have the problem with Turbopack, because the hmrRefreshHash is just an incrementing number there and not a real hash. I guess another reason we need the implementation hash.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So I'll just move this to test/production for now?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah, sounds good to me

@mischnic mischnic requested a review from unstubbable May 4, 2026 11:56
@github-actions

github-actions Bot commented May 4, 2026

Copy link
Copy Markdown
Contributor

Stats from current PR

🟢 2 improvements

Metric Canary PR Change Trend
Turbo Build Time 5.346s 5.071s 🟢 275ms (-5%) ▂▁▇▁▃
Webpack Build Time 24.079s 23.532s 🟢 547ms (-2%) ▇▅▆▅▁
📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

  • Listen = TCP port starts accepting connections
  • First Request = HTTP server returns successful response
  • Cold = Fresh build (no cache)
  • Warm = With cached build artifacts

Build Metrics:

  • Fresh = Clean build (no .next directory)
  • Cached = With existing .next directory

Change Thresholds:

  • Time: Changes < 50ms AND < 10%, OR < 2% are insignificant
  • Size: Changes < 1KB AND < 1% are insignificant
  • All other changes are flagged to catch regressions

⚡ Dev Server

Metric Canary PR Change Trend
Cold (Listen) 811ms 811ms ▆▃▃▁▁
Cold (Ready in log) 783ms 782ms ▁▁▄▃▂
Cold (First Request) 1.257s 1.253s ▂▁▆▂▃
Warm (Listen) 811ms 811ms ▁▁▁▁▁
Warm (Ready in log) 790ms 787ms ▁▁▄▃▂
Warm (First Request) 611ms 601ms ▁▁▅▄▃
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change Trend
Cold (Listen) 810ms 810ms █▃▆▁▁
Cold (Ready in log) 784ms 784ms ▄▇▇█▆
Cold (First Request) 3.173s 3.192s ▅▄█▄▃
Warm (Listen) 810ms 809ms █▁▆▃▃
Warm (Ready in log) 785ms 787ms ▅█▆▇▅
Warm (First Request) 3.188s 3.192s █▇█▆▃

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 5.346s 5.071s 🟢 275ms (-5%) ▂▁▇▁▃
Cached Build 5.155s 5.136s ▁▁▅▂▂
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
Fresh Build 24.079s 23.532s 🟢 547ms (-2%) ▇▅▆▅▁
Cached Build 23.530s 23.617s ▇▅█▅▄
node_modules Size 495 MB 495 MB ▁▇▇██
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles
Canary PR Change
0_hrwedmp0y67.js gzip 157 B N/A -
06cm9et13gegw.js gzip 157 B N/A -
0cz1d0mv5g_q7.js gzip 39.4 kB 39.4 kB
0do9amtm-lzxj.js gzip 70.9 kB N/A -
0fli3_wppnim5.js gzip 12.9 kB N/A -
0kb7_ep3r1z0_.js gzip 10.1 kB N/A -
0kw8xgqdrilf6.js gzip 8.56 kB N/A -
0n20a8_hjmhhu.js gzip 168 B N/A -
0ojkk2e654xsc.js gzip 8.59 kB N/A -
0wxpyd8r-vipl.js gzip 1.47 kB N/A -
0xy2fhla48_rd.js gzip 9.24 kB N/A -
0zjaaqkbd8121.js gzip 160 B N/A -
10nsskx6qxplf.js gzip 5.74 kB N/A -
10wqsvi2mgfmi.js gzip 9.82 kB N/A -
16lhqjoqbznyg.js gzip 220 B 220 B
16vepdkipri3r.js gzip 8.51 kB N/A -
17n96uu6y1pxq.js gzip 8.6 kB N/A -
18y4_8-9or0mn.js gzip 8.51 kB N/A -
1elt1qium-r2m.css gzip 115 B 115 B
1gq145j3kps-h.js gzip 8.62 kB N/A -
1nsh-mbn0e-se.js gzip 8.56 kB N/A -
1o21vm0uu7kvw.js gzip 49.5 kB N/A -
1pxwevr_ix-se.js gzip 156 B N/A -
1sc2bbg31rhso.js gzip 65.6 kB N/A -
1zlnkrpbgpm5f.js gzip 157 B N/A -
2__-e_ym8n788.js gzip 450 B N/A -
22o6xd9_ywdu6.js gzip 233 B N/A -
25n272-g99oa1.js gzip 7.61 kB N/A -
28nifv1zvy1fx.js gzip 153 B N/A -
2faj3acmavn9n.js gzip 13.1 kB N/A -
2ofhif09as1ct.js gzip 155 B N/A -
2oup1qq375b94.js gzip 155 B N/A -
2qv7m7xjnokgr.js gzip 8.58 kB N/A -
3-45q7coji9x4.js gzip 152 B N/A -
342ijzvrpe53h.js gzip 2.29 kB N/A -
3k1k5gtofm6eq.js gzip 10.4 kB N/A -
3mgtq3oh99qfy.js gzip 155 B N/A -
3x383ah3ujha9.js gzip 13.4 kB N/A -
3y208rmdqxeiv.js gzip 154 B N/A -
41nka3hwq9j9l.js gzip 161 B N/A -
42_02jza_7yny.js gzip 13.8 kB N/A -
turbopack-0e..682w.js gzip 4.2 kB N/A -
turbopack-0l..v0sg.js gzip 4.2 kB N/A -
turbopack-0q..5ns6.js gzip 4.2 kB N/A -
turbopack-0s..ykh5.js gzip 4.18 kB N/A -
turbopack-0s..7ylm.js gzip 4.2 kB N/A -
turbopack-0y..ue2t.js gzip 4.21 kB N/A -
turbopack-0y..cqss.js gzip 4.2 kB N/A -
turbopack-1-..qj4d.js gzip 4.2 kB N/A -
turbopack-27..k6r7.js gzip 4.2 kB N/A -
turbopack-2n..-6b5.js gzip 4.2 kB N/A -
turbopack-2q..j19p.js gzip 4.2 kB N/A -
turbopack-34..7-6k.js gzip 4.2 kB N/A -
turbopack-35..7wuy.js gzip 4.2 kB N/A -
turbopack-3a..v8_2.js gzip 4.2 kB N/A -
01nrteri4mv8o.js gzip N/A 157 B -
0arkbdqpxc37i.js gzip N/A 8.6 kB -
0bz-xifewa17d.js gzip N/A 8.63 kB -
0nogxzbvdqyky.js gzip N/A 156 B -
0obczpwf8h_1q.js gzip N/A 159 B -
0preci4jxj2yb.js gzip N/A 160 B -
0tvekitj587fh.js gzip N/A 8.51 kB -
0tw4p3-seuas4.js gzip N/A 65.5 kB -
1-8hd75j-rrau.js gzip N/A 157 B -
1-jqyfc89tixo.js gzip N/A 1.46 kB -
10y3h86mnhs_2.js gzip N/A 10.4 kB -
14t1kneseb8th.js gzip N/A 2.3 kB -
15sb1-dsqfk_j.js gzip N/A 8.59 kB -
187uwjtzuz2xk.js gzip N/A 13.4 kB -
1ab2xruymo-oj.js gzip N/A 449 B -
1dt49_v4y8lxb.js gzip N/A 13.8 kB -
1fdk59z35kh9z.js gzip N/A 168 B -
1kc6ts53kxb2_.js gzip N/A 157 B -
1kmvq14wmdgm9.js gzip N/A 70.9 kB -
1tu25qtsmfhar.js gzip N/A 9.82 kB -
1vein_gnv3mwr.js gzip N/A 8.56 kB -
1vmibvuhp1gey.js gzip N/A 13.1 kB -
1wzrm0xjjbzn5.js gzip N/A 10.1 kB -
1yy71curzmmq5.js gzip N/A 154 B -
1z3g0uaqtv9_3.js gzip N/A 8.56 kB -
202xns1pj2rqz.js gzip N/A 157 B -
2bi5hx402juv-.js gzip N/A 8.58 kB -
2d3y32az_vq9s.js gzip N/A 155 B -
2hy56297fog9u.js gzip N/A 8.52 kB -
2jnh2sasxh7gr.js gzip N/A 49.5 kB -
2u_rpxq3tzytl.js gzip N/A 233 B -
35nh2lh_i5pyh.js gzip N/A 7.61 kB -
368lim5wq0o0r.js gzip N/A 12.9 kB -
3c5fwj7l7n-i_.js gzip N/A 155 B -
3druob2gm1rqz.js gzip N/A 5.74 kB -
3fr-zb_qbc76q.js gzip N/A 157 B -
3wpp8nvyoj121.js gzip N/A 9.24 kB -
3xxyduxqmhsp2.js gzip N/A 155 B -
turbopack-09.._x4z.js gzip N/A 4.2 kB -
turbopack-1g..2gt9.js gzip N/A 4.2 kB -
turbopack-1s..2p6x.js gzip N/A 4.2 kB -
turbopack-1t..bnhj.js gzip N/A 4.2 kB -
turbopack-1v..ek1j.js gzip N/A 4.2 kB -
turbopack-20..ggb7.js gzip N/A 4.2 kB -
turbopack-23..p0hl.js gzip N/A 4.2 kB -
turbopack-2d..yy5x.js gzip N/A 4.2 kB -
turbopack-2f..dary.js gzip N/A 4.21 kB -
turbopack-2t..xz8h.js gzip N/A 4.2 kB -
turbopack-2u..cbdl.js gzip N/A 4.18 kB -
turbopack-3c..ql3q.js gzip N/A 4.2 kB -
turbopack-3u..cn7o.js gzip N/A 4.2 kB -
turbopack-43..53x4.js gzip N/A 4.2 kB -
Total 466 kB 466 kB ⚠️ +65 B

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 720 B 722 B
Total 720 B 722 B ⚠️ +2 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 433 B 431 B
Total 433 B 431 B ✅ -2 B

📦 Webpack

Client

Main Bundles
Canary PR Change
2637-HASH.js gzip 4.68 kB N/A -
7724.HASH.js gzip 169 B N/A -
8274-HASH.js gzip 61.4 kB N/A -
8817-HASH.js gzip 5.63 kB N/A -
c3500254-HASH.js gzip 62.8 kB N/A -
framework-HASH.js gzip 59.7 kB 59.7 kB
main-app-HASH.js gzip 254 B 255 B
main-HASH.js gzip 39.4 kB 39.4 kB
webpack-HASH.js gzip 1.68 kB 1.68 kB
5887-HASH.js gzip N/A 5.65 kB -
6522-HASH.js gzip N/A 60.7 kB -
6779-HASH.js gzip N/A 4.67 kB -
8854.HASH.js gzip N/A 169 B -
eab920f9-HASH.js gzip N/A 62.8 kB -
Total 236 kB 235 kB ✅ -644 B
Polyfills
Canary PR Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Total 39.4 kB 39.4 kB
Pages
Canary PR Change
_app-HASH.js gzip 193 B 193 B
_error-HASH.js gzip 182 B 182 B
css-HASH.js gzip 333 B 334 B
dynamic-HASH.js gzip 1.81 kB 1.8 kB
edge-ssr-HASH.js gzip 255 B 255 B
head-HASH.js gzip 353 B 349 B 🟢 4 B (-1%)
hooks-HASH.js gzip 384 B 382 B
image-HASH.js gzip 581 B 581 B
index-HASH.js gzip 260 B 259 B
link-HASH.js gzip 2.52 kB 2.52 kB
routerDirect..HASH.js gzip 316 B 318 B
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 313 B 314 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Total 7.99 kB 7.98 kB ✅ -10 B

Server

Edge SSR
Canary PR Change
edge-ssr.js gzip 126 kB 126 kB
page.js gzip 274 kB 274 kB
Total 400 kB 399 kB ✅ -498 B
Middleware
Canary PR Change
middleware-b..fest.js gzip 617 B 615 B
middleware-r..fest.js gzip 156 B 156 B
middleware.js gzip 44.3 kB 44.6 kB
edge-runtime..pack.js gzip 842 B 842 B
Total 45.9 kB 46.3 kB ⚠️ +329 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 722 B 719 B
Total 722 B 719 B ✅ -3 B
Build Cache
Canary PR Change
0.pack gzip 4.44 MB 4.43 MB 🟢 7.84 kB (0%)
index.pack gzip 115 kB 114 kB
index.pack.old gzip 116 kB 115 kB 🟢 1.29 kB (-1%)
Total 4.67 MB 4.66 MB ✅ -9.75 kB

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 349 kB 349 kB
app-page-exp..prod.js gzip 193 kB 193 kB
app-page-tur...dev.js gzip 348 kB 348 kB
app-page-tur..prod.js gzip 193 kB 193 kB
app-page-tur...dev.js gzip 345 kB 345 kB
app-page-tur..prod.js gzip 191 kB 191 kB
app-page.run...dev.js gzip 345 kB 345 kB
app-page.run..prod.js gzip 191 kB 191 kB
app-route-ex...dev.js gzip 77.4 kB 77.4 kB
app-route-ex..prod.js gzip 52.8 kB 52.8 kB
app-route-tu...dev.js gzip 77.4 kB 77.4 kB
app-route-tu..prod.js gzip 52.8 kB 52.8 kB
app-route-tu...dev.js gzip 77 kB 77 kB
app-route-tu..prod.js gzip 52.6 kB 52.6 kB
app-route.ru...dev.js gzip 77 kB 77 kB
app-route.ru..prod.js gzip 52.6 kB 52.6 kB
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 44.2 kB 44.2 kB
pages-api-tu..prod.js gzip 33.7 kB 33.7 kB
pages-api.ru...dev.js gzip 44.2 kB 44.2 kB
pages-api.ru..prod.js gzip 33.7 kB 33.7 kB
pages-turbo....dev.js gzip 53.7 kB 53.7 kB
pages-turbo...prod.js gzip 39.4 kB 39.4 kB
pages.runtim...dev.js gzip 53.7 kB 53.7 kB
pages.runtim..prod.js gzip 39.4 kB 39.4 kB
server.runti..prod.js gzip 63.1 kB 63.1 kB
Total 3.08 MB 3.08 MB ⚠️ +217 B
📝 Changed Files (16 files)

Files with changes:

  • app-page-exp..ntime.dev.js
  • app-page-exp..time.prod.js
  • app-page-tur..ntime.dev.js
  • app-page-tur..time.prod.js
  • app-page-tur..ntime.dev.js
  • app-page-tur..time.prod.js
  • app-page.runtime.dev.js
  • app-page.runtime.prod.js
  • app-route-ex..ntime.dev.js
  • app-route-ex..time.prod.js
  • app-route-tu..ntime.dev.js
  • app-route-tu..time.prod.js
  • app-route-tu..ntime.dev.js
  • app-route-tu..time.prod.js
  • app-route.runtime.dev.js
  • app-route.ru..time.prod.js
View diffs
app-page-exp..ntime.dev.js
failed to diff
app-page-exp..time.prod.js

Diff too large to display

app-page-tur..ntime.dev.js
failed to diff
app-page-tur..time.prod.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page-tur..time.prod.js
failed to diff
app-page.runtime.dev.js
failed to diff
app-page.runtime.prod.js

Diff too large to display

app-route-ex..ntime.dev.js

Diff too large to display

app-route-ex..time.prod.js

Diff too large to display

app-route-tu..ntime.dev.js

Diff too large to display

app-route-tu..time.prod.js

Diff too large to display

app-route-tu..ntime.dev.js

Diff too large to display

app-route-tu..time.prod.js

Diff too large to display

app-route.runtime.dev.js

Diff too large to display

app-route.ru..time.prod.js

Diff too large to display

📎 Tarball URL
https://vercel-packages.vercel.app/next/commits/c3228cea6f42be263615e1e145632b504837b12f/next

Commit: c3228ce

@mischnic mischnic merged commit 07f7641 into canary May 4, 2026
340 of 342 checks passed
@mischnic mischnic deleted the mischnic/use-cache-key-build-id branch May 4, 2026 16:26
gnoff added a commit that referenced this pull request May 5, 2026
Backport #93453 to 16.2

How was this ever working for dev? In that case, `buildId =
"development"` and so it always uses the same cache key

Co-authored-by: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com>
@github-actions github-actions Bot locked as resolved and limited conversation to collaborators May 19, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants