diff --git a/src/duplicacy_chunkdownloader.go b/src/duplicacy_chunkdownloader.go index ade7c3a..eae28b4 100644 --- a/src/duplicacy_chunkdownloader.go +++ b/src/duplicacy_chunkdownloader.go @@ -5,6 +5,7 @@ package duplicacy import ( + "io" "sync/atomic" "time" ) @@ -328,18 +329,24 @@ func (downloader *ChunkDownloader) Download(threadIndex int, task ChunkDownloadT for downloadAttempt := 0;; downloadAttempt++ { err = downloader.storage.DownloadFile(threadIndex, chunkPath, chunk) if err != nil { - LOG_ERROR("UPLOAD_FATAL", "Failed to download the chunk %s: %v", chunkID, err) - return false + if err == io.ErrUnexpectedEOF && downloadAttempt < MaxDownloadAttempts { + LOG_WARN("DOWNLOAD_RETRY", "Failed to download the chunk %s: %v; retrying", chunkID, err) + chunk.Reset(false) + continue + } else { + LOG_ERROR("DOWNLOAD_CHUNK", "Failed to download the chunk %s: %v", chunkID, err) + return false + } } err = chunk.Decrypt(downloader.config.ChunkKey, task.chunkHash) if err != nil { if downloadAttempt < MaxDownloadAttempts { - LOG_WARN("RETRY_DOWNLOAD", "Failed to decrypt the chunk %s: %v; retrying", chunkID, err) + LOG_WARN("DOWNLOAD_RETRY", "Failed to decrypt the chunk %s: %v; retrying", chunkID, err) chunk.Reset(false) continue } else { - LOG_ERROR("UPLOAD_CHUNK", "Failed to decrypt the chunk %s: %v", chunkID, err) + LOG_ERROR("DOWNLOAD_DECRYPT", "Failed to decrypt the chunk %s: %v", chunkID, err) return false } } @@ -347,11 +354,11 @@ func (downloader *ChunkDownloader) Download(threadIndex int, task ChunkDownloadT actualChunkID := chunk.GetID() if actualChunkID != chunkID { if downloadAttempt < MaxDownloadAttempts { - LOG_WARN("RETRY_DOWNLOAD", "The chunk %s has a hash id of %s; retrying", chunkID, actualChunkID) + LOG_WARN("DOWNLOAD_RETRY", "The chunk %s has a hash id of %s; retrying", chunkID, actualChunkID) chunk.Reset(false) continue } else { - LOG_FATAL("UPLOAD_CORRUPTED", "The chunk %s has a hash id of %s", chunkID, actualChunkID) + LOG_FATAL("DOWNLOAD_CORRUPTED", "The chunk %s has a hash id of %s", chunkID, actualChunkID) return false } }