Commit 1dd3c8f8 authored by Sergei Golubchik's avatar Sergei Golubchik

Merge branch '10.1' into 10.2

parents 04677f44 45cabf10
...@@ -181,3 +181,6 @@ ERROR 70100: Query execution was interrupted (max_statement_time exceeded) ...@@ -181,3 +181,6 @@ ERROR 70100: Query execution was interrupted (max_statement_time exceeded)
set max_statement_time = 0; set max_statement_time = 0;
drop procedure pr; drop procedure pr;
drop table t1; drop table t1;
SET max_statement_time= 1;
CREATE TABLE t ENGINE=InnoDB SELECT * FROM seq_1_to_50000;
ERROR 70100: Query execution was interrupted (max_statement_time exceeded)
...@@ -32,7 +32,7 @@ PLUGIN_AUTHOR Sergei Golubchik ...@@ -32,7 +32,7 @@ PLUGIN_AUTHOR Sergei Golubchik
PLUGIN_DESCRIPTION Elliptic curve ED25519 based authentication PLUGIN_DESCRIPTION Elliptic curve ED25519 based authentication
PLUGIN_LICENSE GPL PLUGIN_LICENSE GPL
LOAD_OPTION ON LOAD_OPTION ON
PLUGIN_MATURITY Beta PLUGIN_MATURITY Stable
PLUGIN_AUTH_VERSION 1.0-alpha PLUGIN_AUTH_VERSION 1.0-alpha
create user test1@localhost identified via ed25519 using 'ZIgUREUg5PVgQ6LskhXmO+eZLS0nC8be6HPjYWR4YJY'; create user test1@localhost identified via ed25519 using 'ZIgUREUg5PVgQ6LskhXmO+eZLS0nC8be6HPjYWR4YJY';
show grants for test1@localhost; show grants for test1@localhost;
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
--source include/not_embedded.inc --source include/not_embedded.inc
--source include/have_innodb.inc --source include/have_innodb.inc
--source include/have_sequence.inc
--source include/not_valgrind.inc --source include/not_valgrind.inc
--echo --echo
...@@ -226,3 +227,10 @@ call pr(); ...@@ -226,3 +227,10 @@ call pr();
set max_statement_time = 0; set max_statement_time = 0;
drop procedure pr; drop procedure pr;
drop table t1; drop table t1;
#
# MDEV-16615 ASAN SEGV in handler::print_error or server crash after error upon CREATE TABLE
#
SET max_statement_time= 1;
--error ER_STATEMENT_TIMEOUT
CREATE TABLE t ENGINE=InnoDB SELECT * FROM seq_1_to_50000;
...@@ -101,7 +101,7 @@ maria_declare_plugin(ed25519) ...@@ -101,7 +101,7 @@ maria_declare_plugin(ed25519)
NULL, NULL,
NULL, NULL,
"1.0-alpha", "1.0-alpha",
MariaDB_PLUGIN_MATURITY_BETA MariaDB_PLUGIN_MATURITY_STABLE
} }
maria_declare_plugin_end; maria_declare_plugin_end;
......
...@@ -3418,8 +3418,8 @@ void handler::print_error(int error, myf errflag) ...@@ -3418,8 +3418,8 @@ void handler::print_error(int error, myf errflag)
break; break;
case HA_ERR_ABORTED_BY_USER: case HA_ERR_ABORTED_BY_USER:
{ {
DBUG_ASSERT(table->in_use->killed); DBUG_ASSERT(ha_thd()->killed);
table->in_use->send_kill_message(); ha_thd()->send_kill_message();
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
case HA_ERR_WRONG_MRG_TABLE_DEF: case HA_ERR_WRONG_MRG_TABLE_DEF:
......
...@@ -5809,8 +5809,6 @@ inline int handler::ha_ft_read(uchar *buf) ...@@ -5809,8 +5809,6 @@ inline int handler::ha_ft_read(uchar *buf)
inline int handler::ha_rnd_pos_by_record(uchar *buf) inline int handler::ha_rnd_pos_by_record(uchar *buf)
{ {
int error= rnd_pos_by_record(buf); int error= rnd_pos_by_record(buf);
if (!error)
update_rows_read();
table->status=error ? STATUS_NOT_FOUND: 0; table->status=error ? STATUS_NOT_FOUND: 0;
return error; return error;
} }
......
...@@ -30,6 +30,8 @@ ...@@ -30,6 +30,8 @@
#include <cstdio> #include <cstdio>
#include <cstdlib> #include <cstdlib>
#include <my_service_manager.h>
static char wsrep_defaults_file[FN_REFLEN * 2 + 10 + 30 + static char wsrep_defaults_file[FN_REFLEN * 2 + 10 + 30 +
sizeof(WSREP_SST_OPT_CONF) + sizeof(WSREP_SST_OPT_CONF) +
sizeof(WSREP_SST_OPT_CONF_SUFFIX) + sizeof(WSREP_SST_OPT_CONF_SUFFIX) +
...@@ -177,6 +179,9 @@ bool wsrep_before_SE() ...@@ -177,6 +179,9 @@ bool wsrep_before_SE()
static bool sst_complete = false; static bool sst_complete = false;
static bool sst_needed = false; static bool sst_needed = false;
#define WSREP_EXTEND_TIMEOUT_INTERVAL 30
#define WSREP_TIMEDWAIT_SECONDS 10
void wsrep_sst_grab () void wsrep_sst_grab ()
{ {
WSREP_INFO("wsrep_sst_grab()"); WSREP_INFO("wsrep_sst_grab()");
...@@ -188,11 +193,25 @@ void wsrep_sst_grab () ...@@ -188,11 +193,25 @@ void wsrep_sst_grab ()
// Wait for end of SST // Wait for end of SST
bool wsrep_sst_wait () bool wsrep_sst_wait ()
{ {
if (mysql_mutex_lock (&LOCK_wsrep_sst)) abort(); struct timespec wtime = {WSREP_TIMEDWAIT_SECONDS, 0};
uint32 total_wtime = 0;
if (mysql_mutex_lock (&LOCK_wsrep_sst))
abort();
WSREP_INFO("Waiting for SST to complete.");
while (!sst_complete) while (!sst_complete)
{ {
WSREP_INFO("Waiting for SST to complete."); mysql_cond_timedwait (&COND_wsrep_sst, &LOCK_wsrep_sst, &wtime);
mysql_cond_wait (&COND_wsrep_sst, &LOCK_wsrep_sst);
if (!sst_complete)
{
total_wtime += wtime.tv_sec;
WSREP_DEBUG("Waiting for SST to complete. waited %u secs.", total_wtime);
service_manager_extend_timeout(WSREP_EXTEND_TIMEOUT_INTERVAL,
"WSREP state transfer ongoing, current seqno: %ld", local_seqno);
}
} }
if (local_seqno >= 0) if (local_seqno >= 0)
...@@ -1347,10 +1366,22 @@ void wsrep_SE_init_grab() ...@@ -1347,10 +1366,22 @@ void wsrep_SE_init_grab()
void wsrep_SE_init_wait() void wsrep_SE_init_wait()
{ {
struct timespec wtime = {WSREP_TIMEDWAIT_SECONDS, 0};
uint32 total_wtime=0;
while (SE_initialized == false) while (SE_initialized == false)
{ {
mysql_cond_wait (&COND_wsrep_sst_init, &LOCK_wsrep_sst_init); mysql_cond_timedwait (&COND_wsrep_sst_init, &LOCK_wsrep_sst_init, &wtime);
if (!SE_initialized)
{
total_wtime += wtime.tv_sec;
WSREP_DEBUG("Waiting for SST to complete. waited %u secs.", total_wtime);
service_manager_extend_timeout(WSREP_EXTEND_TIMEOUT_INTERVAL,
"WSREP SE initialization ongoing.");
}
} }
mysql_mutex_unlock (&LOCK_wsrep_sst_init); mysql_mutex_unlock (&LOCK_wsrep_sst_init);
} }
......
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