-
Notifications
You must be signed in to change notification settings - Fork 72
Open
Description
the original code:
Line 600 in e70ddec
| return false |
func (l *Log) loadSegment(index uint64) (*segment, error) {
...
// check the most recent cached segment
var rseg *segment
l.scache.Range(func(_, v interface{}) bool {
s := v.(*segment)
if index >= s.index && index < s.index+uint64(len(s.epos)) {
rseg = s
}
return false
})
...
}lru.Range is like this:
func (lru *LRU) Range(iter func(key interface{}, value interface{}) bool) {
lru.mu.RLock()
defer lru.mu.RUnlock()
if head := lru.head; head != nil {
item := head.next
for item != lru.tail {
if !iter(item.key, item.value) {
return
}
item = item.next
}
}
}when the iter returns false, Range will stop iterating and return;
so, in loadSegment, Range should be called like this:
func (l *Log) loadSegment(index uint64) (*segment, error) {
...
// check the most recent cached segment
var rseg *segment
l.scache.Range(func(_, v interface{}) bool {
s := v.(*segment)
if index >= s.index && index < s.index+uint64(len(s.epos)) {
rseg = s
return false
}
return true
})
...
}Metadata
Metadata
Assignees
Labels
No labels