cmd/segment-reaper: Use bitmask type in observer (#3661)

bitmask type was created for making easy to understand the observer bit
logic.
This commit makes the changes in observer for using the bitmask type.
This commit is contained in:
Ivan Fraixedes 2019-11-27 13:11:07 +01:00 committed by Fadila
parent 7288d01781
commit 0bf7ac5b20

View File

@ -20,7 +20,7 @@ import (
// object represents object with segments. // object represents object with segments.
type object struct { type object struct {
// TODO verify if we have more than 64 segments for object in network // TODO verify if we have more than 64 segments for object in network
segments uint64 segments bitmask
expectedNumberOfSegments byte expectedNumberOfSegments byte
@ -112,12 +112,19 @@ func (obsvr *observer) processSegment(ctx context.Context, path metainfo.ScopedP
zap.S().Warn("unsupported segment index", zap.Int("index", segmentIndex)) zap.S().Warn("unsupported segment index", zap.Int("index", segmentIndex))
} }
if object.segments&(1<<uint64(segmentIndex)) != 0 { ok, err := object.segments.Has(segmentIndex)
if err != nil {
return err
}
if ok {
// TODO make path displayable // TODO make path displayable
return errs.New("fatal error this segment is duplicated: %s", path.Raw) return errs.New("fatal error this segment is duplicated: %s", path.Raw)
} }
object.segments |= 1 << uint64(segmentIndex) err = object.segments.Set(segmentIndex)
if err != nil {
return err
}
} }
// collect number of pointers for report // collect number of pointers for report