lib/uplinkc: fix test flakiness by setting MaxTimeSkew

Not having a skew caused an issue where:

1. Uplink calls "begin segment", where segment isn't committed to the
database.
2. Uplink stores piece X to the storage node A with timestamp 1.
3. Satellite runs garbage collection with timestamp 2.
4. Satellite sends retain request to storage node A with timestamp 2.
5. Storage node A deletes piece X, because 1 < 2.
6. Uplink calls "commit segment" with storage node A in it.
7. Download of segment fails, because A doesn't have piece X.

In production this is not an issue since the MaxTimeSkew is 72h by
default.

Change-Id: Id87ca3ddc44103dcd85d031b1367168c014b8e7b
This commit is contained in:
Egon Elbre 2020-01-19 22:05:49 +02:00 committed by Stefan Benten
parent c4cbc6ff2f
commit 10d932fd65
2 changed files with 5 additions and 0 deletions

View File

@ -132,6 +132,7 @@ func (planet *Planet) newStorageNodes(count int, whitelistedSatellites storj.Nod
},
},
Retain: retain.Config{
MaxTimeSkew: 10 * time.Second,
Status: retain.Enabled,
Concurrency: 5,
},

View File

@ -20,6 +20,7 @@ import (
"storj.io/storj/private/testplanet"
"storj.io/storj/satellite"
"storj.io/storj/storage"
"storj.io/storj/storagenode"
)
// TestGarbageCollection does the following:
@ -37,6 +38,9 @@ func TestGarbageCollection(t *testing.T) {
config.GarbageCollection.FalsePositiveRate = 0.000000001
config.GarbageCollection.Interval = 500 * time.Millisecond
},
StorageNode: func(index int, config *storagenode.Config) {
config.Retain.MaxTimeSkew = 0
},
},
}, func(t *testing.T, ctx *testcontext.Context, planet *testplanet.Planet) {
satellite := planet.Satellites[0]