From 10c65da3d2af7056f48d9301e83f53f102f76e18 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期一, 30 十月 2023 14:52:11 +0800
Subject: [PATCH] fix

---
 serf/sync.go |   34 +++++++++++++++++++++++++++-------
 1 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/serf/sync.go b/serf/sync.go
index c6337cf..ce3c2fb 100644
--- a/serf/sync.go
+++ b/serf/sync.go
@@ -152,9 +152,9 @@
 	// 鍚姩鍚庢煡璇竴娆¢泦缇ょ姸鎬�
 	ss.QueryClusterStat()
 
-	if ss.ClusterStatus != "" {
-		ss.sqlDB.LogMode(true)
-	}
+	//if ss.ClusterStatus != "" {
+	ss.sqlDB.LogMode(true)
+	//}
 
 	initChan <- true
 	<-q
@@ -252,7 +252,7 @@
 						// 閫�鍑洪泦缇�, 寮�鍚棩蹇楄窡韪�, 璁剧疆瑙掕壊slave
 						ss.clusterEventFn(EventLeaveCluster)
 						ss.ClusterStatus = ""
-						ss.sqlDB.LogMode(false)
+						ss.sqlDB.LogMode(true)
 					case "slave2master":
 						ss.clusterEventFn(EventSlave2Master)
 						ss.ClusterStatus = "master"
@@ -371,7 +371,7 @@
 }
 
 func (ss *SyncServer) handleClusterMessage(msg []byte) {
-	//fmt.Println("clusterMessage:", string(msg))
+	logx.Infof("clusterMessage:", string(msg))
 	sql := string(msg)
 
 	if len(sql) <= 0 {
@@ -402,17 +402,37 @@
 	}
 }
 
+// serf 鍚屾鏁版嵁鐨勯檺鍒朵负92160 byte
 func (ss *SyncServer) handleSyncTableMessage(msg []byte) error {
+	sizeLimit := 61440
 	targetId := string(msg)
+
 	//fmt.Println("鍚屾鍏ㄩ噺鏁版嵁缁欒妭鐐�:", targetId)
 	sqls, err := DumpTables(ss.sqlDB, ss.syncTables)
 	if err != nil {
-		fmt.Println("DumpTables error, ", err.Error())
+		logx.Errorf("DumpTables error: %s", err.Error())
 		return err
 	}
 
+	logx.Infof("DumpTables sql:%v", sqls)
 	syncSql := strings.Join(sqls, ";")
-	err = ss.pubSyncSqlMessage([]byte(syncSql), targetId)
+	if len(syncSql) < sizeLimit {
+		err = ss.pubSyncSqlMessage([]byte(syncSql), targetId)
+	} else {
+		shard := ""
+		for _, sql := range sqls {
+			if len(shard)+len(sql) > sizeLimit {
+				err = ss.pubSyncSqlMessage([]byte(shard), targetId)
+				shard = ""
+			}
+
+			shard = fmt.Sprintf("%s%s;", shard, sql)
+		}
+
+		if len(shard) > 0 {
+			err = ss.pubSyncSqlMessage([]byte(shard), targetId)
+		}
+	}
 
 	return err
 }

--
Gitblit v1.8.0