Commit 15b691b7 authored by Marko Mäkelä's avatar Marko Mäkelä

After-merge fix f84e28c1

In a rebase of the merge, two preceding commits were accidentally reverted:
commit 112b2396 (MDEV-26308)
commit ac2857a5 (MDEV-25717)

Thanks to Daniele Sciascia for noticing this.
parent 8958f05e
...@@ -7,8 +7,9 @@ connection node_1; ...@@ -7,8 +7,9 @@ connection node_1;
connection node_2; connection node_2;
Killing server ... Killing server ...
connection node_1; connection node_1;
SET SESSION lock_wait_timeout= 3;
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction ERROR HY000: Lock wait timeout exceeded; try restarting transaction
connection node_2; connection node_2;
connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2; connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2;
disconnect node_2; disconnect node_2;
......
...@@ -22,7 +22,8 @@ call mtr.add_suppression("WSREP: TO isolation failed for: "); ...@@ -22,7 +22,8 @@ call mtr.add_suppression("WSREP: TO isolation failed for: ");
--source include/kill_galera.inc --source include/kill_galera.inc
--connection node_1 --connection node_1
--error ER_LOCK_DEADLOCK SET SESSION lock_wait_timeout= 3;
--error ER_LOCK_WAIT_TIMEOUT
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
# Reset the master and restart the slave so that post-test checks can run # Reset the master and restart the slave so that post-test checks can run
......
/* Copyright (c) 2000, 2016, Oracle and/or its affiliates. /* Copyright (c) 2000, 2016, Oracle and/or its affiliates.
Copyright (c) 2009, 2020, MariaDB Corporation. Copyright (c) 2009, 2021, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -1946,7 +1946,7 @@ int ha_rollback_trans(THD *thd, bool all) ...@@ -1946,7 +1946,7 @@ int ha_rollback_trans(THD *thd, bool all)
if (thd->is_error()) if (thd->is_error())
{ {
WSREP_DEBUG("ha_rollback_trans(%lld, %s) rolled back: %s: %s; is_real %d", WSREP_DEBUG("ha_rollback_trans(%lld, %s) rolled back: %s: %s; is_real %d",
thd->thread_id, all?"TRUE":"FALSE", WSREP_QUERY(thd), thd->thread_id, all?"TRUE":"FALSE", wsrep_thd_query(thd),
thd->get_stmt_da()->message(), is_real_trans); thd->get_stmt_da()->message(), is_real_trans);
} }
(void) wsrep_after_rollback(thd, all); (void) wsrep_after_rollback(thd, all);
......
/* /*
Copyright (c) 2000, 2016, Oracle and/or its affiliates. Copyright (c) 2000, 2016, Oracle and/or its affiliates.
Copyright (c) 2010, 2019, MariaDB Corporation Copyright (c) 2010, 2021, MariaDB Corporation
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -4782,7 +4782,7 @@ bool select_create::send_eof() ...@@ -4782,7 +4782,7 @@ bool select_create::send_eof()
{ {
WSREP_DEBUG("select_create commit failed, thd: %llu err: %s %s", WSREP_DEBUG("select_create commit failed, thd: %llu err: %s %s",
thd->thread_id, thd->thread_id,
wsrep_thd_transaction_state_str(thd), WSREP_QUERY(thd)); wsrep_thd_transaction_state_str(thd), wsrep_thd_query(thd));
mysql_mutex_unlock(&thd->LOCK_thd_data); mysql_mutex_unlock(&thd->LOCK_thd_data);
abort_result_set(); abort_result_set();
DBUG_RETURN(true); DBUG_RETURN(true);
......
...@@ -7845,7 +7845,7 @@ static bool wsrep_mysql_parse(THD *thd, char *rawbuf, uint length, ...@@ -7845,7 +7845,7 @@ static bool wsrep_mysql_parse(THD *thd, char *rawbuf, uint length,
DBUG_ASSERT(!debug_sync_set_action(thd, STRING_WITH_LEN(act))); DBUG_ASSERT(!debug_sync_set_action(thd, STRING_WITH_LEN(act)));
}); });
WSREP_DEBUG("wsrep retrying AC query: %lu %s", WSREP_DEBUG("wsrep retrying AC query: %lu %s",
thd->wsrep_retry_counter, WSREP_QUERY(thd)); thd->wsrep_retry_counter, wsrep_thd_query(thd));
wsrep_prepare_for_autocommit_retry(thd, rawbuf, length, parser_state); wsrep_prepare_for_autocommit_retry(thd, rawbuf, length, parser_state);
if (thd->lex->explain) if (thd->lex->explain)
delete_explain_query(thd->lex); delete_explain_query(thd->lex);
...@@ -7859,7 +7859,7 @@ static bool wsrep_mysql_parse(THD *thd, char *rawbuf, uint length, ...@@ -7859,7 +7859,7 @@ static bool wsrep_mysql_parse(THD *thd, char *rawbuf, uint length,
is_autocommit, is_autocommit,
thd->wsrep_retry_counter, thd->wsrep_retry_counter,
thd->variables.wsrep_retry_autocommit, thd->variables.wsrep_retry_autocommit,
WSREP_QUERY(thd)); wsrep_thd_query(thd));
my_error(ER_LOCK_DEADLOCK, MYF(0)); my_error(ER_LOCK_DEADLOCK, MYF(0));
thd->reset_kill_query(); thd->reset_kill_query();
thd->wsrep_retry_counter= 0; // reset thd->wsrep_retry_counter= 0; // reset
......
/* Copyright 2018 Codership Oy <info@codership.com> /* Copyright 2018-2021 Codership Oy <info@codership.com>
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -109,14 +109,14 @@ int Wsrep_client_service::prepare_data_for_replication() ...@@ -109,14 +109,14 @@ int Wsrep_client_service::prepare_data_for_replication()
"affected rows: %llu, " "affected rows: %llu, "
"changed tables: %d, " "changed tables: %d, "
"sql_log_bin: %d", "sql_log_bin: %d",
WSREP_QUERY(m_thd), wsrep_thd_query(m_thd),
m_thd->get_stmt_da()->affected_rows(), m_thd->get_stmt_da()->affected_rows(),
stmt_has_updated_trans_table(m_thd), stmt_has_updated_trans_table(m_thd),
m_thd->variables.sql_log_bin); m_thd->variables.sql_log_bin);
} }
else else
{ {
WSREP_DEBUG("empty rbr buffer, query: %s", WSREP_QUERY(m_thd)); WSREP_DEBUG("empty rbr buffer, query: %s", wsrep_thd_query(m_thd));
} }
} }
DBUG_RETURN(0); DBUG_RETURN(0);
......
/* Copyright 2018 Codership Oy <info@codership.com> /* Copyright 2018-2021 Codership Oy <info@codership.com>
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -379,6 +379,16 @@ int Wsrep_high_priority_service::apply_toi(const wsrep::ws_meta& ws_meta, ...@@ -379,6 +379,16 @@ int Wsrep_high_priority_service::apply_toi(const wsrep::ws_meta& ws_meta,
WSREP_DEBUG("Wsrep_high_priority_service::apply_toi: %lld", WSREP_DEBUG("Wsrep_high_priority_service::apply_toi: %lld",
client_state.toi_meta().seqno().get()); client_state.toi_meta().seqno().get());
DBUG_EXECUTE_IF("sync.wsrep_apply_toi",
{
const char act[]=
"now "
"SIGNAL sync.wsrep_apply_toi_reached "
"WAIT_FOR signal.wsrep_apply_toi";
DBUG_ASSERT(!debug_sync_set_action(thd,
STRING_WITH_LEN(act)));
};);
int ret= wsrep_apply_events(thd, m_rli, data.data(), data.size()); int ret= wsrep_apply_events(thd, m_rli, data.data(), data.size());
if (ret != 0 || thd->wsrep_has_ignored_error) if (ret != 0 || thd->wsrep_has_ignored_error)
{ {
...@@ -427,6 +437,15 @@ int Wsrep_high_priority_service::log_dummy_write_set(const wsrep::ws_handle& ws_ ...@@ -427,6 +437,15 @@ int Wsrep_high_priority_service::log_dummy_write_set(const wsrep::ws_handle& ws_
DBUG_PRINT("info", DBUG_PRINT("info",
("Wsrep_high_priority_service::log_dummy_write_set: seqno=%lld", ("Wsrep_high_priority_service::log_dummy_write_set: seqno=%lld",
ws_meta.seqno().get())); ws_meta.seqno().get()));
DBUG_EXECUTE_IF("sync.wsrep_log_dummy_write_set",
{
const char act[]=
"now "
"SIGNAL sync.wsrep_log_dummy_write_set_reached ";
DBUG_ASSERT(!debug_sync_set_action(m_thd,
STRING_WITH_LEN(act)));
};);
if (ws_meta.ordered()) if (ws_meta.ordered())
{ {
wsrep::client_state& cs(m_thd->wsrep_cs()); wsrep::client_state& cs(m_thd->wsrep_cs());
...@@ -658,7 +677,7 @@ Wsrep_replayer_service::~Wsrep_replayer_service() ...@@ -658,7 +677,7 @@ Wsrep_replayer_service::~Wsrep_replayer_service()
DBUG_ASSERT(0); DBUG_ASSERT(0);
WSREP_ERROR("trx_replay failed for: %d, schema: %s, query: %s", WSREP_ERROR("trx_replay failed for: %d, schema: %s, query: %s",
m_replay_status, m_replay_status,
orig_thd->db.str, WSREP_QUERY(orig_thd)); orig_thd->db.str, wsrep_thd_query(orig_thd));
unireg_abort(1); unireg_abort(1);
} }
} }
......
/* Copyright 2008-2015 Codership Oy <http://www.codership.com> /* Copyright 2008-2021 Codership Oy <http://www.codership.com>
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -2008,10 +2008,10 @@ static int wsrep_TOI_begin(THD *thd, const char *db, const char *table, ...@@ -2008,10 +2008,10 @@ static int wsrep_TOI_begin(THD *thd, const char *db, const char *table,
{ {
DBUG_ASSERT(thd->variables.wsrep_OSU_method == WSREP_OSU_TOI); DBUG_ASSERT(thd->variables.wsrep_OSU_method == WSREP_OSU_TOI);
WSREP_DEBUG("TOI Begin for %s", WSREP_QUERY(thd)); WSREP_DEBUG("TOI Begin for %s", wsrep_thd_query(thd));
if (wsrep_can_run_in_toi(thd, db, table, table_list) == false) if (wsrep_can_run_in_toi(thd, db, table, table_list) == false)
{ {
WSREP_DEBUG("No TOI for %s", WSREP_QUERY(thd)); WSREP_DEBUG("No TOI for %s", wsrep_thd_query(thd));
return 1; return 1;
} }
...@@ -2039,7 +2039,7 @@ static int wsrep_TOI_begin(THD *thd, const char *db, const char *table, ...@@ -2039,7 +2039,7 @@ static int wsrep_TOI_begin(THD *thd, const char *db, const char *table,
/* non replicated DDL, affecting temporary tables only */ /* non replicated DDL, affecting temporary tables only */
WSREP_DEBUG("TO isolation skipped, sql: %s." WSREP_DEBUG("TO isolation skipped, sql: %s."
"Only temporary tables affected.", "Only temporary tables affected.",
WSREP_QUERY(thd)); wsrep_thd_query(thd));
if (buf) my_free(buf); if (buf) my_free(buf);
return -1; return -1;
} }
...@@ -2054,7 +2054,7 @@ static int wsrep_TOI_begin(THD *thd, const char *db, const char *table, ...@@ -2054,7 +2054,7 @@ static int wsrep_TOI_begin(THD *thd, const char *db, const char *table,
{ {
DBUG_ASSERT(cs.current_error()); DBUG_ASSERT(cs.current_error());
WSREP_DEBUG("to_execute_start() failed for %llu: %s, seqno: %lld", WSREP_DEBUG("to_execute_start() failed for %llu: %s, seqno: %lld",
thd->thread_id, WSREP_QUERY(thd), thd->thread_id, wsrep_thd_query(thd),
(long long)wsrep_thd_trx_seqno(thd)); (long long)wsrep_thd_trx_seqno(thd));
/* jump to error handler in mysql_execute_command() */ /* jump to error handler in mysql_execute_command() */
...@@ -2065,15 +2065,32 @@ static int wsrep_TOI_begin(THD *thd, const char *db, const char *table, ...@@ -2065,15 +2065,32 @@ static int wsrep_TOI_begin(THD *thd, const char *db, const char *table,
"Maximum size exceeded.", "Maximum size exceeded.",
ret, ret,
(thd->db.str ? thd->db.str : "(null)"), (thd->db.str ? thd->db.str : "(null)"),
WSREP_QUERY(thd)); wsrep_thd_query(thd));
my_error(ER_ERROR_DURING_COMMIT, MYF(0), WSREP_SIZE_EXCEEDED); my_error(ER_ERROR_DURING_COMMIT, MYF(0), WSREP_SIZE_EXCEEDED);
break; break;
case wsrep::e_deadlock_error:
WSREP_WARN("TO isolation failed for: %d, schema: %s, sql: %s. "
"Deadlock error.",
ret,
(thd->db.str ? thd->db.str : "(null)"),
wsrep_thd_query(thd));
my_error(ER_LOCK_DEADLOCK, MYF(0));
break;
case wsrep::e_timeout_error:
WSREP_WARN("TO isolation failed for: %d, schema: %s, sql: %s. "
"Operation timed out.",
ret,
(thd->db.str ? thd->db.str : "(null)"),
wsrep_thd_query(thd));
my_error(ER_LOCK_WAIT_TIMEOUT, MYF(0));
break;
default: default:
WSREP_WARN("TO isolation failed for: %d, schema: %s, sql: %s. " WSREP_WARN("TO isolation failed for: %d, schema: %s, sql: %s. "
"Check wsrep connection state and retry the query.", "Check your wsrep connection state and retry the query.",
ret, ret,
(thd->db.str ? thd->db.str : "(null)"), (thd->db.str ? thd->db.str : "(null)"),
WSREP_QUERY(thd)); wsrep_thd_query(thd));
if (!thd->is_error()) if (!thd->is_error())
{ {
my_error(ER_LOCK_DEADLOCK, MYF(0), "WSREP replication failed. Check " my_error(ER_LOCK_DEADLOCK, MYF(0), "WSREP replication failed. Check "
...@@ -2106,19 +2123,19 @@ static void wsrep_TOI_end(THD *thd) { ...@@ -2106,19 +2123,19 @@ static void wsrep_TOI_end(THD *thd) {
if (!ret) if (!ret)
{ {
WSREP_DEBUG("TO END: %lld: %s", WSREP_DEBUG("TO END: %lld: %s",
client_state.toi_meta().seqno().get(), WSREP_QUERY(thd)); client_state.toi_meta().seqno().get(), wsrep_thd_query(thd));
} }
else else
{ {
WSREP_WARN("TO isolation end failed for: %d, sql: %s", WSREP_WARN("TO isolation end failed for: %d, sql: %s",
ret, WSREP_QUERY(thd)); ret, wsrep_thd_query(thd));
} }
} }
static int wsrep_RSU_begin(THD *thd, const char *db_, const char *table_) static int wsrep_RSU_begin(THD *thd, const char *db_, const char *table_)
{ {
WSREP_DEBUG("RSU BEGIN: %lld, : %s", wsrep_thd_trx_seqno(thd), WSREP_DEBUG("RSU BEGIN: %lld, : %s", wsrep_thd_trx_seqno(thd),
WSREP_QUERY(thd)); wsrep_thd_query(thd));
if (thd->wsrep_cs().begin_rsu(5000)) if (thd->wsrep_cs().begin_rsu(5000))
{ {
WSREP_WARN("RSU begin failed"); WSREP_WARN("RSU begin failed");
...@@ -2133,7 +2150,7 @@ static int wsrep_RSU_begin(THD *thd, const char *db_, const char *table_) ...@@ -2133,7 +2150,7 @@ static int wsrep_RSU_begin(THD *thd, const char *db_, const char *table_)
static void wsrep_RSU_end(THD *thd) static void wsrep_RSU_end(THD *thd)
{ {
WSREP_DEBUG("RSU END: %lld : %s", wsrep_thd_trx_seqno(thd), WSREP_DEBUG("RSU END: %lld : %s", wsrep_thd_trx_seqno(thd),
WSREP_QUERY(thd)); wsrep_thd_query(thd));
if (thd->wsrep_cs().end_rsu()) if (thd->wsrep_cs().end_rsu())
{ {
WSREP_WARN("Failed to end RSU, server may need to be restarted"); WSREP_WARN("Failed to end RSU, server may need to be restarted");
...@@ -2175,7 +2192,7 @@ int wsrep_to_isolation_begin(THD *thd, const char *db_, const char *table_, ...@@ -2175,7 +2192,7 @@ int wsrep_to_isolation_begin(THD *thd, const char *db_, const char *table_,
if (wsrep_debug && thd->mdl_context.has_locks()) if (wsrep_debug && thd->mdl_context.has_locks())
{ {
WSREP_DEBUG("thread holds MDL locks at TI begin: %s %llu", WSREP_DEBUG("thread holds MDL locks at TI begin: %s %llu",
WSREP_QUERY(thd), thd->thread_id); wsrep_thd_query(thd), thd->thread_id);
} }
/* /*
...@@ -2191,13 +2208,6 @@ int wsrep_to_isolation_begin(THD *thd, const char *db_, const char *table_, ...@@ -2191,13 +2208,6 @@ int wsrep_to_isolation_begin(THD *thd, const char *db_, const char *table_,
thd->variables.auto_increment_increment= 1; thd->variables.auto_increment_increment= 1;
} }
/*
TOI operations will ignore provided lock_wait_timeout and restore it
after operation is done.
*/
thd->variables.saved_lock_wait_timeout= thd->variables.lock_wait_timeout;
thd->variables.lock_wait_timeout= LONG_TIMEOUT;
if (thd->variables.wsrep_on && wsrep_thd_is_local(thd)) if (thd->variables.wsrep_on && wsrep_thd_is_local(thd))
{ {
switch (thd->variables.wsrep_OSU_method) { switch (thd->variables.wsrep_OSU_method) {
...@@ -2213,8 +2223,19 @@ int wsrep_to_isolation_begin(THD *thd, const char *db_, const char *table_, ...@@ -2213,8 +2223,19 @@ int wsrep_to_isolation_begin(THD *thd, const char *db_, const char *table_,
ret= -1; ret= -1;
break; break;
} }
switch (ret) { switch (ret) {
case 0: /* wsrep_TOI_begin sould set toi mode */ break; case 0: /* wsrep_TOI_begin sould set toi mode */
if (thd->variables.wsrep_OSU_method == WSREP_OSU_TOI)
{
/*
TOI operations ignore the provided lock_wait_timeout once replicated,
and restore it after operation is done.
*/
thd->variables.saved_lock_wait_timeout= thd->variables.lock_wait_timeout;
thd->variables.lock_wait_timeout= LONG_TIMEOUT;
}
break;
case 1: case 1:
/* TOI replication skipped, treat as success */ /* TOI replication skipped, treat as success */
ret= 0; ret= 0;
...@@ -2233,10 +2254,9 @@ void wsrep_to_isolation_end(THD *thd) ...@@ -2233,10 +2254,9 @@ void wsrep_to_isolation_end(THD *thd)
DBUG_ASSERT(wsrep_thd_is_local_toi(thd) || DBUG_ASSERT(wsrep_thd_is_local_toi(thd) ||
wsrep_thd_is_in_rsu(thd)); wsrep_thd_is_in_rsu(thd));
thd->variables.lock_wait_timeout= thd->variables.saved_lock_wait_timeout;
if (wsrep_thd_is_local_toi(thd)) if (wsrep_thd_is_local_toi(thd))
{ {
thd->variables.lock_wait_timeout= thd->variables.saved_lock_wait_timeout;
DBUG_ASSERT(thd->variables.wsrep_OSU_method == WSREP_OSU_TOI); DBUG_ASSERT(thd->variables.wsrep_OSU_method == WSREP_OSU_TOI);
wsrep_TOI_end(thd); wsrep_TOI_end(thd);
} }
......
/* Copyright 2008-2017 Codership Oy <http://www.codership.com> /* Copyright 2008-2021 Codership Oy <http://www.codership.com>
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -289,8 +289,6 @@ static inline bool wsrep_cluster_address_exists() ...@@ -289,8 +289,6 @@ static inline bool wsrep_cluster_address_exists()
return wsrep_cluster_address && wsrep_cluster_address[0]; return wsrep_cluster_address && wsrep_cluster_address[0];
} }
#define WSREP_QUERY(thd) (thd->query())
extern my_bool wsrep_ready_get(); extern my_bool wsrep_ready_get();
extern void wsrep_ready_wait(); extern void wsrep_ready_wait();
......
...@@ -340,11 +340,20 @@ int wsrep_abort_thd(THD *bf_thd_ptr, THD *victim_thd_ptr, my_bool signal) ...@@ -340,11 +340,20 @@ int wsrep_abort_thd(THD *bf_thd_ptr, THD *victim_thd_ptr, my_bool signal)
DBUG_RETURN(1); DBUG_RETURN(1);
} }
bool wsrep_bf_abort(const THD* bf_thd, THD* victim_thd) bool wsrep_bf_abort(THD* bf_thd, THD* victim_thd)
{ {
WSREP_LOG_THD(bf_thd, "BF aborter before"); WSREP_LOG_THD(bf_thd, "BF aborter before");
WSREP_LOG_THD(victim_thd, "victim before"); WSREP_LOG_THD(victim_thd, "victim before");
wsrep::seqno bf_seqno(bf_thd->wsrep_trx().ws_meta().seqno());
DBUG_EXECUTE_IF("sync.wsrep_bf_abort",
{
const char act[]=
"now "
"SIGNAL sync.wsrep_bf_abort_reached "
"WAIT_FOR signal.wsrep_bf_abort";
DBUG_ASSERT(!debug_sync_set_action(bf_thd,
STRING_WITH_LEN(act)));
};);
if (WSREP(victim_thd) && !victim_thd->wsrep_trx().active()) if (WSREP(victim_thd) && !victim_thd->wsrep_trx().active())
{ {
...@@ -362,6 +371,8 @@ bool wsrep_bf_abort(const THD* bf_thd, THD* victim_thd) ...@@ -362,6 +371,8 @@ bool wsrep_bf_abort(const THD* bf_thd, THD* victim_thd)
} }
bool ret; bool ret;
wsrep::seqno bf_seqno(bf_thd->wsrep_trx().ws_meta().seqno());
if (wsrep_thd_is_toi(bf_thd)) if (wsrep_thd_is_toi(bf_thd))
{ {
ret= victim_thd->wsrep_cs().total_order_bf_abort(bf_seqno); ret= victim_thd->wsrep_cs().total_order_bf_abort(bf_seqno);
......
/* Copyright (C) 2013 Codership Oy <info@codership.com> /* Copyright (C) 2013-2021 Codership Oy <info@codership.com>
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -87,7 +87,7 @@ int wsrep_show_bf_aborts (THD *thd, SHOW_VAR *var, char *buff, ...@@ -87,7 +87,7 @@ int wsrep_show_bf_aborts (THD *thd, SHOW_VAR *var, char *buff,
bool wsrep_create_appliers(long threads, bool mutex_protected=false); bool wsrep_create_appliers(long threads, bool mutex_protected=false);
void wsrep_create_rollbacker(); void wsrep_create_rollbacker();
bool wsrep_bf_abort(const THD*, THD*); bool wsrep_bf_abort(THD* bf_thd, THD* victim_thd);
int wsrep_abort_thd(THD *bf_thd_ptr, THD *victim_thd_ptr, my_bool signal); int wsrep_abort_thd(THD *bf_thd_ptr, THD *victim_thd_ptr, my_bool signal);
extern void wsrep_thd_set_PA_safe(void *thd_ptr, my_bool safe); extern void wsrep_thd_set_PA_safe(void *thd_ptr, my_bool safe);
...@@ -292,7 +292,7 @@ static inline void wsrep_log_thd(const THD *thd, ...@@ -292,7 +292,7 @@ static inline void wsrep_log_thd(const THD *thd,
(thd->get_stmt_da()->is_error() ? thd->get_stmt_da()->message() : "") (thd->get_stmt_da()->is_error() ? thd->get_stmt_da()->message() : "")
#ifdef WSREP_THD_LOG_QUERIES #ifdef WSREP_THD_LOG_QUERIES
, thd->lex->sql_command, , thd->lex->sql_command,
WSREP_QUERY(thd) wsrep_thd_query(thd)
#endif /* WSREP_OBSERVER_LOG_QUERIES */ #endif /* WSREP_OBSERVER_LOG_QUERIES */
); );
} }
......
/* Copyright 2008-2015 Codership Oy <http://www.codership.com> /* Copyright 2008-2021 Codership Oy <http://www.codership.com>
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -794,7 +794,7 @@ bool wsrep_desync_check (sys_var *self, THD* thd, set_var* var) ...@@ -794,7 +794,7 @@ bool wsrep_desync_check (sys_var *self, THD* thd, set_var* var)
ret= Wsrep_server_state::instance().provider().desync(); ret= Wsrep_server_state::instance().provider().desync();
if (ret) { if (ret) {
WSREP_WARN ("SET desync failed %d for schema: %s, query: %s", ret, WSREP_WARN ("SET desync failed %d for schema: %s, query: %s", ret,
thd->db.str, WSREP_QUERY(thd)); thd->db.str, wsrep_thd_query(thd));
my_error (ER_CANNOT_USER, MYF(0), "'desync'", thd->query()); my_error (ER_CANNOT_USER, MYF(0), "'desync'", thd->query());
return true; return true;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment