Skip to content

turbo-tasks-backend: fix snapshot coordination races + extract SnapshotCoordinator#93416

Merged
lukesandberg merged 6 commits intocanaryfrom
slightly_more_crash_safety
May 4, 2026
Merged

turbo-tasks-backend: fix snapshot coordination races + extract SnapshotCoordinator#93416
lukesandberg merged 6 commits intocanaryfrom
slightly_more_crash_safety

Conversation

@lukesandberg
Copy link
Copy Markdown
Contributor

@lukesandberg lukesandberg commented May 1, 2026

Hold a lock while persisting so two snapshots cannot execute concurrently

  • Currently if stop is called while an idle snapshot is running, then snapshotting can race with itself, this can corrupt the use of the in_progress_operations parameter since two threads will fetch_or with it and wait for the bit to be cleared

Abort the process if panic! occurs during task spawning

  • Currently if try_start_task_execution panics it ends up hanging a task which can deadlock the process, in this case we have no better option than to just log and abort.
  • I considered strategies that would 'poison' the task or possibly all of turbo-tasks and this is attractive but i believe fundamentally unsafe, the most likely cause of these panics is something wrong with state tracking in the backend, so exiting is all we can do

Copy link
Copy Markdown
Contributor Author

lukesandberg commented May 1, 2026

@github-actions github-actions Bot added created-by: Turbopack team PRs by the Turbopack team. Turbopack Related to Turbopack with Next.js. labels May 1, 2026
Comment thread turbopack/crates/turbo-tasks/src/manager.rs Outdated
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 1, 2026

Stats from current PR

✅ No significant changes detected

