mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-11-24 19:19:11 +08:00
delete old volume replica
related to https://github.com/chrislusf/seaweedfs/issues/1607 old is: * older compaction revision * older modified time * smaller volume size
This commit is contained in:
parent
1dd3a6ac36
commit
de3bdd0651
@ -369,18 +369,20 @@ func countReplicas(replicas []*VolumeReplica) (diffDc, diffRack, diffNode map[st
|
||||
|
||||
func pickOneReplicaToDelete(replicas []*VolumeReplica, replicaPlacement *super_block.ReplicaPlacement) *VolumeReplica {
|
||||
|
||||
allSame := true
|
||||
oldest := replicas[0]
|
||||
for _, replica := range replicas {
|
||||
if replica.info.ModifiedAtSecond < oldest.info.ModifiedAtSecond {
|
||||
oldest = replica
|
||||
allSame = false
|
||||
sort.Slice(replicas, func(i, j int) bool {
|
||||
a, b := replicas[i], replicas[j]
|
||||
if a.info.CompactRevision != b.info.CompactRevision {
|
||||
return a.info.CompactRevision < b.info.CompactRevision
|
||||
}
|
||||
}
|
||||
if !allSame {
|
||||
return oldest
|
||||
}
|
||||
if a.info.ModifiedAtSecond != b.info.ModifiedAtSecond {
|
||||
return a.info.ModifiedAtSecond < b.info.ModifiedAtSecond
|
||||
}
|
||||
if a.info.Size != b.info.Size {
|
||||
return a.info.Size < b.info.Size
|
||||
}
|
||||
return false
|
||||
})
|
||||
|
||||
return replicas[0]
|
||||
|
||||
// TODO what if all the replicas have the same timestamp?
|
||||
return oldest
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user