From d91a802e7aa2ad4075ed803b8ddc7536a91a0ef0 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期五, 27 十月 2023 20:33:06 +0800
Subject: [PATCH] update

---
 serf/sync.go |   26 +++++++++++++++++++++++---
 1 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/serf/sync.go b/serf/sync.go
index c6337cf..13f66ea 100644
--- a/serf/sync.go
+++ b/serf/sync.go
@@ -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