]> 127.0.0.1 Git - front/.git/commitdiff
1 v0.1.20250321084404
authorqydysky <qydysky@foxmail.com>
Fri, 21 Mar 2025 08:41:19 +0000 (08:41 +0000)
committerGitHub <noreply@github.com>
Fri, 21 Mar 2025 08:41:19 +0000 (08:41 +0000)
config.go
main.go

index 7b788cfe4636cb73ab5b5fa422af2908d64b429b..535683bd5172649f1e5fcd81d172484edceda32a 100755 (executable)
--- a/config.go
+++ b/config.go
@@ -262,6 +262,9 @@ func (t *Config) SwapSign(ctx context.Context, logger Logger) {
                                                                defer putBack()
                                                                reqBufUsed = true
                                                                n, _ := r.Body.Read(reqBuf)
+                                                               if t.RetryBlocks.size == n {
+                                                                       logger.Warn(`W:`, fmt.Sprintf(logFormat, reqId, r.RemoteAddr, route.config.Addr, routePath, "Err", ErrReqReBodyFull))
+                                                               }
                                                                reqBuf = reqBuf[:n]
                                                        } else {
                                                                logger.Warn(`W:`, fmt.Sprintf(logFormat, reqId, r.RemoteAddr, route.config.Addr, routePath, "Err", ErrReqReBodyOverflow))
@@ -280,7 +283,12 @@ func (t *Config) SwapSign(ctx context.Context, logger Logger) {
                                        backP.lock.Unlock()
 
                                        if reqBufUsed {
-                                               r.Body = io.NopCloser(bytes.NewBuffer(reqBuf))
+                                               if t.RetryBlocks.size == len(reqBuf) {
+                                                       r.Body = io.NopCloser(io.MultiReader(bytes.NewBuffer(reqBuf), r.Body))
+                                                       reqBufUsed = false
+                                               } else {
+                                                       r.Body = io.NopCloser(bytes.NewBuffer(reqBuf))
+                                               }
                                        }
 
                                        if !strings.Contains(backP.To, "://") {
@@ -301,7 +309,7 @@ func (t *Config) SwapSign(ctx context.Context, logger Logger) {
                                                break
                                        }
 
-                                       if v, ok := e.(ErrCanRetry); !ok || !v.CanRetry {
+                                       if v, ok := e.(ErrCanRetry); !reqBufUsed || !ok || !v.CanRetry {
                                                // some err can't retry
                                                break
                                        }
diff --git a/main.go b/main.go
index bbc8eb38d262a6608851f689db3237f4096fa89c..ccbf967277c788f44029b6d1eeaa8ccafd6a3d54 100755 (executable)
--- a/main.go
+++ b/main.go
@@ -184,6 +184,7 @@ var (
        ErrNoWs              = errors.New("ErrNoWs")
        ErrCopy              = errors.New("ErrCopy")
        ErrReqReBodyFail     = errors.New("ErrReqReBodyFail")
+       ErrReqReBodyFull     = errors.New("ErrReqReBodyFull")
        ErrReqReBodyOverflow = errors.New("ErrReqReBodyOverflow")
        ErrReqRetry          = errors.New("ErrReqRetry")
        ErrReqCreFail        = errors.New("ErrReqCreFail")