diff options
author | Oleksandr Byelkin <sanja@mariadb.com> | 2019-12-04 17:46:28 +0100 |
---|---|---|
committer | Oleksandr Byelkin <sanja@mariadb.com> | 2019-12-04 17:46:28 +0100 |
commit | 008ee867a4cc80e079bd2a8b7f8c8543d80c31f1 (patch) | |
tree | 9a971dca67c9edeabeb655b2275aea4b76729333 /sql/slave.cc | |
parent | 670c9a3a182cfc3a75bc8ed847cadb2931aaaec4 (diff) | |
parent | c9b9eb331570704d020fcc7c7894f19febe7f26d (diff) | |
download | mariadb-git-008ee867a4cc80e079bd2a8b7f8c8543d80c31f1.tar.gz |
Merge branch '10.2' into 10.3
Diffstat (limited to 'sql/slave.cc')
-rw-r--r-- | sql/slave.cc | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/sql/slave.cc b/sql/slave.cc index 7d0ce253976..ff48ee92e98 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -481,6 +481,9 @@ handle_slave_background(void *arg __attribute__((unused))) thd->store_globals(); thd->security_ctx->skip_grants(); thd->set_command(COM_DAEMON); +#ifdef WITH_WSREP + thd->variables.wsrep_on= 0; +#endif thd_proc_info(thd, "Loading slave GTID position from table"); if (rpl_load_gtid_slave_state(thd)) @@ -4656,6 +4659,9 @@ pthread_handler_t handle_slave_io(void *arg) } +#ifdef WITH_WSREP + thd->variables.wsrep_on= 0; +#endif if (DBUG_EVALUATE_IF("failed_slave_start", 1, 0) || repl_semisync_slave.slave_start(mi)) { @@ -7844,7 +7850,39 @@ err: sql_print_error("Error reading relay log event: %s", errmsg); DBUG_RETURN(0); } +#ifdef WITH_WSREP +enum Log_event_type wsrep_peak_event(rpl_group_info *rgi, ulonglong* event_size) +{ + enum Log_event_type ev_type; + + mysql_mutex_lock(&rgi->rli->data_lock); + + unsigned long long event_pos= rgi->event_relay_log_pos; + unsigned long long orig_future_pos= rgi->future_event_relay_log_pos; + unsigned long long future_pos= rgi->future_event_relay_log_pos; + + /* scan the log to read next event and we skip + annotate events. */ + do { + my_b_seek(rgi->rli->cur_log, future_pos); + rgi->rli->event_relay_log_pos= future_pos; + rgi->event_relay_log_pos= future_pos; + Log_event* ev= next_event(rgi, event_size); + ev_type= (ev) ? ev->get_type_code() : UNKNOWN_EVENT; + delete ev; + future_pos+= *event_size; + } while (ev_type == ANNOTATE_ROWS_EVENT); + + /* scan the log back and re-set the positions to original values */ + rgi->rli->event_relay_log_pos= event_pos; + rgi->event_relay_log_pos= event_pos; + my_b_seek(rgi->rli->cur_log, orig_future_pos); + + mysql_mutex_unlock(&rgi->rli->data_lock); + return ev_type; +} +#endif /* WITH_WSREP */ /* Rotate a relay log (this is used only by FLUSH LOGS; the automatic rotation because of size is simpler because when we do it we already have all relevant |