aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoruser <ekhvalov@gmail.com>2021-11-11 18:01:47 +0900
committeruser <ekhvalov@gmail.com>2021-11-11 18:01:47 +0900
commit563a74a9eb050730ee16e3510ca95d0c36d13fdb (patch)
tree8346bdfd8ab2df6193ee14d7e86fefc4ba3d401e
parentdbb8003ce3cb0891eb78c117ad1e7d64dc7f5e4d (diff)
downloadseaweedfs-563a74a9eb050730ee16e3510ca95d0c36d13fdb.tar.xz
seaweedfs-563a74a9eb050730ee16e3510ca95d0c36d13fdb.zip
Volume filter by collection pattern added.
-rw-r--r--weed/shell/command_volume_configure_replication.go15
1 files changed, 13 insertions, 2 deletions
diff --git a/weed/shell/command_volume_configure_replication.go b/weed/shell/command_volume_configure_replication.go
index 591e88b45..fe4eab22a 100644
--- a/weed/shell/command_volume_configure_replication.go
+++ b/weed/shell/command_volume_configure_replication.go
@@ -7,6 +7,7 @@ import (
"fmt"
"github.com/chrislusf/seaweedfs/weed/pb"
"io"
+ "path/filepath"
"github.com/chrislusf/seaweedfs/weed/operation"
"github.com/chrislusf/seaweedfs/weed/pb/master_pb"
@@ -39,6 +40,7 @@ func (c *commandVolumeConfigureReplication) Do(args []string, commandEnv *Comman
configureReplicationCommand := flag.NewFlagSet(c.Name(), flag.ContinueOnError)
volumeIdInt := configureReplicationCommand.Int("volumeId", 0, "the volume id")
replicationString := configureReplicationCommand.String("replication", "", "the intended replication value")
+ collectionPattern := configureReplicationCommand.String("collectionPattern", "", "match with wildcard characters '*' and '?'")
if err = configureReplicationCommand.Parse(args); err != nil {
return nil
}
@@ -63,7 +65,7 @@ func (c *commandVolumeConfigureReplication) Do(args []string, commandEnv *Comman
}
vid := needle.VolumeId(*volumeIdInt)
- volumeFilter := getVolumeFilter(replicaPlacement, uint32(vid))
+ volumeFilter := getVolumeFilter(replicaPlacement, uint32(vid), *collectionPattern)
// find all data nodes with volumes that needs replication change
var allLocations []location
@@ -107,8 +109,17 @@ func (c *commandVolumeConfigureReplication) Do(args []string, commandEnv *Comman
return nil
}
-func getVolumeFilter(replicaPlacement *super_block.ReplicaPlacement, volumeId uint32) func(message *master_pb.VolumeInformationMessage) bool {
+func getVolumeFilter(replicaPlacement *super_block.ReplicaPlacement, volumeId uint32, collectionPattern string) func(message *master_pb.VolumeInformationMessage) bool {
replicaPlacementInt32 := uint32(replicaPlacement.Byte())
+ if collectionPattern != "" {
+ return func(v *master_pb.VolumeInformationMessage) bool {
+ matched, err := filepath.Match(collectionPattern, v.Collection)
+ if err != nil {
+ return false
+ }
+ return matched
+ }
+ }
return func(v *master_pb.VolumeInformationMessage) bool {
return v.Id == volumeId && v.ReplicaPlacement != replicaPlacementInt32
}