📊 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) 812ms 811ms ▃▃▁▁▆
Cold (Ready in log) 773ms 772ms ▁▄▃▂▄
Cold (First Request) 1.195s 1.198s ▁▆▂▃▇
Warm (Listen) 811ms 810ms ▁▁▁▁▁
Warm (Ready in log) 772ms 772ms ▁▄▃▂▅
Warm (First Request) 572ms 570ms ▁▅▄▃▆

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 4.962s 4.976s ▁▇▁▃▆
Cached Build 4.948s 4.971s ▁▅▂▂▆
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
node_modules Size 494 MB 494 MB ▅▅▇▇█
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles
Canary PR Change
04f_yppvzjwz4.js gzip 8.56 kB N/A -
067sxj52k1eot.js gzip 156 B N/A -
0c3t8_jjpep4b.js gzip 10.1 kB N/A -
0cz1d0mv5g_q7.js gzip 39.4 kB 39.4 kB
0da2x72a59t38.js gzip 155 B N/A -
0eoi7fyufnxxy.js gzip 10.4 kB N/A -
0fli3_wppnim5.js gzip 12.9 kB N/A -
0h_9m7k97-2iw.js gzip 167 B N/A -
0iajsj_q0jw0m.js gzip 153 B N/A -
0lgxd2j6fq-6d.js gzip 156 B N/A -
0pwy28qdxiamv.js gzip 9.82 kB N/A -
0t0o81rw_yp50.js gzip 8.51 kB N/A -
0w85nsdug44r_.js gzip 156 B N/A -
0wxpyd8r-vipl.js gzip 1.47 kB N/A -
0y8qo7_v_35qs.js gzip 155 B N/A -
10dq762zoi4ir.js gzip 156 B N/A -
10nsskx6qxplf.js gzip 5.74 kB N/A -
131aa2a5djsap.js gzip 161 B N/A -
156al_6j3pz-v.js gzip 70.8 kB N/A -
16lhqjoqbznyg.js gzip 220 B 220 B
1cgcsmbb9p2a-.js gzip 8.59 kB N/A -
1elt1qium-r2m.css gzip 115 B 115 B
1o21vm0uu7kvw.js gzip 49.5 kB N/A -
1q4j6c94t8npp.js gzip 8.62 kB N/A -
1sc2bbg31rhso.js gzip 65.6 kB N/A -
1xvr1unlkbace.js gzip 154 B N/A -
2__-e_ym8n788.js gzip 450 B N/A -
22o6xd9_ywdu6.js gzip 233 B N/A -
2f71ojcamzra_.js gzip 7.61 kB N/A -
2faj3acmavn9n.js gzip 13.1 kB N/A -
2g430q8a-_b5t.js gzip 8.51 kB N/A -
2jng81nvy_c41.js gzip 151 B N/A -
2s3k_b9acwpqh.js gzip 8.6 kB N/A -
342ijzvrpe53h.js gzip 2.29 kB N/A -
36v24g62pdqy6.js gzip 13.4 kB N/A -
3f3neurl5ikkq.js gzip 156 B N/A -
3f641_wrg14mf.js gzip 8.56 kB N/A -
3qj99grf348v3.js gzip 160 B N/A -
3u9hyuc0c-9bm.js gzip 9.24 kB N/A -
40mrbpnj40pxt.js gzip 8.58 kB N/A -
42_02jza_7yny.js gzip 13.8 kB N/A -
turbopack-06..e6d0.js gzip 4.2 kB N/A -
turbopack-0w..0a2u.js gzip 4.2 kB N/A -
turbopack-0x..j0wj.js gzip 4.18 kB N/A -
turbopack-2h..kky6.js gzip 4.2 kB N/A -
turbopack-2k..ew6s.js gzip 4.2 kB N/A -
turbopack-2m..2375.js gzip 4.21 kB N/A -
turbopack-2n..9stx.js gzip 4.2 kB N/A -
turbopack-32..-h6a.js gzip 4.2 kB N/A -
turbopack-36..j0h4.js gzip 4.2 kB N/A -
turbopack-37..pxel.js gzip 4.2 kB N/A -
turbopack-3a..cdzm.js gzip 4.2 kB N/A -
turbopack-3f..3oe4.js gzip 4.2 kB N/A -
turbopack-3g..3e90.js gzip 4.2 kB N/A -
turbopack-45..nvab.js gzip 4.2 kB N/A -
0_4irlhf-eu2n.js gzip N/A 7.61 kB -
015fp73x09mcj.js gzip N/A 161 B -
0eijy0qw1gk23.js gzip N/A 8.6 kB -
0le50p12k7unx.js gzip N/A 157 B -
0nyq7ok4h121t.js gzip N/A 155 B -
0tw4p3-seuas4.js gzip N/A 65.5 kB -
0w5ros43lpnrx.js gzip N/A 70.8 kB -
0wh9j68i3dfq3.js gzip N/A 8.56 kB -
0xqhfcdi7u9f9.js gzip N/A 10.1 kB -
1-jqyfc89tixo.js gzip N/A 1.46 kB -
14t1kneseb8th.js gzip N/A 2.3 kB -
16dveru-o4vft.js gzip N/A 8.58 kB -
19cp0pggb09-4.js gzip N/A 13.4 kB -
1ab2xruymo-oj.js gzip N/A 449 B -
1b82lh0rann9c.js gzip N/A 8.52 kB -
1dt49_v4y8lxb.js gzip N/A 13.8 kB -
1rja0tc5kflqo.js gzip N/A 8.6 kB -
1vmibvuhp1gey.js gzip N/A 13.1 kB -
2-6i3kbm6sloo.js gzip N/A 156 B -
20ofgj-hxwpgn.js gzip N/A 155 B -
20zbtfumqpign.js gzip N/A 157 B -
21_40keafx_7c.js gzip N/A 152 B -
24oxpxiuav7lx.js gzip N/A 157 B -
25qfzj840qqn1.js gzip N/A 8.56 kB -
2jnh2sasxh7gr.js gzip N/A 49.5 kB -
2u_rpxq3tzytl.js gzip N/A 233 B -
2ubnee7w6irme.js gzip N/A 157 B -
2zy2k0ys7jgl1.js gzip N/A 10.4 kB -
368lim5wq0o0r.js gzip N/A 12.9 kB -
39swhvfsmr6q-.js gzip N/A 167 B -
3druob2gm1rqz.js gzip N/A 5.74 kB -
3nf7p0wqhetky.js gzip N/A 8.51 kB -
3qdxjhv6jg219.js gzip N/A 161 B -
3su527zkc99te.js gzip N/A 9.24 kB -
41o9ez1zkmtz4.js gzip N/A 157 B -
41r2ewq33lqyi.js gzip N/A 158 B -
43kv63t-db7vv.js gzip N/A 8.63 kB -
43x51bgxirzyn.js gzip N/A 9.82 kB -
turbopack-02..9p76.js gzip N/A 4.2 kB -
turbopack-0i..-7f9.js gzip N/A 4.2 kB -
turbopack-0o..qsjw.js gzip N/A 4.2 kB -
turbopack-15..jcys.js gzip N/A 4.2 kB -
turbopack-1d.._v1q.js gzip N/A 4.21 kB -
turbopack-1h..3prp.js gzip N/A 4.2 kB -
turbopack-1u..7yf0.js gzip N/A 4.2 kB -
turbopack-2i..6njg.js gzip N/A 4.2 kB -
turbopack-2m..7se_.js gzip N/A 4.2 kB -
turbopack-2y..jxaa.js gzip N/A 4.18 kB -
turbopack-31..0fvu.js gzip N/A 4.2 kB -
turbopack-3r..jfzr.js gzip N/A 4.2 kB -
turbopack-3x..9ncm.js gzip N/A 4.2 kB -
turbopack-41..khvw.js gzip N/A 4.2 kB -
Total 466 kB 466 kB ⚠️ +64 B

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 721 B 721 B
Total 721 B 721 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 429 B 433 B
Total 429 B 433 B ⚠️ +4 B

