Skip to content

Commit 47d53e5

Browse files
committed
Move more responsibilities into the KeyValueDatabaseBackingStorage constructor
1 parent 608399f commit 47d53e5

File tree

3 files changed

+38
-28
lines changed

3 files changed

+38
-28
lines changed

turbopack/crates/turbo-tasks-backend/src/database/turbo.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ pub struct TurboKeyValueDatabase {
2424

2525
impl TurboKeyValueDatabase {
2626
pub fn new(versioned_path: PathBuf) -> Result<Self> {
27-
let db = Arc::new(TurboPersistence::open(versioned_path.to_path_buf())?);
27+
let db = Arc::new(TurboPersistence::open(versioned_path)?);
2828
let mut this = Self {
2929
db: db.clone(),
3030
compact_join_handle: Mutex::new(None),

turbopack/crates/turbo-tasks-backend/src/kv_backing_storage.rs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@ use tracing::Span;
88
use turbo_tasks::{SessionId, TaskId, backend::CachedTaskType, turbo_tasks_scope};
99

1010
use crate::{
11+
GitVersionInfo,
1112
backend::{AnyOperation, TaskDataCategory},
1213
backing_storage::BackingStorage,
1314
data::CachedDataItem,
1415
database::{
15-
db_invalidation::invalidate_db,
16+
db_invalidation::{check_db_invalidation_and_cleanup, invalidate_db},
17+
db_versioning::handle_db_versioning,
1618
key_value_database::{KeySpace, KeyValueDatabase},
1719
write_batch::{
1820
BaseWriteBatch, ConcurrentWriteBatch, SerialWriteBatch, WriteBatch, WriteBatchRef,
@@ -90,13 +92,26 @@ pub struct KeyValueDatabaseBackingStorage<T: KeyValueDatabase> {
9092
}
9193

9294
impl<T: KeyValueDatabase> KeyValueDatabaseBackingStorage<T> {
93-
pub fn new(database: T, base_path: Option<PathBuf>) -> Self {
95+
pub fn new_in_memory(database: T) -> Self {
9496
Self {
9597
database,
96-
base_path,
98+
base_path: None,
9799
}
98100
}
99101

102+
pub fn open_versioned_on_disk(
103+
base_path: PathBuf,
104+
version_info: &GitVersionInfo,
105+
database: impl FnOnce(PathBuf) -> Result<T>,
106+
) -> Result<Self> {
107+
check_db_invalidation_and_cleanup(&base_path)?;
108+
let versioned_path = handle_db_versioning(&base_path, version_info)?;
109+
Ok(Self {
110+
database: (database)(versioned_path)?,
111+
base_path: Some(base_path),
112+
})
113+
}
114+
100115
fn with_tx<R>(
101116
&self,
102117
tx: Option<&T::ReadTransaction<'_>>,

turbopack/crates/turbo-tasks-backend/src/lib.rs

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,8 @@ mod utils;
1414
use std::path::Path;
1515

1616
use anyhow::Result;
17-
use database::db_invalidation::check_db_invalidation_and_cleanup;
1817

19-
use crate::database::{
20-
db_versioning::handle_db_versioning, noop_kv::NoopKvDb, turbo::TurboKeyValueDatabase,
21-
};
18+
use crate::database::{noop_kv::NoopKvDb, turbo::TurboKeyValueDatabase};
2219
pub use crate::{
2320
backend::{BackendOptions, StorageMode, TurboTasksBackend},
2421
database::db_versioning::GitVersionInfo,
@@ -47,18 +44,18 @@ pub fn lmdb_backing_storage(
4744
startup_cache::StartupCacheLayer,
4845
};
4946

50-
check_db_invalidation_and_cleanup(base_path)?;
51-
let versioned_path = handle_db_versioning(base_path, version_info)?;
52-
let fresh_db = is_fresh(&versioned_path);
53-
let database = crate::database::lmdb::LmbdKeyValueDatabase::new(&versioned_path)?;
54-
let database = FreshDbOptimization::new(database, fresh_db);
55-
let database =
56-
StartupCacheLayer::new(database, versioned_path.join("startup.cache"), fresh_db)?;
57-
let database = ReadTransactionCache::new(database);
58-
Ok(KeyValueDatabaseBackingStorage::new(
59-
database,
60-
Some(base_path.to_owned()),
61-
))
47+
KeyValueDatabaseBackingStorage::open_versioned_on_disk(
48+
base_path.to_owned(),
49+
version_info,
50+
|versioned_path| {
51+
let fresh_db = is_fresh(&versioned_path);
52+
let database = crate::database::lmdb::LmbdKeyValueDatabase::new(&versioned_path)?;
53+
let database = FreshDbOptimization::new(database, fresh_db);
54+
let database =
55+
StartupCacheLayer::new(database, versioned_path.join("startup.cache"), fresh_db)?;
56+
Ok(ReadTransactionCache::new(database))
57+
},
58+
)
6259
}
6360

6461
pub type TurboBackingStorage = KeyValueDatabaseBackingStorage<TurboKeyValueDatabase>;
@@ -67,19 +64,17 @@ pub fn turbo_backing_storage(
6764
base_path: &Path,
6865
version_info: &GitVersionInfo,
6966
) -> Result<TurboBackingStorage> {
70-
check_db_invalidation_and_cleanup(base_path)?;
71-
let versioned_path = handle_db_versioning(base_path, version_info)?;
72-
let database = TurboKeyValueDatabase::new(versioned_path)?;
73-
Ok(KeyValueDatabaseBackingStorage::new(
74-
database,
75-
Some(base_path.to_owned()),
76-
))
67+
KeyValueDatabaseBackingStorage::open_versioned_on_disk(
68+
base_path.to_owned(),
69+
version_info,
70+
|versioned_path| TurboKeyValueDatabase::new(versioned_path),
71+
)
7772
}
7873

7974
pub type NoopBackingStorage = KeyValueDatabaseBackingStorage<NoopKvDb>;
8075

8176
pub fn noop_backing_storage() -> NoopBackingStorage {
82-
KeyValueDatabaseBackingStorage::new(NoopKvDb, None)
77+
KeyValueDatabaseBackingStorage::new_in_memory(NoopKvDb)
8378
}
8479

8580
#[cfg(feature = "lmdb")]

0 commit comments

Comments
 (0)