aboutsummaryrefslogtreecommitdiff
path: root/weed/shell/command_volume_fix_replication.go
diff options
context:
space:
mode:
authorKonstantin Lebedev <lebedev_k@tochka.com>2020-11-19 18:16:44 +0500
committerKonstantin Lebedev <lebedev_k@tochka.com>2020-11-19 18:16:44 +0500
commit27e73de7975ff9f097bbfd8d2717aa27931f25b5 (patch)
tree802f8cf0f7cc6834e03a24700a8d07a218f5bd86 /weed/shell/command_volume_fix_replication.go
parente1190b3224638616cf4e1318ddcba0b1575f2130 (diff)
parentda04bb3d1bb60d92fdacfb2edd8c8bdba2643038 (diff)
downloadseaweedfs-27e73de7975ff9f097bbfd8d2717aa27931f25b5.tar.xz
seaweedfs-27e73de7975ff9f097bbfd8d2717aa27931f25b5.zip
Merge branch 'upstream_master' into store_s3cred
# Conflicts: # weed/s3api/filer_util.go
Diffstat (limited to 'weed/shell/command_volume_fix_replication.go')
-rw-r--r--weed/shell/command_volume_fix_replication.go26
1 files changed, 14 insertions, 12 deletions
diff --git a/weed/shell/command_volume_fix_replication.go b/weed/shell/command_volume_fix_replication.go
index 471b24a2a..9b9abd8eb 100644
--- a/weed/shell/command_volume_fix_replication.go
+++ b/weed/shell/command_volume_fix_replication.go
@@ -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
}