-
Notifications
You must be signed in to change notification settings - Fork 30.3k
Turbopack: remove Stateful flag #88196
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
Allow CI Workflow Run
Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer |
1 similar comment
|
Allow CI Workflow Run
Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Additional Suggestion:
Undefined variable is_stateful used in verify_determinism check
View Details
📝 Patch Details
diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/update_cell.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/update_cell.rs
index e5408cb1f1..3128fe87ff 100644
--- a/turbopack/crates/turbo-tasks-backend/src/backend/operation/update_cell.rs
+++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/update_cell.rs
@@ -75,8 +75,7 @@ impl UpdateCellOperation {
// Check if this assumption holds.
#[cfg(feature = "verify_determinism")]
- if !is_stateful
- && matches!(verification_mode, VerificationMode::EqualityCheck)
+ if matches!(verification_mode, VerificationMode::EqualityCheck)
&& content != task.get_cell_data(is_serializable_cell_content, cell)
{
let task_description = ctx.get_task_description(task_id);
Analysis
The code on line 78 of turbopack/crates/turbo-tasks-backend/src/backend/operation/update_cell.rs referenced an undefined variable is_stateful in a verify_determinism conditional check:
if !is_stateful
&& matches!(verification_mode, VerificationMode::EqualityCheck)
&& content != task.get_cell_data(is_serializable_cell_content, cell)This variable was never defined in the run function, and inspection of the codebase shows that the Stateful flag and mark_stateful() method have been removed from the system. The is_stateful variable appears to be leftover code from before the Stateful flag removal.
According to the context, when the Stateful flag was removed, this code in UpdateCellOperation was supposed to be updated but wasn't. Since tasks are now always non-stateful (the Stateful flag no longer exists), the condition !is_stateful is always true and can be safely removed.
Fix Applied: Removed the !is_stateful && condition from line 78-79, leaving just the check for VerificationMode::EqualityCheck and the content comparison. This is logically correct since:
- The Stateful flag no longer exists in the system
- Tasks are now implicitly non-stateful
- The determinism verification should always apply to all tasks
Stats from current PR✅ No significant changes detected📊 All Metrics📖 Metrics GlossaryDev Server Metrics:
Build Metrics:
Change Thresholds:
⚡ Dev Server
📦 Dev Server (Webpack) (Legacy)📦 Dev Server (Webpack)
⚡ Production Builds
📦 Production Builds (Webpack) (Legacy)📦 Production Builds (Webpack)
📦 Bundle SizesBundle Sizes⚡ TurbopackClient Main Bundles: **431 kB** → **431 kB**
|
| Canary | PR | Change | |
|---|---|---|---|
| middleware-b..fest.js gzip | 785 B | 788 B | ✓ |
| Total | 785 B | 788 B |
Build Details
Build Manifests
| Canary | PR | Change | |
|---|---|---|---|
| _buildManifest.js gzip | 451 B | 451 B | ✓ |
| Total | 451 B | 451 B | ✓ |
📦 Webpack
Client
Main Bundles
| Canary | PR | Change | |
|---|---|---|---|
| 2086.HASH.js gzip | 169 B | N/A | - |
| 2161-HASH.js gzip | 5.4 kB | N/A | - |
| 2747-HASH.js gzip | 4.48 kB | N/A | - |
| 4322-HASH.js gzip | 52.7 kB | N/A | - |
| ec793fe8-HASH.js gzip | 62.3 kB | N/A | - |
| framework-HASH.js gzip | 59.8 kB | 59.8 kB | ✓ |
| main-app-HASH.js gzip | 250 B | 254 B | 🔴 +4 B (+2%) |
| main-HASH.js gzip | 38.6 kB | 38.9 kB | ✓ |
| webpack-HASH.js gzip | 1.68 kB | 1.68 kB | ✓ |
| 1596.HASH.js gzip | N/A | 169 B | - |
| 2658-HASH.js gzip | N/A | 52.5 kB | - |
| 6349-HASH.js gzip | N/A | 4.46 kB | - |
| 7019-HASH.js gzip | N/A | 5.42 kB | - |
| b17a3386-HASH.js gzip | N/A | 62.3 kB | - |
| Total | 225 kB | 225 kB |
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 | 194 B | 193 B | ✓ |
| _error-HASH.js gzip | 182 B | 182 B | ✓ |
| css-HASH.js gzip | 336 B | 335 B | ✓ |
| dynamic-HASH.js gzip | 1.8 kB | 1.8 kB | ✓ |
| edge-ssr-HASH.js gzip | 256 B | 256 B | ✓ |
| head-HASH.js gzip | 352 B | 349 B | ✓ |
| hooks-HASH.js gzip | 385 B | 384 B | ✓ |
| image-HASH.js gzip | 580 B | 580 B | ✓ |
| index-HASH.js gzip | 259 B | 258 B | ✓ |
| link-HASH.js gzip | 2.5 kB | 2.51 kB | ✓ |
| routerDirect..HASH.js gzip | 319 B | 317 B | ✓ |
| script-HASH.js gzip | 385 B | 387 B | ✓ |
| withRouter-HASH.js gzip | 316 B | 315 B | ✓ |
| 1afbb74e6ecf..834.css gzip | 106 B | 106 B | ✓ |
| Total | 7.97 kB | 7.96 kB | ✅ -8 B |
Server
Edge SSR
| Canary | PR | Change | |
|---|---|---|---|
| edge-ssr.js gzip | 124 kB | 124 kB | ✓ |
| page.js gzip | 240 kB | 241 kB | ✓ |
| Total | 364 kB | 365 kB |
Middleware
| Canary | PR | Change | |
|---|---|---|---|
| middleware-b..fest.js gzip | 652 B | 653 B | ✓ |
| middleware-r..fest.js gzip | 155 B | 156 B | ✓ |
| middleware.js gzip | 32.7 kB | 32.9 kB | ✓ |
| edge-runtime..pack.js gzip | 842 B | 842 B | ✓ |
| Total | 34.4 kB | 34.6 kB |
Build Details
Build Manifests
| Canary | PR | Change | |
|---|---|---|---|
| _buildManifest.js gzip | 738 B | 738 B | ✓ |
| Total | 738 B | 738 B | ✓ |
Build Cache
| Canary | PR | Change | |
|---|---|---|---|
| 0.pack gzip | 3.63 MB | 3.64 MB | 🔴 +6.86 kB (+0%) |
| index.pack gzip | 99.9 kB | 100 kB | ✓ |
| index.pack.old gzip | 99.2 kB | 99.5 kB | ✓ |
| Total | 3.83 MB | 3.84 MB |
🔄 Shared (bundler-independent)
Runtimes
| Canary | PR | Change | |
|---|---|---|---|
| app-page-exp...dev.js gzip | 303 kB | 303 kB | ✓ |
| app-page-exp..prod.js gzip | 158 kB | 158 kB | ✓ |
| app-page-tur...dev.js gzip | 303 kB | 303 kB | ✓ |
| app-page-tur..prod.js gzip | 158 kB | 158 kB | ✓ |
| app-page-tur...dev.js gzip | 299 kB | 299 kB | ✓ |
| app-page-tur..prod.js gzip | 156 kB | 156 kB | ✓ |
| app-page.run...dev.js gzip | 300 kB | 300 kB | ✓ |
| app-page.run..prod.js gzip | 156 kB | 156 kB | ✓ |
| app-route-ex...dev.js gzip | 68.7 kB | 68.7 kB | ✓ |
| app-route-ex..prod.js gzip | 47.5 kB | 47.5 kB | ✓ |
| app-route-tu...dev.js gzip | 68.7 kB | 68.7 kB | ✓ |
| app-route-tu..prod.js gzip | 47.6 kB | 47.6 kB | ✓ |
| app-route-tu...dev.js gzip | 68.3 kB | 68.3 kB | ✓ |
| app-route-tu..prod.js gzip | 47.3 kB | 47.3 kB | ✓ |
| app-route.ru...dev.js gzip | 68.3 kB | 68.3 kB | ✓ |
| app-route.ru..prod.js gzip | 47.3 kB | 47.3 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 | 41.1 kB | 41.1 kB | ✓ |
| pages-api-tu..prod.js gzip | 31.2 kB | 31.2 kB | ✓ |
| pages-api.ru...dev.js gzip | 41 kB | 41 kB | ✓ |
| pages-api.ru..prod.js gzip | 31.2 kB | 31.2 kB | ✓ |
| pages-turbo....dev.js gzip | 50.8 kB | 50.8 kB | ✓ |
| pages-turbo...prod.js gzip | 38.2 kB | 38.2 kB | ✓ |
| pages.runtim...dev.js gzip | 50.7 kB | 50.7 kB | ✓ |
| pages.runtim..prod.js gzip | 38.2 kB | 38.2 kB | ✓ |
| server.runti..prod.js gzip | 62.2 kB | 62.2 kB | ✓ |
| Total | 2.68 MB | 2.68 MB |
📝 Changed Files (2 files)
Files with changes:
pages-api.ru..time.prod.jspages.runtime.prod.js
View diffs
pages-api.ru..time.prod.js
Diff too large to display
pages.runtime.prod.js
Diff too large to display
5661e21 to
dc67461
Compare
89d496d to
a89fc7e
Compare
CodSpeed Performance ReportMerging this PR will not alter performanceComparing Summary
Footnotes
|
d36032d to
42acf15
Compare
e43fd0b to
630982c
Compare
42acf15 to
4244c77
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Additional Suggestion:
Undefined variable is_stateful used in verify_determinism check
View Details
📝 Patch Details
diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/operation/update_cell.rs b/turbopack/crates/turbo-tasks-backend/src/backend/operation/update_cell.rs
index e5408cb1f1..3128fe87ff 100644
--- a/turbopack/crates/turbo-tasks-backend/src/backend/operation/update_cell.rs
+++ b/turbopack/crates/turbo-tasks-backend/src/backend/operation/update_cell.rs
@@ -75,8 +75,7 @@ impl UpdateCellOperation {
// Check if this assumption holds.
#[cfg(feature = "verify_determinism")]
- if !is_stateful
- && matches!(verification_mode, VerificationMode::EqualityCheck)
+ if matches!(verification_mode, VerificationMode::EqualityCheck)
&& content != task.get_cell_data(is_serializable_cell_content, cell)
{
let task_description = ctx.get_task_description(task_id);
Analysis
The code on line 78 of turbopack/crates/turbo-tasks-backend/src/backend/operation/update_cell.rs referenced an undefined variable is_stateful in a verify_determinism conditional check:
if !is_stateful
&& matches!(verification_mode, VerificationMode::EqualityCheck)
&& content != task.get_cell_data(is_serializable_cell_content, cell)This variable was never defined in the run function, and inspection of the codebase shows that the Stateful flag and mark_stateful() method have been removed from the system. The is_stateful variable appears to be leftover code from before the Stateful flag removal.
According to the context, when the Stateful flag was removed, this code in UpdateCellOperation was supposed to be updated but wasn't. Since tasks are now always non-stateful (the Stateful flag no longer exists), the condition !is_stateful is always true and can be safely removed.
Fix Applied: Removed the !is_stateful && condition from line 78-79, leaving just the check for VerificationMode::EqualityCheck and the content comparison. This is logically correct since:
- The Stateful flag no longer exists in the system
- Tasks are now implicitly non-stateful
- The determinism verification should always apply to all tasks
4244c77 to
117c33b
Compare
912ab8a to
e9e1566
Compare
e9e1566 to
f43c55a
Compare
Tests Passed |
Merge activity
|
f43c55a to
73fc223
Compare

What?
Remove unused code