attempt to delete files after they're uploaded

This commit is contained in:
Brandon Thomas committed 2021-09-12 17:07:41 -04:00
1 parent 0d691ded80
commit 0450adb396
1 file changed
+65 -9
+65 -9
View File
@@ -51,12 +51,13 @@ use ring::digest::{Context, Digest, SHA256};
use sqlx::MySqlPool;
use sqlx::mysql::MySqlPoolOptions;
use std::fs::File;
use std::io::{BufReader, Read};
use std::io::{BufReader, Read, Error};
use std::ops::Deref;
use std::path::{PathBuf, Path};
use std::process::Command;
use std::time::Duration;
use tempdir::TempDir;
use std::fs;
// Buckets
const ENV_ACCESS_KEY : &'static str = "ACCESS_KEY";
@@ -336,8 +337,13 @@ async fn process_job(downloader: &Downloader, job: &TtsUploadJobRecord) -> Anyho
.map(|c| c.to_string())
.unwrap_or("".to_string());
let download_filename = downloader.google_drive_downloader
.download_file(&download_url, &temp_dir).await?;
let download_filename = match downloader.google_drive_downloader.download_file(&download_url, &temp_dir).await {
Ok(filename) => filename,
Err(e) => {
delete_temp_directory(&temp_dir);
return Err(e);
}
};
let model_type = if download_filename.to_lowercase().ends_with("zip") {
TtsModelType::Talknet
@@ -365,18 +371,28 @@ async fn process_job(downloader: &Downloader, job: &TtsUploadJobRecord) -> Anyho
match model_type {
TtsModelType::Tacotron2 => {
downloader.tacotron_tts_check.execute(
let result = downloader.tacotron_tts_check.execute(
&file_path,
&output_metadata_fs_path,
false,
)?;
);
if let Err(e) = result {
delete_temp_file(&file_path);
delete_temp_directory(&temp_dir);
}
},
TtsModelType::Talknet => {
downloader.talknet_tts_check.execute(
let result = downloader.talknet_tts_check.execute(
&file_path,
&output_metadata_fs_path,
false,
)?;
);
if let Err(e) = result {
delete_temp_file(&file_path);
delete_temp_directory(&temp_dir);
}
},
}
@@ -386,7 +402,15 @@ async fn process_job(downloader: &Downloader, job: &TtsUploadJobRecord) -> Anyho
check_file_exists(&output_metadata_fs_path)?;
let file_metadata = read_metadata_file(&output_metadata_fs_path)?;
let file_metadata = match read_metadata_file(&output_metadata_fs_path) {
Ok(metadata) => metadata,
Err(e) => {
delete_temp_file(&file_path);
delete_temp_file(&output_metadata_fs_path);
delete_temp_directory(&temp_dir);
return Err(e);
}
};
// ==================== UPLOAD MODEL FILE ==================== //
@@ -405,7 +429,19 @@ async fn process_job(downloader: &Downloader, job: &TtsUploadJobRecord) -> Anyho
redis_logger.log_status("uploading model")?;
downloader.bucket_client.upload_filename(&synthesizer_model_bucket_path, &file_path).await?;
if let Err(e) = downloader.bucket_client.upload_filename(&synthesizer_model_bucket_path, &file_path).await {
delete_temp_file(&output_metadata_fs_path);
delete_temp_file(&file_path);
delete_temp_directory(&temp_dir);
return Err(e);
}
// ==================== DELETE DOWNLOADED FILE ==================== //
// NB: We should be using a tempdir, but to make absolutely certain we don't overflow the disk...
delete_temp_file(&output_metadata_fs_path);
delete_temp_file(&file_path);
delete_temp_directory(&temp_dir);
// ==================== SAVE RECORDS ==================== //
@@ -448,3 +484,23 @@ async fn process_job(downloader: &Downloader, job: &TtsUploadJobRecord) -> Anyho
Ok(())
}
fn delete_temp_file<P: AsRef<Path>>(file_path: P) {
// NB: We should be using a tempdir, but to make absolutely certain we don't overflow the disk...
let printable_name = file_path.as_ref().to_str().unwrap_or("bad filename");
match fs::remove_file(&file_path) {
Ok(_) => info!("File deleted: {}", printable_name),
Err(e) => warn!("Could not delete file {:?} (not a fatal error): {:?}",
printable_name, e),
}
}
fn delete_temp_directory<P: AsRef<Path>>(directory_path: P) {
// NB: We should be using a tempdir, but to make absolutely certain we don't overflow the disk...
let printable_name = directory_path.as_ref().to_str().unwrap_or("bad directory");
match fs::remove_dir_all(&directory_path) {
Ok(_) => info!("Directory deleted: {}", printable_name),
Err(e) => warn!("Could not delete directory{:?} (not a fatal error): {:?}",
printable_name, e),
}
}