aboutsummaryrefslogtreecommitdiff
path: root/weed/shell/command_volume_fix_replication_test.go
diff options
context:
space:
mode:
authorMax Denushev <mdenushev@ya.ru>2024-09-26 18:34:13 +0300
committerGitHub <noreply@github.com>2024-09-26 08:34:13 -0700
commitf1e700ce2f37a702eb33c2294cb08e638a74c4ea (patch)
treeb2d5b6a0855a005e7048d9659e5b763bb747c41e /weed/shell/command_volume_fix_replication_test.go
parentae8c6d95a61b6ada7f7676188aab1d81d4308df7 (diff)
downloadseaweedfs-f1e700ce2f37a702eb33c2294cb08e638a74c4ea.tar.xz
seaweedfs-f1e700ce2f37a702eb33c2294cb08e638a74c4ea.zip
Fix/copy before delete replication (#6064)
* fix(shell): volume.fix.replication misplaced volumes unsatisfying replication factor * fix(shell): simplify replication check * fix(shell): add test for satisfyReplicaCurrentLocation
Diffstat (limited to 'weed/shell/command_volume_fix_replication_test.go')
-rw-r--r--weed/shell/command_volume_fix_replication_test.go87
1 files changed, 87 insertions, 0 deletions
diff --git a/weed/shell/command_volume_fix_replication_test.go b/weed/shell/command_volume_fix_replication_test.go
index 97f270306..5f2318c32 100644
--- a/weed/shell/command_volume_fix_replication_test.go
+++ b/weed/shell/command_volume_fix_replication_test.go
@@ -438,3 +438,90 @@ func TestPickingMisplacedVolumeToDelete(t *testing.T) {
}
}
+
+func TestSatisfyReplicaCurrentLocation(t *testing.T) {
+
+ var tests = []testcase{
+ {
+ name: "test 001",
+ replication: "001",
+ replicas: []*VolumeReplica{
+ {
+ location: &location{"dc1", "r1", &master_pb.DataNodeInfo{Id: "dn1"}},
+ },
+ {
+ location: &location{"dc1", "r2", &master_pb.DataNodeInfo{Id: "dn2"}},
+ },
+ },
+ expected: false,
+ },
+ {
+ name: "test 010",
+ replication: "010",
+ replicas: []*VolumeReplica{
+ {
+ location: &location{"dc1", "r1", &master_pb.DataNodeInfo{Id: "dn1"}},
+ },
+ {
+ location: &location{"dc1", "r2", &master_pb.DataNodeInfo{Id: "dn2"}},
+ },
+ },
+ expected: true,
+ },
+ {
+ name: "test 011",
+ replication: "011",
+ replicas: []*VolumeReplica{
+ {
+ location: &location{"dc1", "r1", &master_pb.DataNodeInfo{Id: "dn1"}},
+ },
+ {
+ location: &location{"dc1", "r1", &master_pb.DataNodeInfo{Id: "dn2"}},
+ },
+ {
+ location: &location{"dc1", "r2", &master_pb.DataNodeInfo{Id: "dn3"}},
+ },
+ },
+ expected: true,
+ },
+ {
+ name: "test 110",
+ replication: "110",
+ replicas: []*VolumeReplica{
+ {
+ location: &location{"dc1", "r1", &master_pb.DataNodeInfo{Id: "dn1"}},
+ },
+ {
+ location: &location{"dc1", "r1", &master_pb.DataNodeInfo{Id: "dn2"}},
+ },
+ {
+ location: &location{"dc2", "r2", &master_pb.DataNodeInfo{Id: "dn3"}},
+ },
+ },
+ expected: true,
+ },
+ {
+ name: "test 100",
+ replication: "100",
+ replicas: []*VolumeReplica{
+ {
+ location: &location{"dc1", "r1", &master_pb.DataNodeInfo{Id: "dn1"}},
+ },
+ {
+ location: &location{"dc1", "r2", &master_pb.DataNodeInfo{Id: "dn2"}},
+ },
+ },
+ expected: false,
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ replicaPlacement, _ := super_block.NewReplicaPlacementFromString(tt.replication)
+ if satisfyReplicaCurrentLocation(replicaPlacement, tt.replicas) != tt.expected {
+ t.Errorf("%s: expect %v %v %+v",
+ tt.name, tt.expected, tt.replication, tt.replicas)
+ }
+ })
+ }
+}