check: Fix crash of --read-data-subset=x% on empty repository

Rounding up to at least one pack file should only be done if at least a
pack file exists.
This commit is contained in:
Michael Eischer 2021-02-27 15:56:40 +01:00
parent 4baebdc6f5
commit 9e852af5be
3 changed files with 15 additions and 1 deletions

View file

@ -0,0 +1,7 @@
Bugfix: Fix crash of `check --read-data-subset=x%` run for an empty repository
`check --read-data-subset=x%` crashed when run for an empty repository. This
has been fixed.
https://github.com/restic/restic/issues/3296
https://github.com/restic/restic/pull/3309

View file

@ -331,7 +331,7 @@ func selectPacksByBucket(allPacks map[restic.ID]int64, bucket, totalBuckets uint
func selectRandomPacksByPercentage(allPacks map[restic.ID]int64, percentage float64) map[restic.ID]int64 {
packCount := len(allPacks)
packsToCheck := int(float64(packCount) * (percentage / 100.0))
if packsToCheck < 1 {
if packCount > 0 && packsToCheck < 1 {
packsToCheck = 1
}
timeNs := time.Now().UnixNano()

View file

@ -122,3 +122,10 @@ func TestSelectRandomPacksByPercentage(t *testing.T) {
rtest.Assert(t, ok, "Expected input and output to be equal")
}
}
func TestSelectNoRandomPacksByPercentage(t *testing.T) {
// that the a repository without pack files works
var testPacks = make(map[restic.ID]int64)
selectedPacks := selectRandomPacksByPercentage(testPacks, 10.0)
rtest.Assert(t, len(selectedPacks) == 0, "Expected 0 selected packs")
}