aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/book/reference-manual/configuration.md22
-rw-r--r--src/model/snapshot.rs10
-rw-r--r--src/util/config.rs3
3 files changed, 33 insertions, 2 deletions
diff --git a/doc/book/reference-manual/configuration.md b/doc/book/reference-manual/configuration.md
index 2779bd19..f0a3b438 100644
--- a/doc/book/reference-manual/configuration.md
+++ b/doc/book/reference-manual/configuration.md
@@ -13,6 +13,7 @@ consistency_mode = "consistent"
metadata_dir = "/var/lib/garage/meta"
data_dir = "/var/lib/garage/data"
+metadata_snapshots_dir = "/var/lib/garage/snapshots"
metadata_fsync = true
data_fsync = false
disable_scrub = false
@@ -105,6 +106,7 @@ Top-level configuration options:
[`metadata_auto_snapshot_interval`](#metadata_auto_snapshot_interval),
[`metadata_dir`](#metadata_dir),
[`metadata_fsync`](#metadata_fsync),
+[`metadata_snapshots_dir`](#metadata_snapshots_dir),
[`replication_factor`](#replication_factor),
[`consistency_mode`](#consistency_mode),
[`rpc_bind_addr`](#rpc_bind_addr),
@@ -275,6 +277,7 @@ as the index of all objects, object version and object blocks.
Store this folder on a fast SSD drive if possible to maximize Garage's performance.
+
#### `data_dir` {#data_dir}
The directory in which Garage will store the data blocks of objects.
@@ -295,6 +298,25 @@ data_dir = [
See [the dedicated documentation page](@/documentation/operations/multi-hdd.md)
on how to operate Garage in such a setup.
+#### `metadata_snapshots_dir` (since Garage `v1.0.2`) {#metadata_snapshots_dir}
+
+The directory in which Garage will store metadata snapshots when it
+performs a snapshot of the metadata database, either when instructed to do
+so from a RPC call or regularly through
+[`metadata_auto_snapshot_interval`](#metadata_auto_snapshot_interval).
+
+By default, Garage will store snapshots into a `snapshots/` subdirectory
+of [`metadata_dir`](#metadata_dir). This might quickly fill up your
+metadata storage space if you use snapshots, because Garage will need up
+to 4x the space of the existing metadata database: each snapshot requires
+roughly as much space as the original database, and Garage temporarily
+needs to store up to three different snapshots before it cleans up the oldest
+snapshot to go back to two stored snapshots.
+
+To prevent filling your disk, you might to change this setting to a
+directory with ample available space, e.g. on the same storage space as
+[`data_dir`](#data_dir).
+
#### `db_engine` (since `v0.8.0`) {#db_engine}
Since `v0.8.0`, Garage can use alternative storage backends as follows:
diff --git a/src/model/snapshot.rs b/src/model/snapshot.rs
index 87756f60..8e8995f9 100644
--- a/src/model/snapshot.rs
+++ b/src/model/snapshot.rs
@@ -41,8 +41,14 @@ pub fn snapshot_metadata(garage: &Garage) -> Result<(), Error> {
}
};
- let mut snapshots_dir = garage.config.metadata_dir.clone();
- snapshots_dir.push("snapshots");
+ let snapshots_dir = match &garage.config.metadata_snapshots_dir {
+ Some(d) => d.clone(),
+ None => {
+ let mut default_snapshots_dir = garage.config.metadata_dir.clone();
+ default_snapshots_dir.push("snapshots");
+ default_snapshots_dir
+ }
+ };
fs::create_dir_all(&snapshots_dir)?;
let mut new_path = snapshots_dir.clone();
diff --git a/src/util/config.rs b/src/util/config.rs
index 01f7350a..b4e2b008 100644
--- a/src/util/config.rs
+++ b/src/util/config.rs
@@ -31,6 +31,9 @@ pub struct Config {
#[serde(default)]
pub use_local_tz: bool,
+ /// Optional directory where metadata snapshots will be store
+ pub metadata_snapshots_dir: Option<PathBuf>,
+
/// Automatic snapshot interval for metadata
#[serde(default)]
pub metadata_auto_snapshot_interval: Option<String>,