🔄 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
📎 Tarball URL
https://vercel-packages.vercel.app/next/commits/d2bde2da1219dc7ba7ee20e09c4452da8743ac0f/next

Commit: d2bde2d

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 1, 2026

Tests Passed

Commit: d2bde2d

@lukesandberg lukesandberg marked this pull request as ready for review May 1, 2026 20:15
@lukesandberg lukesandberg requested a review from a team May 1, 2026 20:15
@lukesandberg lukesandberg force-pushed the slightly_more_crash_safety branch from d9b6bc0 to 7375dff Compare May 1, 2026 22:44
@lukesandberg lukesandberg changed the title two reliability improvements turbo-tasks-backend: fix snapshot coordination races + extract SnapshotCoordinator May 1, 2026
@lukesandberg lukesandberg requested a review from bgw May 1, 2026 22:51
@lukesandberg lukesandberg force-pushed the slightly_more_crash_safety branch from 23b712c to 4378987 Compare May 2, 2026 05:43
Comment thread turbopack/crates/turbo-tasks-backend/src/backend/snapshot_coordinator.rs Outdated
Comment thread turbopack/crates/turbo-tasks-backend/src/backend/snapshot_coordinator.rs Outdated
Comment thread turbopack/crates/turbo-tasks-backend/src/backend/snapshot_coordinator.rs Outdated
Comment thread turbopack/crates/turbo-tasks-backend/src/backend/snapshot_coordinator.rs Outdated
Comment thread turbopack/crates/turbo-tasks-backend/src/backend/snapshot_coordinator.rs Outdated
Comment thread turbopack/crates/turbo-tasks-backend/src/backend/snapshot_coordinator.rs Outdated
Comment thread turbopack/crates/turbo-tasks-backend/src/backend/snapshot_coordinator.rs Outdated
Comment thread turbopack/crates/turbo-tasks/src/manager.rs Outdated
Comment thread turbopack/crates/turbo-tasks-backend/src/backend/mod.rs Outdated
Comment thread turbopack/crates/turbo-tasks-backend/src/backend/snapshot_coordinator.rs Outdated
@lukesandberg lukesandberg force-pushed the slightly_more_crash_safety branch from 4378987 to d2bde2d Compare May 4, 2026 20:08
@lukesandberg lukesandberg enabled auto-merge (squash) May 4, 2026 20:11
@lukesandberg lukesandberg merged commit 2e1e595 into canary May 4, 2026
342 of 346 checks passed
@lukesandberg lukesandberg deleted the slightly_more_crash_safety branch May 4, 2026 22:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

created-by: Turbopack team PRs by the Turbopack team. Turbopack Related to Turbopack with Next.js.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants