From 9bf525ee7a7c3ca147a577f463e3dc73cc3858a7 Mon Sep 17 00:00:00 2001 From: Carsten Grohmann Date: Tue, 4 May 2021 21:09:35 +0200 Subject: [PATCH] Ensuring multipart size even when storage is low When the temporary storage was full, the old implementation started an upload even if there was not enough data to completely fill the minimum multipart size or fill the user-selected multipart size. The new implementation ensures the minimum multipart size by forcing the user-selected multipart size. Fixes #1591 --- src/fdcache_entity.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/fdcache_entity.cpp b/src/fdcache_entity.cpp index 2c21772..67fbd36 100644 --- a/src/fdcache_entity.cpp +++ b/src/fdcache_entity.cpp @@ -1498,6 +1498,10 @@ ssize_t FdEntity::Write(const char* bytes, off_t start, size_t size) S3FS_PRN_WARN("Not enough local storage to cache write request: [path=%s][fd=%d][offset=%lld][size=%zu]", path.c_str(), fd, static_cast(start), size); return -ENOSPC; // No space left on device } + if ((start + static_cast(size)) <= S3fsCurl::GetMultipartSize()) { + S3FS_PRN_WARN("Not enough local storage to cache write request till multipart upload can start: [path=%s][fd=%d][offset=%lld][size=%zu]", path.c_str(), fd, static_cast(start), size); + return -ENOSPC; // No space left on device + } if(0 != (result = NoCachePreMultipartPost())){ S3FS_PRN_ERR("failed to switch multipart uploading with no cache(errno=%d)", result); return result;