From a3be1e5cfe43fb221fce0658016bbda818ce0b88 Mon Sep 17 00:00:00 2001 From: Jarek Kowalski Date: Tue, 1 Sep 2020 17:36:24 -0700 Subject: [PATCH] upload: fixed ForceHashPercentage behavior to be non-deterministic (#579) Fixes #578 --- snapshot/snapshotfs/upload.go | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/snapshot/snapshotfs/upload.go b/snapshot/snapshotfs/upload.go index f9c8cb8e7..6bee4b38d 100644 --- a/snapshot/snapshotfs/upload.go +++ b/snapshot/snapshotfs/upload.go @@ -4,8 +4,8 @@ "bytes" "context" "encoding/json" - "hash/fnv" "io" + "math/rand" "os" "path" "path/filepath" @@ -583,18 +583,10 @@ func findCachedEntry(ctx context.Context, entry fs.Entry, prevEntries []fs.Entri return nil } -// objectIDPercent arbitrarily maps given object ID onto a number 0.99. -func objectIDPercent(obj object.ID) int { - h := fnv.New32a() - io.WriteString(h, obj.String()) //nolint:errcheck - - return int(h.Sum32() % 100) //nolint:gomnd -} - func (u *Uploader) maybeIgnoreCachedEntry(ctx context.Context, ent fs.Entry) fs.Entry { if h, ok := ent.(object.HasObjectID); ok { - if objectIDPercent(h.ObjectID()) < u.ForceHashPercentage { - log(ctx).Debugf("ignoring valid cached object: %v", h.ObjectID()) + if rand.Intn(100) < u.ForceHashPercentage { // nolint:gomnd,gosec + log(ctx).Debugf("re-hashing cached object: %v", h.ObjectID()) return nil }