turbo_tasks_backend/
lib.rs

1#![feature(anonymous_lifetime_in_impl_trait)]
2#![feature(associated_type_defaults)]
3#![feature(iter_collect_into)]
4#![feature(box_patterns)]
5
6mod backend;
7mod backing_storage;
8mod data;
9mod data_storage;
10mod database;
11mod kv_backing_storage;
12mod utils;
13
14use std::path::Path;
15
16use anyhow::Result;
17
18use crate::database::{
19    db_versioning::handle_db_versioning, noop_kv::NoopKvDb, turbo::TurboKeyValueDatabase,
20};
21pub use crate::{
22    backend::{BackendOptions, StorageMode, TurboTasksBackend},
23    database::db_versioning::GitVersionInfo,
24    kv_backing_storage::KeyValueDatabaseBackingStorage,
25};
26
27#[cfg(feature = "lmdb")]
28pub type LmdbBackingStorage = KeyValueDatabaseBackingStorage<
29    database::read_transaction_cache::ReadTransactionCache<
30        database::startup_cache::StartupCacheLayer<
31            database::fresh_db_optimization::FreshDbOptimization<
32                crate::database::lmdb::LmbdKeyValueDatabase,
33            >,
34        >,
35    >,
36>;
37
38#[cfg(feature = "lmdb")]
39pub fn lmdb_backing_storage(
40    path: &Path,
41    version_info: &GitVersionInfo,
42) -> Result<LmdbBackingStorage> {
43    use crate::database::{
44        fresh_db_optimization::{FreshDbOptimization, is_fresh},
45        read_transaction_cache::ReadTransactionCache,
46        startup_cache::StartupCacheLayer,
47    };
48
49    let path = handle_db_versioning(path, version_info)?;
50    let fresh_db = is_fresh(&path);
51    let database = crate::database::lmdb::LmbdKeyValueDatabase::new(&path)?;
52    let database = FreshDbOptimization::new(database, fresh_db);
53    let database = StartupCacheLayer::new(database, path.join("startup.cache"), fresh_db)?;
54    let database = ReadTransactionCache::new(database);
55    Ok(KeyValueDatabaseBackingStorage::new(database))
56}
57
58pub type TurboBackingStorage = KeyValueDatabaseBackingStorage<TurboKeyValueDatabase>;
59
60pub fn turbo_backing_storage(
61    path: &Path,
62    version_info: &GitVersionInfo,
63) -> Result<TurboBackingStorage> {
64    let path = handle_db_versioning(path, version_info)?;
65    let database = TurboKeyValueDatabase::new(path)?;
66    Ok(KeyValueDatabaseBackingStorage::new(database))
67}
68
69pub type NoopBackingStorage = KeyValueDatabaseBackingStorage<NoopKvDb>;
70
71pub fn noop_backing_storage() -> NoopBackingStorage {
72    KeyValueDatabaseBackingStorage::new(NoopKvDb)
73}
74
75#[cfg(feature = "lmdb")]
76pub type DefaultBackingStorage = LmdbBackingStorage;
77
78#[cfg(feature = "lmdb")]
79pub fn default_backing_storage(
80    path: &Path,
81    version_info: &GitVersionInfo,
82) -> Result<DefaultBackingStorage> {
83    lmdb_backing_storage(path, version_info)
84}
85
86#[cfg(not(feature = "lmdb"))]
87pub type DefaultBackingStorage = TurboBackingStorage;
88
89#[cfg(not(feature = "lmdb"))]
90pub fn default_backing_storage(
91    path: &Path,
92    version_info: &GitVersionInfo,
93) -> Result<DefaultBackingStorage> {
94    turbo_backing_storage(path, version_info)
95}