mirror of
https://github.com/NLnetLabs/krill.git
synced 2026-10-01 22:04:54 +02:00
70 lines
2.1 KiB
Rust
70 lines
2.1 KiB
Rust
//! Data migration for the publication server.
|
|
|
|
pub mod pre_0_10_0;
|
|
pub mod pre_0_13_0;
|
|
pub mod pre_0_14_0;
|
|
|
|
|
|
use log::info;
|
|
use rpki::ca::idexchange::MyHandle;
|
|
use crate::commons::KrillResult;
|
|
use crate::commons::eventsourcing::WalStore;
|
|
use crate::commons::storage::{Ident, StorageSystem};
|
|
use crate::constants::PUBSERVER_CONTENT_NS;
|
|
use crate::server::pubd::content::RepositoryContent;
|
|
use self::pre_0_13_0::OldRepositoryContent;
|
|
|
|
|
|
/// Migrate v0.12.x RepositoryContent to the new 0.13.0+ format.
|
|
/// Apply any open WAL changes to the source first.
|
|
pub fn migrate_0_12_pubd_objects(
|
|
storage: &StorageSystem
|
|
) -> KrillResult<bool> {
|
|
let old_store: WalStore<OldRepositoryContent> = WalStore::create(
|
|
storage, PUBSERVER_CONTENT_NS
|
|
)?;
|
|
let repo_content_handle = MyHandle::new("0".into());
|
|
|
|
if old_store.has(&repo_content_handle)? {
|
|
let old_repo_content =
|
|
old_store.get_latest(&repo_content_handle)?.as_ref().clone();
|
|
let repo_content: RepositoryContent =
|
|
old_repo_content.try_into()?;
|
|
let upgrade_store = storage.open_upgrade(PUBSERVER_CONTENT_NS)?;
|
|
upgrade_store.store(
|
|
Some(const { Ident::make("0") }),
|
|
const { Ident::make("snapshot.json") },
|
|
&repo_content
|
|
)?;
|
|
Ok(true)
|
|
} else {
|
|
Ok(false)
|
|
}
|
|
}
|
|
|
|
/// The format of the RepositoryContent did not change in 0.12, but
|
|
/// the location and way of storing it did. So, migrate if present.
|
|
pub fn migrate_pre_0_12_pubd_objects(
|
|
storage: &StorageSystem
|
|
) -> KrillResult<()> {
|
|
let old_store = storage.open(PUBSERVER_CONTENT_NS)?;
|
|
if let Ok(Some(old_repo_content)) =
|
|
old_store.get::<OldRepositoryContent>(
|
|
None, const { Ident::make("0.json") }
|
|
)
|
|
{
|
|
info!("Found pre 0.12.0 RC2 publication server data. Migrating..");
|
|
let repo_content: RepositoryContent = old_repo_content.try_into()?;
|
|
|
|
let upgrade_store = storage.open_upgrade(PUBSERVER_CONTENT_NS)?;
|
|
upgrade_store.store(
|
|
Some(const { Ident::make("0") }),
|
|
const { Ident::make("snapshot.json") },
|
|
&repo_content
|
|
)?;
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|