mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-06-06 21:24:10 +00:00
fix: add error logging for node state writes and queries
Silent error swallowing made it impossible to diagnose why worker couldn't see master's heartbeat. Now logs errors from: - updateNodeState upsert failures - writeStateToSharedMariaDB connection/write failures - getNodeStatesShared query failures - list endpoint shows state count in logs Also improved First() call to not overwrite state on error. Bump version to v1.6.5.
This commit is contained in:
parent
c74b1cfb0f
commit
db2c78d0bb
3 changed files with 24 additions and 5 deletions
|
|
@ -1 +1 @@
|
|||
v1.6.4
|
||||
v1.6.5
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
package controller
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
"strconv"
|
||||
"time"
|
||||
|
|
@ -48,13 +49,18 @@ type NodeView struct {
|
|||
func getNodeStatesFromShared() ([]model.NodeState, error) {
|
||||
// If current DB is already MariaDB, use it directly
|
||||
if config.GetDBTypeFromJSON() == "mariadb" {
|
||||
return database.GetNodeStates()
|
||||
states, err := database.GetNodeStates()
|
||||
if err != nil {
|
||||
log.Printf("[NodeList] GetNodeStates error: %v", err)
|
||||
}
|
||||
return states, err
|
||||
}
|
||||
|
||||
// Otherwise, open a temporary connection to the shared MariaDB
|
||||
dbConfig := config.GetDBConfigFromJSON()
|
||||
db, err := database.OpenMariaDB(dbConfig)
|
||||
if err != nil {
|
||||
log.Printf("[NodeList] failed to open shared MariaDB: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
sqlDB, _ := db.DB()
|
||||
|
|
@ -62,6 +68,9 @@ func getNodeStatesFromShared() ([]model.NodeState, error) {
|
|||
|
||||
var states []model.NodeState
|
||||
err = db.Order("node_id").Find(&states).Error
|
||||
if err != nil {
|
||||
log.Printf("[NodeList] failed to query shared MariaDB node_states: %v", err)
|
||||
}
|
||||
return states, err
|
||||
}
|
||||
|
||||
|
|
@ -73,6 +82,7 @@ func (a *NodeController) list(c *gin.Context) {
|
|||
jsonMsg(c, "get node states", err)
|
||||
return
|
||||
}
|
||||
log.Printf("[NodeList] role=%s nodeId=%s, found %d states in shared DB", nodeCfg.Role, nodeCfg.NodeID, len(states))
|
||||
|
||||
syncInterval := nodeCfg.SyncIntervalSeconds
|
||||
if syncInterval <= 0 {
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package service
|
|||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"log"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
|
|
@ -45,7 +46,10 @@ func (s *NodeSyncService) updateNodeState(version int64, syncErr error, didSync
|
|||
}
|
||||
now := time.Now().Unix()
|
||||
state := &model.NodeState{}
|
||||
_ = database.GetDB().First(state, "node_id = ?", nodeCfg.NodeID).Error
|
||||
if err := database.GetDB().First(state, "node_id = ?", nodeCfg.NodeID).Error; err != nil {
|
||||
// First heartbeat — record doesn't exist yet, that's OK
|
||||
state = &model.NodeState{}
|
||||
}
|
||||
state.NodeID = nodeCfg.NodeID
|
||||
state.NodeRole = string(nodeCfg.Role)
|
||||
state.LastHeartbeatAt = now
|
||||
|
|
@ -58,7 +62,9 @@ func (s *NodeSyncService) updateNodeState(version int64, syncErr error, didSync
|
|||
} else {
|
||||
state.LastError = ""
|
||||
}
|
||||
_ = database.UpsertNodeState(database.GetDB(), state)
|
||||
if err := database.UpsertNodeState(database.GetDB(), state); err != nil {
|
||||
log.Printf("[NodeSync] failed to upsert node state for %s: %v", nodeCfg.NodeID, err)
|
||||
}
|
||||
|
||||
// Master also writes heartbeat to shared MariaDB so workers can see it
|
||||
if nodeCfg.Role == config.NodeRoleMaster {
|
||||
|
|
@ -78,11 +84,14 @@ func (s *NodeSyncService) writeStateToSharedMariaDB(state *model.NodeState) {
|
|||
}
|
||||
sharedDB, err := database.OpenMariaDB(dbConfig)
|
||||
if err != nil {
|
||||
log.Printf("[NodeSync] failed to open shared MariaDB for heartbeat: %v", err)
|
||||
return
|
||||
}
|
||||
sqlDB, _ := sharedDB.DB()
|
||||
defer sqlDB.Close()
|
||||
_ = database.UpsertNodeState(sharedDB, state)
|
||||
if err := database.UpsertNodeState(sharedDB, state); err != nil {
|
||||
log.Printf("[NodeSync] failed to upsert node state to shared MariaDB: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *NodeSyncService) BootstrapFromCache() error {
|
||||
|
|
|
|||
Loading…
Reference in a new issue