forked from TrueCloudLab/frostfs-node
[#1658] meta: Force counters resync process
Signed-off-by: Pavel Karpy <carpawell@nspcc.ru>
This commit is contained in:
parent
beb7f2a048
commit
d872862710
3 changed files with 21 additions and 4 deletions
|
@ -106,7 +106,7 @@ func (db *DB) init(reset bool) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if !reset {
|
if !reset {
|
||||||
err = syncCounter(tx)
|
err = syncCounter(tx, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("could not sync object counter: %w", err)
|
return fmt.Errorf("could not sync object counter: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -128,6 +128,13 @@ func (db *DB) init(reset bool) error {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SyncCounters forces to synchronize the object counters.
|
||||||
|
func (db *DB) SyncCounters() error {
|
||||||
|
return db.boltDB.Update(func(tx *bbolt.Tx) error {
|
||||||
|
return syncCounter(tx, true)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// Close closes boltDB instance.
|
// Close closes boltDB instance.
|
||||||
func (db *DB) Close() error {
|
func (db *DB) Close() error {
|
||||||
if db.boltDB != nil {
|
if db.boltDB != nil {
|
||||||
|
|
|
@ -66,7 +66,7 @@ func (db *DB) updateCounter(tx *bbolt.Tx, delta uint64, inc bool) error {
|
||||||
// Tx MUST be writable.
|
// Tx MUST be writable.
|
||||||
//
|
//
|
||||||
// Does nothing if counter not empty.
|
// Does nothing if counter not empty.
|
||||||
func syncCounter(tx *bbolt.Tx) error {
|
func syncCounter(tx *bbolt.Tx, force bool) error {
|
||||||
var counter uint64
|
var counter uint64
|
||||||
|
|
||||||
b, err := tx.CreateBucketIfNotExists(shardInfoBucket)
|
b, err := tx.CreateBucketIfNotExists(shardInfoBucket)
|
||||||
|
@ -75,7 +75,7 @@ func syncCounter(tx *bbolt.Tx) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
data := b.Get(objectCounterKey)
|
data := b.Get(objectCounterKey)
|
||||||
if len(data) == 8 {
|
if len(data) == 8 && !force {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -159,7 +159,7 @@ func (s *Shard) refillMetabase() error {
|
||||||
|
|
||||||
obj := objectSDK.New()
|
obj := objectSDK.New()
|
||||||
|
|
||||||
return blobstor.IterateBinaryObjects(s.blobStor, func(addr oid.Address, data []byte, descriptor []byte) error {
|
err = blobstor.IterateBinaryObjects(s.blobStor, func(addr oid.Address, data []byte, descriptor []byte) error {
|
||||||
if err := obj.Unmarshal(data); err != nil {
|
if err := obj.Unmarshal(data); err != nil {
|
||||||
s.log.Warn("could not unmarshal object",
|
s.log.Warn("could not unmarshal object",
|
||||||
zap.Stringer("address", addr),
|
zap.Stringer("address", addr),
|
||||||
|
@ -224,6 +224,16 @@ func (s *Shard) refillMetabase() error {
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("could not put objects to the meta: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = s.metaBase.SyncCounters()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("could not sync object counters: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close releases all Shard's components.
|
// Close releases all Shard's components.
|
||||||
|
|
Loading…
Reference in a new issue