Skip to content

Commit

Permalink
chore(config)!: refactor configs of write cache (#5259)
Browse files Browse the repository at this point in the history
* chore: refactor configs of write cache

* chore: write_cache_size `10GiB` -> `5GiB`
  • Loading branch information
KKould authored Jan 4, 2025
1 parent 2caf003 commit 1067357
Show file tree
Hide file tree
Showing 9 changed files with 48 additions and 51 deletions.
16 changes: 8 additions & 8 deletions config/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -132,10 +132,10 @@
| `region_engine.mito.vector_cache_size` | String | Auto | Cache size for vectors and arrow arrays. Setting it to 0 to disable the cache.<br/>If not set, it's default to 1/16 of OS memory with a max limitation of 512MB. |
| `region_engine.mito.page_cache_size` | String | Auto | Cache size for pages of SST row groups. Setting it to 0 to disable the cache.<br/>If not set, it's default to 1/8 of OS memory. |
| `region_engine.mito.selector_result_cache_size` | String | Auto | Cache size for time series selector (e.g. `last_value()`). Setting it to 0 to disable the cache.<br/>If not set, it's default to 1/16 of OS memory with a max limitation of 512MB. |
| `region_engine.mito.enable_experimental_write_cache` | Bool | `false` | Whether to enable the experimental write cache, it's enabled by default when using object storage. It is recommended to enable it when using object storage for better performance. |
| `region_engine.mito.experimental_write_cache_path` | String | `""` | File system path for write cache, defaults to `{data_home}/object_cache/write`. |
| `region_engine.mito.experimental_write_cache_size` | String | `5GiB` | Capacity for write cache. If your disk space is sufficient, it is recommended to set it larger. |
| `region_engine.mito.experimental_write_cache_ttl` | String | Unset | TTL for write cache. |
| `region_engine.mito.enable_write_cache` | Bool | `false` | Whether to enable the write cache, it's enabled by default when using object storage. It is recommended to enable it when using object storage for better performance. |
| `region_engine.mito.write_cache_path` | String | `""` | File system path for write cache, defaults to `{data_home}/object_cache/write`. |
| `region_engine.mito.write_cache_size` | String | `5GiB` | Capacity for write cache. If your disk space is sufficient, it is recommended to set it larger. |
| `region_engine.mito.write_cache_ttl` | String | Unset | TTL for write cache. |
| `region_engine.mito.sst_write_buffer_size` | String | `8MB` | Buffer size for SST writing. |
| `region_engine.mito.parallel_scan_channel_size` | Integer | `32` | Capacity of the channel to send data from parallel scan tasks to the main task. |
| `region_engine.mito.allow_stale_entries` | Bool | `false` | Whether to allow stale WAL entries read during replay. |
Expand Down Expand Up @@ -466,10 +466,10 @@
| `region_engine.mito.vector_cache_size` | String | Auto | Cache size for vectors and arrow arrays. Setting it to 0 to disable the cache.<br/>If not set, it's default to 1/16 of OS memory with a max limitation of 512MB. |
| `region_engine.mito.page_cache_size` | String | Auto | Cache size for pages of SST row groups. Setting it to 0 to disable the cache.<br/>If not set, it's default to 1/8 of OS memory. |
| `region_engine.mito.selector_result_cache_size` | String | Auto | Cache size for time series selector (e.g. `last_value()`). Setting it to 0 to disable the cache.<br/>If not set, it's default to 1/16 of OS memory with a max limitation of 512MB. |
| `region_engine.mito.enable_experimental_write_cache` | Bool | `false` | Whether to enable the experimental write cache, it's enabled by default when using object storage. It is recommended to enable it when using object storage for better performance. |
| `region_engine.mito.experimental_write_cache_path` | String | `""` | File system path for write cache, defaults to `{data_home}`. |
| `region_engine.mito.experimental_write_cache_size` | String | `5GiB` | Capacity for write cache. If your disk space is sufficient, it is recommended to set it larger. |
| `region_engine.mito.experimental_write_cache_ttl` | String | Unset | TTL for write cache. |
| `region_engine.mito.enable_write_cache` | Bool | `false` | Whether to enable the write cache, it's enabled by default when using object storage. It is recommended to enable it when using object storage for better performance. |
| `region_engine.mito.write_cache_path` | String | `""` | File system path for write cache, defaults to `{data_home}`. |
| `region_engine.mito.write_cache_size` | String | `5GiB` | Capacity for write cache. If your disk space is sufficient, it is recommended to set it larger. |
| `region_engine.mito.write_cache_ttl` | String | Unset | TTL for write cache. |
| `region_engine.mito.sst_write_buffer_size` | String | `8MB` | Buffer size for SST writing. |
| `region_engine.mito.parallel_scan_channel_size` | Integer | `32` | Capacity of the channel to send data from parallel scan tasks to the main task. |
| `region_engine.mito.allow_stale_entries` | Bool | `false` | Whether to allow stale WAL entries read during replay. |
Expand Down
10 changes: 5 additions & 5 deletions config/datanode.example.toml
Original file line number Diff line number Diff line change
Expand Up @@ -475,18 +475,18 @@ auto_flush_interval = "1h"
## @toml2docs:none-default="Auto"
#+ selector_result_cache_size = "512MB"

## Whether to enable the experimental write cache, it's enabled by default when using object storage. It is recommended to enable it when using object storage for better performance.
enable_experimental_write_cache = false
## Whether to enable the write cache, it's enabled by default when using object storage. It is recommended to enable it when using object storage for better performance.
enable_write_cache = false

## File system path for write cache, defaults to `{data_home}`.
experimental_write_cache_path = ""
write_cache_path = ""

## Capacity for write cache. If your disk space is sufficient, it is recommended to set it larger.
experimental_write_cache_size = "5GiB"
write_cache_size = "5GiB"

## TTL for write cache.
## @toml2docs:none-default
experimental_write_cache_ttl = "8h"
write_cache_ttl = "8h"

## Buffer size for SST writing.
sst_write_buffer_size = "8MB"
Expand Down
10 changes: 5 additions & 5 deletions config/standalone.example.toml
Original file line number Diff line number Diff line change
Expand Up @@ -518,18 +518,18 @@ auto_flush_interval = "1h"
## @toml2docs:none-default="Auto"
#+ selector_result_cache_size = "512MB"

## Whether to enable the experimental write cache, it's enabled by default when using object storage. It is recommended to enable it when using object storage for better performance.
enable_experimental_write_cache = false
## Whether to enable the write cache, it's enabled by default when using object storage. It is recommended to enable it when using object storage for better performance.
enable_write_cache = false

## File system path for write cache, defaults to `{data_home}/object_cache/write`.
experimental_write_cache_path = ""
write_cache_path = ""

## Capacity for write cache. If your disk space is sufficient, it is recommended to set it larger.
experimental_write_cache_size = "5GiB"
write_cache_size = "5GiB"

## TTL for write cache.
## @toml2docs:none-default
experimental_write_cache_ttl = "8h"
write_cache_ttl = "8h"

## Buffer size for SST writing.
sst_write_buffer_size = "8MB"
Expand Down
4 changes: 2 additions & 2 deletions src/cmd/tests/load_config_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ fn test_load_datanode_example_config() {
region_engine: vec![
RegionEngineConfig::Mito(MitoConfig {
auto_flush_interval: Duration::from_secs(3600),
experimental_write_cache_ttl: Some(Duration::from_secs(60 * 60 * 8)),
write_cache_ttl: Some(Duration::from_secs(60 * 60 * 8)),
..Default::default()
}),
RegionEngineConfig::File(EngineConfig {}),
Expand Down Expand Up @@ -203,7 +203,7 @@ fn test_load_standalone_example_config() {
region_engine: vec![
RegionEngineConfig::Mito(MitoConfig {
auto_flush_interval: Duration::from_secs(3600),
experimental_write_cache_ttl: Some(Duration::from_secs(60 * 60 * 8)),
write_cache_ttl: Some(Duration::from_secs(60 * 60 * 8)),
..Default::default()
}),
RegionEngineConfig::File(EngineConfig {}),
Expand Down
4 changes: 2 additions & 2 deletions src/datanode/src/datanode.rs
Original file line number Diff line number Diff line change
Expand Up @@ -433,8 +433,8 @@ impl DatanodeBuilder {
) -> Result<MitoEngine> {
if opts.storage.is_object_storage() {
// Enable the write cache when setting object storage
config.enable_experimental_write_cache = true;
info!("Configured 'enable_experimental_write_cache=true' for mito engine.");
config.enable_write_cache = true;
info!("Configured 'enable_write_cache=true' for mito engine.");
}

let mito_engine = match &opts.wal {
Expand Down
32 changes: 16 additions & 16 deletions src/mito2/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,15 +93,15 @@ pub struct MitoConfig {
pub page_cache_size: ReadableSize,
/// Cache size for time series selector (e.g. `last_value()`). Setting it to 0 to disable the cache.
pub selector_result_cache_size: ReadableSize,
/// Whether to enable the experimental write cache.
pub enable_experimental_write_cache: bool,
/// Whether to enable the write cache.
pub enable_write_cache: bool,
/// File system path for write cache dir's root, defaults to `{data_home}`.
pub experimental_write_cache_path: String,
pub write_cache_path: String,
/// Capacity for write cache.
pub experimental_write_cache_size: ReadableSize,
pub write_cache_size: ReadableSize,
/// TTL for write cache.
#[serde(with = "humantime_serde")]
pub experimental_write_cache_ttl: Option<Duration>,
pub write_cache_ttl: Option<Duration>,

// Other configs:
/// Buffer size for SST writing.
Expand Down Expand Up @@ -147,10 +147,10 @@ impl Default for MitoConfig {
vector_cache_size: ReadableSize::mb(512),
page_cache_size: ReadableSize::mb(512),
selector_result_cache_size: ReadableSize::mb(512),
enable_experimental_write_cache: false,
experimental_write_cache_path: String::new(),
experimental_write_cache_size: ReadableSize::gb(5),
experimental_write_cache_ttl: None,
enable_write_cache: false,
write_cache_path: String::new(),
write_cache_size: ReadableSize::gb(5),
write_cache_ttl: None,
sst_write_buffer_size: DEFAULT_WRITE_BUFFER_SIZE,
parallel_scan_channel_size: DEFAULT_SCAN_CHANNEL_SIZE,
allow_stale_entries: false,
Expand Down Expand Up @@ -234,8 +234,8 @@ impl MitoConfig {
}

// Sets write cache path if it is empty.
if self.experimental_write_cache_path.trim().is_empty() {
self.experimental_write_cache_path = data_home.to_string();
if self.write_cache_path.trim().is_empty() {
self.write_cache_path = data_home.to_string();
}

self.index.sanitize(data_home, &self.inverted_index)?;
Expand Down Expand Up @@ -268,18 +268,18 @@ impl MitoConfig {
self.selector_result_cache_size = mem_cache_size;
}

/// Enable experimental write cache.
/// Enable write cache.
#[cfg(test)]
pub fn enable_write_cache(
mut self,
path: String,
size: ReadableSize,
ttl: Option<Duration>,
) -> Self {
self.enable_experimental_write_cache = true;
self.experimental_write_cache_path = path;
self.experimental_write_cache_size = size;
self.experimental_write_cache_ttl = ttl;
self.enable_write_cache = true;
self.write_cache_path = path;
self.write_cache_size = size;
self.write_cache_ttl = ttl;
self
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/mito2/src/engine/edit_region_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ async fn test_edit_region_fill_cache() {
.create_engine_with(
MitoConfig {
// Write cache must be enabled to download the ingested SST file.
enable_experimental_write_cache: true,
enable_write_cache: true,
..Default::default()
},
None,
Expand Down
15 changes: 6 additions & 9 deletions src/mito2/src/worker.rs
Original file line number Diff line number Diff line change
Expand Up @@ -365,23 +365,20 @@ async fn write_cache_from_config(
puffin_manager_factory: PuffinManagerFactory,
intermediate_manager: IntermediateManager,
) -> Result<Option<WriteCacheRef>> {
if !config.enable_experimental_write_cache {
if !config.enable_write_cache {
return Ok(None);
}

// TODO(yingwen): Remove this and document the config once the write cache is ready.
warn!("Write cache is an experimental feature");

tokio::fs::create_dir_all(Path::new(&config.experimental_write_cache_path))
tokio::fs::create_dir_all(Path::new(&config.write_cache_path))
.await
.context(CreateDirSnafu {
dir: &config.experimental_write_cache_path,
dir: &config.write_cache_path,
})?;

let cache = WriteCache::new_fs(
&config.experimental_write_cache_path,
config.experimental_write_cache_size,
config.experimental_write_cache_ttl,
&config.write_cache_path,
config.write_cache_size,
config.write_cache_ttl,
puffin_manager_factory,
intermediate_manager,
)
Expand Down
6 changes: 3 additions & 3 deletions tests-integration/tests/http.rs
Original file line number Diff line number Diff line change
Expand Up @@ -928,9 +928,9 @@ worker_request_batch_size = 64
manifest_checkpoint_distance = 10
compress_manifest = false
auto_flush_interval = "30m"
enable_experimental_write_cache = false
experimental_write_cache_path = ""
experimental_write_cache_size = "5GiB"
enable_write_cache = false
write_cache_path = ""
write_cache_size = "5GiB"
sst_write_buffer_size = "8MiB"
parallel_scan_channel_size = 32
allow_stale_entries = false
Expand Down

0 comments on commit 1067357

Please sign in to comment.