fix retry 307
This commit is contained in:
parent
fd72157296
commit
1d0a7997f1
@ -83,7 +83,7 @@ var PreConsumedQuota = 500
|
|||||||
var ApproximateTokenEnabled = false
|
var ApproximateTokenEnabled = false
|
||||||
var RetryTimes = 0
|
var RetryTimes = 0
|
||||||
|
|
||||||
var RetryInterval = 0 // unit is millisecond
|
var RetryInterval = 100 // unit is millisecond
|
||||||
var RootUserEmail = ""
|
var RootUserEmail = ""
|
||||||
|
|
||||||
var IsMasterNode = os.Getenv("NODE_TYPE") != "slave"
|
var IsMasterNode = os.Getenv("NODE_TYPE") != "slave"
|
||||||
|
@ -3,7 +3,6 @@ package middleware
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -56,16 +55,14 @@ func RetryHandler(group *gin.RouterGroup) gin.HandlerFunc {
|
|||||||
maxRetryStr := c.Query("retry")
|
maxRetryStr := c.Query("retry")
|
||||||
maxRetry, err := strconv.Atoi(maxRetryStr)
|
maxRetry, err := strconv.Atoi(maxRetryStr)
|
||||||
if err != nil || maxRetryStr == "" || maxRetry < 0 || maxRetry > common.RetryTimes {
|
if err != nil || maxRetryStr == "" || maxRetry < 0 || maxRetry > common.RetryTimes {
|
||||||
maxRetry = common.RetryTimes
|
maxRetry = common.Max(common.RetryTimes+1, 1)
|
||||||
}
|
}
|
||||||
retryDelay := time.Duration(common.RetryInterval) * time.Millisecond
|
retryDelay := time.Duration(common.RetryInterval) * time.Millisecond
|
||||||
var openaiErr *OpenAIErrorWithStatusCode
|
|
||||||
for i := 0; i < maxRetry; i++ {
|
for i := 0; i < maxRetry; i++ {
|
||||||
if i == 0 {
|
if i == 0 {
|
||||||
// 第一次请求, 直接执行使用c.Next()调用后续中间件, 防止直接使用handler 内部调用c.Next() 导致重复执行
|
// 第一次请求, 直接执行使用c.Next()调用后续中间件, 防止直接使用handler 内部调用c.Next() 导致重复执行
|
||||||
// First request, execute next middleware
|
// First request, execute next middleware
|
||||||
c.Next()
|
c.Next()
|
||||||
fmt.Println("c.Next()")
|
|
||||||
} else {
|
} else {
|
||||||
// Clear errors to avoid confusion in next middleware
|
// Clear errors to avoid confusion in next middleware
|
||||||
c.Errors = c.Errors[:0]
|
c.Errors = c.Errors[:0]
|
||||||
@ -89,10 +86,19 @@ func RetryHandler(group *gin.RouterGroup) gin.HandlerFunc {
|
|||||||
// If errors, retry after delay
|
// If errors, retry after delay
|
||||||
time.Sleep(retryDelay)
|
time.Sleep(retryDelay)
|
||||||
}
|
}
|
||||||
_ = json.Unmarshal([]byte(c.Errors.Last().Error()), &openaiErr)
|
if len(c.Errors) == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var openaiErr *OpenAIErrorWithStatusCode
|
||||||
|
err = json.Unmarshal([]byte(c.Errors.Last().Error()), &openaiErr)
|
||||||
|
if err != nil {
|
||||||
|
abortWithMessage(c, http.StatusInternalServerError, c.Errors.Last().Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
c.JSON(openaiErr.StatusCode, gin.H{
|
c.JSON(openaiErr.StatusCode, gin.H{
|
||||||
"error": openaiErr.OpenAIError,
|
"error": openaiErr.OpenAIError,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
group.Handlers = append(group.Handlers, retryHandler)
|
||||||
return retryHandler
|
return retryHandler
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user