forked from TrueCloudLab/frostfs-node
Evgenii Stratonikov
e858479a74
Previously, we can continue to return `EndOfListing` infinitely. Reflect iterator reuse via Rewind() method. Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
32 lines
718 B
Go
32 lines
718 B
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
objectcore "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object"
|
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/engine"
|
|
)
|
|
|
|
type keySpaceIterator struct {
|
|
ng *engine.StorageEngine
|
|
cur *engine.Cursor
|
|
}
|
|
|
|
func (it *keySpaceIterator) Next(ctx context.Context, batchSize uint32) ([]objectcore.AddressWithType, error) {
|
|
var prm engine.ListWithCursorPrm
|
|
prm.WithCursor(it.cur)
|
|
prm.WithCount(batchSize)
|
|
|
|
res, err := it.ng.ListWithCursor(ctx, prm)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("cannot list objects in engine: %w", err)
|
|
}
|
|
|
|
it.cur = res.Cursor()
|
|
return res.AddressList(), nil
|
|
}
|
|
|
|
func (it *keySpaceIterator) Rewind() {
|
|
it.cur = nil
|
|
}
|