Skip to content

Commit e1d4c34

Browse files
author
svaroqui
committed
Fix Spider discovery query to not return NULL
1 parent a92de1c commit e1d4c34

File tree

1 file changed

+39
-6
lines changed

1 file changed

+39
-6
lines changed

dbhelper/dbhelper.go

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,13 @@ type Privileges struct {
9999
Repl_client_priv string
100100
Reload_priv string
101101
}
102+
type SpiderTableNoSync struct {
103+
Tbl_src string
104+
Tbl_src_link string
105+
Tbl_dest string
106+
Srv_dsync string
107+
Srv_sync string
108+
}
102109

103110
/* Connect to a MySQL server. Must be deprecated, use MySQLConnect instead */
104111
func Connect(user string, password string, address string) *sqlx.DB {
@@ -501,10 +508,36 @@ func CheckHostAddr(h string) (string, error) {
501508

502509

503510
func GetSpiderShardUrl(db *sqlx.DB) (string, error) {
504-
var value string
505-
err := db.QueryRowx("select group_concat(distinct concat(coalesce(st.host,s.host ),':',coalesce(st.port,s.port))) as value from mysql.spider_tables st left join mysql.servers s on st.server=s.server_name").Scan(&value)
506-
if err != nil {
507-
log.Println("ERROR: Could not get spider shards", err)
508-
}
509-
return value, err
511+
var value string
512+
err := db.QueryRowx("select coalesce(group_concat(distinct concat(coalesce(st.host,s.host ),':',coalesce(st.port,s.port))),'') as value from mysql.spider_tables st left join mysql.servers s on st.server=s.server_name").Scan(&value)
513+
if err != nil {
514+
log.Println("ERROR: Could not get spider shards", err)
515+
}
516+
return value, err
510517
}
518+
519+
func GetSpiderMonitor(db *sqlx.DB) (string, error) {
520+
var value string
521+
err := db.QueryRowx("select coalesce(group_concat(distinct concat(coalesce(st.host,s.host ),':',coalesce(st.port,s.port))),'') as value from mysql.spider_link_mon_servers st left join mysql.servers s on st.server=s.server_name").Scan(&value)
522+
if err != nil {
523+
log.Println("ERROR: Could not get spider shards", err)
524+
}
525+
return value, err
526+
}
527+
528+
func GetSpiderTableToSync(db *sqlx.DB) (map[string]SpiderTableNoSync, error) {
529+
vars := make(map[string]SpiderTableNoSync)
530+
rows, err := db.Queryx(`
531+
select usync.*, sync.srv_sync from (
532+
select group_concat( distinct concat(db_name, '.',substring_index(table_name,'#P#', 1))) as tbl_src , group_concat( distinct concat(db_name, '.', table_name)) as tbl_src_link,concat( coalesce(st.tgt_db_name,s.db) ,'.', tgt_table_name ) as tbl_dest, concat(coalesce(st.host,s.host ),':',coalesce(st.port,s.port)) as srv_desync from (select * from mysql.spider_tables where link_status=3) st left join mysql.servers s on st.server=s.server_name group by tbl_dest, srv_desync
533+
) usync inner join (
534+
select group_concat( distinct concat(db_name, '.',table_name)) as tbl_src ,concat( coalesce(st.tgt_db_name,s.db) ,'.', tgt_table_name ) as tbl_dest, concat(coalesce(st.host,s.host ),':',coalesce(st.port,s.port)) as srv_sync from (select * from mysql.spider_tables where link_status=1) st left join mysql.servers s on st.server=s.server_name group by tbl_dest, srv_sync
535+
) sync ON usync.tbl_src_link= sync.tbl_src and usync.tbl_dest=sync.tbl_dest
536+
`)
537+
for rows.Next() {
538+
var v SpiderTableNoSync
539+
rows.Scan(&v.Tbl_src, &v.Tbl_src_link,&v.Tbl_dest,&v.Srv_dsync ,&v.Srv_sync)
540+
vars[v.Tbl_src] = v
541+
}
542+
return vars,err
543+
}

0 commit comments

Comments
 (0)