From 141d302492ba73ca5b20ee0ee98da9ca061efa42 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sat, 22 Dec 2018 11:52:58 -0800 Subject: [PATCH] fix binarySearchCompactSection --- weed/storage/needle/compact_map.go | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/weed/storage/needle/compact_map.go b/weed/storage/needle/compact_map.go index 2182f3bf3..4816e0098 100644 --- a/weed/storage/needle/compact_map.go +++ b/weed/storage/needle/compact_map.go @@ -165,19 +165,29 @@ func (cm *CompactMap) Get(key NeedleId) (*NeedleValue, bool) { return cm.list[x].Get(key) } func (cm *CompactMap) binarySearchCompactSection(key NeedleId) int { - if len(cm.list) == 0 { - return -1 + l, h := 0, len(cm.list)-1 + if h < 0 { + return -5 } - x := sort.Search(len(cm.list), func(i int) bool { - return cm.list[i].start >= key - }) - if len(cm.list) == x { - return -1 + if cm.list[h].start <= key { + if cm.list[h].counter < batch || key <= cm.list[h].end { + return h + } + return -4 } - if cm.list[x].start == key { - return x + for l <= h { + m := (l + h) / 2 + if key < cm.list[m].start { + h = m - 1 + } else { // cm.list[m].start <= key + if cm.list[m+1].start <= key { + l = m + 1 + } else { + return m + } + } } - return x - 1 + return -3 } // Visit visits all entries or stop if any error when visiting