diff --git a/models/migration.go b/models/migration.go index 277020d..9d2af47 100644 --- a/models/migration.go +++ b/models/migration.go @@ -48,6 +48,9 @@ func migration() { // 创建初始管理员账户 addDefaultUser() + // 创建初始节点 + addDefaultNode() + // 向设置数据表添加初始设置 addDefaultSettings() @@ -268,3 +271,22 @@ func addDefaultUser() { util.Log().Info("初始管理员密码:" + c.Sprint(password)) } } + +func addDefaultNode() { + _, err := GetNodeByID(1) + + if gorm.IsRecordNotFoundError(err) { + defaultAdminGroup := Node{ + Name: "主机(本机)", + Status: NodeActive, + Type: MasterNodeType, + Aria2OptionsSerialized: Aria2Option{ + Interval: 10, + Timeout: 10, + }, + } + if err := DB.Create(&defaultAdminGroup).Error; err != nil { + util.Log().Panic("无法创建初始节点记录, %s", err) + } + } +} diff --git a/pkg/cluster/pool.go b/pkg/cluster/pool.go index 73a81bb..2181df4 100644 --- a/pkg/cluster/pool.go +++ b/pkg/cluster/pool.go @@ -136,7 +136,7 @@ func (pool *NodePool) Add(node *model.Node) { old, ok = pool.inactive[node.ID] } if old != nil { - old.Init(node) + go old.Init(node) return } diff --git a/pkg/cluster/slave.go b/pkg/cluster/slave.go index a76f238..ac8a46a 100644 --- a/pkg/cluster/slave.go +++ b/pkg/cluster/slave.go @@ -34,7 +34,6 @@ type slaveCaller struct { // Init 初始化节点 func (node *SlaveNode) Init(nodeModel *model.Node) { node.lock.Lock() - defer node.lock.Unlock() node.Model = nodeModel // Init http request client @@ -54,12 +53,15 @@ func (node *SlaveNode) Init(nodeModel *model.Node) { ) node.caller.parent = node - node.Active = true if node.close != nil { + node.lock.Unlock() node.close <- true + go node.StartPingLoop() + } else { + node.Active = true + node.lock.Unlock() + go node.StartPingLoop() } - - go node.StartPingLoop() } // IsFeatureEnabled 查询节点的某项功能是否启用 @@ -84,6 +86,9 @@ func (node *SlaveNode) SubscribeStatusChange(callback func(bool, uint)) { // Ping 从机节点,返回从机负载 func (node *SlaveNode) Ping(req *serializer.NodePingReq) (*serializer.NodePingResp, error) { + node.lock.RLock() + defer node.lock.RUnlock() + reqBodyEncoded, err := json.Marshal(req) if err != nil { return nil, err diff --git a/pkg/conf/version.go b/pkg/conf/version.go index 9c1d1dc..831e612 100644 --- a/pkg/conf/version.go +++ b/pkg/conf/version.go @@ -4,7 +4,7 @@ package conf var BackendVersion = "3.3.2" // RequiredDBVersion 与当前版本匹配的数据库版本 -var RequiredDBVersion = "3.3.2" +var RequiredDBVersion = "3.4.0-beta" // RequiredStaticVersion 与当前版本匹配的静态资源版本 var RequiredStaticVersion = "3.3.2" diff --git a/service/admin/aria2.go b/service/admin/aria2.go index 0df3275..b40603b 100644 --- a/service/admin/aria2.go +++ b/service/admin/aria2.go @@ -15,9 +15,9 @@ import ( // Aria2TestService aria2连接测试服务 type Aria2TestService struct { - Server string `json:"server" binding:"required"` + Server string `json:"server"` RPC string `json:"rpc" binding:"required"` - Secret string `json:"secret" binding:"required"` + Secret string `json:"secret"` Token string `json:"token"` Type model.ModelType `json:"type"` }