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::{noop_kv::NoopKvDb, turbo::TurboKeyValueDatabase};
19pub use crate::{
20 backend::{BackendOptions, StorageMode, TurboTasksBackend},
21 backing_storage::BackingStorage,
22 database::{
23 db_invalidation, db_invalidation::StartupCacheState, db_versioning::GitVersionInfo,
24 },
25 kv_backing_storage::KeyValueDatabaseBackingStorage,
26};
27
28#[cfg(feature = "lmdb")]
29pub type LmdbBackingStorage = KeyValueDatabaseBackingStorage<
30 database::read_transaction_cache::ReadTransactionCache<
31 database::startup_cache::StartupCacheLayer<
32 database::fresh_db_optimization::FreshDbOptimization<
33 crate::database::lmdb::LmbdKeyValueDatabase,
34 >,
35 >,
36 >,
37>;
38
39#[cfg(feature = "lmdb")]
48pub fn lmdb_backing_storage(
49 base_path: &Path,
50 version_info: &GitVersionInfo,
51 is_ci: bool,
52) -> Result<(LmdbBackingStorage, StartupCacheState)> {
53 use crate::database::{
54 fresh_db_optimization::{FreshDbOptimization, is_fresh},
55 read_transaction_cache::ReadTransactionCache,
56 startup_cache::StartupCacheLayer,
57 };
58
59 KeyValueDatabaseBackingStorage::open_versioned_on_disk(
60 base_path.to_owned(),
61 version_info,
62 is_ci,
63 |versioned_path| {
64 let fresh_db = is_fresh(&versioned_path);
65 let database = crate::database::lmdb::LmbdKeyValueDatabase::new(&versioned_path)?;
66 let database = FreshDbOptimization::new(database, fresh_db);
67 let database =
68 StartupCacheLayer::new(database, versioned_path.join("startup.cache"), fresh_db)?;
69 Ok(ReadTransactionCache::new(database))
70 },
71 )
72}
73
74pub type TurboBackingStorage = KeyValueDatabaseBackingStorage<TurboKeyValueDatabase>;
75
76pub fn turbo_backing_storage(
83 base_path: &Path,
84 version_info: &GitVersionInfo,
85 is_ci: bool,
86) -> Result<(TurboBackingStorage, StartupCacheState)> {
87 KeyValueDatabaseBackingStorage::open_versioned_on_disk(
88 base_path.to_owned(),
89 version_info,
90 is_ci,
91 TurboKeyValueDatabase::new,
92 )
93}
94
95pub type NoopBackingStorage = KeyValueDatabaseBackingStorage<NoopKvDb>;
96
97pub fn noop_backing_storage() -> NoopBackingStorage {
99 KeyValueDatabaseBackingStorage::new_in_memory(NoopKvDb)
100}
101
102#[cfg(feature = "lmdb")]
103pub type DefaultBackingStorage = LmdbBackingStorage;
104
105#[cfg(not(feature = "lmdb"))]
106pub type DefaultBackingStorage = TurboBackingStorage;
107
108pub fn default_backing_storage(
111 path: &Path,
112 version_info: &GitVersionInfo,
113 is_ci: bool,
114) -> Result<(DefaultBackingStorage, StartupCacheState)> {
115 #[cfg(feature = "lmdb")]
116 {
117 lmdb_backing_storage(path, version_info, is_ci)
118 }
119 #[cfg(not(feature = "lmdb"))]
120 {
121 turbo_backing_storage(path, version_info, is_ci)
122 }
123}