diff --git a/include/MySQL_Thread.h b/include/MySQL_Thread.h index 4b116b237..8e484b7fa 100644 --- a/include/MySQL_Thread.h +++ b/include/MySQL_Thread.h @@ -249,6 +249,8 @@ class MySQL_Threads_Handler int monitor_connect_timeout; int monitor_ping_interval; int monitor_ping_timeout; + int monitor_read_only_interval; + int monitor_read_only_timeout; int monitor_replication_lag_interval; int monitor_replication_lag_timeout; int monitor_query_interval; diff --git a/include/proxysql_structs.h b/include/proxysql_structs.h index dddde86da..d5cf5d4e6 100644 --- a/include/proxysql_structs.h +++ b/include/proxysql_structs.h @@ -705,6 +705,8 @@ __thread int mysql_thread___monitor_connect_interval; __thread int mysql_thread___monitor_connect_timeout; __thread int mysql_thread___monitor_ping_interval; __thread int mysql_thread___monitor_ping_timeout; +__thread int mysql_thread___monitor_read_only_interval; +__thread int mysql_thread___monitor_read_only_timeout; __thread int mysql_thread___monitor_replication_lag_interval; __thread int mysql_thread___monitor_replication_lag_timeout; __thread int mysql_thread___monitor_query_interval; @@ -760,6 +762,8 @@ extern __thread int mysql_thread___monitor_connect_interval; extern __thread int mysql_thread___monitor_connect_timeout; extern __thread int mysql_thread___monitor_ping_interval; extern __thread int mysql_thread___monitor_ping_timeout; +extern __thread int mysql_thread___monitor_read_only_interval; +extern __thread int mysql_thread___monitor_read_only_timeout; extern __thread int mysql_thread___monitor_replication_lag_interval; extern __thread int mysql_thread___monitor_replication_lag_timeout; extern __thread int mysql_thread___monitor_query_interval; diff --git a/lib/MySQL_Monitor.cpp b/lib/MySQL_Monitor.cpp index cc7dc382a..e48e11fb0 100644 --- a/lib/MySQL_Monitor.cpp +++ b/lib/MySQL_Monitor.cpp @@ -35,8 +35,6 @@ static MySQL_Monitor *GloMyMon; static void state_machine_handler(int fd, short event, void *arg); -// FIXME: -const int mysql_thread___monitor_read_only_interval=1000; /* struct state_data { int ST; @@ -1014,8 +1012,7 @@ __end_monitor_read_only_loop: SAFE_SQLITE3_STEP(statement); rc=sqlite3_clear_bindings(statement); assert(rc==SQLITE_OK); rc=sqlite3_reset(statement); assert(rc==SQLITE_OK); -// FIXME: MyHGM->replication_lag_action(mmsd->hostgroup_id, mmsd->hostname, mmsd->port, (repl_lag==-1 ? 0 : repl_lag)); - + char *pta[3]; char roport[10]; char roval[10]; @@ -1025,6 +1022,7 @@ __end_monitor_read_only_loop: sprintf(roval,"%d",read_only); pta[2]=roval; result->add_row(pta); + delete mmsd; } sqlite3_finalize(statement); diff --git a/lib/MySQL_Thread.cpp b/lib/MySQL_Thread.cpp index cb606fb93..029135fb0 100644 --- a/lib/MySQL_Thread.cpp +++ b/lib/MySQL_Thread.cpp @@ -149,6 +149,8 @@ static char * mysql_thread_variables_names[]= { (char *)"monitor_connect_timeout", (char *)"monitor_ping_interval", (char *)"monitor_ping_timeout", + (char *)"monitor_read_only_interval", + (char *)"monitor_read_only_timeout", (char *)"monitor_replication_lag_interval", (char *)"monitor_replication_lag_timeout", (char *)"monitor_username", @@ -213,6 +215,8 @@ MySQL_Threads_Handler::MySQL_Threads_Handler() { variables.monitor_connect_timeout=200; variables.monitor_ping_interval=60000; variables.monitor_ping_timeout=100; + variables.monitor_read_only_interval=1000; + variables.monitor_read_only_timeout=100; variables.monitor_replication_lag_interval=10000; variables.monitor_replication_lag_timeout=1000; variables.monitor_query_interval=60000; @@ -357,6 +361,8 @@ int MySQL_Threads_Handler::get_variable_int(char *name) { if (!strcasecmp(name,"monitor_connect_timeout")) return (int)variables.monitor_connect_timeout; if (!strcasecmp(name,"monitor_ping_interval")) return (int)variables.monitor_ping_interval; if (!strcasecmp(name,"monitor_ping_timeout")) return (int)variables.monitor_ping_timeout; + if (!strcasecmp(name,"monitor_read_only_interval")) return (int)variables.monitor_read_only_interval; + if (!strcasecmp(name,"monitor_read_only_timeout")) return (int)variables.monitor_read_only_timeout; if (!strcasecmp(name,"monitor_replication_lag_interval")) return (int)variables.monitor_replication_lag_interval; if (!strcasecmp(name,"monitor_replication_lag_timeout")) return (int)variables.monitor_replication_lag_timeout; if (!strcasecmp(name,"monitor_query_interval")) return (int)variables.monitor_query_interval; @@ -430,6 +436,14 @@ char * MySQL_Threads_Handler::get_variable(char *name) { // this is the public f sprintf(intbuf,"%d",variables.monitor_ping_timeout); return strdup(intbuf); } + if (!strcasecmp(name,"monitor_read_only_interval")) { + sprintf(intbuf,"%d",variables.monitor_read_only_interval); + return strdup(intbuf); + } + if (!strcasecmp(name,"monitor_read_only_timeout")) { + sprintf(intbuf,"%d",variables.monitor_read_only_timeout); + return strdup(intbuf); + } if (!strcasecmp(name,"monitor_replication_lag_interval")) { sprintf(intbuf,"%d",variables.monitor_replication_lag_interval); return strdup(intbuf); @@ -665,6 +679,24 @@ bool MySQL_Threads_Handler::set_variable(char *name, char *value) { // this is t return false; } } + if (!strcasecmp(name,"monitor_read_only_interval")) { + int intv=atoi(value); + if (intv >= 100 && intv <= 7*24*3600*1000) { + variables.monitor_read_only_interval=intv; + return true; + } else { + return false; + } + } + if (!strcasecmp(name,"monitor_read_only_timeout")) { + int intv=atoi(value); + if (intv >= 100 && intv <= 600*1000) { + variables.monitor_read_only_timeout=intv; + return true; + } else { + return false; + } + } if (!strcasecmp(name,"monitor_replication_lag_interval")) { int intv=atoi(value); if (intv >= 100 && intv <= 7*24*3600*1000) { @@ -1651,6 +1683,8 @@ void MySQL_Thread::refresh_variables() { mysql_thread___monitor_connect_timeout=GloMTH->get_variable_int((char *)"monitor_connect_timeout"); mysql_thread___monitor_ping_interval=GloMTH->get_variable_int((char *)"monitor_ping_interval"); mysql_thread___monitor_ping_timeout=GloMTH->get_variable_int((char *)"monitor_ping_timeout"); + mysql_thread___monitor_read_only_interval=GloMTH->get_variable_int((char *)"monitor_read_only_interval"); + mysql_thread___monitor_read_only_timeout=GloMTH->get_variable_int((char *)"monitor_read_only_timeout"); mysql_thread___monitor_replication_lag_interval=GloMTH->get_variable_int((char *)"monitor_replication_lag_interval"); mysql_thread___monitor_replication_lag_timeout=GloMTH->get_variable_int((char *)"monitor_replication_lag_timeout"); mysql_thread___monitor_query_interval=GloMTH->get_variable_int((char *)"monitor_query_interval");