forked from TrueCloudLab/frostfs-node
[#1181] metabase: Remove unused CleanUp method
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
637077a883
commit
e90ac9c6f9
1 changed files with 0 additions and 108 deletions
|
@ -1,108 +0,0 @@
|
||||||
package meta
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"go.etcd.io/bbolt"
|
|
||||||
)
|
|
||||||
|
|
||||||
// CleanUpPrm groups the parameters of CleanUp operation.
|
|
||||||
type CleanUpPrm struct{}
|
|
||||||
|
|
||||||
// CleanUpRes groups resulting values of CleanUp operation.
|
|
||||||
type CleanUpRes struct{}
|
|
||||||
|
|
||||||
// CleanUp removes empty buckets from metabase.
|
|
||||||
func (db *DB) CleanUp(prm *CleanUpPrm) (res *CleanUpRes, err error) {
|
|
||||||
err = db.boltDB.Update(func(tx *bbolt.Tx) error {
|
|
||||||
return tx.ForEach(func(name []byte, b *bbolt.Bucket) error {
|
|
||||||
switch {
|
|
||||||
case isFKBTBucket(name):
|
|
||||||
cleanUpFKBT(tx, name, b)
|
|
||||||
case isListBucket(name):
|
|
||||||
cleanUpListBucket(tx, name, b)
|
|
||||||
default:
|
|
||||||
cleanUpUniqueBucket(tx, name, b)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func isFKBTBucket(name []byte) bool {
|
|
||||||
bucketName := string(name)
|
|
||||||
|
|
||||||
switch {
|
|
||||||
case
|
|
||||||
strings.Contains(bucketName, userAttributePostfix),
|
|
||||||
strings.Contains(bucketName, ownerPostfix):
|
|
||||||
return true
|
|
||||||
default:
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func isListBucket(name []byte) bool {
|
|
||||||
bucketName := string(name)
|
|
||||||
|
|
||||||
switch {
|
|
||||||
case
|
|
||||||
strings.Contains(bucketName, payloadHashPostfix),
|
|
||||||
strings.Contains(bucketName, parentPostfix):
|
|
||||||
return true
|
|
||||||
default:
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func cleanUpUniqueBucket(tx *bbolt.Tx, name []byte, b *bbolt.Bucket) {
|
|
||||||
switch { // clean well-known global metabase buckets
|
|
||||||
case bytes.Equal(name, containerVolumeBucketName):
|
|
||||||
_ = b.ForEach(func(k, v []byte) error {
|
|
||||||
if parseContainerSize(v) == 0 {
|
|
||||||
_ = b.Delete(k)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
default:
|
|
||||||
// do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
if b.Stats().KeyN == 0 {
|
|
||||||
_ = tx.DeleteBucket(name) // ignore error, best effort there
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func cleanUpFKBT(tx *bbolt.Tx, name []byte, b *bbolt.Bucket) {
|
|
||||||
removedBuckets := 0
|
|
||||||
remainingBuckets := b.Stats().BucketN - 1
|
|
||||||
|
|
||||||
_ = b.ForEach(func(k, _ []byte) error {
|
|
||||||
fkbtRoot := b.Bucket(k)
|
|
||||||
if fkbtRoot == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if fkbtRoot.Stats().KeyN == 0 {
|
|
||||||
err := b.DeleteBucket(k)
|
|
||||||
if err == nil {
|
|
||||||
removedBuckets++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
|
|
||||||
if remainingBuckets == removedBuckets {
|
|
||||||
_ = tx.DeleteBucket(name) // ignore error, best effort there
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func cleanUpListBucket(tx *bbolt.Tx, name []byte, b *bbolt.Bucket) {
|
|
||||||
cleanUpUniqueBucket(tx, name, b)
|
|
||||||
}
|
|
Loading…
Reference in a new issue