diff --git a/blobstore/cli/proxy/cacher.go b/blobstore/cli/proxy/cacher.go index aa29d1107..d90872bdc 100644 --- a/blobstore/cli/proxy/cacher.go +++ b/blobstore/cli/proxy/cacher.go @@ -18,9 +18,11 @@ import ( "github.com/desertbit/grumble" "github.com/fatih/color" + "github.com/cubefs/cubefs/blobstore/api/clustermgr" "github.com/cubefs/cubefs/blobstore/api/proxy" "github.com/cubefs/cubefs/blobstore/cli/common" "github.com/cubefs/cubefs/blobstore/cli/common/fmt" + "github.com/cubefs/cubefs/blobstore/cli/config" "github.com/cubefs/cubefs/blobstore/common/proto" ) @@ -76,9 +78,13 @@ func addCmdCacher(cmd *grumble.Command) { }, }) cacherCommand.AddCommand(&grumble.Command{ - Name: "erase", - Help: "erase cache with key or all", - Flags: proxyFlags, + Name: "erase", + Help: "erase cache with key or all", + Flags: func(f *grumble.Flags) { + proxyFlags(f) + f.Int64L("clusterid", 0, "cluster id") + f.StringL("idc", "", "idc for proxy service, [ALL or xxx]") + }, Args: func(a *grumble.Args) { a.String("key", "key of diskv [volume-{vid} or disk-{disk_id} or ALL]") }, @@ -87,7 +93,35 @@ func addCmdCacher(cmd *grumble.Command) { if !common.Confirm("to erase key: " + color.RedString("%s", key)) { return nil } - return proxyCli.Erase(common.CmdContext(), c.Flags.String(_host), key) + if host := c.Flags.String(_host); host != "" { + return proxyCli.Erase(common.CmdContext(), host, key) + } + + clusterID := proto.ClusterID(c.Flags.Int64("clusterid")) + if clusterID <= 0 { + return fmt.Errorf("setting --clusterid please") + } + cmcli := config.NewCluster(clusterID.ToString(), nil, "") + info, err := cmcli.GetService(common.CmdContext(), + clustermgr.GetServiceArgs{Name: proto.ServiceNameProxy}) + if err != nil { + return err + } + idc := c.Flags.String("idc") + hosts := make([]string, 0, len(info.Nodes)) + for _, ii := range info.Nodes { + if idc == "ALL" || ii.Idc == idc { + hosts = append(hosts, ii.Host) + } + } + + for _, host := range hosts { + fmt.Printf("to erase host:%s key:%s\n", host, key) + if err = proxyCli.Erase(common.CmdContext(), host, key); err != nil { + return err + } + } + return nil }, }) } diff --git a/blobstore/scheduler/scheduler_test.go b/blobstore/scheduler/scheduler_test.go index c54b6213e..f2083dd21 100644 --- a/blobstore/scheduler/scheduler_test.go +++ b/blobstore/scheduler/scheduler_test.go @@ -28,11 +28,6 @@ import ( _ "github.com/cubefs/cubefs/blobstore/testing/nolog" ) -// github.com/cubefs/cubefs/blobstore/scheduler/... module scheduler interfaces -//go:generate mockgen -destination=./client_mock_test.go -package=scheduler -mock_names ClusterMgrAPI=MockClusterMgrAPI,BlobnodeAPI=MockBlobnodeAPI,IVolumeUpdater=MockVolumeUpdater,ProxyAPI=MockMqProxyAPI github.com/cubefs/cubefs/blobstore/scheduler/client ClusterMgrAPI,BlobnodeAPI,ProxyAPI,TaskAPI -//go:generate mockgen -destination=./base_mock_test.go -package=scheduler -mock_names KafkaConsumer=MockKafkaConsumer,GroupConsumer=MockGroupConsumer,IProducer=MockProducer github.com/cubefs/cubefs/blobstore/scheduler/base KafkaConsumer,GroupConsumer,IProducer -//go:generate mockgen -destination=./scheduler_mock_test.go -package=scheduler -mock_names ITaskRunner=MockTaskRunner,IVolumeCache=MockVolumeCache,MMigrator=MockMigrater,IVolumeInspector=MockVolumeInspector,IClusterTopology=MockClusterTopology,ShardDiskMigrator=MockShardMigrator github.com/cubefs/cubefs/blobstore/scheduler ITaskRunner,IVolumeCache,MMigrator,IVolumeInspector,IClusterTopology,ShardDiskMigrator - const ( testTopic = "test_topic" ) diff --git a/blobstore/testing/mocks.go b/blobstore/testing/mocks.go index ee9c1a129..63a371117 100644 --- a/blobstore/testing/mocks.go +++ b/blobstore/testing/mocks.go @@ -45,7 +45,7 @@ package testing //go:generate mockgen -destination=../blobnode/shard_client_mock_test.go -package=blobnode -mock_names IShardNode=MockIShardNode github.com/cubefs/cubefs/blobstore/blobnode/client IShardNode // github.com/cubefs/cubefs/blobstore/scheduler/... scheduler interfaces -//go:generate mockgen -destination=../scheduler/client_mock_test.go -package=scheduler -mock_names ClusterMgrAPI=MockClusterMgrAPI,BlobnodeAPI=MockBlobnodeAPI,IVolumeUpdater=MockVolumeUpdater,ProxyAPI=MockMqProxyAPI github.com/cubefs/cubefs/blobstore/scheduler/client ClusterMgrAPI,BlobnodeAPI,IVolumeUpdater,ProxyAPI +//go:generate mockgen -destination=../scheduler/client_mock_test.go -package=scheduler -mock_names ClusterMgrAPI=MockClusterMgrAPI,BlobnodeAPI=MockBlobnodeAPI,ProxyAPI=MockMqProxyAPI,TaskAPI=MockTaskAPI github.com/cubefs/cubefs/blobstore/scheduler/client ClusterMgrAPI,BlobnodeAPI,ProxyAPI,TaskAPI //go:generate mockgen -destination=../scheduler/base_mock_test.go -package=scheduler -mock_names KafkaConsumer=MockKafkaConsumer,GroupConsumer=MockGroupConsumer,IProducer=MockProducer github.com/cubefs/cubefs/blobstore/scheduler/base KafkaConsumer,GroupConsumer,IProducer //go:generate mockgen -destination=../scheduler/scheduler_mock_test.go -package=scheduler -mock_names ITaskRunner=MockTaskRunner,IVolumeCache=MockVolumeCache,MMigrator=MockMigrater,IVolumeInspector=MockVolumeInspector,IClusterTopology=MockClusterTopology,ShardDiskMigrator=MockShardMigrator github.com/cubefs/cubefs/blobstore/scheduler ITaskRunner,IVolumeCache,MMigrator,IVolumeInspector,IClusterTopology,ShardDiskMigrator //go:generate mockgen -destination=../scheduler/base/utils_mock_test.go -package=base -mock_names IAllocVunit=MockAllocVunit github.com/cubefs/cubefs/blobstore/scheduler/base IAllocVunit diff --git a/go.mod b/go.mod index 9651fae05..03ba2d8a0 100644 --- a/go.mod +++ b/go.mod @@ -51,7 +51,6 @@ require ( golang.org/x/sync v0.7.0 golang.org/x/sys v0.20.0 golang.org/x/time v0.3.0 - google.golang.org/grpc v1.57.0 gopkg.in/bsm/ratelimit.v1 v1.0.0-20170922094635-f56db5e73a5e gopkg.in/go-playground/validator.v9 v9.31.0 gopkg.in/natefinch/lumberjack.v2 v2.0.0 @@ -123,6 +122,7 @@ require ( golang.org/x/crypto v0.23.0 // indirect golang.org/x/text v0.15.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19 // indirect + google.golang.org/grpc v1.57.0 // indirect google.golang.org/protobuf v1.34.1 // indirect gopkg.in/go-playground/assert.v1 v1.2.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect