forked from TrueCloudLab/frostfs-node
[#1944] metabase: Recreate static buckets instead of resetting
From the `Bucket.ForEach` doc: ``` The provided function must not modify the bucket; this will result in undefined behavior. ``` Signed-off-by: Evgenii Stratonikov <evgeniy@morphbits.ru>
This commit is contained in:
parent
3c6daa2995
commit
e4bc3d0e9d
2 changed files with 9 additions and 18 deletions
|
@ -106,15 +106,17 @@ func (db *DB) init(reset bool) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for k := range mStaticBuckets {
|
for k := range mStaticBuckets {
|
||||||
b, err := tx.CreateBucketIfNotExists([]byte(k))
|
name := []byte(k)
|
||||||
if err != nil {
|
if reset {
|
||||||
return fmt.Errorf("could not create static bucket %s: %w", k, err)
|
err := tx.DeleteBucket(name)
|
||||||
|
if err != nil && !errors.Is(err, bbolt.ErrBucketNotFound) {
|
||||||
|
return fmt.Errorf("could not delete static bucket %s: %w", k, err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if reset {
|
_, err := tx.CreateBucketIfNotExists(name)
|
||||||
if err = resetBucket(b); err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("could not reset static bucket %s: %w", k, err)
|
return fmt.Errorf("could not create static bucket %s: %w", k, err)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -223,17 +223,6 @@ func objectKey(obj oid.ID, key []byte) []byte {
|
||||||
return key[:objectKeySize]
|
return key[:objectKeySize]
|
||||||
}
|
}
|
||||||
|
|
||||||
// removes all bucket elements.
|
|
||||||
func resetBucket(b *bbolt.Bucket) error {
|
|
||||||
return b.ForEach(func(k, v []byte) error {
|
|
||||||
if v != nil {
|
|
||||||
return b.Delete(k)
|
|
||||||
}
|
|
||||||
|
|
||||||
return b.DeleteBucket(k)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// if meets irregular object container in objs - returns its type, otherwise returns object.TypeRegular.
|
// if meets irregular object container in objs - returns its type, otherwise returns object.TypeRegular.
|
||||||
//
|
//
|
||||||
// firstIrregularObjectType(tx, cnr, obj) usage allows getting object type.
|
// firstIrregularObjectType(tx, cnr, obj) usage allows getting object type.
|
||||||
|
|
Loading…
Reference in a new issue