Feat: reconnect use wait chan

pull/44/head
zijiren233 3 years ago
parent d76da87811
commit 8c08a83b6e

@ -1,10 +1,12 @@
package handlers package handlers
import ( import (
"context"
"fmt" "fmt"
"net/http" "net/http"
"reflect" "reflect"
"slices" "slices"
"time"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/maruel/natural" "github.com/maruel/natural"
@ -16,6 +18,7 @@ import (
"github.com/synctv-org/synctv/internal/vendor" "github.com/synctv-org/synctv/internal/vendor"
"github.com/synctv-org/synctv/server/model" "github.com/synctv-org/synctv/server/model"
"golang.org/x/exp/maps" "golang.org/x/exp/maps"
"google.golang.org/grpc/connectivity"
"gorm.io/gorm" "gorm.io/gorm"
) )
@ -798,7 +801,7 @@ func AdminUpdateVendorBackends(ctx *gin.Context) {
ctx.Status(http.StatusNoContent) ctx.Status(http.StatusNoContent)
} }
func AdminReConnectVendorBackends(ctx *gin.Context) { func AdminReconnectVendorBackends(ctx *gin.Context) {
// user := ctx.MustGet("user").(*op.User) // user := ctx.MustGet("user").(*op.User)
var req model.VendorBackendEndpointsReq var req model.VendorBackendEndpointsReq
@ -810,7 +813,15 @@ func AdminReConnectVendorBackends(ctx *gin.Context) {
conns := vendor.LoadConns() conns := vendor.LoadConns()
for _, v := range req.Endpoints { for _, v := range req.Endpoints {
if c, ok := conns[v]; ok { if c, ok := conns[v]; ok {
c.Conn.ResetConnectBackoff() if s := c.Conn.GetState(); s != connectivity.Ready {
c.Conn.Connect()
c.Conn.ResetConnectBackoff()
if len(req.Endpoints) == 1 {
ctx2, cf := context.WithTimeout(ctx, time.Second*5)
defer cf()
c.Conn.WaitForStateChange(ctx2, s)
}
}
} else { } else {
ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorStringResp(fmt.Sprintf("endpoint %s not found", v))) ctx.AbortWithStatusJSON(http.StatusBadRequest, model.NewApiErrorStringResp(fmt.Sprintf("endpoint %s not found", v)))
return return

@ -40,13 +40,13 @@ func Init(e *gin.Engine) {
admin.GET("/vendors", AdminGetVendorBackends) admin.GET("/vendors", AdminGetVendorBackends)
admin.POST("/vendors", AdminAddVendorBackend) admin.POST("/vendors/add", AdminAddVendorBackend)
admin.PUT("/vendors", AdminUpdateVendorBackends) admin.POST("/vendors/update", AdminUpdateVendorBackends)
admin.DELETE("/vendors", AdminDeleteVendorBackends) admin.POST("/vendors/delete", AdminDeleteVendorBackends)
admin.OPTIONS("/vendors", AdminReConnectVendorBackends) admin.POST("/vendors/reconnect", AdminReconnectVendorBackends)
{ {
user := admin.Group("/user") user := admin.Group("/user")

Loading…
Cancel
Save