diff options
| author | user <ekhvalov@gmail.com> | 2021-11-11 18:01:47 +0900 |
|---|---|---|
| committer | user <ekhvalov@gmail.com> | 2021-11-11 18:01:47 +0900 |
| commit | 563a74a9eb050730ee16e3510ca95d0c36d13fdb (patch) | |
| tree | 8346bdfd8ab2df6193ee14d7e86fefc4ba3d401e | |
| parent | dbb8003ce3cb0891eb78c117ad1e7d64dc7f5e4d (diff) | |
| download | seaweedfs-563a74a9eb050730ee16e3510ca95d0c36d13fdb.tar.xz seaweedfs-563a74a9eb050730ee16e3510ca95d0c36d13fdb.zip | |
Volume filter by collection pattern added.
| -rw-r--r-- | weed/shell/command_volume_configure_replication.go | 15 |
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 } |
