lotus/storage/sealer/ffiwrapper/unseal_ranges.go

28 lines
935 B
Go
Raw Normal View History

2020-05-19 16:11:56 +00:00
package ffiwrapper
import (
"golang.org/x/xerrors"
2020-08-16 10:40:35 +00:00
rlepluslazy "github.com/filecoin-project/go-bitfield/rle"
2020-09-07 03:49:10 +00:00
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/lotus/storage/sealer/partialfile"
"github.com/filecoin-project/lotus/storage/sealer/storiface"
2020-05-19 16:11:56 +00:00
)
// merge gaps between ranges which are close to each other
// TODO: more benchmarking to come up with more optimal number
const mergeGaps = 32 << 20
// TODO const expandRuns = 16 << 20 // unseal more than requested for future requests
func computeUnsealRanges(unsealed rlepluslazy.RunIterator, offset storiface.UnpaddedByteIndex, size abi.UnpaddedPieceSize) (rlepluslazy.RunIterator, error) {
todo := partialfile.PieceRun(offset.Padded(), size.Padded())
2020-05-19 16:11:56 +00:00
todo, err := rlepluslazy.Subtract(todo, unsealed)
if err != nil {
return nil, xerrors.Errorf("compute todo-unsealed: %w", err)
}
return rlepluslazy.JoinClose(todo, mergeGaps)
}