diff --git a/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs b/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs index 8c7a9c8f8cd10..3f296e1f07af5 100644 --- a/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs +++ b/turbopack/crates/turbo-tasks-backend/src/backend/mod.rs @@ -374,6 +374,8 @@ impl TurboTasksBackend { impl Backend for TurboTasksBackend { fn startup(&self, turbo_tasks: &dyn TurboTasksBackendApi) { + self.backing_storage.startup(); + // Continue all uncompleted operations // They can't be interrupted by a snapshot since the snapshotting job has not been scheduled // yet. diff --git a/turbopack/crates/turbo-tasks-backend/src/backing_storage.rs b/turbopack/crates/turbo-tasks-backend/src/backing_storage.rs index cb1b2da8a4129..ba18a289f9b2e 100644 --- a/turbopack/crates/turbo-tasks-backend/src/backing_storage.rs +++ b/turbopack/crates/turbo-tasks-backend/src/backing_storage.rs @@ -10,6 +10,7 @@ use crate::{ }; pub trait BackingStorage { + fn startup(&self); fn next_free_task_id(&self) -> TaskId; fn uncompleted_operations(&self) -> Vec; fn save_snapshot( diff --git a/turbopack/crates/turbo-tasks-backend/src/lmdb_backing_storage.rs b/turbopack/crates/turbo-tasks-backend/src/lmdb_backing_storage.rs index a0e2dc617dfee..3a63426611f5f 100644 --- a/turbopack/crates/turbo-tasks-backend/src/lmdb_backing_storage.rs +++ b/turbopack/crates/turbo-tasks-backend/src/lmdb_backing_storage.rs @@ -12,7 +12,9 @@ use std::{ use anyhow::{anyhow, Context, Result}; use bincode::Options; -use lmdb::{Database, DatabaseFlags, Environment, EnvironmentFlags, Transaction, WriteFlags}; +use lmdb::{ + Cursor, Database, DatabaseFlags, Environment, EnvironmentFlags, Transaction, WriteFlags, +}; use turbo_tasks::{backend::CachedTaskType, KeyValuePair, TaskId}; use crate::{ @@ -81,9 +83,29 @@ impl LmdbBackingStorage { restored_cache_entries: AtomicUsize::new(0), }) } + + fn display_db(&self) -> Result { + use std::fmt::Write; + let mut result = String::new(); + let tx = self.env.begin_ro_txn()?; + let mut cursor = tx.open_ro_cursor(self.data_db)?; + for (key, value) in cursor.iter() { + let task_id = u32::from_be_bytes(key.try_into()?); + let data: Vec = bincode::deserialize(value)?; + write!(result, "### Task {task_id}\n{data:#?}\n\n")?; + } + Ok(result) + } } impl BackingStorage for LmdbBackingStorage { + fn startup(&self) { + println!( + "Database content:\n{}", + self.display_db().unwrap_or_default() + ); + } + fn next_free_task_id(&self) -> TaskId { fn get(this: &LmdbBackingStorage) -> Result { let tx = this.env.begin_rw_txn()?; @@ -219,6 +241,7 @@ impl BackingStorage for LmdbBackingStorage { .into_iter() .map(|(key, value)| CachedDataItem::from_key_and_value(key, value)) .collect(); + println!("Store {task_id}: {vec:?}"); let value = match bincode::serialize(&vec) { // Ok(value) => value, Ok(_) | Err(_) => { @@ -339,6 +362,7 @@ impl BackingStorage for LmdbBackingStorage { .inspect_err(|err| println!("Looking up data for {task_id} failed: {err:?}")) .unwrap_or_default(); if !result.is_empty() { + println!("restored {task_id}"); self.restored_tasks .fetch_add(1, std::sync::atomic::Ordering::Relaxed); } diff --git a/turbopack/crates/turbo-tasks/src/manager.rs b/turbopack/crates/turbo-tasks/src/manager.rs index ca285a6ed5b44..f3ec26cd36ac6 100644 --- a/turbopack/crates/turbo-tasks/src/manager.rs +++ b/turbopack/crates/turbo-tasks/src/manager.rs @@ -424,7 +424,7 @@ impl TurboTasks { event_background: Event::new(|| "TurboTasks::event_background".to_string()), program_start: Instant::now(), }); - this.backend.startup(&*this); + TURBO_TASKS.sync_scope(this.pin(), || this.backend.startup(&*this)); this }