diff --git a/server/modules/monitor/galeramon.c b/server/modules/monitor/galeramon.c index 2e3dd4ddd..8e7e7e24b 100644 --- a/server/modules/monitor/galeramon.c +++ b/server/modules/monitor/galeramon.c @@ -285,19 +285,9 @@ monitorDatabase(MONITOR *mon, MONITOR_SERVERS *database) MYSQL_ROW row; MYSQL_RES *result,*result2; int isjoined = 0; -char *uname = mon->user; -char *passwd = mon->password; unsigned long int server_version = 0; char *server_string; - if (database->server->monuser != NULL) - { - uname = database->server->monuser; - passwd = database->server->monpw; - } - if (uname == NULL) - return; - /* Don't even probe server flagged as in maintenance */ if (SERVER_IN_MAINT(database->server)) return; @@ -305,60 +295,35 @@ char *server_string; /** Store previous status */ database->mon_prev_status = database->server->status; - if (database->con == NULL || mysql_ping(database->con) != 0) - { - char *dpwd = decryptPassword(passwd); - int connect_timeout = mon->connect_timeout; - int read_timeout = mon->read_timeout; - int write_timeout = mon->write_timeout; + server_clear_status(database->server, SERVER_RUNNING); - if(database->con) - mysql_close(database->con); - database->con = mysql_init(NULL); + /* Also clear Joined, M/S and Stickiness bits */ + server_clear_status(database->server, SERVER_JOINED); + server_clear_status(database->server, SERVER_SLAVE); + server_clear_status(database->server, SERVER_MASTER); + server_clear_status(database->server, SERVER_MASTER_STICKINESS); - mysql_options(database->con, MYSQL_OPT_CONNECT_TIMEOUT, (void *)&connect_timeout); - mysql_options(database->con, MYSQL_OPT_READ_TIMEOUT, (void *)&read_timeout); - mysql_options(database->con, MYSQL_OPT_WRITE_TIMEOUT, (void *)&write_timeout); + connect_result_t rval = mon_connect_to_db(mon, database); + if (rval != MONITOR_CONN_OK) + { + if (mysql_errno(database->con) == ER_ACCESS_DENIED_ERROR) + { + server_set_status(database->server, SERVER_AUTH_ERROR); + } + else + { + server_clear_status(database->server, SERVER_AUTH_ERROR); + } - if (mysql_real_connect(database->con, database->server->name, - uname, dpwd, NULL, database->server->port, NULL, 0) == NULL) - { - free(dpwd); + database->server->node_id = -1; - server_clear_status(database->server, SERVER_RUNNING); + if (mon_status_changed(database) && mon_print_fail_status(database)) + { + mon_log_connect_error(database, rval); + } - /* Also clear Joined, M/S and Stickiness bits */ - server_clear_status(database->server, SERVER_JOINED); - server_clear_status(database->server, SERVER_SLAVE); - server_clear_status(database->server, SERVER_MASTER); - server_clear_status(database->server, SERVER_MASTER_STICKINESS); - - if (mysql_errno(database->con) == ER_ACCESS_DENIED_ERROR) - { - server_set_status(database->server, SERVER_AUTH_ERROR); - } - - database->server->node_id = -1; - - if (mon_status_changed(database) && mon_print_fail_status(database)) - { - LOGIF(LE, (skygw_log_write_flush( - LOGFILE_ERROR, - "Error : Monitor was unable to connect to " - "server %s:%d : \"%s\"", - database->server->name, - database->server->port, - mysql_error(database->con)))); - } - - return; - } - else - { - server_clear_status(database->server, SERVER_AUTH_ERROR); - } - free(dpwd); - } + return; + } /* If we get this far then we have a working connection */ server_set_status(database->server, SERVER_RUNNING); diff --git a/server/modules/monitor/mmmon.c b/server/modules/monitor/mmmon.c index 248fb92fd..3bbb3c588 100644 --- a/server/modules/monitor/mmmon.c +++ b/server/modules/monitor/mmmon.c @@ -260,95 +260,54 @@ char *sep; static void monitorDatabase(MONITOR* mon, MONITOR_SERVERS *database) { - MM_MONITOR *handle = mon->handle; MYSQL_ROW row; MYSQL_RES *result; int isslave = 0; int ismaster = 0; -char *uname = mon->user; -char *passwd = mon->password; unsigned long int server_version = 0; char *server_string; - if (database->server->monuser != NULL) - { - uname = database->server->monuser; - passwd = database->server->monpw; - } - - if (uname == NULL) - return; - - /* Don't probe servers in maintenance mode */ - if (SERVER_IN_MAINT(database->server)) - return; + /* Don't probe servers in maintenance mode */ + if (SERVER_IN_MAINT(database->server)) + return; - /** Store previous status */ - database->mon_prev_status = database->server->status; - - if (database->con == NULL || mysql_ping(database->con) != 0) - { - char *dpwd = decryptPassword(passwd); - int read_timeout = 1; - if(database->con) - mysql_close(database->con); - database->con = mysql_init(NULL); + /** Store previous status */ + database->mon_prev_status = database->server->status; + connect_result_t rval = mon_connect_to_db(mon, database); - mysql_options(database->con, MYSQL_OPT_READ_TIMEOUT, (void *)&read_timeout); - - if (mysql_real_connect(database->con, - database->server->name, - uname, - dpwd, - NULL, - database->server->port, - NULL, - 0) == NULL) - { - free(dpwd); - - if (mon_print_fail_status(database)) - { - LOGIF(LE, (skygw_log_write_flush( - LOGFILE_ERROR, - "Error : Monitor was unable to connect to " - "server %s:%d : \"%s\"", - database->server->name, - database->server->port, - mysql_error(database->con)))); - } + if (rval != MONITOR_CONN_OK) + { + if (mysql_errno(database->con) == ER_ACCESS_DENIED_ERROR) + { + server_set_status(database->server, SERVER_AUTH_ERROR); + monitor_set_pending_status(database, SERVER_AUTH_ERROR); + } + server_clear_status(database->server, SERVER_RUNNING); + monitor_clear_pending_status(database, SERVER_RUNNING); - /* The current server is not running - * - * Store server NOT running in server and monitor server pending struct - * - */ - if (mysql_errno(database->con) == ER_ACCESS_DENIED_ERROR) - { - server_set_status(database->server, SERVER_AUTH_ERROR); - monitor_set_pending_status(database, SERVER_AUTH_ERROR); - } - server_clear_status(database->server, SERVER_RUNNING); - monitor_clear_pending_status(database, SERVER_RUNNING); + /* Also clear M/S state in both server and monitor server pending struct */ + server_clear_status(database->server, SERVER_SLAVE); + server_clear_status(database->server, SERVER_MASTER); + monitor_clear_pending_status(database, SERVER_SLAVE); + monitor_clear_pending_status(database, SERVER_MASTER); - /* Also clear M/S state in both server and monitor server pending struct */ - server_clear_status(database->server, SERVER_SLAVE); - server_clear_status(database->server, SERVER_MASTER); - monitor_clear_pending_status(database, SERVER_SLAVE); - monitor_clear_pending_status(database, SERVER_MASTER); + /* Clean addition status too */ + server_clear_status(database->server, SERVER_STALE_STATUS); + monitor_clear_pending_status(database, SERVER_STALE_STATUS); - /* Clean addition status too */ - server_clear_status(database->server, SERVER_STALE_STATUS); - monitor_clear_pending_status(database, SERVER_STALE_STATUS); + if (mon_status_changed(database) && mon_print_fail_status(database)) + { + mon_log_connect_error(database, rval); + } + return; + } + else + { + server_clear_status(database->server, SERVER_AUTH_ERROR); + monitor_clear_pending_status(database, SERVER_AUTH_ERROR); + } - return; - } else { - server_clear_status(database->server, SERVER_AUTH_ERROR); - monitor_clear_pending_status(database, SERVER_AUTH_ERROR); - } - free(dpwd); - } - /* Store current status in both server and monitor server pending struct */ + /* Store current status in both server and monitor server pending struct */ server_set_status(database->server, SERVER_RUNNING); monitor_set_pending_status(database, SERVER_RUNNING); diff --git a/server/modules/monitor/ndbclustermon.c b/server/modules/monitor/ndbclustermon.c index a5d0b2455..d3cb40db3 100644 --- a/server/modules/monitor/ndbclustermon.c +++ b/server/modules/monitor/ndbclustermon.c @@ -248,66 +248,35 @@ char *sep; static void monitorDatabase(MONITOR_SERVERS *database, char *defaultUser, char *defaultPasswd, MONITOR *mon) { - MYSQL_MONITOR* handle = mon->handle; MYSQL_ROW row; MYSQL_RES *result; int isjoined = 0; -char *uname = defaultUser, *passwd = defaultPasswd; char *server_string; - if (database->server->monuser != NULL) - { - uname = database->server->monuser; - passwd = database->server->monpw; - } - if (uname == NULL) - return; + /* Don't even probe server flagged as in maintenance */ + if (SERVER_IN_MAINT(database->server)) + return; - /* Don't even probe server flagged as in maintenance */ - if (SERVER_IN_MAINT(database->server)) - return; + connect_result_t rval = mon_connect_to_db(mon, database); + if (rval != MONITOR_CONN_OK) + { + server_clear_status(database->server, SERVER_RUNNING); - if (database->con == NULL || mysql_ping(database->con) != 0) - { - char *dpwd = decryptPassword(passwd); - int connect_timeout = mon->connect_timeout; - int read_timeout = mon->read_timeout; - int write_timeout = mon->write_timeout; + if (mysql_errno(database->con) == ER_ACCESS_DENIED_ERROR) + { + server_set_status(database->server, SERVER_AUTH_ERROR); + } - if(database->con) - mysql_close(database->con); - database->con = mysql_init(NULL); + database->server->node_id = -1; - mysql_options(database->con, MYSQL_OPT_CONNECT_TIMEOUT, (void *)&connect_timeout); - mysql_options(database->con, MYSQL_OPT_READ_TIMEOUT, (void *)&read_timeout); - mysql_options(database->con, MYSQL_OPT_WRITE_TIMEOUT, (void *)&write_timeout); - - if (mysql_real_connect(database->con, database->server->name, - uname, dpwd, NULL, database->server->port, NULL, 0) == NULL) - { - LOGIF(LE, (skygw_log_write_flush( - LOGFILE_ERROR, - "Error : Monitor was unable to connect to " - "server %s:%d : \"%s\"", - database->server->name, - database->server->port, - mysql_error(database->con)))); - server_clear_status(database->server, SERVER_RUNNING); - if (mysql_errno(database->con) == ER_ACCESS_DENIED_ERROR) - { - server_set_status(database->server, SERVER_AUTH_ERROR); - } - database->server->node_id = -1; - free(dpwd); - return; - } - else - { - server_clear_status(database->server, SERVER_AUTH_ERROR); - } - free(dpwd); - } + if (mon_status_changed(database) && mon_print_fail_status(database)) + { + mon_log_connect_error(database, rval); + } + return; + } + server_clear_status(database->server, SERVER_AUTH_ERROR); /* If we get this far then we have a working connection */ server_set_status(database->server, SERVER_RUNNING);