mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2026-05-26 20:49:55 +00:00
feat: Add option to control WAL compression
Also enables zstd compression by default
This commit is contained in:
@@ -957,6 +957,21 @@
|
|||||||
#
|
#
|
||||||
#rocksdb_bottommost_compression = true
|
#rocksdb_bottommost_compression = true
|
||||||
|
|
||||||
|
# Compression algorithm for RocksDB's Write-Ahead-Log (WAL).
|
||||||
|
#
|
||||||
|
# At present, only ZSTD compression is supported by RocksDB for WAL
|
||||||
|
# compression. Enabling this can reduce WAL size at the expense of some
|
||||||
|
# CPU usage during writes.
|
||||||
|
#
|
||||||
|
# The options are:
|
||||||
|
# - "none" = No compression
|
||||||
|
# - "zstd" = ZSTD compression
|
||||||
|
#
|
||||||
|
# For more information on WAL compression, see:
|
||||||
|
# https://github.com/facebook/rocksdb/wiki/WAL-Compression
|
||||||
|
#
|
||||||
|
#rocksdb_wal_compression = "zstd"
|
||||||
|
|
||||||
# Database recovery mode (for RocksDB WAL corruption).
|
# Database recovery mode (for RocksDB WAL corruption).
|
||||||
#
|
#
|
||||||
# Use this option when the server reports corruption and refuses to start.
|
# Use this option when the server reports corruption and refuses to start.
|
||||||
|
|||||||
@@ -1128,6 +1128,23 @@ pub struct Config {
|
|||||||
#[serde(default = "true_fn")]
|
#[serde(default = "true_fn")]
|
||||||
pub rocksdb_bottommost_compression: bool,
|
pub rocksdb_bottommost_compression: bool,
|
||||||
|
|
||||||
|
/// Compression algorithm for RocksDB's Write-Ahead-Log (WAL).
|
||||||
|
///
|
||||||
|
/// At present, only ZSTD compression is supported by RocksDB for WAL
|
||||||
|
/// compression. Enabling this can reduce WAL size at the expense of some
|
||||||
|
/// CPU usage during writes.
|
||||||
|
///
|
||||||
|
/// The options are:
|
||||||
|
/// - "none" = No compression
|
||||||
|
/// - "zstd" = ZSTD compression
|
||||||
|
///
|
||||||
|
/// For more information on WAL compression, see:
|
||||||
|
/// https://github.com/facebook/rocksdb/wiki/WAL-Compression
|
||||||
|
///
|
||||||
|
/// default: "zstd"
|
||||||
|
#[serde(default = "default_rocksdb_wal_compression")]
|
||||||
|
pub rocksdb_wal_compression: String,
|
||||||
|
|
||||||
/// Database recovery mode (for RocksDB WAL corruption).
|
/// Database recovery mode (for RocksDB WAL corruption).
|
||||||
///
|
///
|
||||||
/// Use this option when the server reports corruption and refuses to start.
|
/// Use this option when the server reports corruption and refuses to start.
|
||||||
@@ -2454,6 +2471,8 @@ fn default_rocksdb_compression_algo() -> String {
|
|||||||
.to_owned()
|
.to_owned()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn default_rocksdb_wal_compression() -> String { "zstd".to_owned() }
|
||||||
|
|
||||||
/// Default RocksDB compression level is 32767, which is internally read by
|
/// Default RocksDB compression level is 32767, which is internally read by
|
||||||
/// RocksDB as the default magic number and translated to the library's default
|
/// RocksDB as the default magic number and translated to the library's default
|
||||||
/// compression level as they all differ. See their `kDefaultCompressionLevel`.
|
/// compression level as they all differ. See their `kDefaultCompressionLevel`.
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
use std::{cmp, convert::TryFrom};
|
use std::{cmp, convert::TryFrom};
|
||||||
|
|
||||||
use conduwuit::{Config, Result, utils};
|
use conduwuit::{Config, Result, utils, warn};
|
||||||
use rocksdb::{Cache, DBRecoveryMode, Env, LogLevel, Options, statistics::StatsLevel};
|
use rocksdb::{
|
||||||
|
Cache, DBCompressionType, DBRecoveryMode, Env, LogLevel, Options, statistics::StatsLevel,
|
||||||
|
};
|
||||||
|
|
||||||
use super::{cf_opts::cache_size_f64, logger::handle as handle_log};
|
use super::{cf_opts::cache_size_f64, logger::handle as handle_log};
|
||||||
|
|
||||||
@@ -58,6 +60,20 @@ pub(crate) fn db_options(config: &Config, env: &Env, row_cache: &Cache) -> Resul
|
|||||||
opts.set_max_total_wal_size(1024 * 1024 * 512);
|
opts.set_max_total_wal_size(1024 * 1024 * 512);
|
||||||
opts.set_writable_file_max_buffer_size(1024 * 1024 * 2);
|
opts.set_writable_file_max_buffer_size(1024 * 1024 * 2);
|
||||||
|
|
||||||
|
// WAL compression
|
||||||
|
let wal_compression = match config.rocksdb_wal_compression.as_ref() {
|
||||||
|
| "zstd" => DBCompressionType::Zstd,
|
||||||
|
| "none" => DBCompressionType::None,
|
||||||
|
| value => {
|
||||||
|
warn!(
|
||||||
|
"Invalid rocksdb_wal_compression value '{value}'. Supported values are 'none' \
|
||||||
|
or 'zstd'. Defaulting to 'none'."
|
||||||
|
);
|
||||||
|
DBCompressionType::None
|
||||||
|
},
|
||||||
|
};
|
||||||
|
opts.set_wal_compression_type(wal_compression);
|
||||||
|
|
||||||
// Misc
|
// Misc
|
||||||
opts.set_disable_auto_compactions(!config.rocksdb_compaction);
|
opts.set_disable_auto_compactions(!config.rocksdb_compaction);
|
||||||
opts.create_missing_column_families(true);
|
opts.create_missing_column_families(true);
|
||||||
|
|||||||
Reference in New Issue
Block a user