forked from TrueCloudLab/frostfs-node
Initial commit
Initial public review release v0.10.0
This commit is contained in:
commit
dadfd90dcd
276 changed files with 46331 additions and 0 deletions
41
lib/localstore/list.go
Normal file
41
lib/localstore/list.go
Normal file
|
@ -0,0 +1,41 @@
|
|||
package localstore
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func (l *localstore) Iterate(filter FilterPipeline, handler MetaHandler) error {
|
||||
if handler == nil {
|
||||
return ErrEmptyMetaHandler
|
||||
} else if filter == nil {
|
||||
filter = NewFilter(&FilterParams{
|
||||
Name: "SKIPPING_FILTER",
|
||||
FilterFunc: SkippingFilterFunc,
|
||||
})
|
||||
}
|
||||
|
||||
return l.metaBucket.Iterate(func(_, v []byte) bool {
|
||||
meta := new(ObjectMeta)
|
||||
if err := meta.Unmarshal(v); err != nil {
|
||||
l.log.Error("unmarshal meta bucket item failure", zap.Error(err))
|
||||
} else if filter.Pass(context.TODO(), meta).Code() == CodePass {
|
||||
return !handler(meta)
|
||||
}
|
||||
return true
|
||||
})
|
||||
}
|
||||
|
||||
// ListItems iterates over Iterator with FilterPipeline and returns all passed items.
|
||||
func ListItems(it Iterator, f FilterPipeline) ([]ListItem, error) {
|
||||
res := make([]ListItem, 0)
|
||||
err := it.Iterate(f, func(meta *ObjectMeta) (stop bool) {
|
||||
res = append(res, ListItem{
|
||||
ObjectMeta: *meta,
|
||||
})
|
||||
return
|
||||
})
|
||||
|
||||
return res, err
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue