[#191] engine: Allow to remove redundant object copies
RemoveDuplicates() removes all duplicate object copies stored on multiple shards. All shards are processed and the command tries to leave a copy on the best shard according to HRW. Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
This commit is contained in:
parent
cb172e73a6
commit
dbc3811ff4
4 changed files with 358 additions and 5 deletions
|
@ -208,16 +208,21 @@ func (e *StorageEngine) sortShardsByWeight(objAddr interface{ EncodeToString() s
|
|||
e.mtx.RLock()
|
||||
defer e.mtx.RUnlock()
|
||||
|
||||
h := hrw.Hash([]byte(objAddr.EncodeToString()))
|
||||
shards := make([]hashedShard, 0, len(e.shards))
|
||||
weights := make([]float64, 0, len(e.shards))
|
||||
|
||||
for _, sh := range e.shards {
|
||||
shards = append(shards, hashedShard(sh))
|
||||
weights = append(weights, e.shardWeight(sh.Shard))
|
||||
}
|
||||
return sortShardsByWeight(shards, h)
|
||||
}
|
||||
|
||||
func sortShardsByWeight(shards []hashedShard, h uint64) []hashedShard {
|
||||
weights := make([]float64, 0, len(shards))
|
||||
for _, sh := range shards {
|
||||
weights = append(weights, float64(sh.Shard.WeightValues().FreeSpace))
|
||||
}
|
||||
|
||||
hrw.SortHasherSliceByWeightValue(shards, weights, hrw.Hash([]byte(objAddr.EncodeToString())))
|
||||
|
||||
hrw.SortHasherSliceByWeightValue(shards, weights, h)
|
||||
return shards
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue