tuwunel_admin/server/
checkpoint_database.rs1use std::path::PathBuf;
2
3use tuwunel_core::{Result, utils::time::now};
4
5use crate::admin_command;
6
7#[admin_command]
8pub(super) async fn checkpoint_database(
9 &self,
10 map: Option<String>,
11 path: Option<PathBuf>,
12 log_size: u64,
13) -> Result {
14 let path = path.unwrap_or_else(|| {
15 let epoch = now().as_secs();
16
17 self.services
18 .server
19 .config
20 .database_path
21 .join(format!("checkpoint-{epoch}"))
22 });
23
24 let path = self
25 .blocking_db(move |db| {
26 match map {
27 | None => db.engine.checkpoint(&path, log_size)?,
28 | Some(map) => db.get(&map)?.checkpoint(&path)?,
29 }
30
31 Ok(path)
32 })
33 .await?;
34
35 write!(self, "Created checkpoint at `{}`.", path.display()).await
36}