From b659456f1241b1c39d605bd8ea7e062c8c95b99e Mon Sep 17 00:00:00 2001 From: Gilbert Chen Date: Wed, 10 Jul 2024 10:32:40 -0400 Subject: [PATCH] Don't add corrupt chunks to verified_chunks When -persist is specified, the chunk downloader may return the chunk even if the chunk is corrupt. We use the chunk.isBroken flag to detect this situation. --- src/duplicacy_snapshotmanager.go | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/duplicacy_snapshotmanager.go b/src/duplicacy_snapshotmanager.go index 0482512..ee63ef2 100644 --- a/src/duplicacy_snapshotmanager.go +++ b/src/duplicacy_snapshotmanager.go @@ -1083,20 +1083,23 @@ func (manager *SnapshotManager) CheckSnapshots(snapshotID string, revisionsToChe if chunk == nil { continue } - chunkID := manager.config.GetChunkIDFromHash(chunkHashes[chunkIndex]) - verifiedChunksLock.Lock() - verifiedChunks[chunkID] = startTime.Unix() - verifiedChunksLock.Unlock() - downloadedChunkSize := atomic.AddInt64(&totalDownloadedChunkSize, int64(chunk.GetLength())) - downloadedChunks := atomic.AddInt64(&totalDownloadedChunks, 1) + if !chunk.isBroken { + chunkID := manager.config.GetChunkIDFromHash(chunkHashes[chunkIndex]) + verifiedChunksLock.Lock() + verifiedChunks[chunkID] = startTime.Unix() + verifiedChunksLock.Unlock() - elapsedTime := time.Now().Sub(startTime).Seconds() - speed := int64(float64(downloadedChunkSize) / elapsedTime) - remainingTime := int64(float64(totalChunks - downloadedChunks) / float64(downloadedChunks) * elapsedTime) - percentage := float64(downloadedChunks) / float64(totalChunks) * 100.0 - LOG_INFO("VERIFY_PROGRESS", "Verified chunk %s (%d/%d), %sB/s %s %.1f%%", - chunkID, downloadedChunks, totalChunks, PrettySize(speed), PrettyTime(remainingTime), percentage) + downloadedChunkSize := atomic.AddInt64(&totalDownloadedChunkSize, int64(chunk.GetLength())) + downloadedChunks := atomic.AddInt64(&totalDownloadedChunks, 1) + + elapsedTime := time.Now().Sub(startTime).Seconds() + speed := int64(float64(downloadedChunkSize) / elapsedTime) + remainingTime := int64(float64(totalChunks - downloadedChunks) / float64(downloadedChunks) * elapsedTime) + percentage := float64(downloadedChunks) / float64(totalChunks) * 100.0 + LOG_INFO("VERIFY_PROGRESS", "Verified chunk %s (%d/%d), %sB/s %s %.1f%%", + chunkID, downloadedChunks, totalChunks, PrettySize(speed), PrettyTime(remainingTime), percentage) + } manager.config.PutChunk(chunk) }