diff options
Diffstat (limited to 'sql/wsrep_mysqld.cc')
-rw-r--r-- | sql/wsrep_mysqld.cc | 43 |
1 files changed, 29 insertions, 14 deletions
diff --git a/sql/wsrep_mysqld.cc b/sql/wsrep_mysqld.cc index 4b1fe3cc2d9..a9fe5f86445 100644 --- a/sql/wsrep_mysqld.cc +++ b/sql/wsrep_mysqld.cc @@ -64,10 +64,10 @@ ulong wsrep_mysql_replication_bundle = 0; my_bool wsrep_desync = 0; // desynchronize the node from the // cluster my_bool wsrep_load_data_splitting = 1; // commit load data every 10K intervals -my_bool wsrep_restart_slave = 0; // should mysql slave thread be +my_bool wsrep_restart_slave = 0; // should mysql slave thread be // restarted, if node joins back -my_bool wsrep_restart_slave_activated = 0; // node has dropped, and slave - // restart will be needed +my_bool wsrep_restart_slave_activated = 0; // node has dropped, and slave + // restart will be needed /* * End configuration options */ @@ -433,9 +433,22 @@ static void wsrep_synced_cb(void* app_ctx) } if (wsrep_restart_slave_activated) { + int rcode; WSREP_INFO("MySQL slave restart"); wsrep_restart_slave_activated= FALSE; - init_slave(); + + mysql_mutex_lock(&LOCK_active_mi); + if ((rcode = start_slave_threads(1 /* need mutex */, + 0 /* no wait for start*/, + active_mi, + master_info_file, + relay_log_info_file, + SLAVE_SQL))) + { + WSREP_WARN("Failed to create slave threads: %d", rcode); + } + mysql_mutex_unlock(&LOCK_active_mi); + } } @@ -526,6 +539,7 @@ int wsrep_init() { DBUG_PRINT("wsrep",("wsrep::init() failed: %d", rcode)); WSREP_ERROR("wsrep::init() failed: %d, must shutdown", rcode); + wsrep->free(wsrep); free(wsrep); wsrep = NULL; } @@ -670,6 +684,7 @@ int wsrep_init() { DBUG_PRINT("wsrep",("wsrep::init() failed: %d", rcode)); WSREP_ERROR("wsrep::init() failed: %d, must shutdown", rcode); + wsrep->free(wsrep); free(wsrep); wsrep = NULL; } else { @@ -1214,7 +1229,7 @@ create_view_query(THD *thd, uchar** buf, size_t* buf_len) } buff.append(STRING_WITH_LEN(" AS ")); //buff.append(views->source.str, views->source.length); - buff.append(thd->lex->create_view_select.str, + buff.append(thd->lex->create_view_select.str, thd->lex->create_view_select.length); //int errcode= query_error_code(thd, TRUE); //if (thd->binlog_query(THD::STMT_QUERY_TYPE, @@ -1223,7 +1238,7 @@ create_view_query(THD *thd, uchar** buf, size_t* buf_len) } static int wsrep_TOI_begin(THD *thd, char *db_, char *table_, - const TABLE_LIST* table_list) + const TABLE_LIST* table_list) { wsrep_status_t ret(WSREP_WARNING); uchar* buf(0); @@ -1248,7 +1263,7 @@ static int wsrep_TOI_begin(THD *thd, char *db_, char *table_, buf_err= wsrep_create_event_query(thd, &buf, &buf_len); break; default: - buf_err= wsrep_to_buf_helper(thd, thd->query(), thd->query_length(), &buf, + buf_err= wsrep_to_buf_helper(thd, thd->query(), thd->query_length(), &buf, &buf_len); break; } @@ -1298,7 +1313,7 @@ static void wsrep_TOI_end(THD *thd) { } } -static int wsrep_RSU_begin(THD *thd, char *db_, char *table_) +static int wsrep_RSU_begin(THD *thd, char *db_, char *table_) { wsrep_status_t ret(WSREP_WARNING); WSREP_DEBUG("RSU BEGIN: %lld, %d : %s", (long long)wsrep_thd_trx_seqno(thd), @@ -1380,9 +1395,9 @@ int wsrep_to_isolation_begin(THD *thd, char *db_, char *table_, int ret= 0; mysql_mutex_lock(&thd->LOCK_wsrep_thd); - if (thd->wsrep_conflict_state == MUST_ABORT) + if (thd->wsrep_conflict_state == MUST_ABORT) { - WSREP_INFO("thread: %lu, %s has been aborted due to multi-master conflict", + WSREP_INFO("thread: %lu, %s has been aborted due to multi-master conflict", thd->thread_id, thd->query()); mysql_mutex_unlock(&thd->LOCK_wsrep_thd); return WSREP_TRX_FAIL; @@ -1401,7 +1416,7 @@ int wsrep_to_isolation_begin(THD *thd, char *db_, char *table_, if (wsrep_debug && thd->mdl_context.has_locks()) { - WSREP_DEBUG("thread holds MDL locks at TI begin: %s %lu", + WSREP_DEBUG("thread holds MDL locks at TI begin: %s %lu", thd->query(), thd->thread_id); } @@ -1493,7 +1508,7 @@ wsrep_grant_mdl_exception(MDL_context *requestor_ctx, mysql_mutex_unlock(&granted_thd->LOCK_wsrep_thd); ret = TRUE; } - else if (request_thd->lex->sql_command == SQLCOM_DROP_TABLE) + else if (request_thd->lex->sql_command == SQLCOM_DROP_TABLE) { WSREP_DEBUG("DROP caused BF abort"); ticket->wsrep_report(wsrep_debug); @@ -1501,7 +1516,7 @@ wsrep_grant_mdl_exception(MDL_context *requestor_ctx, wsrep_abort_thd((void*)request_thd, (void*)granted_thd, 1); ret = FALSE; } - else if (granted_thd->wsrep_query_state == QUERY_COMMITTING) + else if (granted_thd->wsrep_query_state == QUERY_COMMITTING) { WSREP_DEBUG("mdl granted, but commiting thd abort scheduled"); ticket->wsrep_report(wsrep_debug); @@ -1509,7 +1524,7 @@ wsrep_grant_mdl_exception(MDL_context *requestor_ctx, wsrep_abort_thd((void*)request_thd, (void*)granted_thd, 1); ret = FALSE; } - else + else { WSREP_MDL_LOG(DEBUG, "MDL conflict-> BF abort", request_thd, granted_thd); ticket->wsrep_report(wsrep_debug); |