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