mirror of
https://git.asonix.dog/asonix/pict-rs
synced 2024-12-22 19:31:35 +00:00
Attempt clean-drop of tmp_dir
This commit is contained in:
parent
7b5a3020fa
commit
7f5cbc4571
2 changed files with 50 additions and 14 deletions
36
src/lib.rs
36
src/lib.rs
|
@ -2196,13 +2196,19 @@ impl PictRsConfiguration {
|
||||||
|
|
||||||
match repo {
|
match repo {
|
||||||
Repo::Sled(sled_repo) => {
|
Repo::Sled(sled_repo) => {
|
||||||
launch_file_store(tmp_dir, arc_repo, store, client, config, move |sc| {
|
launch_file_store(
|
||||||
sled_extra_config(sc, sled_repo.clone())
|
tmp_dir.clone(),
|
||||||
})
|
arc_repo,
|
||||||
|
store,
|
||||||
|
client,
|
||||||
|
config,
|
||||||
|
move |sc| sled_extra_config(sc, sled_repo.clone()),
|
||||||
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
Repo::Postgres(_) => {
|
Repo::Postgres(_) => {
|
||||||
launch_file_store(tmp_dir, arc_repo, store, client, config, |_| {}).await?;
|
launch_file_store(tmp_dir.clone(), arc_repo, store, client, config, |_| {})
|
||||||
|
.await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2260,19 +2266,33 @@ impl PictRsConfiguration {
|
||||||
|
|
||||||
match repo {
|
match repo {
|
||||||
Repo::Sled(sled_repo) => {
|
Repo::Sled(sled_repo) => {
|
||||||
launch_object_store(tmp_dir, arc_repo, store, client, config, move |sc| {
|
launch_object_store(
|
||||||
sled_extra_config(sc, sled_repo.clone())
|
tmp_dir.clone(),
|
||||||
})
|
arc_repo,
|
||||||
|
store,
|
||||||
|
client,
|
||||||
|
config,
|
||||||
|
move |sc| sled_extra_config(sc, sled_repo.clone()),
|
||||||
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
Repo::Postgres(_) => {
|
Repo::Postgres(_) => {
|
||||||
launch_object_store(tmp_dir, arc_repo, store, client, config, |_| {})
|
launch_object_store(
|
||||||
|
tmp_dir.clone(),
|
||||||
|
arc_repo,
|
||||||
|
store,
|
||||||
|
client,
|
||||||
|
config,
|
||||||
|
|_| {},
|
||||||
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tmp_dir.cleanup().await?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,28 +6,44 @@ pub(crate) type ArcTmpDir = Arc<TmpDir>;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub(crate) struct TmpDir {
|
pub(crate) struct TmpDir {
|
||||||
path: PathBuf,
|
path: Option<PathBuf>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TmpDir {
|
impl TmpDir {
|
||||||
pub(crate) async fn init() -> std::io::Result<Arc<Self>> {
|
pub(crate) async fn init() -> std::io::Result<Arc<Self>> {
|
||||||
let path = std::env::temp_dir().join(Uuid::new_v4().to_string());
|
let path = std::env::temp_dir().join(Uuid::new_v4().to_string());
|
||||||
tokio::fs::create_dir(&path).await?;
|
tokio::fs::create_dir(&path).await?;
|
||||||
Ok(Arc::new(TmpDir { path }))
|
Ok(Arc::new(TmpDir { path: Some(path) }))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn tmp_file(&self, ext: Option<&str>) -> PathBuf {
|
pub(crate) fn tmp_file(&self, ext: Option<&str>) -> PathBuf {
|
||||||
if let Some(ext) = ext {
|
if let Some(ext) = ext {
|
||||||
self.path.join(format!("{}{}", Uuid::new_v4(), ext))
|
self.path
|
||||||
|
.as_ref()
|
||||||
|
.expect("tmp path exists")
|
||||||
|
.join(format!("{}{}", Uuid::new_v4(), ext))
|
||||||
} else {
|
} else {
|
||||||
self.path.join(Uuid::new_v4().to_string())
|
self.path
|
||||||
|
.as_ref()
|
||||||
|
.expect("tmp path exists")
|
||||||
|
.join(Uuid::new_v4().to_string())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) async fn cleanup(self: Arc<Self>) -> std::io::Result<()> {
|
||||||
|
if let Some(path) = Arc::into_inner(self).and_then(|mut this| this.path.take()) {
|
||||||
|
tokio::fs::remove_dir_all(path).await?;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Drop for TmpDir {
|
impl Drop for TmpDir {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
std::fs::remove_dir_all(&self.path).expect("Removed directory");
|
if let Some(path) = self.path.as_ref() {
|
||||||
|
std::fs::remove_dir_all(path).expect("Removed directory");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue