refactor: switch to new repo actors
parent
656df06b4e
commit
80d5291508
|
@ -23,7 +23,7 @@ pub const ANY_ARCH: &'static str = "any";
|
|||
#[derive(Clone)]
|
||||
pub struct Global {
|
||||
config: crate::config::Config,
|
||||
mgr: Arc<repo::RepoMgr>,
|
||||
repo: repo::Handle,
|
||||
db: sea_orm::DbConn,
|
||||
}
|
||||
|
||||
|
@ -54,26 +54,32 @@ fn setup(rt: &runtime::Handle, config_file: PathBuf) -> crate::Result<Global> {
|
|||
let db = rt.block_on(crate::db::connect(&config.db))?;
|
||||
rt.block_on(crate::db::Migrator::up(&db, None))?;
|
||||
|
||||
let mgr = match &config.fs {
|
||||
let repo = match &config.fs {
|
||||
FsConfig::Local { data_dir } => {
|
||||
rt.block_on(crate::repo::RepoMgr::new(
|
||||
crate::repo::Handle::start(
|
||||
data_dir.join("repos"),
|
||||
db.clone(),
|
||||
))?
|
||||
rt.clone(),
|
||||
config.pkg_workers,
|
||||
)?
|
||||
//rt.block_on(crate::repo::RepoMgr::new(
|
||||
// data_dir.join("repos"),
|
||||
// db.clone(),
|
||||
//))?
|
||||
//RepoHandle::start(data_dir.join("repos"), db.clone(), config.pkg_workers, rt.clone())?
|
||||
}
|
||||
};
|
||||
let mgr = Arc::new(mgr);
|
||||
|
||||
for _ in 0..config.pkg_workers {
|
||||
let clone = Arc::clone(&mgr);
|
||||
|
||||
rt.spawn(async move { clone.pkg_parse_task().await });
|
||||
}
|
||||
//let mgr = Arc::new(mgr);
|
||||
//
|
||||
//for _ in 0..config.pkg_workers {
|
||||
// let clone = Arc::clone(&mgr);
|
||||
//
|
||||
// rt.spawn(async move { clone.pkg_parse_task().await });
|
||||
//}
|
||||
|
||||
Ok(Global {
|
||||
config: config.clone(),
|
||||
mgr,
|
||||
repo,
|
||||
db,
|
||||
})
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use super::{archive, package, RepoHandle};
|
||||
use super::{archive, package, Handle};
|
||||
use crate::db;
|
||||
|
||||
use std::{
|
||||
|
|
|
@ -17,16 +17,16 @@ use tokio::{
|
|||
};
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct RepoHandle {
|
||||
pub struct Handle {
|
||||
state: Arc<RepoSharedState>,
|
||||
}
|
||||
|
||||
impl RepoHandle {
|
||||
impl Handle {
|
||||
pub fn start(
|
||||
repos_dir: impl AsRef<Path>,
|
||||
conn: DbConn,
|
||||
actors: u32,
|
||||
rt: runtime::Handle,
|
||||
actors: u32,
|
||||
) -> crate::Result<Self> {
|
||||
std::fs::create_dir_all(repos_dir.as_ref())?;
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ mod manager;
|
|||
pub mod package;
|
||||
|
||||
pub use actor::{RepoActor, RepoCommand, RepoSharedState};
|
||||
pub use handle::RepoHandle;
|
||||
pub use handle::Handle;
|
||||
pub use manager::RepoMgr;
|
||||
|
||||
use crate::FsConfig;
|
||||
|
@ -53,30 +53,31 @@ async fn get_file(
|
|||
Path((distro, repo, arch, file_name)): Path<(String, String, String, String)>,
|
||||
req: Request<Body>,
|
||||
) -> crate::Result<impl IntoResponse> {
|
||||
if let Some(repo_id) = global.mgr.get_repo(&distro, &repo).await? {
|
||||
match global.config.fs {
|
||||
FsConfig::Local { data_dir } => {
|
||||
let repo_dir = data_dir.join("repos").join(repo_id.to_string());
|
||||
|
||||
let file_name = if file_name == format!("{}.db", repo)
|
||||
|| file_name == format!("{}.db.tar.gz", repo)
|
||||
{
|
||||
format!("{}.db.tar.gz", arch)
|
||||
} else if file_name == format!("{}.files", repo)
|
||||
|| file_name == format!("{}.files.tar.gz", repo)
|
||||
{
|
||||
format!("{}.files.tar.gz", arch)
|
||||
} else {
|
||||
file_name
|
||||
};
|
||||
|
||||
let path = repo_dir.join(file_name);
|
||||
Ok(ServeFile::new(path).oneshot(req).await)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Err(StatusCode::NOT_FOUND.into())
|
||||
}
|
||||
Ok(StatusCode::NOT_FOUND)
|
||||
//if let Some(repo_id) = global.mgr.get_repo(&distro, &repo).await? {
|
||||
// match global.config.fs {
|
||||
// FsConfig::Local { data_dir } => {
|
||||
// let repo_dir = data_dir.join("repos").join(repo_id.to_string());
|
||||
//
|
||||
// let file_name = if file_name == format!("{}.db", repo)
|
||||
// || file_name == format!("{}.db.tar.gz", repo)
|
||||
// {
|
||||
// format!("{}.db.tar.gz", arch)
|
||||
// } else if file_name == format!("{}.files", repo)
|
||||
// || file_name == format!("{}.files.tar.gz", repo)
|
||||
// {
|
||||
// format!("{}.files.tar.gz", arch)
|
||||
// } else {
|
||||
// file_name
|
||||
// };
|
||||
//
|
||||
// let path = repo_dir.join(file_name);
|
||||
// Ok(ServeFile::new(path).oneshot(req).await)
|
||||
// }
|
||||
// }
|
||||
//} else {
|
||||
// Err(StatusCode::NOT_FOUND.into())
|
||||
//}
|
||||
}
|
||||
|
||||
async fn post_package_archive(
|
||||
|
@ -84,46 +85,49 @@ async fn post_package_archive(
|
|||
Path((distro, repo)): Path<(String, String)>,
|
||||
body: Body,
|
||||
) -> crate::Result<StatusCode> {
|
||||
let mut body = StreamReader::new(body.into_data_stream().map_err(std::io::Error::other));
|
||||
let repo = global.mgr.get_or_create_repo(&distro, &repo).await?;
|
||||
let [tmp_path] = global.mgr.random_file_paths();
|
||||
|
||||
let mut tmp_file = tokio::fs::File::create(&tmp_path).await?;
|
||||
tokio::io::copy(&mut body, &mut tmp_file).await?;
|
||||
|
||||
global.mgr.queue_pkg(repo, tmp_path).await;
|
||||
|
||||
Ok(StatusCode::ACCEPTED)
|
||||
Ok(StatusCode::NOT_FOUND)
|
||||
//let mut body = StreamReader::new(body.into_data_stream().map_err(std::io::Error::other));
|
||||
//let repo = global.mgr.get_or_create_repo(&distro, &repo).await?;
|
||||
//let [tmp_path] = global.mgr.random_file_paths();
|
||||
//
|
||||
//let mut tmp_file = tokio::fs::File::create(&tmp_path).await?;
|
||||
//tokio::io::copy(&mut body, &mut tmp_file).await?;
|
||||
//
|
||||
//global.mgr.queue_pkg(repo, tmp_path).await;
|
||||
//
|
||||
//Ok(StatusCode::ACCEPTED)
|
||||
}
|
||||
|
||||
async fn delete_repo(
|
||||
State(global): State<crate::Global>,
|
||||
Path((distro, repo)): Path<(String, String)>,
|
||||
) -> crate::Result<StatusCode> {
|
||||
if let Some(repo) = global.mgr.get_repo(&distro, &repo).await? {
|
||||
global.mgr.remove_repo(repo).await?;
|
||||
|
||||
tracing::info!("Removed repository {repo}");
|
||||
|
||||
Ok(StatusCode::OK)
|
||||
} else {
|
||||
Ok(StatusCode::NOT_FOUND)
|
||||
}
|
||||
//if let Some(repo) = global.mgr.get_repo(&distro, &repo).await? {
|
||||
// global.mgr.remove_repo(repo).await?;
|
||||
//
|
||||
// tracing::info!("Removed repository {repo}");
|
||||
//
|
||||
// Ok(StatusCode::OK)
|
||||
//} else {
|
||||
// Ok(StatusCode::NOT_FOUND)
|
||||
//}
|
||||
}
|
||||
|
||||
async fn delete_arch_repo(
|
||||
State(global): State<crate::Global>,
|
||||
Path((distro, repo, arch)): Path<(String, String, String)>,
|
||||
) -> crate::Result<StatusCode> {
|
||||
if let Some(repo) = global.mgr.get_repo(&distro, &repo).await? {
|
||||
global.mgr.remove_repo_arch(repo, &arch).await?;
|
||||
|
||||
tracing::info!("Removed architecture '{arch}' from repository {repo}");
|
||||
|
||||
Ok(StatusCode::OK)
|
||||
} else {
|
||||
Ok(StatusCode::NOT_FOUND)
|
||||
}
|
||||
//if let Some(repo) = global.mgr.get_repo(&distro, &repo).await? {
|
||||
// global.mgr.remove_repo_arch(repo, &arch).await?;
|
||||
//
|
||||
// tracing::info!("Removed architecture '{arch}' from repository {repo}");
|
||||
//
|
||||
// Ok(StatusCode::OK)
|
||||
//} else {
|
||||
// Ok(StatusCode::NOT_FOUND)
|
||||
//}
|
||||
//if let Some(mgr) = global.mgr.get_mgr(&distro).await {
|
||||
// let repo_removed = mgr.remove_repo_arch(&repo, &arch).await?;
|
||||
//
|
||||
|
|
Loading…
Reference in New Issue