diff --git a/lib/MySQL_Monitor.cpp b/lib/MySQL_Monitor.cpp index 4e282f651..793fc5e8f 100644 --- a/lib/MySQL_Monitor.cpp +++ b/lib/MySQL_Monitor.cpp @@ -4061,8 +4061,6 @@ bool AWS_Aurora_monitor_node::add_entry(AWS_Aurora_status_entry *ase) { return ret; // for now ignored } -void * monitor_AWS_Aurora_thread(void *arg); - typedef struct _host_def_t { char *host; @@ -4691,168 +4689,6 @@ __sleep_monitor_aws_aurora: return NULL; } -void * monitor_AWS_Aurora_thread(void *arg) { - mysql_close(mysql_init(NULL)); - MySQL_Monitor_State_Data *mmsd=(MySQL_Monitor_State_Data *)arg; - MySQL_Thread * mysql_thr = new MySQL_Thread(); - mysql_thr->curtime=monotonic_time(); - mysql_thr->refresh_variables(); - if (!GloMTH) return NULL; // quick exit during shutdown/restart - - mmsd->mysql=GloMyMon->My_Conn_Pool->get_connection(mmsd->hostname, mmsd->port, mmsd); - unsigned long long start_time=mysql_thr->curtime; - - - mmsd->t1=start_time; - - bool crc=false; - if (mmsd->mysql==NULL) { // we don't have a connection, let's create it - bool rc; - rc=mmsd->create_new_connection(); - crc=true; - if (rc==false) { - unsigned long long now=monotonic_time(); - char * new_error = (char *)malloc(50+strlen(mmsd->mysql_error_msg)); - sprintf(new_error,"timeout or error in creating new connection: %s",mmsd->mysql_error_msg); - free(mmsd->mysql_error_msg); - mmsd->mysql_error_msg = new_error; - proxy_error("Error on AWS Aurora check for %s:%d after %lldms. Unable to create a connection. If the server is overload, increase mysql-monitor_connect_timeout. Error: %s.\n", mmsd->hostname, mmsd->port, (now-mmsd->t1)/1000, new_error); - goto __exit_monitor_aws_aurora_thread; - } - } - - mmsd->t1=monotonic_time(); - mmsd->interr=0; // reset the value -#ifdef TEST_AURORA - mmsd->async_exit_status = mysql_query_start(&mmsd->interr, mmsd->mysql, "SELECT SERVER_ID, SESSION_ID, LAST_UPDATE_TIMESTAMP, REPLICA_LAG_IN_MILLISECONDS, CPU FROM REPLICA_HOST_STATUS ORDER BY SERVER_ID"); -#else - mmsd->async_exit_status = mysql_query_start(&mmsd->interr, mmsd->mysql, "SELECT SERVER_ID, SESSION_ID, LAST_UPDATE_TIMESTAMP, IF(SESSION_ID = 'MASTER_SESSION_ID', 0, REPLICA_LAG_IN_MILLISECONDS) AS REPLICA_LAG_IN_MILLISECONDS, CPU FROM INFORMATION_SCHEMA.REPLICA_HOST_STATUS ORDER BY SERVER_ID"); -#endif // TEST_AURORA - while (mmsd->async_exit_status) { - mmsd->async_exit_status=wait_for_mysql(mmsd->mysql, mmsd->async_exit_status); - unsigned long long now=monotonic_time(); - if (now > mmsd->t1 + mmsd->aws_aurora_check_timeout_ms * 1000) { - mmsd->mysql_error_msg=strdup("timeout check"); - proxy_error("Timeout on AWS Aurora health check for %s:%d after %lldms. If the server is overload, increase mysql_aws_aurora_hostgroups.check_timeout_ms\n", mmsd->hostname, mmsd->port, (now-mmsd->t1)/1000); - goto __exit_monitor_aws_aurora_thread; - } - if (GloMyMon->shutdown==true) { - goto __fast_exit_monitor_aws_aurora_thread; // exit immediately - } - if ((mmsd->async_exit_status & MYSQL_WAIT_TIMEOUT) == 0) { - mmsd->async_exit_status=mysql_query_cont(&mmsd->interr, mmsd->mysql, mmsd->async_exit_status); - } - } - mmsd->async_exit_status=mysql_store_result_start(&mmsd->result,mmsd->mysql); - while (mmsd->async_exit_status) { - mmsd->async_exit_status=wait_for_mysql(mmsd->mysql, mmsd->async_exit_status); - unsigned long long now=monotonic_time(); - if (now > mmsd->t1 + mmsd->aws_aurora_check_timeout_ms * 1000) { - mmsd->mysql_error_msg=strdup("timeout check"); - proxy_error("Timeout on AWS Aurora health check for %s:%d after %lldms. If the server is overload, increase mysql_aws_aurora_hostgroups.check_timeout_ms\n", mmsd->hostname, mmsd->port, (now-mmsd->t1)/1000); - goto __exit_monitor_aws_aurora_thread; - } - if (GloMyMon->shutdown==true) { - goto __fast_exit_monitor_aws_aurora_thread; // exit immediately - } - if ((mmsd->async_exit_status & MYSQL_WAIT_TIMEOUT) == 0) { - mmsd->async_exit_status=mysql_store_result_cont(&mmsd->result, mmsd->mysql, mmsd->async_exit_status); - } - } - if (mmsd->interr) { // check failed - mmsd->mysql_error_msg=strdup(mysql_error(mmsd->mysql)); - MyHGM->p_update_mysql_error_counter(p_mysql_error_type::proxysql, mmsd->hostgroup_id, mmsd->hostname, mmsd->port, mysql_errno(mmsd->mysql)); - } - -__exit_monitor_aws_aurora_thread: - mmsd->t2=monotonic_time(); - { - // TODO : complete this - char buf[128]; - char *s=NULL; - int l=strlen(mmsd->hostname); - if (l<110) { - s=buf; - } else { - s=(char *)malloc(l+16); - } - sprintf(s,"%s:%d",mmsd->hostname,mmsd->port); - AWS_Aurora_status_entry *ase = new AWS_Aurora_status_entry(mmsd->t1, mmsd->t2-mmsd->t1, mmsd->mysql_error_msg); - if (mmsd->interr == 0 && mmsd->result) { - int num_fields=0; - num_fields = mysql_num_fields(mmsd->result); - if (num_fields!=5) { - proxy_error("Incorrect number of fields, please report a bug\n"); - } else { - MYSQL_ROW row; - while ((row = mysql_fetch_row(mmsd->result))) { - AWS_Aurora_replica_host_status_entry *arhse = new AWS_Aurora_replica_host_status_entry(row[0], row[1], row[2], row[3], row[4]); - ase->add_host_status(arhse); - } - } - mysql_free_result(mmsd->result); - mmsd->result=NULL; - } -//__end_process_aws_aurora_result: - if (mmsd->mysql_error_msg) { - } - unsigned long long time_now=realtime_time(); - time_now=time_now-(mmsd->t2 - start_time); - pthread_mutex_lock(&GloMyMon->aws_aurora_mutex); - //auto it = - // TODO : complete this - std::map::iterator it2; - it2 = GloMyMon->AWS_Aurora_Hosts_Map.find(s); - AWS_Aurora_monitor_node *node=NULL; - if (it2!=GloMyMon->AWS_Aurora_Hosts_Map.end()) { - node=it2->second; - node->add_entry(ase); - } else { - node = new AWS_Aurora_monitor_node(mmsd->hostname,mmsd->port,mmsd->writer_hostgroup); - node->add_entry(ase); - GloMyMon->AWS_Aurora_Hosts_Map.insert(std::make_pair(s,node)); - } - pthread_mutex_unlock(&GloMyMon->aws_aurora_mutex); - // clean up - if (l<110) { - } else { - free(s); - } - } - if (mmsd->interr) { // check failed - } else { - if (crc==false) { - if (mmsd->mysql) { - GloMyMon->My_Conn_Pool->put_connection(mmsd->hostname,mmsd->port,mmsd->mysql); - mmsd->mysql=NULL; - } - } - } -__fast_exit_monitor_aws_aurora_thread: - if (mmsd->mysql) { - // if we reached here we didn't put the connection back - if (mmsd->mysql_error_msg) { - mysql_close(mmsd->mysql); // if we reached here we should destroy it - mmsd->mysql=NULL; - } else { - if (crc) { - bool rc=mmsd->set_wait_timeout(); - if (rc) { - GloMyMon->My_Conn_Pool->put_connection(mmsd->hostname,mmsd->port,mmsd->mysql); - } else { - mysql_close(mmsd->mysql); // set_wait_timeout failed - } - mmsd->mysql=NULL; - } else { // really not sure how we reached here, drop it - mysql_close(mmsd->mysql); - mmsd->mysql=NULL; - } - } - } - delete mysql_thr; - return NULL; -} - unsigned int MySQL_Monitor::estimate_lag(char* server_id, AWS_Aurora_status_entry** aase, unsigned int idx, unsigned int add_lag_ms, unsigned int min_lag_ms, unsigned int lag_num_checks) { assert(aase); assert(server_id);