From 71307ba4c155e4ccaeabcce2052d8d04f5597a54 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Wed, 17 Jun 2026 11:56:56 -0300 Subject: [PATCH] mmm: expose AllFreeRanges() --- eventstore/mmm/freeranges.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/eventstore/mmm/freeranges.go b/eventstore/mmm/freeranges.go index 2811c19..d17133a 100644 --- a/eventstore/mmm/freeranges.go +++ b/eventstore/mmm/freeranges.go @@ -4,6 +4,7 @@ import ( "cmp" "encoding/binary" "fmt" + "iter" "runtime" "slices" "syscall" @@ -16,6 +17,17 @@ import ( const LARGE_FREERANGE = 142 +// AllFreeRanges returns an iterator of (start_pos, size) of all free ranges, in positional order. +func (b *MultiMmapManager) AllFreeRanges() iter.Seq2[uint64, uint32] { + return func(yield func(uint64, uint32) bool) { + for _, pos := range b.freeRangesAll { + if !yield(pos.start, pos.size) { + return + } + } + } +} + func (b *MultiMmapManager) gatherFreeRanges(txn *lmdb.Txn) error { cursor, err := txn.OpenCursor(b.indexId) if err != nil {