forked from TrueCloudLab/frostfs-node
[#1516] metabase: Cache address key and do not decode address twice
``` name old time/op new time/op delta ListWithCursor/1_item-8 10.6µs ± 1% 6.4µs ±13% -39.62% (p=0.000 n=7+10) ListWithCursor/10_items-8 75.3µs ± 2% 30.9µs ±21% -58.97% (p=0.000 n=10+10) ListWithCursor/100_items-8 726µs ± 2% 274µs ±27% -62.28% (p=0.000 n=10+10) name old alloc/op new alloc/op delta ListWithCursor/1_item-8 3.19kB ± 0% 2.26kB ± 0% -29.21% (p=0.000 n=10+10) ListWithCursor/10_items-8 20.7kB ± 0% 10.8kB ± 0% -47.68% (p=0.000 n=10+8) ListWithCursor/100_items-8 196kB ± 0% 97kB ± 0% -50.65% (p=0.000 n=7+10) name old allocs/op new allocs/op delta ListWithCursor/1_item-8 55.0 ± 0% 39.0 ± 0% -29.09% (p=0.000 n=10+10) ListWithCursor/10_items-8 346 ± 0% 192 ± 0% -44.51% (p=0.000 n=10+10) ListWithCursor/100_items-8 3.25k ± 0% 1.72k ± 0% -47.13% (p=0.000 n=9+10) ``` Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
parent
504f45e9ee
commit
af4db8a73b
2 changed files with 34 additions and 17 deletions
|
@ -105,6 +105,11 @@ func (db *DB) exists(tx *bbolt.Tx, addr oid.Address) (exists bool, err error) {
|
|||
// * 1 if object with GC mark;
|
||||
// * 2 if object is covered with tombstone.
|
||||
func inGraveyard(tx *bbolt.Tx, addr oid.Address) uint8 {
|
||||
addrKey := addressKey(addr)
|
||||
return inGraveyardWithKey(tx, addrKey)
|
||||
}
|
||||
|
||||
func inGraveyardWithKey(tx *bbolt.Tx, addrKey []byte) uint8 {
|
||||
graveyard := tx.Bucket(graveyardBucketName)
|
||||
if graveyard == nil {
|
||||
// incorrect metabase state, does not make
|
||||
|
@ -112,7 +117,7 @@ func inGraveyard(tx *bbolt.Tx, addr oid.Address) uint8 {
|
|||
return 0
|
||||
}
|
||||
|
||||
val := graveyard.Get(addressKey(addr))
|
||||
val := graveyard.Get(addrKey)
|
||||
if val == nil {
|
||||
garbageBCK := tx.Bucket(garbageBucketName)
|
||||
if garbageBCK == nil {
|
||||
|
@ -120,7 +125,7 @@ func inGraveyard(tx *bbolt.Tx, addr oid.Address) uint8 {
|
|||
return 0
|
||||
}
|
||||
|
||||
val = garbageBCK.Get(addressKey(addr))
|
||||
val = garbageBCK.Get(addrKey)
|
||||
if val != nil {
|
||||
// object has been marked with GC
|
||||
return 1
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue