From 0b3b1aecb4a2a26f8797ea62af2b5a0381962ad5 Mon Sep 17 00:00:00 2001
From: liuxiaolong <736321739@qq.com>
Date: 星期二, 08 十月 2019 20:50:01 +0800
Subject: [PATCH] query response by sendToTcp
---
agent.go | 94 ++++++++++++++++++++++++++++++----------------
1 files changed, 61 insertions(+), 33 deletions(-)
diff --git a/agent.go b/agent.go
index 0a2a2ff..3504419 100644
--- a/agent.go
+++ b/agent.go
@@ -26,8 +26,6 @@
"net"
"os"
"strconv"
- "sync"
-
//"os"
"strings"
"time"
@@ -81,6 +79,9 @@
return nil, err
}
serfConf.MemberlistConfig.Keyring = keyring
+
+ serfConf.MemberlistConfig.Delegate = &UserDelegate{}
+
logger.Info("[INFO] agent: Restored keyring with %d keys from %s",
len(conf.EncryptKey), conf.EncryptKey)
@@ -189,29 +190,46 @@
//for _, r := range rows {
// rowsReturn = append(rowsReturn, *r)
//}
- var tableNames []string
- err := json.Unmarshal(ev.Payload, &tableNames)
+ var fromP QueryTableDataParam
+ err := json.Unmarshal(ev.Payload, &fromP)
if err !=nil {
logger.Error("Query tableNames unmarshal err")
return
}
- logger.Info("Query tableNames:",tableNames)
- datas, err := ExecuteQueryByGorm(tableNames)
+ logger.Info("Query tableNames:",fromP.Tables)
+ datas, err := ExecuteQueryByGorm(fromP.Tables)
if err !=nil {
logger.Error("queryByGorm err")
return
}
bytesReturn, err := json.Marshal(datas)
logger.Info("results.len: ", len(bytesReturn))
- if query, ok := event.(*serf.Query); ok {
- if err := query.Respond(bytesReturn); err != nil {
- logger.Error("err: %s\n", err)
- return
+
+ var targetNode *memberlist.Node
+ nodes := a.Serf().Memberlist().Members()
+ if nodes != nil && len(nodes) > 0 {
+ for _,n :=range nodes {
+ if n.Name == fromP.From {
+ targetNode = n
+ break
+ }
}
}
+ if targetNode !=nil {
+ sendErr := a.Serf().Memberlist().SendToTCP(targetNode, bytesReturn)
+ if sendErr != nil {
+ logger.Debug("sendToTcp err:",sendErr)
+ }
+ } else {
+ logger.Debug("targetNode is nil")
+ }
- //var res []*Rows
- //json.Unmarshal(bytesReturn, &res)
+ //if query, ok := event.(*serf.Query); ok {
+ // if err := query.Respond(bytesReturn); err != nil {
+ // logger.Error("err: %s\n", err)
+ // return
+ // }
+ //}
}
case serf.MemberEvent:
if event.EventType() == serf.EventMemberLeave {
@@ -445,6 +463,11 @@
}()
}
+type QueryTableDataParam struct {
+ Tables []string `json:"tables"`
+ From string `json:"from"`
+}
+
//GetDbFromCluster get the newest database after join cluster
//dbPathWrite the path where to write after got a database,
func (a *Agent) GetTableDataFromCluster(tableNames []string) (*[]string,error) {
@@ -472,8 +495,12 @@
FilterNodes: strings.Fields(specmembername),
}
- //SQL
- tBytes, _ := json.Marshal(tableNames)
+ //get db tables
+ var fromP = QueryTableDataParam{
+ Tables: tableNames,
+ From: a.conf.NodeName,
+ }
+ tBytes, _ := json.Marshal(fromP)
resp, err := a.Query(QueryEventUpdateDBData, tBytes, ¶ms)
if err == nil || !strings.Contains(err.Error(), "cannot contain") {
@@ -481,26 +508,27 @@
}
logger.Info("Query.resp.err:",err,"resp:",resp)
- var wg sync.WaitGroup
- wg.Add(1)
var dumpSqls []string
- go func() {
- defer wg.Done()
- respCh := resp.ResponseCh()
- for {
- select {
- case r := <-respCh:
- logger.Info("Query response's len:", len(r.Payload))
- err := json.Unmarshal(r.Payload, &dumpSqls)
- if err ==nil {
- logger.Error("dumpSql:",dumpSqls)
- logger.Error("data dump success")
- }
- return
- }
- }
- }()
- wg.Wait()
+
+ //var wg sync.WaitGroup
+ //wg.Add(1)
+ //go func() {
+ // defer wg.Done()
+ // respCh := resp.ResponseCh()
+ // for {
+ // select {
+ // case r := <-respCh:
+ // logger.Info("Query response's len:", len(r.Payload))
+ // err := json.Unmarshal(r.Payload, &dumpSqls)
+ // if err ==nil {
+ // logger.Error("dumpSql:",dumpSqls)
+ // logger.Error("data dump success")
+ // }
+ // return
+ // }
+ // }
+ //}()
+ //wg.Wait()
return &dumpSqls,nil
//r, err = c.Query([]string{query}, false, false)
--
Gitblit v1.8.0