Skip to main content

tuwunel_admin/server/
checkpoint_database.rs

1use 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}