Hey, yeah it should be implemented like this:
func (l *Log) Read(off uint64) (*api.Record, error) {
l.mu.RLock()
defer l.mu.RUnlock()
var s *segment
for _, segment := range l.segments {
if segment.baseOffset <= off && off < segment.nextOffset {
s = segment
break
}
}
// START: before
if s == nil || s.nextOffset <= off {
return nil, fmt.Errorf("offset out of range: %d", off)
}
// END: before
return s.Read(off)
}
I fixed a ton of issues that will be in the next beta, which should be out either late this week or next week.