diff --git a/src/fs/mod.rs b/src/fs/mod.rs index c2790e6..36f6484 100644 --- a/src/fs/mod.rs +++ b/src/fs/mod.rs @@ -100,7 +100,6 @@ where let session = AsyncSession::mount(mountpoint, options).await?; - // release here while let Some(req) = session.next_request().await? { let fs = self.clone(); diff --git a/src/pack.rs b/src/pack.rs index 33b2a1b..8ee3f73 100644 --- a/src/pack.rs +++ b/src/pack.rs @@ -1,6 +1,6 @@ use crate::fungi::meta::{Ino, Inode}; use crate::fungi::{Error, Result, Writer}; -use crate::store::{BlockStore, Store}; +use crate::store::{BlockStore, Error as StoreError, Store}; use anyhow::Context; use futures::lock::Mutex; use std::collections::LinkedList; @@ -19,7 +19,7 @@ type FailuresList = Arc>>; #[derive(Debug)] struct Item(Ino, PathBuf, OsString, Metadata); /// creates an FL from the given root location. It takes ownership of the writer because -/// it's logically incorrect to store multiple filessytem in the same FL. +/// it's logically incorrect to store multiple filesystem in the same FL. /// All file chunks will then be uploaded to the provided store /// pub async fn pack, S: Store>( @@ -239,7 +239,16 @@ where } // write block to remote store - let block = self.store.set(&self.buffer[..size]).await?; + let store_result = self.store.set(&self.buffer[..size]).await; + + if let Err(store_err) = &store_result { + if let StoreError::Other(_) = store_err { + log::error!("failed to upload file {}: {:#}", path.display(), store_err); + std::process::exit(1); // Force immediate termination + } + } + + let block = store_result.map_err(Error::Store)?; // write block info to meta self.writer.block(ino, &block.id, &block.key).await?; diff --git a/src/server/block_handlers.rs b/src/server/block_handlers.rs index c544e35..0cbf948 100644 --- a/src/server/block_handlers.rs +++ b/src/server/block_handlers.rs @@ -13,7 +13,7 @@ use crate::server::{ config::AppState, db::DB, models::Block, - response::{BlockUploadedResponse, ResponseError, ResponseResult}, + response::{ResponseError, ResponseResult}, }; use serde::{Deserialize, Serialize}; use utoipa::ToSchema;