github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/dm/ctl/master/operate_leader.go (about) 1 // Copyright 2020 PingCAP, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 package master 15 16 import ( 17 "context" 18 "errors" 19 "os" 20 21 "github.com/pingcap/tiflow/dm/ctl/common" 22 "github.com/pingcap/tiflow/dm/pb" 23 "github.com/spf13/cobra" 24 ) 25 26 // NewOperateLeaderCmd creates a OperateLeader command. 27 func NewOperateLeaderCmd() *cobra.Command { 28 cmd := &cobra.Command{ 29 Use: "operate-leader <operate-type>", 30 Short: "`evict`/`cancel-evict` the leader", 31 RunE: operateLeaderFunc, 32 } 33 return cmd 34 } 35 36 func convertOpType(op string) pb.LeaderOp { 37 switch op { 38 case "evict": 39 return pb.LeaderOp_EvictLeaderOp 40 case "cancel-evict": 41 return pb.LeaderOp_CancelEvictLeaderOp 42 default: 43 return pb.LeaderOp_InvalidLeaderOp 44 } 45 } 46 47 // operateLeaderFunc does operate leader request. 48 func operateLeaderFunc(cmd *cobra.Command, _ []string) error { 49 if len(cmd.Flags().Args()) != 1 { 50 cmd.SetOut(os.Stdout) 51 common.PrintCmdUsage(cmd) 52 return errors.New("please check output to see error") 53 } 54 55 opType := cmd.Flags().Arg(0) 56 57 op := convertOpType(opType) 58 if op == pb.LeaderOp_InvalidLeaderOp { 59 common.PrintLinesf("invalid operate '%s' on leader", opType) 60 return errors.New("please check output to see error") 61 } 62 63 ctx, cancel := context.WithCancel(context.Background()) 64 defer cancel() 65 66 // operate leader 67 resp := &pb.OperateLeaderResponse{} 68 err := common.SendRequest( 69 ctx, 70 "OperateLeader", 71 &pb.OperateLeaderRequest{ 72 Op: op, 73 }, 74 &resp, 75 ) 76 if err != nil { 77 return err 78 } 79 80 common.PrettyPrintResponse(resp) 81 return nil 82 }