Skip to content

Conversation

@lukesandberg
Copy link
Contributor

@lukesandberg lukesandberg commented Jan 22, 2026

Add reverse lookup for task types by task ID

What?

Adds a reverse lookup mechanism to efficiently retrieve task types from task IDs in the Turbo persistence layer.

Why?

Improves performance by allowing direct lookup of task types when only the task ID is available, avoiding the need to deserialize the entire task.

How?

  • Added a new lookup_key_by_hash_and_value method to the persistence layer that finds keys by their hash and confirms matches by comparing values
  • Created a secondary index mapping task IDs to task type hashes
  • Modified task restoration to use this reverse lookup when the task type is missing
  • Made persistent_task_type transient to avoid redundant storage
  • Added comprehensive tests for the new functionality

Fixes #

Copy link
Contributor Author

lukesandberg commented Jan 22, 2026

in_progress_cells: AutoMap<CellId, InProgressCellState>,

#[field(storage = "direct", category = "data")]
#[field(storage = "direct", category = "transient")]
Copy link
Contributor

@vercel vercel bot Jan 22, 2026

Choose a reason for hiding this comment

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

persistent_task_type storage category changed from 'data' to 'transient', breaking backward compatibility with existing databases

Fix on Vercel

// (persistent_task_type is transient and not restored from serialized data)
if task.get_persistent_task_type().is_none() && !task_id.is_transient() {
let tx = self.get_tx();
// Safety: `tx` is a valid transaction from `self.backend.backing_storage`.
Copy link
Contributor

@vercel vercel bot Jan 22, 2026

Choose a reason for hiding this comment

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

Missing ensure_transaction() call causes panic when loading task type from backing storage without an active transaction

Fix on Vercel

@nextjs-bot
Copy link
Collaborator

nextjs-bot commented Jan 22, 2026

Failing test suites

Commit: e929b37 | About building and testing Next.js

pnpm test-dev-turbo test/e2e/app-dir/graceful-shutdown-next-after/custom-server/index.test.ts (turbopack) (job)

  • after during server shutdown - custom server > waits for after callbacks when the server receives SIGTERM (DD)
Expand output

● after during server shutdown - custom server › waits for after callbacks when the server receives SIGTERM

Failed to start server after 10000ms, waiting for this log pattern: /Custom server started/

  474 |     return setTimeout(() => {
  475 |       reject(
> 476 |         new Error(
      |         ^
  477 |           `Failed to start server after ${ms}ms, waiting for this log pattern: ${this.serverReadyPattern}`
  478 |         )
  479 |       )

  at Timeout._onTimeout (lib/next-modes/base.ts:476:9)

pnpm test test/integration/custom-routes/test/index.test.ts (turbopack) (job)

  • Custom routes > no-op rewrite > should not error for no-op rewrite and auto export dynamic route (DD)
  • Custom routes > should load custom routes when only one type is used > development mode > should work with just headers (DD)
  • Custom routes > should load custom routes when only one type is used > development mode > should work with just rewrites (DD)
  • Custom routes > should load custom routes when only one type is used > development mode > should work with just redirects (DD)
Expand output

● Custom routes › no-op rewrite › should not error for no-op rewrite and auto export dynamic route

thrown: "Exceeded timeout of 60000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."

  2635 |     afterAll(() => killApp(app))
  2636 |
> 2637 |     it('should not error for no-op rewrite and auto export dynamic route', async () => {
       |     ^
  2638 |       const browser = await webdriver(appPort, '/auto-export/my-slug')
  2639 |       await check(
  2640 |         () => browser.eval(() => document.documentElement.innerHTML),

  at it (integration/custom-routes/test/index.test.ts:2637:5)
  at describe (integration/custom-routes/test/index.test.ts:2626:3)
  at Object.describe (integration/custom-routes/test/index.test.ts:2556:1)

● Custom routes › should load custom routes when only one type is used › development mode › should work with just headers

thrown: "Exceeded timeout of 60000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."

  2686 |       }
  2687 |
> 2688 |       it('should work with just headers', async () => {
       |       ^
  2689 |         nextConfigContent = await fs.readFile(nextConfigPath, 'utf8')
  2690 |         await fs.writeFile(
  2691 |           nextConfigPath,

  at it (integration/custom-routes/test/index.test.ts:2688:7)
  at runSoloTests (integration/custom-routes/test/index.test.ts:2772:9)
  at integration/custom-routes/test/index.test.ts:2769:60
  at describe (integration/custom-routes/test/index.test.ts:2674:3)
  at Object.describe (integration/custom-routes/test/index.test.ts:2556:1)

● Custom routes › should load custom routes when only one type is used › development mode › should work with just rewrites

FetchError: request to http://localhost:44177/add-header failed, reason: socket hang up

  at ClientRequest.<anonymous> (../node_modules/.pnpm/node-fetch@2.6.7_encoding@0.1.13/node_modules/node-fetch/lib/index.js:1491:11)

● Custom routes › should load custom routes when only one type is used › development mode › should work with just redirects

FetchError: request to http://localhost:45687/add-header failed, reason: socket hang up

  at ClientRequest.<anonymous> (../node_modules/.pnpm/node-fetch@2.6.7_encoding@0.1.13/node_modules/node-fetch/lib/index.js:1491:11)

pnpm test test/integration/config-output-export/test/index.test.ts (turbopack) (job)

  • config-output-export > should work with getStaticProps and without revalidate (DD)
  • config-output-export > should error with getServerSideProps without fallback (DD)
  • config-output-export > should error with getStaticPaths and fallback true (DD)
  • config-output-export > should error with getStaticPaths and fallback blocking (DD)
  • config-output-export > should work with getStaticPaths and fallback false (DD)
Expand output

● config-output-export › should work with getStaticProps and without revalidate

thrown: "Exceeded timeout of 60000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."

  271 |   })
  272 |
> 273 |   it('should work with getStaticProps and without revalidate', async () => {
      |   ^
  274 |     const blog = join(appDir, 'pages/blog.js')
  275 |     let result: { stdout: string; stderr: string; port: number } | undefined
  276 |     let browser: any

  at it (integration/config-output-export/test/index.test.ts:273:3)
  at Object.describe (integration/config-output-export/test/index.test.ts:41:1)

● config-output-export › should error with getServerSideProps without fallback

thrown: "Exceeded timeout of 60000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."

  299 |   })
  300 |
> 301 |   it('should error with getServerSideProps without fallback', async () => {
      |   ^
  302 |     const blog = join(appDir, 'pages/blog.js')
  303 |     let result: { stdout: string; stderr: string; port: number } | undefined
  304 |     let browser: any

  at it (integration/config-output-export/test/index.test.ts:301:3)
  at Object.describe (integration/config-output-export/test/index.test.ts:41:1)

● config-output-export › should error with getStaticPaths and fallback true

thrown: "Exceeded timeout of 60000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."

  333 |   })
  334 |
> 335 |   it('should error with getStaticPaths and fallback true', async () => {
      |   ^
  336 |     const posts = join(appDir, 'pages/posts')
  337 |     let result: { stdout: string; stderr: string; port: number } | undefined
  338 |     let browser: any

  at it (integration/config-output-export/test/index.test.ts:335:3)
  at Object.describe (integration/config-output-export/test/index.test.ts:41:1)

● config-output-export › should error with getStaticPaths and fallback blocking

EEXIST: file already exists, mkdir '/root/actions-runner/_work/next.js/next.js/test/integration/config-output-export/pages/posts'

  382 |     let browser: any
  383 |     try {
> 384 |       fs.mkdirSync(posts)
      |          ^
  385 |       fs.writeFileSync(
  386 |         join(posts, '[slug].js'),
  387 |         `export default function Post(props) {

  at Object.mkdirSync (integration/config-output-export/test/index.test.ts:384:10)

● config-output-export › should work with getStaticPaths and fallback false

thrown: "Exceeded timeout of 60000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."

  421 |   })
  422 |
> 423 |   it('should work with getStaticPaths and fallback false', async () => {
      |   ^
  424 |     const posts = join(appDir, 'pages/posts')
  425 |     let result: { stdout: string; stderr: string; port: number } | undefined
  426 |     let browser: any

  at it (integration/config-output-export/test/index.test.ts:423:3)
  at Object.describe (integration/config-output-export/test/index.test.ts:41:1)

pnpm test-start-turbo test/e2e/filesystem-cache/filesystem-cache.test.ts (turbopack) (job)

  • filesystem-caching with cache enabled > should cache or not cache loaders (DD)
  • filesystem-caching with cache enabled > should allow to change files while stopped (RSC change) (DD)
  • filesystem-caching with cache enabled > should allow to change files while stopped (RCC change) (DD)
  • filesystem-caching with cache enabled > should allow to change files while stopped (Pages change) (DD)
  • filesystem-caching with cache enabled > should allow to change files while stopped (rename app page) (DD)
  • filesystem-caching with cache enabled > should allow to change files while stopped (next config change) (DD)
  • filesystem-caching with cache enabled > should allow to change files while stopped (env var change) (DD)
  • filesystem-caching with cache enabled > should allow to change files while stopped (RSC change, RCC change, Pages change, rename app page, next config change, env var change) (DD)
Expand output

● filesystem-caching with cache enabled › should cache or not cache loaders

thrown: "Exceeded timeout of 120000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."

  68 |
  69 |     // Very flakey with Webpack enabled
> 70 |     ;(process.env.IS_TURBOPACK_TEST ? it : it.skip)(
     |                                                  ^
  71 |       'should cache or not cache loaders',
  72 |       async () => {
  73 |         let appTimestamp, unchangedTimestamp, appClientTimestamp, pagesTimestamp

  at e2e/filesystem-cache/filesystem-cache.test.ts:70:50
  at Object.describe (e2e/filesystem-cache/filesystem-cache.test.ts:6:3)

● filesystem-caching with cache enabled › should allow to change files while stopped (RSC change)

page.goto: net::ERR_CONNECTION_REFUSED at http://localhost:45045/
Call log:
  - navigating to "http://localhost:45045/", waiting until "load"

  343 |     await opts?.beforePageLoad?.(page)
  344 |
> 345 |     await page.goto(url, { waitUntil: opts?.waitUntil ?? 'load' })
      |                ^
  346 |   }
  347 |
  348 |   back(options?: Parameters<Page['goBack']>[0]) {

  at Playwright.goto (lib/browsers/playwright.ts:345:16)
  at webdriver (lib/next-webdriver.ts:156:3)
  at textCheck (e2e/filesystem-cache/filesystem-cache.test.ts:152:23)
  at Object.<anonymous> (e2e/filesystem-cache/filesystem-cache.test.ts:269:13)

● filesystem-caching with cache enabled › should allow to change files while stopped (RCC change)

page.goto: net::ERR_CONNECTION_REFUSED at http://localhost:45045/client
Call log:
  - navigating to "http://localhost:45045/client", waiting until "load"

  343 |     await opts?.beforePageLoad?.(page)
  344 |
> 345 |     await page.goto(url, { waitUntil: opts?.waitUntil ?? 'load' })
      |                ^
  346 |   }
  347 |
  348 |   back(options?: Parameters<Page['goBack']>[0]) {

  at Playwright.goto (lib/browsers/playwright.ts:345:16)
  at webdriver (lib/next-webdriver.ts:156:3)
  at textCheck (e2e/filesystem-cache/filesystem-cache.test.ts:152:23)
  at Object.<anonymous> (e2e/filesystem-cache/filesystem-cache.test.ts:269:13)

● filesystem-caching with cache enabled › should allow to change files while stopped (Pages change)

page.goto: net::ERR_CONNECTION_REFUSED at http://localhost:45045/pages
Call log:
  - navigating to "http://localhost:45045/pages", waiting until "load"

  343 |     await opts?.beforePageLoad?.(page)
  344 |
> 345 |     await page.goto(url, { waitUntil: opts?.waitUntil ?? 'load' })
      |                ^
  346 |   }
  347 |
  348 |   back(options?: Parameters<Page['goBack']>[0]) {

  at Playwright.goto (lib/browsers/playwright.ts:345:16)
  at webdriver (lib/next-webdriver.ts:156:3)
  at textCheck (e2e/filesystem-cache/filesystem-cache.test.ts:152:23)
  at Object.<anonymous> (e2e/filesystem-cache/filesystem-cache.test.ts:269:13)

● filesystem-caching with cache enabled › should allow to change files while stopped (rename app page)

page.goto: net::ERR_CONNECTION_REFUSED at http://localhost:45045/remove-me
Call log:
  - navigating to "http://localhost:45045/remove-me", waiting until "load"

  343 |     await opts?.beforePageLoad?.(page)
  344 |
> 345 |     await page.goto(url, { waitUntil: opts?.waitUntil ?? 'load' })
      |                ^
  346 |   }
  347 |
  348 |   back(options?: Parameters<Page['goBack']>[0]) {

  at Playwright.goto (lib/browsers/playwright.ts:345:16)
  at webdriver (lib/next-webdriver.ts:156:3)
  at textCheck (e2e/filesystem-cache/filesystem-cache.test.ts:152:23)
  at Object.<anonymous> (e2e/filesystem-cache/filesystem-cache.test.ts:269:13)

● filesystem-caching with cache enabled › should allow to change files while stopped (next config change)

page.goto: net::ERR_CONNECTION_REFUSED at http://localhost:45045/next-config
Call log:
  - navigating to "http://localhost:45045/next-config", waiting until "load"

  343 |     await opts?.beforePageLoad?.(page)
  344 |
> 345 |     await page.goto(url, { waitUntil: opts?.waitUntil ?? 'load' })
      |                ^
  346 |   }
  347 |
  348 |   back(options?: Parameters<Page['goBack']>[0]) {

  at Playwright.goto (lib/browsers/playwright.ts:345:16)
  at webdriver (lib/next-webdriver.ts:156:3)
  at textCheck (e2e/filesystem-cache/filesystem-cache.test.ts:152:23)
  at Object.checkInitial (e2e/filesystem-cache/filesystem-cache.test.ts:222:11)
  at Object.<anonymous> (e2e/filesystem-cache/filesystem-cache.test.ts:269:13)

● filesystem-caching with cache enabled › should allow to change files while stopped (env var change)

page.goto: net::ERR_CONNECTION_REFUSED at http://localhost:45045/env
Call log:
  - navigating to "http://localhost:45045/env", waiting until "load"

  343 |     await opts?.beforePageLoad?.(page)
  344 |
> 345 |     await page.goto(url, { waitUntil: opts?.waitUntil ?? 'load' })
      |                ^
  346 |   }
  347 |
  348 |   back(options?: Parameters<Page['goBack']>[0]) {

  at Playwright.goto (lib/browsers/playwright.ts:345:16)
  at webdriver (lib/next-webdriver.ts:156:3)
  at textCheck (e2e/filesystem-cache/filesystem-cache.test.ts:152:23)
  at Object.checkInitial (e2e/filesystem-cache/filesystem-cache.test.ts:234:11)
  at Object.<anonymous> (e2e/filesystem-cache/filesystem-cache.test.ts:269:13)

● filesystem-caching with cache enabled › should allow to change files while stopped (RSC change, RCC change, Pages change, rename app page, next config change, env var change)

page.goto: net::ERR_CONNECTION_REFUSED at http://localhost:45045/
Call log:
  - navigating to "http://localhost:45045/", waiting until "load"

  343 |     await opts?.beforePageLoad?.(page)
  344 |
> 345 |     await page.goto(url, { waitUntil: opts?.waitUntil ?? 'load' })
      |                ^
  346 |   }
  347 |
  348 |   back(options?: Parameters<Page['goBack']>[0]) {

  at Playwright.goto (lib/browsers/playwright.ts:345:16)
  at webdriver (lib/next-webdriver.ts:156:3)
  at textCheck (e2e/filesystem-cache/filesystem-cache.test.ts:152:23)
  at Object.<anonymous> (e2e/filesystem-cache/filesystem-cache.test.ts:269:13)

@codspeed-hq
Copy link

codspeed-hq bot commented Jan 22, 2026

CodSpeed Performance Report

Merging this PR will not alter performance

Comparing direct_reverse_mapping (e929b37) with canary (9e97759)

Summary

✅ 17 untouched benchmarks
⏩ 3 skipped benchmarks1

Footnotes

  1. 3 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@nextjs-bot
Copy link
Collaborator

nextjs-bot commented Jan 22, 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) 507ms 507ms ▁▁█▁▁
Cold (Ready in log) 464ms 463ms ▇▆▄▇▇
Cold (First Request) 834ms 826ms ██▁██
Warm (Listen) 507ms 507ms ▁▁▁▁▁
Warm (Ready in log) 463ms 463ms ▂▁▅▁▁
Warm (First Request) 336ms 337ms ▆▁▄█▆
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change Trend
Cold (Listen) 455ms 456ms ▅▅▅▁▁
Cold (Ready in log) 437ms 437ms ▇▇▆▇█
Cold (First Request) 1.768s 1.781s ▆▅▅█▆
Warm (Listen) 456ms 456ms ███▁▁
Warm (Ready in log) 438ms 436ms ▄▅▅█▆
Warm (First Request) 1.783s 1.766s ▅▄▅█▅

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 4.531s 4.532s ▁▁▆▁▁
Cached Build 4.510s 4.521s ▁▁▆▁▁
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
Fresh Build 14.130s 14.054s ▄▃▃▇▃
Cached Build 14.192s 14.207s ▃▃▂▆▃
node_modules Size 461 MB 461 MB ▁▁▁██
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles: **432 kB** → **432 kB** ✅ -32 B

82 files with content-based hashes (individual files not comparable between builds)

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 762 B 768 B
Total 762 B 768 B ⚠️ +6 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 450 B 451 B
Total 450 B 451 B ⚠️ +1 B

📦 Webpack

Client

Main Bundles
Canary PR Change
2086.HASH.js gzip 169 B N/A -
2161-HASH.js gzip 5.41 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 251 B 254 B 🔴 +3 B (+1%)
main-HASH.js gzip 38.7 kB 39.1 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.4 kB -
6349-HASH.js gzip N/A 4.46 kB -
7019-HASH.js gzip N/A 5.43 kB -
b17a3386-HASH.js gzip N/A 62.3 kB -
Total 226 kB 226 kB ⚠️ +55 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 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 126 kB 126 kB
page.js gzip 244 kB 240 kB 🟢 4.5 kB (-2%)
Total 371 kB 366 kB ✅ -4.62 kB
Middleware
Canary PR Change
middleware-b..fest.js gzip 617 B 617 B
middleware-r..fest.js gzip 155 B 156 B
middleware.js gzip 32.9 kB 33.3 kB 🔴 +444 B (+1%)
edge-runtime..pack.js gzip 842 B 842 B
Total 34.5 kB 35 kB ⚠️ +445 B
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.71 MB 3.72 MB 🔴 +11.5 kB (+0%)
index.pack gzip 101 kB 101 kB
index.pack.old gzip 101 kB 101 kB
Total 3.91 MB 3.92 MB ⚠️ +12 kB

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 306 kB 306 kB
app-page-exp..prod.js gzip 163 kB 163 kB
app-page-tur...dev.js gzip 306 kB 306 kB
app-page-tur..prod.js gzip 163 kB 163 kB
app-page-tur...dev.js gzip 303 kB 303 kB
app-page-tur..prod.js gzip 161 kB 161 kB
app-page.run...dev.js gzip 303 kB 303 kB
app-page.run..prod.js gzip 161 kB 161 kB
app-route-ex...dev.js gzip 69.4 kB 69.4 kB
app-route-ex..prod.js gzip 48.2 kB 48.2 kB
app-route-tu...dev.js gzip 69.5 kB 69.5 kB
app-route-tu..prod.js gzip 48.2 kB 48.2 kB
app-route-tu...dev.js gzip 69.1 kB 69.1 kB
app-route-tu..prod.js gzip 48 kB 48 kB
app-route.ru...dev.js gzip 69 kB 69 kB
app-route.ru..prod.js gzip 48 kB 48 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 42.5 kB 42.5 kB
pages-api-tu..prod.js gzip 32.3 kB 32.3 kB
pages-api.ru...dev.js gzip 42.5 kB 42.5 kB
pages-api.ru..prod.js gzip 32.3 kB 32.3 kB
pages-turbo....dev.js gzip 51.8 kB 51.8 kB
pages-turbo...prod.js gzip 38.8 kB 38.8 kB
pages.runtim...dev.js gzip 51.8 kB 51.8 kB
pages.runtim..prod.js gzip 38.8 kB 38.8 kB
server.runti..prod.js gzip 62.3 kB 62.3 kB
Total 2.73 MB 2.73 MB ✅ -2 B

@sokra sokra changed the base branch from sokra/remove-reverse-task-cache to graphite-base/88904 January 22, 2026 20:50
@sokra sokra force-pushed the graphite-base/88904 branch from 0c1d348 to 9e97759 Compare January 23, 2026 08:05
@sokra sokra force-pushed the direct_reverse_mapping branch from aebd28d to 9562e78 Compare January 23, 2026 08:05
@graphite-app graphite-app bot changed the base branch from graphite-base/88904 to canary January 23, 2026 08:05
@sokra sokra force-pushed the direct_reverse_mapping branch from 9562e78 to e929b37 Compare January 23, 2026 08:05
/// values.
///
/// Returns the key bytes if an entry with matching hash and value is found.
pub fn lookup_key_by_hash_and_value(
Copy link
Member

Choose a reason for hiding this comment

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

Add some tracing to this method similar to the other db read methods

task_meta: factory(KeySpace::TaskMeta),
task_data: factory(KeySpace::TaskData),
task_cache: factory(KeySpace::TaskCache),
task_id_to_task_type_hash: factory(KeySpace::TaskIdToTaskTypeHash),
Copy link
Member

Choose a reason for hiding this comment

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

Could we store that in the task_data to avoid the extra key space

Copy link
Contributor Author

Choose a reason for hiding this comment

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

yeah i was thinking that too actually.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

it makes restoring more complex since the task_type would need to be a HashOrTaskType enum or something but it works i think

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.

4 participants