aboutsummaryrefslogtreecommitdiff
path: root/weed/shell/command_ec_common_test.go
diff options
context:
space:
mode:
authorLisandro Pin <lisandro.pin@proton.ch>2024-12-12 17:41:33 +0100
committerGitHub <noreply@github.com>2024-12-12 08:41:33 -0800
commit23ffbb083c4bcc9d723ce5857e08f85e7205140a (patch)
tree09f03ef1a87703f0ebfdeb5af20501bfcd4d4e70 /weed/shell/command_ec_common_test.go
parent6320036c567bb3d2bde32824574233aee817cd53 (diff)
downloadseaweedfs-23ffbb083c4bcc9d723ce5857e08f85e7205140a.tar.xz
seaweedfs-23ffbb083c4bcc9d723ce5857e08f85e7205140a.zip
Limit EC re-balancing for `ec.encode` to relevant collections when a volume ID argument is provided. (#6347)
Limit EC re-balancing for `ec.encode` to relevant collections when a volume ID is provided.
Diffstat (limited to 'weed/shell/command_ec_common_test.go')
-rw-r--r--weed/shell/command_ec_common_test.go34
1 files changed, 34 insertions, 0 deletions
diff --git a/weed/shell/command_ec_common_test.go b/weed/shell/command_ec_common_test.go
index e9c9b1d99..f76840f3c 100644
--- a/weed/shell/command_ec_common_test.go
+++ b/weed/shell/command_ec_common_test.go
@@ -2,6 +2,7 @@ package shell
import (
"fmt"
+ "reflect"
"strings"
"testing"
@@ -33,6 +34,39 @@ func errorCheck(got error, want string) error {
return nil
}
+func TestCollectCollectionsForVolumeIds(t *testing.T) {
+ testCases := []struct {
+ topology *master_pb.TopologyInfo
+ vids []needle.VolumeId
+ want []string
+ }{
+ // normal volumes
+ {topology1, nil, nil},
+ {topology1, []needle.VolumeId{}, nil},
+ {topology1, []needle.VolumeId{needle.VolumeId(9999)}, nil},
+ {topology1, []needle.VolumeId{needle.VolumeId(2)}, nil},
+ {topology1, []needle.VolumeId{needle.VolumeId(2), needle.VolumeId(272)}, []string{"collection2"}},
+ {topology1, []needle.VolumeId{needle.VolumeId(2), needle.VolumeId(272), needle.VolumeId(299)}, []string{"collection2"}},
+ {topology1, []needle.VolumeId{needle.VolumeId(272), needle.VolumeId(299), needle.VolumeId(95)}, []string{"collection1", "collection2"}},
+ {topology1, []needle.VolumeId{needle.VolumeId(272), needle.VolumeId(299), needle.VolumeId(95), needle.VolumeId(51)}, []string{"collection1", "collection2"}},
+ {topology1, []needle.VolumeId{needle.VolumeId(272), needle.VolumeId(299), needle.VolumeId(95), needle.VolumeId(51), needle.VolumeId(15)}, []string{"collection0", "collection1", "collection2"}},
+ // EC volumes
+ {topology2, []needle.VolumeId{needle.VolumeId(9577)}, []string{"s3qldata"}},
+ {topology2, []needle.VolumeId{needle.VolumeId(9577), needle.VolumeId(12549)}, []string{"s3qldata"}},
+ // normal + EC volumes
+ {topology2, []needle.VolumeId{needle.VolumeId(18111)}, []string{"s3qldata"}},
+ {topology2, []needle.VolumeId{needle.VolumeId(8677)}, []string{"s3qldata"}},
+ {topology2, []needle.VolumeId{needle.VolumeId(18111), needle.VolumeId(8677)}, []string{"s3qldata"}},
+ }
+
+ for _, tc := range testCases {
+ got := collectCollectionsForVolumeIds(tc.topology, tc.vids)
+ if !reflect.DeepEqual(got, tc.want) {
+ t.Errorf("for %v: got %v, want %v", tc.vids, got, tc.want)
+ }
+ }
+}
+
func TestParseReplicaPlacementArg(t *testing.T) {
getDefaultReplicaPlacementOrig := getDefaultReplicaPlacement
getDefaultReplicaPlacement = func(commandEnv *CommandEnv) (*super_block.ReplicaPlacement, error) {