From c7135f7871f9d8f7c6493dc03bcfd55e6efd5d4d Mon Sep 17 00:00:00 2001 From: qydysky Date: Fri, 21 Mar 2025 08:41:19 +0000 Subject: [PATCH] 1 --- config.go | 12 ++++++++++-- main.go | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/config.go b/config.go index 7b788cf..535683b 100755 --- 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 bbc8eb3..ccbf967 100755 --- 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") -- 2.39.2