in upload/detectEmptyRanges.go [26:64]
func DetectEmptyRanges(diskStream *diskstream.DiskStream, uploadableRanges []*common.IndexRange) ([]*common.IndexRange, error) {
if diskStream.GetDiskType() != footer.DiskTypeFixed {
return uploadableRanges, nil
}
fmt.Println("\nDetecting empty ranges..")
totalRangesCount := len(uploadableRanges)
lastIndex := int32(-1)
emptyRangesCount := int32(0)
bits := make([]byte, int32(math.Ceil(float64(totalRangesCount)/float64(8))))
bmap := bitmap.NewBitMapFromByteSliceCopy(bits)
indexChan, errChan := LocateNonEmptyRangeIndices(diskStream, uploadableRanges)
L:
for {
select {
case index, ok := <-indexChan:
if !ok {
break L
}
bmap.Set(index, true)
emptyRangesCount += index - lastIndex - 1
lastIndex = index
fmt.Printf("\r Empty ranges : %d/%d", emptyRangesCount, totalRangesCount)
case err := <-errChan:
return nil, err
}
}
// Remove empty ranges from the uploadable ranges slice.
i := int32(0)
for j := 0; j < totalRangesCount; j++ {
if set, _ := bmap.Get(int32(j)); set {
uploadableRanges[i] = uploadableRanges[j]
i++
}
}
uploadableRanges = uploadableRanges[:i]
return uploadableRanges, nil
}