From c9bfea3c46e6e69809a5ee72aef6c7e72738ce34 Mon Sep 17 00:00:00 2001 From: Daniil Porokhnin Date: Sun, 20 Sep 2026 11:48:49 +0300 Subject: [PATCH] fix: sort partition, track size --- fracmanager/fraction_registry.go | 4 ++++ fracmanager/partitioned_collection.go | 8 +++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/fracmanager/fraction_registry.go b/fracmanager/fraction_registry.go index cf2be2758..5e34307b2 100644 --- a/fracmanager/fraction_registry.go +++ b/fracmanager/fraction_registry.go @@ -296,6 +296,10 @@ func (r *fractionRegistry) evictLocal(sizeLimit uint64) ([]*refCountedSealed, er r.sealed.Del(info.Name()) evicted = append(evicted, s) + + if totalUsedSize-releasingSize <= sizeLimit { + break + } } } diff --git a/fracmanager/partitioned_collection.go b/fracmanager/partitioned_collection.go index 4fd7dba98..d2d22d569 100644 --- a/fracmanager/partitioned_collection.go +++ b/fracmanager/partitioned_collection.go @@ -2,6 +2,8 @@ package fracmanager import ( "iter" + "maps" + "slices" "github.com/ozontech/seq-db/util" ) @@ -66,15 +68,15 @@ func (c *PartitionedCollection[T]) MinPartition() uint64 { return 0 } -// GetByPartition returns all objects in the specified partition. +// GetByPartition returns all objects in the specified partition, ordered by key. func (c *PartitionedCollection[T]) GetByPartition(partitionID uint64) []T { partitionMap, ok := c.byPartition[partitionID] if !ok { return nil } res := make([]T, 0, len(partitionMap)) - for _, obj := range partitionMap { - res = append(res, obj) + for _, key := range slices.Sorted(maps.Keys(partitionMap)) { + res = append(res, partitionMap[key]) } return res }