基于serf的数据库同步模块库
chenshijun
2019-10-11 f8c421e2f4bbe953f4aa9dcb6a0f2a09aead24a8
searcher.go
@@ -2,14 +2,14 @@
import (
   "encoding/json"
   "fmt"
   "basic.com/valib/logger.git"
   "time"
   "github.com/hashicorp/memberlist"
)
var (
   members [][]byte
   members = make(map[string]NodeInfo,0)
   delay   time.Duration
)
@@ -53,7 +53,12 @@
// NotifyMsg is called when a user-data message is received
func (d *delegate) NotifyMsg(b []byte) {
   // logMsg(b)
   members = append(members, b)
   n := NodeInfo{}
   if err:= json.Unmarshal(b, &n);err ==nil {
      members[n.NodeID] = n
   } else {
      logger.Error("NotifyMsg msg unmarshal err")
   }
}
func logMsg(b []byte) {
@@ -65,11 +70,11 @@
   node := nodeInfo{}
   if err := json.Unmarshal(b, &node); err != nil {
      fmt.Println("Umarshal failed:", err)
      logger.Error("Umarshal failed:", err)
      return
   }
   fmt.Println(node)
   logger.Info(node)
}
func CreateSearchNode(key string) (*memberlist.Memberlist, error) {
@@ -82,7 +87,7 @@
   keyring, err := memberlist.NewKeyring(nil, []byte(key))
   if err != nil {
      fmt.Printf("Failed to restore keyring: %s", err)
      logger.Error("Failed to restore keyring: %s", err)
      return nil, err
   }
   conf.Keyring = keyring
@@ -90,10 +95,10 @@
   return memberlist.Create(conf)
}
func CreateSearchNodeWhitClose(key string, delay time.Duration) [][]byte {
func CreateSearchNodeWhitClose(key string, delay time.Duration) map[string]NodeInfo {
   m, err := CreateSearchNode(key)
   if err == nil {
      // fmt.Printf("Local member %s:%d\n", m.LocalNode().Addr, m.LocalNode().Port)
      //logger.Info("Local member %s:%d\n", m.LocalNode().Addr, m.LocalNode().Port)
      time.Sleep(delay)
      m.Shutdown()
@@ -101,11 +106,10 @@
   return members
}
func CloseSearchNode(m *memberlist.Memberlist) error{
func CloseSearchNode(m *memberlist.Memberlist) error {
   return m.Shutdown()
}
func GetSearchNodes()[][]byte {
func GetSearchNodes() map[string]NodeInfo {
   return members
}