diff --git a/src/core/config/mod.rs b/src/core/config/mod.rs index 92f968d8..27798e0c 100644 --- a/src/core/config/mod.rs +++ b/src/core/config/mod.rs @@ -1273,6 +1273,20 @@ pub struct Config { #[serde(default = "default_rocksdb_stats_level")] pub rocksdb_stats_level: u8, + /// Erases data no longer reachable in the current schema. The developers + /// expect this to be set to true which simplifies the schema and prevents + /// accumulation of old schemas remaining in the codebase forever. If this + /// is set to false, old columns which are not described in the current + /// schema will be ignored rather than erased, leaking their space. + /// + /// This can be set to false when moving between versions in ways which are + /// not recommended or otherwise forbidden, or for diagnostic and + /// development purposes; requiring preservation across such movements. + /// + /// default: true + #[serde(default = "true_fn")] + pub rocksdb_drop_missing_columns: bool, + /// This is a password that can be configured that will let you login to the /// server bot account (currently `@conduit`) for emergency troubleshooting /// purposes such as recovering/recreating your admin room, or inviting diff --git a/src/database/engine/open.rs b/src/database/engine/open.rs index 4f74ea1a..c87fd64a 100644 --- a/src/database/engine/open.rs +++ b/src/database/engine/open.rs @@ -103,7 +103,10 @@ fn configure_cfds( debug!("Creating new column {name:?} not previously found in existing database."); }); - let missing_descriptors = missing.clone().map(|_| descriptor::DROPPED); + let missing_descriptors = missing + .clone() + .filter(|_| config.rocksdb_drop_missing_columns) + .map(|_| descriptor::DROPPED); let cfopts: Vec<_> = desc .iter() diff --git a/src/database/mod.rs b/src/database/mod.rs index f1d05c62..a09b1afa 100644 --- a/src/database/mod.rs +++ b/src/database/mod.rs @@ -1,4 +1,4 @@ -#![type_length_limit = "3072"] +#![type_length_limit = "8192"] extern crate rust_rocksdb as rocksdb; diff --git a/tuwunel-example.toml b/tuwunel-example.toml index 4a1cabf0..39a7019c 100644 --- a/tuwunel-example.toml +++ b/tuwunel-example.toml @@ -1080,6 +1080,18 @@ # #rocksdb_stats_level = 1 +# Erases data no longer reachable in the current schema. The developers +# expect this to be set to true which simplifies the schema and prevents +# accumulation of old schemas remaining in the codebase forever. If this +# is set to false, old columns which are not described in the current +# schema will be ignored rather than erased, leaking their space. +# +# This can be set to false when moving between versions in ways which are +# not recommended or otherwise forbidden, or for diagnostic and +# development purposes; requiring preservation across such movements. +# +#rocksdb_drop_missing_columns = true + # This is a password that can be configured that will let you login to the # server bot account (currently `@conduit`) for emergency troubleshooting # purposes such as recovering/recreating your admin room, or inviting