Skip to content

Commit

Permalink
remove paging from memory backend
Browse files Browse the repository at this point in the history
  • Loading branch information
rosstimothy committed Feb 8, 2025
1 parent c1cd47a commit 8f40411
Showing 1 changed file with 14 additions and 33 deletions.
47 changes: 14 additions & 33 deletions lib/backend/memory/memory.go
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,6 @@ func (m *Memory) Iterate(ctx context.Context, startKey, endKey backend.Key, limi
return nil, trace.BadParameter("missing parameter endKey")
}

const defaultPageSize = 1000
return func(yield func(backend.Item, error) bool) {
iteratorFn := m.tree.AscendGreaterOrEqual
if order == backend.IterateDescend {
Expand All @@ -321,44 +320,26 @@ func (m *Memory) Iterate(ctx context.Context, startKey, endKey backend.Key, limi
count := 0
startItem := &btreeItem{Item: backend.Item{Key: startKey}}
endItem := &btreeItem{Item: backend.Item{Key: endKey}}
pageLimit := defaultPageSize

items := make([]backend.Item, 0, pageLimit)
for {
if limit != backend.NoLimit {
pageLimit = min(limit-count, defaultPageSize)
m.Lock()
m.removeExpired()
defer m.Unlock()
iteratorFn(startItem, func(item *btreeItem) bool {
if endItem.Less(item) {
return false
}

m.Lock()
m.removeExpired()
iteratorFn(startItem, func(item *btreeItem) bool {
if endItem.Less(item) {
return false
}

items = append(items, item.Item)
return len(items) < pageLimit
})
m.Unlock()

for _, item := range items {
if !yield(item, nil) {
return
}

count++
if limit != backend.NoLimit && count >= limit {
return
}
if !yield(item.Item, nil) {
return false
}

if len(items) < pageLimit {
return
count++
if limit != backend.NoLimit && count >= limit {
return false
}

startItem = &btreeItem{Item: backend.Item{Key: backend.RangeEnd(items[len(items)-1].Key)}}
items = items[:0]
}
return true
})
}, nil
}

Expand All @@ -380,7 +361,7 @@ func (m *Memory) GetRange(ctx context.Context, startKey, endKey backend.Key, lim
return nil, trace.Wrap(err)
}

var result backend.GetResult
result := backend.GetResult{Items: make([]backend.Item, 0, 1000)}
for item, err := range iter {
if err != nil {
return nil, trace.Wrap(err)
Expand Down

0 comments on commit 8f40411

Please sign in to comment.