From 6841c989c6ca69c694e96d4f0d813e21150fd83b Mon Sep 17 00:00:00 2001 From: Gilbert Chen Date: Thu, 24 Sep 2020 14:53:42 -0400 Subject: [PATCH] Fixed a bug that caused `check -chunks -persist` to succeed with broken chunks The bug was not setting the `isBroken` flag in WaitForChunk() --- src/duplicacy_chunkdownloader.go | 3 +++ src/duplicacy_snapshotmanager.go | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/duplicacy_chunkdownloader.go b/src/duplicacy_chunkdownloader.go index 2ad8ef2..e0fb883 100644 --- a/src/duplicacy_chunkdownloader.go +++ b/src/duplicacy_chunkdownloader.go @@ -254,6 +254,9 @@ func (downloader *ChunkDownloader) WaitForChunk(chunkIndex int) (chunk *Chunk) { downloader.taskList[completion.chunkIndex].chunk = completion.chunk downloader.numberOfDownloadedChunks++ downloader.numberOfDownloadingChunks-- + if completion.chunk.isBroken { + downloader.NumberOfFailedChunks++ + } } return downloader.taskList[chunkIndex].chunk } diff --git a/src/duplicacy_snapshotmanager.go b/src/duplicacy_snapshotmanager.go index b41b520..dfa9e6d 100644 --- a/src/duplicacy_snapshotmanager.go +++ b/src/duplicacy_snapshotmanager.go @@ -1041,6 +1041,9 @@ func (manager *SnapshotManager) CheckSnapshots(snapshotID string, revisionsToChe totalChunks := len(*allChunkHashes) for i := 0; i < totalChunks; i++ { chunk := manager.chunkDownloader.WaitForChunk(i + chunkIndex) + if chunk.isBroken { + continue + } downloadedChunkSize += int64(chunk.GetLength()) elapsedTime := time.Now().Sub(startTime).Seconds()