From 8b59af4ef299c9d071ca883ecf7463c1593f8b85 Mon Sep 17 00:00:00 2001 From: Valentin Rakush Date: Mon, 20 Jan 2020 17:41:04 +0000 Subject: [PATCH] Host goes offline if maint_mode is true --- lib/MySQL_Monitor.cpp | 64 ++++++++++++++++++++++-------------------- src/SQLite3_Server.cpp | 5 ---- 2 files changed, 33 insertions(+), 36 deletions(-) diff --git a/lib/MySQL_Monitor.cpp b/lib/MySQL_Monitor.cpp index c0337a1c2..0ce5f55dc 100644 --- a/lib/MySQL_Monitor.cpp +++ b/lib/MySQL_Monitor.cpp @@ -1716,16 +1716,13 @@ __exit_monitor_galera_thread: if (row[7]) { std::string s(row[7]); std::transform(s.begin(), s.end(), s.begin(), ::toupper); - if (!strncmp("DISABLED",s.c_str(),8)) + if (!strncmp("DISABLED",s.c_str(),8)) { pxc_maint_mode=false; - else if (!strncmp("ENABLED",s.c_str(),7)) - pxc_maint_mode=true; + } else { - proxy_error("Wrong value for pxc_maint_mode %s\n", row[7]); - pxc_maint_mode=false; + pxc_maint_mode=true; } } - proxy_warning("TRACE : wsrep_local_state [%d], pxc_maint_mode %d\n", wsrep_local_state, pxc_maint_mode); mysql_free_result(mmsd->result); mmsd->result=NULL; } @@ -1810,37 +1807,42 @@ __end_process_galera_result: } } else { if (fields) { // if we didn't get any error, but fileds is NULL, we are likely hitting bug #1994 - if (primary_partition == false || wsrep_desync == true || wsrep_local_state!=4) { - if (primary_partition == false) { - MyHGM->update_galera_set_offline(mmsd->hostname, mmsd->port, mmsd->writer_hostgroup, (char *)"primary_partition=NO"); - } else { - if (wsrep_desync == true) { - MyHGM->update_galera_set_offline(mmsd->hostname, mmsd->port, mmsd->writer_hostgroup, (char *)"wsrep_desync=YES"); + if (pxc_maint_mode) { + MyHGM->update_galera_set_offline(mmsd->hostname, mmsd->port, mmsd->writer_hostgroup, (char *)"pxc_maint_mode=YES"); + } + else { + if (primary_partition == false || wsrep_desync == true || wsrep_local_state!=4) { + if (primary_partition == false) { + MyHGM->update_galera_set_offline(mmsd->hostname, mmsd->port, mmsd->writer_hostgroup, (char *)"primary_partition=NO"); } else { - char msg[80]; - sprintf(msg,"wsrep_local_state=%d",wsrep_local_state); - MyHGM->update_galera_set_offline(mmsd->hostname, mmsd->port, mmsd->writer_hostgroup, msg); + if (wsrep_desync == true) { + MyHGM->update_galera_set_offline(mmsd->hostname, mmsd->port, mmsd->writer_hostgroup, (char *)"wsrep_desync=YES"); + } else { + char msg[80]; + sprintf(msg,"wsrep_local_state=%d",wsrep_local_state); + MyHGM->update_galera_set_offline(mmsd->hostname, mmsd->port, mmsd->writer_hostgroup, msg); + } } - } - } else { - //if (wsrep_sst_donor_rejects_queries || wsrep_reject_queries) { + } else { + //if (wsrep_sst_donor_rejects_queries || wsrep_reject_queries) { if (wsrep_reject_queries) { MyHGM->update_galera_set_offline(mmsd->hostname, mmsd->port, mmsd->writer_hostgroup, (char *)"wsrep_reject_queries=true"); - // } else { - // // wsrep_sst_donor_rejects_queries - // MyHGM->update_galera_set_offline(mmsd->hostname, mmsd->port, mmsd->writer_hostgroup, (char *)"wsrep_sst_donor_rejects_queries=true"); - // } - } else { - if (read_only==true) { - if (wsrep_local_recv_queue > mmsd->max_transactions_behind) { - MyHGM->update_galera_set_offline(mmsd->hostname, mmsd->port, mmsd->writer_hostgroup, (char *)"slave is lagging"); + // } else { + // // wsrep_sst_donor_rejects_queries + // MyHGM->update_galera_set_offline(mmsd->hostname, mmsd->port, mmsd->writer_hostgroup, (char *)"wsrep_sst_donor_rejects_queries=true"); + // } + } else { + if (read_only==true) { + if (wsrep_local_recv_queue > mmsd->max_transactions_behind) { + MyHGM->update_galera_set_offline(mmsd->hostname, mmsd->port, mmsd->writer_hostgroup, (char *)"slave is lagging"); + } else { + MyHGM->update_galera_set_read_only(mmsd->hostname, mmsd->port, mmsd->writer_hostgroup, (char *)"read_only=YES"); + } } else { - MyHGM->update_galera_set_read_only(mmsd->hostname, mmsd->port, mmsd->writer_hostgroup, (char *)"read_only=YES"); + // the node is a writer + // TODO: for now we don't care about the number of writers + MyHGM->update_galera_set_writer(mmsd->hostname, mmsd->port, mmsd->writer_hostgroup); } - } else { - // the node is a writer - // TODO: for now we don't care about the number of writers - MyHGM->update_galera_set_writer(mmsd->hostname, mmsd->port, mmsd->writer_hostgroup); } } } diff --git a/src/SQLite3_Server.cpp b/src/SQLite3_Server.cpp index 397c533ce..07d127562 100644 --- a/src/SQLite3_Server.cpp +++ b/src/SQLite3_Server.cpp @@ -956,7 +956,6 @@ SQLite3_Server::SQLite3_Server() { #ifdef TEST_GALERA void SQLite3_Server::populate_galera_table(MySQL_Session *sess) { // this function needs to be called with lock on mutex galera_mutex already acquired - proxy_warning("TRACE : populate galera table\n"); sessdb->execute("BEGIN TRANSACTION"); char *error=NULL; int cols=0; @@ -970,9 +969,7 @@ void SQLite3_Server::populate_galera_table(MySQL_Session *sess) { int hg_id = 2270+(cluster_id*10)+1; char buf[1024]; sprintf(buf, (char *)"SELECT * FROM HOST_STATUS_GALERA WHERE hostgroup_id = %d LIMIT 1", hg_id); - proxy_warning("TRACE : buf %s\n", buf); sessdb->execute_statement(buf, &error , &cols , &affected_rows , &resultset); - proxy_warning("TRACE : count %d\n", resultset->rows_count); if (resultset->rows_count==0) { //sessdb->execute("DELETE FROM HOST_STATUS_GALERA"); sqlite3_stmt *statement=NULL; @@ -981,7 +978,6 @@ void SQLite3_Server::populate_galera_table(MySQL_Session *sess) { //rc=sqlite3_prepare_v2(mydb3, query, -1, &statement, 0); rc = sessdb->prepare_v2(query, &statement); ASSERT_SQLITE_OK(rc, sessdb); - proxy_warning("TRACE : num servers%d\n", num_galera_servers[cluster_id]); for (unsigned int i=0; i