turbo_tasks_backend/
lib.rs1#![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}