package writecachebadger import ( "fmt" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/metaerr" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" "github.com/dgraph-io/badger/v4" ) // IterateDB iterates over all objects stored in badger.DB instance and passes them to f until error return. // It is assumed that db is an underlying database of some WriteCache instance. // // DB must not be nil and should be opened. func IterateDB(db *badger.DB, f func(oid.Address) error) error { return metaerr.Wrap(db.View(func(tx *badger.Txn) error { opts := badger.DefaultIteratorOptions opts.PrefetchValues = false it := tx.NewIterator(opts) for it.Rewind(); it.Valid(); it.Next() { var key internalKey if got, want := len(it.Item().Key()), len(key); got != want { return fmt.Errorf("invalid db key len: got %d, want %d", got, want) } copy(key[:], it.Item().Key()) if err := f(key.address()); err != nil { return err } } return nil })) }