Skip to main content

tuwunel_service/migrations/
migrate_media.rs

1use tuwunel_core::Result;
2
3use super::{conduit::migrate_conduit_media, marker_present};
4use crate::{
5	Services,
6	media::migrations::{checkup_sha256_media, migrate_sha256_media},
7};
8
9/// Imports a Conduit database's content-addressed media into tuwunel's
10/// key-addressed store when it is present and not yet imported.
11///
12/// Otherwise runs the key-addressed media migrations.
13pub(super) async fn migrate_media(services: &Services) -> Result {
14	services.server.check_running()?;
15
16	let db = &services.db;
17	let config = &services.server.config;
18	let progress = &services.server.progress;
19
20	let sha256_done = marker_present(services, "feat_sha256_media").await?;
21
22	// The foreign CF persists, so the marker (not its presence) is the latch.
23	if !sha256_done
24		&& db
25			.open_cf("servernamemediaid_metadata")?
26			.is_some()
27	{
28		progress.begin("migrate_conduit_media");
29		migrate_conduit_media(services).await?;
30		db["global"].insert("feat_sha256_media", []);
31		return Ok(());
32	}
33
34	if !sha256_done {
35		progress.begin("migrate_sha256_media");
36		migrate_sha256_media(services).await?;
37	} else if config.media_startup_check {
38		progress.begin("checkup_sha256_media");
39		checkup_sha256_media(services).await?;
40	}
41
42	Ok(())
43}