From dd75b36c03049be232a94d97eff1c4a5cc751fb5 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期二, 31 十月 2023 22:08:39 +0800 Subject: [PATCH] 支持设备ID切换 --- serf/sync.go | 83 ++++++++++++++++++++++++++++++++++++----- 1 files changed, 72 insertions(+), 11 deletions(-) diff --git a/serf/sync.go b/serf/sync.go index 13f66ea..d8ef4c7 100644 --- a/serf/sync.go +++ b/serf/sync.go @@ -7,6 +7,7 @@ "fmt" "os" "os/signal" + "regexp" "strings" "syscall" "time" @@ -65,9 +66,10 @@ agent.queryTableTopic = procName + "/serf/query/sqls" // 璁剧疆鏃ュ織鍥炶皟 - db.SetLogger(&DbLogger{}) + db.SetLogger(&agent) + // 鍏堝叧闂棩蹇� - db.LogMode(false) + //db.LogMode(false) return &agent } @@ -152,9 +154,9 @@ // 鍚姩鍚庢煡璇竴娆¢泦缇ょ姸鎬� ss.QueryClusterStat() - if ss.ClusterStatus != "" { - ss.sqlDB.LogMode(true) - } + //if ss.ClusterStatus != "" { + //ss.sqlDB.LogMode(true) + //} initChan <- true <-q @@ -239,28 +241,28 @@ // 鍒涘缓闆嗙兢, 寮�鍚棩蹇楄窡韪�, 璁剧疆瑙掕壊master ss.clusterEventFn(EventCreateCluster) ss.ClusterStatus = "master" - ss.sqlDB.LogMode(true) + //ss.sqlDB.LogMode(true) case "join": // 鍔犲叆闆嗙兢, 寮�鍚棩蹇楄窡韪�, 璁剧疆瑙掕壊slave ss.clusterEventFn(EventJoinCluster) ss.onJoinCluster() ss.ClusterStatus = "slave" - ss.sqlDB.LogMode(true) + //ss.sqlDB.LogMode(true) case "leave": // 閫�鍑洪泦缇�, 寮�鍚棩蹇楄窡韪�, 璁剧疆瑙掕壊slave ss.clusterEventFn(EventLeaveCluster) ss.ClusterStatus = "" - ss.sqlDB.LogMode(false) + //ss.sqlDB.LogMode(true) case "slave2master": ss.clusterEventFn(EventSlave2Master) ss.ClusterStatus = "master" - ss.sqlDB.LogMode(true) + //ss.sqlDB.LogMode(true) case "master2slave": ss.clusterEventFn(EventMaster2Slave) ss.ClusterStatus = "slave" - ss.sqlDB.LogMode(true) + //ss.sqlDB.LogMode(true) } } } @@ -429,7 +431,7 @@ shard = fmt.Sprintf("%s%s;", shard, sql) } - if len(shard) >0 { + if len(shard) > 0 { err = ss.pubSyncSqlMessage([]byte(shard), targetId) } } @@ -437,6 +439,65 @@ return err } +func (ss *SyncServer)Print(values ...interface{}) { + var ( + level = values[0] + ) + + //fmt.Println("dblogger", values) + + if level == "sql" { + msgArr := gorm.LogFormatter(values...) + sql := msgArr[3].(string) + logx.Infof("sql: %v", sql) + sql = strings.TrimPrefix(sql, " ") + if !strings.HasPrefix(sql, "SELECT") && !strings.HasPrefix(sql, "select") && !strings.Contains(sql, "PRAGMA") && !strings.Contains(sql, "pragma") { + affected := values[5].(int64) + if affected > 0 { //鎵ц鎴愬姛 + //鍒ゆ柇鎿嶄綔鐨勬槸鍝紶琛� + whereIdx := strings.Index(sql, "WHERE") + sqlWithTable := sql + if whereIdx > -1 { + sqlWithTable = sql[:whereIdx] + } + + //fmt.Println("鍒ゆ柇鏄摢寮犺〃 sqlWithTable:", sqlWithTable) + + insertReg := regexp.MustCompile(`^\s*(?i:insert)\s`) //insert + updateReg := regexp.MustCompile(`^\s*(?i:update)\s`) //update + delReg := regexp.MustCompile(`^\s*(?i:delete)\s`) //delete + + if insertReg.MatchString(sqlWithTable) { + //fmt.Println("鎻掑叆鎿嶄綔") + for _, t := range agent.syncTables { + reg := regexp.MustCompile(`\s+\"?(?i:` + t + `)\"?\s+`) + if reg.MatchString(sqlWithTable) { + //fmt.Println("灞炰簬鍚屾琛�:", t) + // 鍒ゆ柇鏄湪闆嗙兢鍐�, 鍚屾娑堟伅, 鍒ゆ柇涓ょ瑙掕壊, 涓洪伩鍏嶅叾浠栧嚭鐜扮姸鎬� + if ss.ClusterStatus == "master" || ss.ClusterStatus == "slave" { + syncSqlChan <- sql + } + } + } + } else if updateReg.MatchString(sqlWithTable) || delReg.MatchString(sqlWithTable) { + //fmt.Println("鍒犻櫎鎴栬�呮洿鏂�") + for _, t := range agent.syncTables { + reg := regexp.MustCompile(`\s+\"?(?i:` + t + `)\"?\s+`) + if reg.MatchString(sqlWithTable) { + //fmt.Println("灞炰簬鍚屾琛�:", t) + if ss.ClusterStatus == "master" || ss.ClusterStatus == "slave" { + syncSqlChan <- sql + } + } + } + } + } + } + } else { + fmt.Println("dbLogger level!=sql") + } +} + func arrayContains(list []string, arr []string) string { if arr == nil || list == nil { return "" -- Gitblit v1.8.0