You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by mi...@apache.org on 2023/02/13 11:12:57 UTC
[shardingsphere-on-cloud] branch main updated: feat: optimize command execution (#201)
This is an automated email from the ASF dual-hosted git repository.
miaoliyao pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/shardingsphere-on-cloud.git
The following commit(s) were added to refs/heads/main by this push:
new df91b21 feat: optimize command execution (#201)
df91b21 is described below
commit df91b21094d02f6c34d8be066d8b79dad6e19d3a
Author: lltgo <ll...@outlook.com>
AuthorDate: Mon Feb 13 19:12:51 2023 +0800
feat: optimize command execution (#201)
* feat: optimize command execution
* chore: fix some words
* chore: fix pitr module name
---
pitr/agent/go.mod | 2 +-
pitr/agent/internal/cons/error.go | 2 +-
.../internal/handler/middleware/http_header.go | 4 +-
pitr/agent/internal/handler/middleware/logger.go | 4 +-
pitr/agent/internal/handler/middleware/recovery.go | 6 +-
.../handler/middleware/uniform_err_resp.go | 8 +--
pitr/agent/main.go | 8 +--
pitr/agent/pkg/cmds/cmd.go | 69 ++++++++++++++++------
pitr/agent/pkg/cmds/cmd_test.go | 20 ++++++-
pitr/agent/pkg/responder/resp.go | 2 +-
pitr/agent/pkg/syncutils/recover_func.go | 8 +--
pitr/cli/go.mod | 2 +-
12 files changed, 91 insertions(+), 44 deletions(-)
diff --git a/pitr/agent/go.mod b/pitr/agent/go.mod
index ec5028c..8117a69 100644
--- a/pitr/agent/go.mod
+++ b/pitr/agent/go.mod
@@ -1,4 +1,4 @@
-module github.com/apache/pitr/agent
+module github.com/apache/shardingsphere-on-cloud/pitr/agent
go 1.20
diff --git a/pitr/agent/internal/cons/error.go b/pitr/agent/internal/cons/error.go
index cb912c0..b7033f1 100644
--- a/pitr/agent/internal/cons/error.go
+++ b/pitr/agent/internal/cons/error.go
@@ -18,7 +18,7 @@
package cons
import (
- "github.com/apache/pitr/agent/pkg/xerror"
+ "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/xerror"
)
var (
diff --git a/pitr/agent/internal/handler/middleware/http_header.go b/pitr/agent/internal/handler/middleware/http_header.go
index 3faa663..09bd16e 100644
--- a/pitr/agent/internal/handler/middleware/http_header.go
+++ b/pitr/agent/internal/handler/middleware/http_header.go
@@ -22,8 +22,8 @@ import (
"github.com/gofiber/fiber/v2"
- "github.com/apache/pitr/agent/internal/cons"
- "github.com/apache/pitr/agent/pkg/responder"
+ "github.com/apache/shardingsphere-on-cloud/pitr/agent/internal/cons"
+ "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/responder"
)
func RequestIDChecker() fiber.Handler {
diff --git a/pitr/agent/internal/handler/middleware/logger.go b/pitr/agent/internal/handler/middleware/logger.go
index 7df23cb..fe8b062 100644
--- a/pitr/agent/internal/handler/middleware/logger.go
+++ b/pitr/agent/internal/handler/middleware/logger.go
@@ -23,8 +23,8 @@ import (
"github.com/gofiber/fiber/v2"
- "github.com/apache/pitr/agent/internal/cons"
- "github.com/apache/pitr/agent/pkg/logging"
+ "github.com/apache/shardingsphere-on-cloud/pitr/agent/internal/cons"
+ "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/logging"
)
func Logger(log logging.ILog) fiber.Handler {
diff --git a/pitr/agent/internal/handler/middleware/recovery.go b/pitr/agent/internal/handler/middleware/recovery.go
index 9af2638..cd8acaf 100644
--- a/pitr/agent/internal/handler/middleware/recovery.go
+++ b/pitr/agent/internal/handler/middleware/recovery.go
@@ -23,9 +23,9 @@ import (
"github.com/gofiber/fiber/v2"
- "github.com/apache/pitr/agent/internal/cons"
- "github.com/apache/pitr/agent/pkg/logging"
- "github.com/apache/pitr/agent/pkg/responder"
+ "github.com/apache/shardingsphere-on-cloud/pitr/agent/internal/cons"
+ "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/logging"
+ "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/responder"
)
func Recover(log logging.ILog) fiber.Handler {
diff --git a/pitr/agent/internal/handler/middleware/uniform_err_resp.go b/pitr/agent/internal/handler/middleware/uniform_err_resp.go
index cbdb250..e8b4958 100644
--- a/pitr/agent/internal/handler/middleware/uniform_err_resp.go
+++ b/pitr/agent/internal/handler/middleware/uniform_err_resp.go
@@ -20,10 +20,10 @@ package middleware
import (
"github.com/gofiber/fiber/v2"
- "github.com/apache/pitr/agent/internal/cons"
- "github.com/apache/pitr/agent/pkg/logging"
- "github.com/apache/pitr/agent/pkg/responder"
- "github.com/apache/pitr/agent/pkg/xerror"
+ "github.com/apache/shardingsphere-on-cloud/pitr/agent/internal/cons"
+ "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/logging"
+ "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/responder"
+ "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/xerror"
)
func UniformErrResp(log logging.ILog) fiber.Handler {
diff --git a/pitr/agent/main.go b/pitr/agent/main.go
index 73606a3..a72b111 100644
--- a/pitr/agent/main.go
+++ b/pitr/agent/main.go
@@ -25,16 +25,16 @@ import (
"strings"
"syscall"
- "github.com/apache/pitr/agent/internal/handler"
+ "github.com/apache/shardingsphere-on-cloud/pitr/agent/internal/handler"
- "github.com/apache/pitr/agent/internal/handler/middleware"
- "github.com/apache/pitr/agent/pkg/responder"
+ "github.com/apache/shardingsphere-on-cloud/pitr/agent/internal/handler/middleware"
+ "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/responder"
"github.com/gofiber/fiber/v2"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
- "github.com/apache/pitr/agent/pkg/logging"
+ "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/logging"
)
const (
diff --git a/pitr/agent/pkg/cmds/cmd.go b/pitr/agent/pkg/cmds/cmd.go
index ec3196d..513172f 100644
--- a/pitr/agent/pkg/cmds/cmd.go
+++ b/pitr/agent/pkg/cmds/cmd.go
@@ -22,9 +22,17 @@ import (
"fmt"
"io"
"os/exec"
+
+ "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/syncutils"
)
-func command(name string, args ...string) error {
+type Output struct {
+ LineNo uint32 // Start 1
+ Message string
+ Error error
+}
+
+func Commands(name string, args ...string) (chan *Output, error) {
c := "-c"
args = append([]string{c}, args...)
@@ -32,30 +40,55 @@ func command(name string, args ...string) error {
stdout, err := cmd.StdoutPipe()
if err != nil {
- return fmt.Errorf("can not obtain stdout pipe for command[args=%+v]:%s", args, err)
+ return nil, fmt.Errorf("can not obtain stdout pipe for command[args=%+v]:%s", args, err)
}
if err := cmd.Start(); err != nil {
- return fmt.Errorf("the command is err[args=%+v]:%s", args, err)
+ return nil, fmt.Errorf("the command is err[args=%+v]:%s", args, err)
}
reader := bufio.NewReader(stdout)
- index := 1
- for {
- line, err := reader.ReadString('\n')
- if io.EOF == err {
- break
- } else if err != nil {
- return fmt.Errorf("read string is err[args=%+v]:%s", args, err)
- }
+ output := make(chan *Output, 10)
+ index := uint32(1)
- fmt.Print(index, "\t", line)
- index++
- }
+ go func() {
+ if err := syncutils.NewRecoverFuncWithErrRet("", func() error {
+ for {
+ msg, err := reader.ReadString('\n')
+ if io.EOF == err {
+ goto end
+ } else if err != nil {
+ output <- &Output{
+ LineNo: index,
+ Message: msg,
+ Error: err,
+ }
+ goto end
+ }
- if err := cmd.Wait(); err != nil {
- return fmt.Errorf("cmd wait is err[args=%+v]:%s", args, err)
- }
+ output <- &Output{
+ LineNo: index,
+ Message: msg,
+ }
+
+ index++
+ }
+ end:
+ if err := cmd.Wait(); err != nil {
+ output <- &Output{
+ Error: err,
+ }
+ }
+
+ return nil
+ })(); err != nil {
+ // only panic err
+ output <- &Output{
+ Error: err,
+ }
+ }
+ close(output)
+ }()
- return nil
+ return output, nil
}
diff --git a/pitr/agent/pkg/cmds/cmd_test.go b/pitr/agent/pkg/cmds/cmd_test.go
index 6ccf23f..e93eb77 100644
--- a/pitr/agent/pkg/cmds/cmd_test.go
+++ b/pitr/agent/pkg/cmds/cmd_test.go
@@ -17,14 +17,30 @@
package cmds
-import "testing"
+import (
+ "fmt"
+ "testing"
+)
const (
sh = "/bin/sh"
)
func TestCommand(t *testing.T) {
- if err := command(sh, "ping www.baidu.com"); err != nil {
+ output, err := Commands(sh, "ping www.baidu.com")
+ if err != nil {
t.Fatal(err)
}
+
+ for {
+ select {
+ case out, ok := <-output:
+ if ok {
+ fmt.Print(out.LineNo, "\t", out.Message)
+ } else {
+ return
+ }
+ }
+ }
+
}
diff --git a/pitr/agent/pkg/responder/resp.go b/pitr/agent/pkg/responder/resp.go
index 652fd90..71a1ffd 100644
--- a/pitr/agent/pkg/responder/resp.go
+++ b/pitr/agent/pkg/responder/resp.go
@@ -22,7 +22,7 @@ import (
"github.com/gofiber/fiber/v2"
- "github.com/apache/pitr/agent/pkg/xerror"
+ "github.com/apache/shardingsphere-on-cloud/pitr/agent/pkg/xerror"
)
var (
diff --git a/pitr/agent/pkg/syncutils/recover_func.go b/pitr/agent/pkg/syncutils/recover_func.go
index 75bcc89..af49a22 100644
--- a/pitr/agent/pkg/syncutils/recover_func.go
+++ b/pitr/agent/pkg/syncutils/recover_func.go
@@ -19,19 +19,17 @@ package syncutils
import (
"fmt"
-
- "github.com/apache/pitr/agent/pkg/logging"
)
-func NewRecoverFuncWithErrRet(msg string, log logging.ILog, fn func() error) func() error {
+func NewRecoverFuncWithErrRet(msg string, fn func() error) func() (err error) {
return func() error {
defer func() {
r := recover()
if r != nil {
if err, ok := r.(error); ok {
- log.Error(fmt.Sprintf("NewRecoverFuncWithErrRet[msg=%s],err=%s", msg, err))
+ err = fmt.Errorf("NewRecoverFuncWithErrRet[msg=%s],err=%s", msg, err)
} else {
- log.Error(fmt.Sprintf("NewRecoverFuncWithErrRet[msg=%s],recover msg=%+v", msg, r))
+ err = fmt.Errorf("NewRecoverFuncWithErrRet[msg=%s],recover msg=%+v", msg, r)
}
}
}()
diff --git a/pitr/cli/go.mod b/pitr/cli/go.mod
index 18dea94..187e2bb 100644
--- a/pitr/cli/go.mod
+++ b/pitr/cli/go.mod
@@ -1,4 +1,4 @@
-module github.com/apache/pitr/cli
+module github.com/apache/shardingsphere-on-cloud/pitr/cli
go 1.20