pub const SCHEMA_BASELINE_FORMAT_VERSION: u32 = 1;
pub const DOWNGRADE_FLOOR: &str = "0.6.0";
pub const MAINTENANCE_LEASE_MIGRATION_ID: &str = "m20260621_000002_create_maintenance_lease";
pub const BASELINE_0_6_0_MIGRATIONS: &[&str] = &[
"m20260305_000001_create_image_tables",
"m20260305_000002_create_sandbox_tables",
"m20260305_000003_create_storage_tables",
"m20260305_000004_create_sandbox_images_table",
"m20260410_000001_erofs_image_schema",
"m20260501_000001_create_snapshot_index",
"m20260517_000001_drop_sandbox_metric",
"m20260527_000001_migrate_oci_rootfs_source",
"m20260531_000001_create_sandbox_labels",
"m20260531_000002_index_sandbox_labels_key_value",
"m20260606_000001_named_volume_kinds",
"m20260621_000001_add_sandbox_ephemeral",
MAINTENANCE_LEASE_MIGRATION_ID,
];
pub const MIGRATION_METADATA: &[MigrationMetadata] = &[
MigrationMetadata {
id: "m20260305_000001_create_image_tables",
reversible: true,
affects_cache: true,
affects_user_data: false,
summary: "remove legacy OCI image catalog tables",
},
MigrationMetadata {
id: "m20260305_000002_create_sandbox_tables",
reversible: true,
affects_cache: false,
affects_user_data: false,
summary: "remove sandbox and run tables",
},
MigrationMetadata {
id: "m20260305_000003_create_storage_tables",
reversible: true,
affects_cache: false,
affects_user_data: false,
summary: "remove volume and snapshot storage tables",
},
MigrationMetadata {
id: "m20260305_000004_create_sandbox_images_table",
reversible: true,
affects_cache: true,
affects_user_data: false,
summary: "remove sandbox image references",
},
MigrationMetadata {
id: "m20260410_000001_erofs_image_schema",
reversible: true,
affects_cache: true,
affects_user_data: false,
summary: "remove EROFS rootfs catalog tables",
},
MigrationMetadata {
id: "m20260501_000001_create_snapshot_index",
reversible: true,
affects_cache: false,
affects_user_data: false,
summary: "remove snapshot index table",
},
MigrationMetadata {
id: "m20260517_000001_drop_sandbox_metric",
reversible: false,
affects_cache: false,
affects_user_data: false,
summary: "restore legacy sandbox metrics table",
},
MigrationMetadata {
id: "m20260527_000001_migrate_oci_rootfs_source",
reversible: false,
affects_cache: false,
affects_user_data: false,
summary: "rewrite OCI rootfs config back to the legacy string shape",
},
MigrationMetadata {
id: "m20260531_000001_create_sandbox_labels",
reversible: true,
affects_cache: false,
affects_user_data: false,
summary: "remove sandbox labels table",
},
MigrationMetadata {
id: "m20260531_000002_index_sandbox_labels_key_value",
reversible: true,
affects_cache: false,
affects_user_data: false,
summary: "remove sandbox label key/value index",
},
MigrationMetadata {
id: "m20260606_000001_named_volume_kinds",
reversible: true,
affects_cache: false,
affects_user_data: false,
summary: "remove named volume kind columns and attachments",
},
MigrationMetadata {
id: "m20260621_000001_add_sandbox_ephemeral",
reversible: true,
affects_cache: false,
affects_user_data: false,
summary: "remove sandbox ephemeral flag",
},
MigrationMetadata {
id: MAINTENANCE_LEASE_MIGRATION_ID,
reversible: true,
affects_cache: false,
affects_user_data: false,
summary: "remove maintenance lease table",
},
];
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct MigrationMetadata {
pub id: &'static str,
pub reversible: bool,
pub affects_cache: bool,
pub affects_user_data: bool,
pub summary: &'static str,
}
pub fn migration_ids() -> impl Iterator<Item = &'static str> {
MIGRATION_METADATA.iter().map(|metadata| metadata.id)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::{Migrator, MigratorTrait};
#[test]
fn metadata_matches_migrator_order() {
let migrations = Migrator::migrations();
let migrator_ids: Vec<_> = migrations
.iter()
.map(|migration| migration.name().to_string())
.collect();
let metadata_ids: Vec<_> = migration_ids().map(str::to_string).collect();
assert_eq!(metadata_ids, migrator_ids);
}
#[test]
fn frozen_0_6_0_baseline_is_current_prefix() {
let metadata_ids: Vec<_> = migration_ids().collect();
assert!(metadata_ids.starts_with(BASELINE_0_6_0_MIGRATIONS));
}
}