1#![cfg_attr(target_os = "wasi", feature(wasi_ext))]
2#![feature(core_io_borrowed_buf)]
3#![feature(once_cell_try)]
4#![cfg_attr(unix, feature(read_buf_at))]
7#![cfg_attr(windows, feature(seek_read_exact_seek_write_all))]
8#![feature(sync_unsafe_cell)]
9#![cfg_attr(miri, allow(dead_code, unused_imports))]
11
12mod arc_bytes;
13pub(crate) mod be;
14mod collector;
15mod collector_entry;
16mod compaction;
17mod compression;
18mod constants;
19mod db;
20mod key;
21mod lookup_entry;
22mod merge_iter;
23pub mod meta_file;
24mod meta_file_builder;
25#[cfg(feature = "mmap")]
26pub mod mmap_helper;
27mod parallel_scheduler;
28mod rc_bytes;
29pub mod shard;
30mod shared_bytes;
31pub mod sst_filter;
32pub mod static_sorted_file;
33mod static_sorted_file_builder;
34mod value_block_count_tracker;
35mod value_buf;
36mod write_batch;
37
38#[cfg(test)]
39mod tests;
40
41pub use arc_bytes::ArcBytes;
42pub use compression::{Compression, checksum_block};
43pub use db::{
44 CommitStats, CompactConfig, CurrentDbVersion, MetaFileEntryInfo, MetaFileInfo,
45 TurboPersistence, read_current_version,
46};
47
48#[derive(Clone, Copy, Debug, PartialEq, Eq)]
50pub enum AccessMode {
51 #[cfg(feature = "mmap")]
53 Mmap,
54 File,
56}
57
58#[derive(Clone, Copy, Debug, PartialEq, Eq)]
59pub enum FamilyKind {
60 SingleValue,
65 MultiValue,
70}
71
72#[derive(Clone, Copy, Debug)]
74pub struct FamilyConfig {
75 pub name: &'static str,
76 pub kind: FamilyKind,
77 pub compression: Compression,
78 pub initial_shard_bits: shard::ShardBits,
85}
86
87#[derive(Clone, Debug)]
92pub struct DbConfig<const FAMILIES: usize> {
93 pub family_configs: [FamilyConfig; FAMILIES],
94 pub access_mode: AccessMode,
96 pub target_shard_size: u64,
100}
101
102fn default_access_mode() -> AccessMode {
107 #[cfg(not(feature = "mmap"))]
108 return AccessMode::File;
109
110 #[cfg(feature = "mmap")]
111 access_mode_env_var()
112}
113
114#[cfg(any(test, feature = "verify_sst_content"))]
119pub(crate) fn mmap_access_mode() -> AccessMode {
120 #[cfg(not(feature = "mmap"))]
121 return AccessMode::File;
122
123 #[cfg(feature = "mmap")]
124 AccessMode::Mmap
125}
126
127#[cfg(feature = "mmap")]
128fn access_mode_env_var() -> AccessMode {
129 static ACCESS_MODE_ENV: std::sync::LazyLock<AccessMode> = std::sync::LazyLock::new(|| {
130 if std::env::var("TURBO_PERSISTENCE_MMAP")
131 .ok()
132 .is_some_and(|v| v == "0")
133 {
134 AccessMode::File
135 } else {
136 AccessMode::Mmap
137 }
138 });
139 *ACCESS_MODE_ENV
140}
141
142impl<const FAMILIES: usize> DbConfig<FAMILIES> {
143 pub fn new() -> Self {
145 Self {
146 family_configs: [FamilyConfig {
147 name: "unknown",
148 kind: FamilyKind::SingleValue,
149 compression: Compression::Lz4,
150 initial_shard_bits: shard::ShardBits::new(0),
151 }; FAMILIES],
152 access_mode: default_access_mode(),
153 target_shard_size: 256 * 1024 * 1024,
154 }
155 }
156}
157pub use constants::MAX_INLINE_VALUE_SIZE;
160
161impl<const FAMILIES: usize> Default for DbConfig<FAMILIES> {
162 fn default() -> Self {
163 Self::new()
164 }
165}
166pub use key::{KeyBase, QueryKey, StoreKey, hash_key};
167pub use meta_file::MetaEntryFlags;
168pub use parallel_scheduler::{ParallelScheduler, SerialScheduler};
169pub use static_sorted_file::{
170 BlockCache, BlockCacheLifecycle, BlockWeighter, KeyBlockLayout, SstLookupResult,
171 StaticSortedFile, StaticSortedFileMetaData,
172};
173pub use static_sorted_file_builder::{
174 BLOCK_HEADER_SIZE, Entry, EntryValue, StreamingSstWriter, write_static_stored_file,
175};
176pub use value_buf::ValueBuffer;
177pub use write_batch::WriteBatch;