forked from TrueCloudLab/frostfs-node
[#1520] shard: Ignore errors on metabase refill
Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
parent
78ea450c25
commit
7df50297cd
7 changed files with 108 additions and 27 deletions
|
@ -72,6 +72,7 @@ func addressFromString(s string) (*oid.Address, error) {
|
|||
type IterationPrm struct {
|
||||
handler func(addr oid.Address, data []byte) error
|
||||
ignoreErrors bool
|
||||
errorHandler func(oid.Address, error) error
|
||||
lazyHandler func(oid.Address, func() ([]byte, error)) error
|
||||
}
|
||||
|
||||
|
@ -92,6 +93,11 @@ func (p *IterationPrm) WithIgnoreErrors(ignore bool) {
|
|||
p.ignoreErrors = ignore
|
||||
}
|
||||
|
||||
// WithErrorHandler sets error handler for objects that cannot be read or unmarshaled.
|
||||
func (p *IterationPrm) WithErrorHandler(f func(oid.Address, error) error) {
|
||||
p.errorHandler = f
|
||||
}
|
||||
|
||||
// Iterate iterates over all stored objects.
|
||||
func (t *FSTree) Iterate(prm IterationPrm) error {
|
||||
return t.iterate(0, []string{t.RootPath}, prm)
|
||||
|
@ -141,6 +147,9 @@ func (t *FSTree) iterate(depth int, curPath []string, prm IterationPrm) error {
|
|||
data, err = os.ReadFile(filepath.Join(curPath...))
|
||||
if err != nil {
|
||||
if prm.ignoreErrors {
|
||||
if prm.errorHandler != nil {
|
||||
return prm.errorHandler(*addr, err)
|
||||
}
|
||||
continue
|
||||
}
|
||||
return err
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue