Skip to content

Commit

Permalink
ctl: pd-ctl cmd will work well in char device mode (#4479)
Browse files Browse the repository at this point in the history
* pd-ctl cmd will work well in crontab && close 4478

Signed-off-by: bufferflies <1045931706@qq.com>

* add unit test && close #4478

Signed-off-by: bufferflies <1045931706@qq.com>

* string nil and add return

Signed-off-by: bufferflies <1045931706@qq.com>

Co-authored-by: Ti Chi Robot <ti-community-prow-bot@tidb.io>
  • Loading branch information
bufferflies and ti-chi-bot authored Dec 21, 2021
1 parent 447fbd4 commit 95293d5
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 7 deletions.
11 changes: 4 additions & 7 deletions tools/pd-ctl/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,8 @@ package main

import (
"fmt"
"io"
"os"
"os/signal"
"strings"
"syscall"

"github.com/tikv/pd/tools/pd-ctl/pdctl"
Expand Down Expand Up @@ -49,16 +47,15 @@ func main() {
}
}()

var input []string
var inputs []string
stat, _ := os.Stdin.Stat()
if (stat.Mode() & os.ModeCharDevice) == 0 {
b, err := io.ReadAll(os.Stdin)
in, err := pdctl.ReadStdin(os.Stdin)
if err != nil {
fmt.Println(err)
return
}
input = strings.Split(strings.TrimSpace(string(b)), " ")
inputs = in
}

pdctl.MainStart(append(os.Args[1:], input...))
pdctl.MainStart(append(os.Args[1:], inputs...))
}
12 changes: 12 additions & 0 deletions tools/pd-ctl/pdctl/ctl.go
Original file line number Diff line number Diff line change
Expand Up @@ -198,3 +198,15 @@ func genCompleter(cmd *cobra.Command) []readline.PrefixCompleterInterface {
}
return pc
}

// ReadStdin convert stdin to string array
func ReadStdin(r io.Reader) (input []string, err error) {
b, err := io.ReadAll(r)
if err != nil {
return nil, err
}
if s := strings.TrimSpace(string(b)); len(s) > 0 {
input = strings.Split(s, " ")
}
return input, nil
}
29 changes: 29 additions & 0 deletions tools/pd-ctl/pdctl/ctl_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
package pdctl

import (
"io"
"strings"
"testing"

"github.com/spf13/cobra"
Expand Down Expand Up @@ -68,3 +70,30 @@ func TestGenCompleter(t *testing.T) {
}
}
}

func TestReadStdin(t *testing.T) {
s := []struct {
in io.Reader
targets []string
}{{
in: strings.NewReader(""),
targets: []string{},
}, {
in: strings.NewReader("a b c"),
targets: []string{"a", "b", "c"},
}}
for _, v := range s {
in, err := ReadStdin(v.in)
if err != nil {
t.Errorf("ReadStdin err:%v", err)
}
if len(v.targets) != len(in) {
t.Errorf("ReadStdin = %v, want %s, nil", in, v.targets)
}
for i, target := range v.targets {
if target != in[i] {
t.Errorf("ReadStdin = %v, want %s, nil", in, v.targets)
}
}
}
}

0 comments on commit 95293d5

Please sign in to comment.