forked from TrueCloudLab/frostfs-node
[#763] metabase: Add container objects counter
Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
This commit is contained in:
parent
226e84d782
commit
9c98fa6152
7 changed files with 535 additions and 49 deletions
|
@ -12,6 +12,7 @@ import (
|
|||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/metaerr"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client"
|
||||
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
|
||||
objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
|
||||
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
|
||||
"go.etcd.io/bbolt"
|
||||
|
@ -132,8 +133,9 @@ func (db *DB) deleteGroup(tx *bbolt.Tx, addrs []oid.Address, sizes []uint64, ava
|
|||
refCounter := make(referenceCounter, len(addrs))
|
||||
currEpoch := db.epochState.CurrentEpoch()
|
||||
|
||||
var rawDeleted uint64
|
||||
var availableDeleted uint64
|
||||
cnrIDDelta := make(map[cid.ID]ObjectCounters)
|
||||
var rawDeletedTotal uint64
|
||||
var availableDeletedTotal uint64
|
||||
|
||||
for i := range addrs {
|
||||
removed, available, size, err := db.delete(tx, addrs[i], refCounter, currEpoch)
|
||||
|
@ -142,40 +144,62 @@ func (db *DB) deleteGroup(tx *bbolt.Tx, addrs []oid.Address, sizes []uint64, ava
|
|||
}
|
||||
|
||||
if removed {
|
||||
rawDeleted++
|
||||
if v, ok := cnrIDDelta[addrs[i].Container()]; ok {
|
||||
v.phy++
|
||||
cnrIDDelta[addrs[i].Container()] = v
|
||||
} else {
|
||||
cnrIDDelta[addrs[i].Container()] = ObjectCounters{
|
||||
phy: 1,
|
||||
}
|
||||
}
|
||||
|
||||
rawDeletedTotal++
|
||||
sizes[i] = size
|
||||
}
|
||||
|
||||
if available {
|
||||
availableDeleted++
|
||||
if v, ok := cnrIDDelta[addrs[i].Container()]; ok {
|
||||
v.logic++
|
||||
cnrIDDelta[addrs[i].Container()] = v
|
||||
} else {
|
||||
cnrIDDelta[addrs[i].Container()] = ObjectCounters{
|
||||
logic: 1,
|
||||
}
|
||||
}
|
||||
|
||||
availableDeletedTotal++
|
||||
availableSizes[i] = size
|
||||
}
|
||||
}
|
||||
|
||||
if rawDeleted > 0 {
|
||||
err := db.updateCounter(tx, phy, rawDeleted, false)
|
||||
if rawDeletedTotal > 0 {
|
||||
err := db.updateShardObjectCounter(tx, phy, rawDeletedTotal, false)
|
||||
if err != nil {
|
||||
return 0, 0, fmt.Errorf("could not decrease phy object counter: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
if availableDeleted > 0 {
|
||||
err := db.updateCounter(tx, logical, availableDeleted, false)
|
||||
if availableDeletedTotal > 0 {
|
||||
err := db.updateShardObjectCounter(tx, logical, availableDeletedTotal, false)
|
||||
if err != nil {
|
||||
return 0, 0, fmt.Errorf("could not decrease logical object counter: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
if err := db.updateContainerCounter(tx, cnrIDDelta, false); err != nil {
|
||||
return 0, 0, fmt.Errorf("could not decrease container object counter: %w", err)
|
||||
}
|
||||
|
||||
for _, refNum := range refCounter {
|
||||
if refNum.cur == refNum.all {
|
||||
err := db.deleteObject(tx, refNum.obj, true)
|
||||
if err != nil {
|
||||
return rawDeleted, availableDeleted, err // maybe log and continue?
|
||||
return rawDeletedTotal, availableDeletedTotal, err // maybe log and continue?
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return rawDeleted, availableDeleted, nil
|
||||
return rawDeletedTotal, availableDeletedTotal, nil
|
||||
}
|
||||
|
||||
// delete removes object indexes from the metabase. Counts the references
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue