mirror of
https://git.asonix.dog/asonix/pict-rs.git
synced 2024-11-25 02:51:17 +00:00
Expose repo migrations
This commit is contained in:
parent
ba27a1a223
commit
f95e61e402
4 changed files with 101 additions and 5 deletions
|
@ -346,6 +346,35 @@ impl Args {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Command::MigrateRepo(MigrateRepo { repo }) => {
|
||||||
|
let server = Server::default();
|
||||||
|
let client = Client::default();
|
||||||
|
let media = Media::default();
|
||||||
|
let metrics = Metrics::default();
|
||||||
|
|
||||||
|
match repo {
|
||||||
|
MigrateRepoFrom::Sled(MigrateSledRepo { from, to }) => match to {
|
||||||
|
MigrateRepoTo::Sled(MigrateSledInner { to }) => Output {
|
||||||
|
config_format: ConfigFormat {
|
||||||
|
server,
|
||||||
|
client,
|
||||||
|
old_repo,
|
||||||
|
tracing,
|
||||||
|
metrics,
|
||||||
|
media,
|
||||||
|
repo: None,
|
||||||
|
store: None,
|
||||||
|
},
|
||||||
|
operation: Operation::MigrateRepo {
|
||||||
|
from: from.into(),
|
||||||
|
to: to.into(),
|
||||||
|
},
|
||||||
|
config_file,
|
||||||
|
save_to,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -366,6 +395,10 @@ pub(crate) enum Operation {
|
||||||
from: crate::config::primitives::Store,
|
from: crate::config::primitives::Store,
|
||||||
to: crate::config::primitives::Store,
|
to: crate::config::primitives::Store,
|
||||||
},
|
},
|
||||||
|
MigrateRepo {
|
||||||
|
from: crate::config::file::Repo,
|
||||||
|
to: crate::config::file::Repo,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, serde::Serialize)]
|
#[derive(Debug, Default, serde::Serialize)]
|
||||||
|
@ -750,6 +783,9 @@ enum Command {
|
||||||
|
|
||||||
/// Migrates from one provided media store to another
|
/// Migrates from one provided media store to another
|
||||||
MigrateStore(MigrateStore),
|
MigrateStore(MigrateStore),
|
||||||
|
|
||||||
|
/// Migrates from one provided repo to another
|
||||||
|
MigrateRepo(MigrateRepo),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Parser)]
|
#[derive(Debug, Parser)]
|
||||||
|
@ -1000,6 +1036,12 @@ struct MigrateStore {
|
||||||
store: MigrateStoreFrom,
|
store: MigrateStoreFrom,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Parser)]
|
||||||
|
struct MigrateRepo {
|
||||||
|
#[command(subcommand)]
|
||||||
|
repo: MigrateRepoFrom,
|
||||||
|
}
|
||||||
|
|
||||||
/// Configure the pict-rs storage migration
|
/// Configure the pict-rs storage migration
|
||||||
#[derive(Debug, Subcommand)]
|
#[derive(Debug, Subcommand)]
|
||||||
// allow large enum variant - this is an instantiated-once config
|
// allow large enum variant - this is an instantiated-once config
|
||||||
|
@ -1012,6 +1054,12 @@ enum MigrateStoreFrom {
|
||||||
ObjectStorage(MigrateObjectStorage),
|
ObjectStorage(MigrateObjectStorage),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Configure the pict-rs repo migration
|
||||||
|
#[derive(Debug, Subcommand)]
|
||||||
|
enum MigrateRepoFrom {
|
||||||
|
Sled(MigrateSledRepo),
|
||||||
|
}
|
||||||
|
|
||||||
/// Configure the destination storage for pict-rs storage migration
|
/// Configure the destination storage for pict-rs storage migration
|
||||||
#[derive(Debug, Subcommand)]
|
#[derive(Debug, Subcommand)]
|
||||||
// allow large enum variant - this is an instantiated-once config
|
// allow large enum variant - this is an instantiated-once config
|
||||||
|
@ -1024,6 +1072,13 @@ enum MigrateStoreTo {
|
||||||
ObjectStorage(MigrateObjectStorageInner),
|
ObjectStorage(MigrateObjectStorageInner),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Configure the destination repo for pict-rs repo migration
|
||||||
|
#[derive(Debug, Subcommand)]
|
||||||
|
enum MigrateRepoTo {
|
||||||
|
/// Migrate to the provided sled storage
|
||||||
|
Sled(MigrateSledInner),
|
||||||
|
}
|
||||||
|
|
||||||
/// Migrate pict-rs' storage from the provided filesystem storage
|
/// Migrate pict-rs' storage from the provided filesystem storage
|
||||||
#[derive(Debug, Parser)]
|
#[derive(Debug, Parser)]
|
||||||
struct MigrateFilesystem {
|
struct MigrateFilesystem {
|
||||||
|
@ -1034,6 +1089,16 @@ struct MigrateFilesystem {
|
||||||
to: MigrateStoreTo,
|
to: MigrateStoreTo,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Migrate pict-rs' repo from the provided sled repo
|
||||||
|
#[derive(Debug, Parser)]
|
||||||
|
struct MigrateSledRepo {
|
||||||
|
#[command(flatten)]
|
||||||
|
from: Sled,
|
||||||
|
|
||||||
|
#[command(subcommand)]
|
||||||
|
to: MigrateRepoTo,
|
||||||
|
}
|
||||||
|
|
||||||
/// Migrate pict-rs' storage to the provided filesystem storage
|
/// Migrate pict-rs' storage to the provided filesystem storage
|
||||||
#[derive(Debug, Parser)]
|
#[derive(Debug, Parser)]
|
||||||
struct MigrateFilesystemInner {
|
struct MigrateFilesystemInner {
|
||||||
|
@ -1044,6 +1109,13 @@ struct MigrateFilesystemInner {
|
||||||
repo: Option<Repo>,
|
repo: Option<Repo>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Migrate pict-rs' repo to the provided sled repo
|
||||||
|
#[derive(Debug, Parser)]
|
||||||
|
struct MigrateSledInner {
|
||||||
|
#[command(flatten)]
|
||||||
|
to: Sled,
|
||||||
|
}
|
||||||
|
|
||||||
/// Migrate pict-rs' storage from the provided object storage
|
/// Migrate pict-rs' storage from the provided object storage
|
||||||
#[derive(Debug, Parser)]
|
#[derive(Debug, Parser)]
|
||||||
struct MigrateObjectStorage {
|
struct MigrateObjectStorage {
|
||||||
|
@ -1166,20 +1238,20 @@ struct ObjectStorage {
|
||||||
/// Configuration for the sled-backed data repository
|
/// Configuration for the sled-backed data repository
|
||||||
#[derive(Debug, Parser, serde::Serialize)]
|
#[derive(Debug, Parser, serde::Serialize)]
|
||||||
#[serde(rename_all = "snake_case")]
|
#[serde(rename_all = "snake_case")]
|
||||||
struct Sled {
|
pub(super) struct Sled {
|
||||||
/// The path to store the sled database
|
/// The path to store the sled database
|
||||||
#[arg(short, long)]
|
#[arg(short, long)]
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
path: Option<PathBuf>,
|
pub(super) path: Option<PathBuf>,
|
||||||
|
|
||||||
/// The cache capacity, in bytes, allowed to sled for in-memory operations
|
/// The cache capacity, in bytes, allowed to sled for in-memory operations
|
||||||
#[arg(short, long)]
|
#[arg(short, long)]
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
cache_capacity: Option<u64>,
|
pub(super) cache_capacity: Option<u64>,
|
||||||
|
|
||||||
#[arg(short, long)]
|
#[arg(short, long)]
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
export_path: Option<PathBuf>,
|
pub(super) export_path: Option<PathBuf>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Parser, serde::Serialize)]
|
#[derive(Debug, Parser, serde::Serialize)]
|
||||||
|
|
|
@ -353,3 +353,21 @@ impl From<crate::config::commandline::Filesystem> for crate::config::primitives:
|
||||||
crate::config::primitives::Store::Filesystem(value.into())
|
crate::config::primitives::Store::Filesystem(value.into())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<crate::config::commandline::Sled> for crate::config::file::Sled {
|
||||||
|
fn from(value: crate::config::commandline::Sled) -> Self {
|
||||||
|
let defaults = SledDefaults::default();
|
||||||
|
|
||||||
|
crate::config::file::Sled {
|
||||||
|
path: value.path.unwrap_or(defaults.path),
|
||||||
|
cache_capacity: value.cache_capacity.unwrap_or(defaults.cache_capacity),
|
||||||
|
export_path: defaults.export_path,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<crate::config::commandline::Sled> for crate::config::file::Repo {
|
||||||
|
fn from(value: crate::config::commandline::Sled) -> Self {
|
||||||
|
crate::config::file::Repo::Sled(value.into())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1916,6 +1916,12 @@ impl PictRsConfiguration {
|
||||||
|
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
Operation::MigrateRepo { from, to } => {
|
||||||
|
let from = Repo::open(from)?.to_arc();
|
||||||
|
let to = Repo::open(to)?.to_arc();
|
||||||
|
|
||||||
|
repo::migrate_repo(from, to).await?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if config.server.read_only {
|
if config.server.read_only {
|
||||||
|
|
|
@ -13,7 +13,7 @@ mod migrate;
|
||||||
pub(crate) mod sled;
|
pub(crate) mod sled;
|
||||||
|
|
||||||
pub(crate) use hash::Hash;
|
pub(crate) use hash::Hash;
|
||||||
pub(crate) use migrate::migrate_04;
|
pub(crate) use migrate::{migrate_04, migrate_repo};
|
||||||
|
|
||||||
pub(crate) type ArcRepo = Arc<dyn FullRepo>;
|
pub(crate) type ArcRepo = Arc<dyn FullRepo>;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue