Merge pull request #394 from hantmac/develop

尝试解决节点重复注册问题
This commit is contained in:
Marvin Zhang
2019-12-24 16:24:08 +08:00
committed by GitHub
2 changed files with 44 additions and 19 deletions

View File

@@ -167,27 +167,34 @@ func UpdateNodeData() {
debug.PrintStack()
return
}
// 构造节点数据
data := Data{
Key: key,
Mac: mac,
Ip: ip,
Master: model.IsMaster(),
UpdateTs: time.Now(),
UpdateTsUnix: time.Now().Unix(),
//先获取所有Redis的nodekey
list, _ := database.RedisClient.HKeys("nodes")
if i := utils.Contains(list, key); i != -1 {
// 构造节点数据
data := Data{
Key: key,
Mac: mac,
Ip: ip,
Master: model.IsMaster(),
UpdateTs: time.Now(),
UpdateTsUnix: time.Now().Unix(),
}
// 注册节点到Redis
dataBytes, err := json.Marshal(&data)
if err != nil {
log.Errorf(err.Error())
debug.PrintStack()
return
}
if err := database.RedisClient.HSet("nodes", key, utils.BytesToString(dataBytes)); err != nil {
log.Errorf(err.Error())
return
}
}
// 注册节点到Redis
dataBytes, err := json.Marshal(&data)
if err != nil {
log.Errorf(err.Error())
debug.PrintStack()
return
}
if err := database.RedisClient.HSet("nodes", key, utils.BytesToString(dataBytes)); err != nil {
log.Errorf(err.Error())
return
}
}
func MasterNodeCallback(message redis.Message) (err error) {

View File

@@ -6,6 +6,7 @@ import (
"github.com/apex/log"
"github.com/gomodule/redigo/redis"
"io"
"reflect"
"runtime/debug"
"unsafe"
)
@@ -40,3 +41,20 @@ func Close(c io.Closer) {
//log.WithError(err).Error("关闭资源文件失败。")
}
}
func Contains(array interface{}, val interface{}) (index int) {
index = -1
switch reflect.TypeOf(array).Kind() {
case reflect.Slice:
{
s := reflect.ValueOf(array)
for i := 0; i < s.Len(); i++ {
if reflect.DeepEqual(val, s.Index(i).Interface()) {
index = i
return
}
}
}
}
return
}