Merge branch '10.1' into 10.2
This commit is contained in:
commit
28f08d3753
@ -569,12 +569,8 @@
|
||||
#cmakedefine WSREP_PROC_INFO 1
|
||||
#endif
|
||||
|
||||
#ifdef _AIX
|
||||
/*
|
||||
AIX includes inttypes.h from sys/types.h
|
||||
Explicitly request format macros before the first inclusion of inttypes.h
|
||||
*/
|
||||
#if !defined(__STDC_FORMAT_MACROS)
|
||||
#define __STDC_FORMAT_MACROS
|
||||
#endif
|
||||
#endif // !defined(__STDC_FORMAT_MACROS)
|
||||
|
||||
#endif
|
||||
|
@ -344,39 +344,39 @@ read_retry:
|
||||
page += page_size, i++) {
|
||||
ulint page_no = cursor->buf_page_no + i;
|
||||
|
||||
if (cursor->space_id == TRX_SYS_SPACE &&
|
||||
page_no >= FSP_EXTENT_SIZE &&
|
||||
page_no < FSP_EXTENT_SIZE * 3) {
|
||||
/* We ignore the doublewrite buffer pages */
|
||||
} else if (!fil_space_verify_crypt_checksum(
|
||||
page, cursor->page_size, space->id, page_no)
|
||||
&& buf_page_is_corrupted(true, page,
|
||||
cursor->page_size,
|
||||
space)) {
|
||||
retry_count--;
|
||||
if (retry_count == 0) {
|
||||
msg("[%02u] mariabackup: "
|
||||
"Error: failed to read page after "
|
||||
"10 retries. File %s seems to be "
|
||||
"corrupted.\n", cursor->thread_n,
|
||||
cursor->abs_path);
|
||||
ret = XB_FIL_CUR_ERROR;
|
||||
break;
|
||||
}
|
||||
if (cursor->space_id == TRX_SYS_SPACE &&
|
||||
page_no >= FSP_EXTENT_SIZE &&
|
||||
page_no < FSP_EXTENT_SIZE * 3) {
|
||||
/* We ignore the doublewrite buffer pages */
|
||||
} else if (!fil_space_verify_crypt_checksum(
|
||||
page, cursor->page_size, space->id, page_no)
|
||||
&& buf_page_is_corrupted(true, page,
|
||||
cursor->page_size,
|
||||
space)) {
|
||||
retry_count--;
|
||||
if (retry_count == 0) {
|
||||
msg("[%02u] mariabackup: "
|
||||
"Error: failed to read page after "
|
||||
"10 retries. File %s seems to be "
|
||||
"corrupted.\n", cursor->thread_n,
|
||||
cursor->abs_path);
|
||||
ret = XB_FIL_CUR_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
if (retry_count == 9) {
|
||||
msg("[%02u] mariabackup: "
|
||||
"Database page corruption detected at page "
|
||||
ULINTPF ", retrying...\n",
|
||||
cursor->thread_n, page_no);
|
||||
}
|
||||
if (retry_count == 9) {
|
||||
msg("[%02u] mariabackup: "
|
||||
"Database page corruption detected at page "
|
||||
ULINTPF ", retrying...\n",
|
||||
cursor->thread_n, page_no);
|
||||
}
|
||||
|
||||
os_thread_sleep(100000);
|
||||
os_thread_sleep(100000);
|
||||
|
||||
goto read_retry;
|
||||
}
|
||||
cursor->buf_read += page_size;
|
||||
cursor->buf_npages++;
|
||||
goto read_retry;
|
||||
}
|
||||
cursor->buf_read += page_size;
|
||||
cursor->buf_npages++;
|
||||
}
|
||||
|
||||
posix_fadvise(cursor->file, offset, to_read, POSIX_FADV_DONTNEED);
|
||||
|
@ -359,7 +359,7 @@ make_atomic_store(ptr)
|
||||
#define MY_ATOMIC_NOT_1CPU 1
|
||||
extern int my_atomic_initialize();
|
||||
|
||||
#ifdef __ATOMIC_SEQ_CST
|
||||
#ifdef HAVE_GCC_C11_ATOMICS
|
||||
#define MY_MEMORY_ORDER_RELAXED __ATOMIC_RELAXED
|
||||
#define MY_MEMORY_ORDER_CONSUME __ATOMIC_CONSUME
|
||||
#define MY_MEMORY_ORDER_ACQUIRE __ATOMIC_ACQUIRE
|
||||
|
@ -255,7 +255,9 @@
|
||||
AIX includes inttypes.h from sys/types.h
|
||||
Explicitly request format macros before the first inclusion of inttypes.h
|
||||
*/
|
||||
#define __STDC_FORMAT_MACROS
|
||||
#if !defined(__STDC_FORMAT_MACROS)
|
||||
#define __STDC_FORMAT_MACROS
|
||||
#endif // !defined(__STDC_FORMAT_MACROS)
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -24,7 +24,9 @@
|
||||
sd-daemon.h may include inttypes.h. Explicitly request format macros before
|
||||
the first inclusion of inttypes.h.
|
||||
*/
|
||||
#if !defined(__STDC_FORMAT_MACROS)
|
||||
#define __STDC_FORMAT_MACROS
|
||||
#endif // !defined(__STDC_FORMAT_MACROS)
|
||||
#include <systemd/sd-daemon.h>
|
||||
/** INTERVAL in seconds followed by printf style status */
|
||||
#define service_manager_extend_timeout(INTERVAL, FMTSTR, ...) \
|
||||
|
@ -110,6 +110,7 @@ extern struct wsrep_service_st {
|
||||
int (*wsrep_trx_is_aborting_func)(MYSQL_THD thd);
|
||||
int (*wsrep_trx_order_before_func)(MYSQL_THD, MYSQL_THD);
|
||||
void (*wsrep_unlock_rollback_func)();
|
||||
void (*wsrep_set_data_home_dir_func)(const char *data_dir);
|
||||
} *wsrep_service;
|
||||
|
||||
#ifdef MYSQL_DYNAMIC_PLUGIN
|
||||
@ -151,6 +152,7 @@ extern struct wsrep_service_st {
|
||||
#define wsrep_trx_is_aborting(T) wsrep_service->wsrep_trx_is_aborting_func(T)
|
||||
#define wsrep_trx_order_before(T1,T2) wsrep_service->wsrep_trx_order_before_func(T1,T2)
|
||||
#define wsrep_unlock_rollback() wsrep_service->wsrep_unlock_rollback_func()
|
||||
#define wsrep_set_data_home_dir(A) wsrep_service->wsrep_set_data_home_dir_func(A)
|
||||
|
||||
#define wsrep_debug get_wsrep_debug()
|
||||
#define wsrep_log_conflicts get_wsrep_log_conflicts()
|
||||
@ -208,6 +210,7 @@ void wsrep_thd_awake(THD *thd, my_bool signal);
|
||||
void wsrep_thd_set_conflict_state(THD *thd, enum wsrep_conflict_state state);
|
||||
bool wsrep_thd_ignore_table(THD *thd);
|
||||
void wsrep_unlock_rollback();
|
||||
void wsrep_set_data_home_dir(const char *data_dir);
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -41,4 +41,4 @@
|
||||
#define VERSION_thd_specifics 0x0100
|
||||
#define VERSION_thd_timezone 0x0100
|
||||
#define VERSION_thd_wait 0x0100
|
||||
#define VERSION_wsrep 0x0201
|
||||
#define VERSION_wsrep 0x0202
|
||||
|
@ -27,6 +27,11 @@
|
||||
if (WSREP_ON && WSREP(thd) && wsrep_to_isolation_begin(thd, db_, table_, table_list_)) \
|
||||
goto error;
|
||||
|
||||
#define WSREP_TO_ISOLATION_BEGIN_ALTER(db_, table_, table_list_, alter_info_) \
|
||||
if (WSREP_ON && WSREP(thd) && wsrep_to_isolation_begin(thd, db_, table_, \
|
||||
table_list_, alter_info_)) \
|
||||
goto error;
|
||||
|
||||
#define WSREP_TO_ISOLATION_END \
|
||||
if (WSREP_ON && (WSREP(thd) || (thd && thd->wsrep_exec_mode==TOTAL_ORDER))) \
|
||||
wsrep_to_isolation_end(thd);
|
||||
|
@ -5,7 +5,6 @@
|
||||
-- source include/have_log_bin.inc
|
||||
-- source include/not_embedded.inc
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/have_debug.inc
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1, t2;
|
||||
|
@ -1,60 +0,0 @@
|
||||
# Check the replication of the FOREIGN_KEY_CHECKS variable.
|
||||
|
||||
-- source include/master-slave.inc
|
||||
|
||||
eval CREATE TABLE t1 (a INT AUTO_INCREMENT KEY) ENGINE=$engine_type;
|
||||
eval CREATE TABLE t2 (b INT AUTO_INCREMENT KEY, c INT, FOREIGN KEY(b) REFERENCES t1(a)) ENGINE=$engine_type;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
INSERT INTO t1 VALUES (10);
|
||||
INSERT INTO t1 VALUES (NULL),(NULL),(NULL);
|
||||
INSERT INTO t2 VALUES (5,0);
|
||||
INSERT INTO t2 VALUES (NULL,LAST_INSERT_ID());
|
||||
SET FOREIGN_KEY_CHECKS=1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
SELECT * FROM t2 ORDER BY b;
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
SELECT * FROM t2 ORDER BY b;
|
||||
|
||||
connection master;
|
||||
SET TIMESTAMP=1000000000;
|
||||
CREATE TABLE t3 ( a INT UNIQUE );
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
--error ER_DUP_ENTRY
|
||||
INSERT INTO t3 VALUES (1),(1);
|
||||
sync_slave_with_master;
|
||||
|
||||
connection master;
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
DROP TABLE IF EXISTS t1,t2,t3;
|
||||
SET FOREIGN_KEY_CHECKS=1;
|
||||
sync_slave_with_master;
|
||||
|
||||
#
|
||||
# Bug #32468 delete rows event on a table with foreign key constraint fails
|
||||
#
|
||||
|
||||
connection master;
|
||||
|
||||
eval create table t1 (b int primary key) engine = $engine_type;
|
||||
eval create table t2 (a int primary key, b int, foreign key (b) references t1(b))
|
||||
engine = $engine_type;
|
||||
|
||||
insert into t1 set b=1;
|
||||
insert into t2 set a=1, b=1;
|
||||
|
||||
set foreign_key_checks=0;
|
||||
delete from t1;
|
||||
|
||||
--echo must sync w/o a problem (could not with the buggy code)
|
||||
sync_slave_with_master;
|
||||
select count(*) from t1 /* must be zero */;
|
||||
|
||||
|
||||
# cleanup for bug#32468
|
||||
|
||||
connection master;
|
||||
drop table t2,t1;
|
||||
|
||||
--source include/rpl_end.inc
|
@ -1447,7 +1447,7 @@ sub command_line_setup {
|
||||
|
||||
foreach my $fs (@tmpfs_locations)
|
||||
{
|
||||
if ( -d $fs && ! -l $fs )
|
||||
if ( -d $fs && ! -l $fs && -w $fs )
|
||||
{
|
||||
my $template= "var_${opt_build_thread}_XXXX";
|
||||
$opt_mem= tempdir( $template, DIR => $fs, CLEANUP => 0);
|
||||
@ -3970,14 +3970,14 @@ sub run_testcase ($$) {
|
||||
}
|
||||
|
||||
my $test= $tinfo->{suite}->start_test($tinfo);
|
||||
# Set only when we have to keep waiting after expectedly died server
|
||||
my $keep_waiting_proc = 0;
|
||||
# Set to a list of processes we have to keep waiting (expectedly died servers)
|
||||
my %keep_waiting_proc = ();
|
||||
my $print_timeout= start_timer($print_freq * 60);
|
||||
|
||||
while (1)
|
||||
{
|
||||
my $proc;
|
||||
if ($keep_waiting_proc)
|
||||
if (%keep_waiting_proc)
|
||||
{
|
||||
# Any other process exited?
|
||||
$proc = My::SafeProcess->check_any();
|
||||
@ -3987,48 +3987,34 @@ sub run_testcase ($$) {
|
||||
}
|
||||
else
|
||||
{
|
||||
$proc = $keep_waiting_proc;
|
||||
# Also check if timer has expired, if so cancel waiting
|
||||
if ( has_expired($test_timeout) )
|
||||
{
|
||||
$keep_waiting_proc = 0;
|
||||
%keep_waiting_proc = ();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (! $keep_waiting_proc)
|
||||
if (!%keep_waiting_proc && !$proc)
|
||||
{
|
||||
if($test_timeout > $print_timeout)
|
||||
if ($test_timeout > $print_timeout)
|
||||
{
|
||||
$proc= My::SafeProcess->wait_any_timeout($print_timeout);
|
||||
if ( $proc->{timeout} )
|
||||
{
|
||||
#print out that the test is still on
|
||||
mtr_print("Test still running: $tinfo->{name}");
|
||||
#reset the timer
|
||||
$print_timeout= start_timer($print_freq * 60);
|
||||
next;
|
||||
}
|
||||
$proc= My::SafeProcess->wait_any_timeout($print_timeout);
|
||||
if ($proc->{timeout})
|
||||
{
|
||||
#print out that the test is still on
|
||||
mtr_print("Test still running: $tinfo->{name}");
|
||||
#reset the timer
|
||||
$print_timeout= start_timer($print_freq * 60);
|
||||
next;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$proc= My::SafeProcess->wait_any_timeout($test_timeout);
|
||||
$proc= My::SafeProcess->wait_any_timeout($test_timeout);
|
||||
}
|
||||
}
|
||||
|
||||
# Will be restored if we need to keep waiting
|
||||
$keep_waiting_proc = 0;
|
||||
|
||||
unless ( defined $proc )
|
||||
{
|
||||
mtr_error("wait_any failed");
|
||||
}
|
||||
mtr_verbose("Got $proc");
|
||||
|
||||
mark_time_used('test');
|
||||
# ----------------------------------------------------
|
||||
# Was it the test program that exited
|
||||
# ----------------------------------------------------
|
||||
if ($proc eq $test)
|
||||
if ($proc and $proc eq $test) # mysqltest itself exited
|
||||
{
|
||||
my $res= $test->exit_status();
|
||||
|
||||
@ -4043,12 +4029,12 @@ sub run_testcase ($$) {
|
||||
|
||||
if ( $res == 0 )
|
||||
{
|
||||
my $check_res;
|
||||
if ( $opt_check_testcases and
|
||||
$check_res= check_testcase($tinfo, "after"))
|
||||
{
|
||||
if ($check_res == 1) {
|
||||
# Test case had sideeffects, not fatal error, just continue
|
||||
my $check_res;
|
||||
if ( $opt_check_testcases and
|
||||
$check_res= check_testcase($tinfo, "after"))
|
||||
{
|
||||
if ($check_res == 1) {
|
||||
# Test case had sideeffects, not fatal error, just continue
|
||||
if ($opt_warnings) {
|
||||
# Checking error logs for warnings, so need to stop server
|
||||
# gracefully so that memory leaks etc. can be properly detected.
|
||||
@ -4059,93 +4045,110 @@ sub run_testcase ($$) {
|
||||
# test.
|
||||
} else {
|
||||
# Not checking warnings, so can do a hard shutdown.
|
||||
stop_all_servers($opt_shutdown_timeout);
|
||||
stop_all_servers($opt_shutdown_timeout);
|
||||
}
|
||||
mtr_report("Resuming tests...\n");
|
||||
resfile_output($tinfo->{'check'}) if $opt_resfile;
|
||||
}
|
||||
else {
|
||||
# Test case check failed fatally, probably a server crashed
|
||||
report_failure_and_restart($tinfo);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
mtr_report_test_passed($tinfo);
|
||||
mtr_report("Resuming tests...\n");
|
||||
resfile_output($tinfo->{'check'}) if $opt_resfile;
|
||||
}
|
||||
else {
|
||||
# Test case check failed fatally, probably a server crashed
|
||||
report_failure_and_restart($tinfo);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
mtr_report_test_passed($tinfo);
|
||||
}
|
||||
elsif ( $res == 62 )
|
||||
{
|
||||
# Testcase itself tell us to skip this one
|
||||
$tinfo->{skip_detected_by_test}= 1;
|
||||
# Try to get reason from test log file
|
||||
find_testcase_skipped_reason($tinfo);
|
||||
mtr_report_test_skipped($tinfo);
|
||||
# Restart if skipped due to missing perl, it may have had side effects
|
||||
if ( $tinfo->{'comment'} =~ /^perl not found/ )
|
||||
{
|
||||
stop_all_servers($opt_shutdown_timeout);
|
||||
}
|
||||
# Testcase itself tell us to skip this one
|
||||
$tinfo->{skip_detected_by_test}= 1;
|
||||
# Try to get reason from test log file
|
||||
find_testcase_skipped_reason($tinfo);
|
||||
mtr_report_test_skipped($tinfo);
|
||||
# Restart if skipped due to missing perl, it may have had side effects
|
||||
if ( $tinfo->{'comment'} =~ /^perl not found/ )
|
||||
{
|
||||
stop_all_servers($opt_shutdown_timeout);
|
||||
}
|
||||
}
|
||||
elsif ( $res == 65 )
|
||||
{
|
||||
# Testprogram killed by signal
|
||||
$tinfo->{comment}=
|
||||
"testprogram crashed(returned code $res)";
|
||||
report_failure_and_restart($tinfo);
|
||||
# Testprogram killed by signal
|
||||
$tinfo->{comment}=
|
||||
"testprogram crashed(returned code $res)";
|
||||
report_failure_and_restart($tinfo);
|
||||
}
|
||||
elsif ( $res == 1 )
|
||||
{
|
||||
# Check if the test tool requests that
|
||||
# an analyze script should be run
|
||||
my $analyze= find_analyze_request();
|
||||
if ($analyze){
|
||||
run_on_all($tinfo, "analyze-$analyze");
|
||||
}
|
||||
# Check if the test tool requests that
|
||||
# an analyze script should be run
|
||||
my $analyze= find_analyze_request();
|
||||
if ($analyze){
|
||||
run_on_all($tinfo, "analyze-$analyze");
|
||||
}
|
||||
|
||||
# Wait a bit and see if a server died, if so report that instead
|
||||
mtr_milli_sleep(100);
|
||||
my $srvproc= My::SafeProcess::check_any();
|
||||
if ($srvproc && grep($srvproc eq $_, started(all_servers()))) {
|
||||
$proc= $srvproc;
|
||||
goto SRVDIED;
|
||||
}
|
||||
# Wait a bit and see if a server died, if so report that instead
|
||||
mtr_milli_sleep(100);
|
||||
my $srvproc= My::SafeProcess::check_any();
|
||||
if ($srvproc && grep($srvproc eq $_, started(all_servers()))) {
|
||||
$proc= $srvproc;
|
||||
goto SRVDIED;
|
||||
}
|
||||
|
||||
# Test case failure reported by mysqltest
|
||||
report_failure_and_restart($tinfo);
|
||||
# Test case failure reported by mysqltest
|
||||
report_failure_and_restart($tinfo);
|
||||
}
|
||||
else
|
||||
{
|
||||
# mysqltest failed, probably crashed
|
||||
$tinfo->{comment}=
|
||||
"mysqltest failed with unexpected return code $res\n";
|
||||
report_failure_and_restart($tinfo);
|
||||
# mysqltest failed, probably crashed
|
||||
$tinfo->{comment}=
|
||||
"mysqltest failed with unexpected return code $res\n";
|
||||
report_failure_and_restart($tinfo);
|
||||
}
|
||||
|
||||
# Save info from this testcase run to mysqltest.log
|
||||
if( -f $path_current_testlog)
|
||||
{
|
||||
if ($opt_resfile && $res && $res != 62) {
|
||||
resfile_output_file($path_current_testlog);
|
||||
}
|
||||
mtr_appendfile_to_file($path_current_testlog, $path_testlog);
|
||||
unlink($path_current_testlog);
|
||||
if ($opt_resfile && $res && $res != 62) {
|
||||
resfile_output_file($path_current_testlog);
|
||||
}
|
||||
mtr_appendfile_to_file($path_current_testlog, $path_testlog);
|
||||
unlink($path_current_testlog);
|
||||
}
|
||||
|
||||
return ($res == 62) ? 0 : $res;
|
||||
|
||||
}
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Check if it was an expected crash
|
||||
# ----------------------------------------------------
|
||||
my $check_crash = check_expected_crash_and_restart($proc);
|
||||
if ($check_crash)
|
||||
if ($proc)
|
||||
{
|
||||
# Keep waiting if it returned 2, if 1 don't wait or stop waiting.
|
||||
$keep_waiting_proc = 0 if $check_crash == 1;
|
||||
$keep_waiting_proc = $proc if $check_crash == 2;
|
||||
next;
|
||||
# It was not mysqltest that exited, add to a wait-to-be-started-again list.
|
||||
$keep_waiting_proc{$proc} = 1;
|
||||
}
|
||||
|
||||
mtr_verbose("Got " . join(",", keys(%keep_waiting_proc)));
|
||||
|
||||
mark_time_used('test');
|
||||
foreach my $wait_for_proc (keys(%keep_waiting_proc)) {
|
||||
# ----------------------------------------------------
|
||||
# Check if it was an expected crash
|
||||
# ----------------------------------------------------
|
||||
my $check_crash = check_expected_crash_and_restart($wait_for_proc);
|
||||
if ($check_crash == 0) # unexpected exit/crash of $wait_for_proc
|
||||
{
|
||||
goto SRVDIED;
|
||||
}
|
||||
elsif ($check_crash == 1) # $wait_for_proc was started again by check_expected_crash_and_restart()
|
||||
{
|
||||
delete $keep_waiting_proc{$wait_for_proc};
|
||||
}
|
||||
elsif ($check_crash == 2) # we must keep waiting
|
||||
{
|
||||
# do nothing
|
||||
}
|
||||
}
|
||||
|
||||
next;
|
||||
|
||||
SRVDIED:
|
||||
# ----------------------------------------------------
|
||||
# Stop the test case timer
|
||||
|
@ -542,3 +542,27 @@ flush relay logs,relay logs;
|
||||
ERROR HY000: Incorrect usage of FLUSH and RELAY LOGS
|
||||
flush slave,slave;
|
||||
ERROR HY000: Incorrect usage of FLUSH and SLAVE
|
||||
#
|
||||
# MDEV-15890 Strange error message if you try to
|
||||
# FLUSH TABLES <view> after LOCK TABLES <view>.
|
||||
#
|
||||
CREATE TABLE t1 (qty INT, price INT);
|
||||
CREATE VIEW v1 AS SELECT qty, price, qty*price AS value FROM t1;
|
||||
LOCK TABLES v1 READ;
|
||||
FLUSH TABLES v1;
|
||||
ERROR HY000: Table 't1' was locked with a READ lock and can't be updated
|
||||
UNLOCK TABLES;
|
||||
LOCK TABLES v1 WRITE;
|
||||
FLUSH TABLES v1;
|
||||
ERROR HY000: Table 't1' was locked with a READ lock and can't be updated
|
||||
UNLOCK TABLES;
|
||||
LOCK TABLES v1 READ;
|
||||
FLUSH TABLES t1;
|
||||
ERROR HY000: Table 't1' was locked with a READ lock and can't be updated
|
||||
UNLOCK TABLES;
|
||||
LOCK TABLES t1 READ;
|
||||
FLUSH TABLES v1;
|
||||
ERROR HY000: Table 'v1' was not locked with LOCK TABLES
|
||||
UNLOCK TABLES;
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
|
@ -1731,6 +1731,22 @@ c2
|
||||
DROP TABLE t1;
|
||||
SET optimizer_switch=@save_optimizer_switch;
|
||||
#
|
||||
# MDEV-16995: ER_CANT_CREATE_GEOMETRY_OBJECT encountered for a query with
|
||||
# optimizer_use_condition_selectivity>=3
|
||||
#
|
||||
CREATE TABLE t1 (a POINT);
|
||||
INSERT INTO t1 VALUES (POINT(1,1)),(POINT(1,2)),(POINT(1,3));
|
||||
set @save_use_stat_tables= @@use_stat_tables;
|
||||
set @save_optimizer_use_condition_selectivity= @@optimizer_use_condition_selectivity;
|
||||
set @@use_stat_tables= PREFERABLY;
|
||||
set @@optimizer_use_condition_selectivity=3;
|
||||
SELECT COUNT(*) FROM t1 WHERE a IN ('test','test1');
|
||||
COUNT(*)
|
||||
0
|
||||
set @@use_stat_tables= @save_use_stat_tables;
|
||||
set @@optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;
|
||||
drop table t1;
|
||||
#
|
||||
# End 10.0 tests
|
||||
#
|
||||
SHOW CREATE TABLE information_schema.geometry_columns;
|
||||
|
@ -3733,6 +3733,34 @@ id MIN(a) MAX(a)
|
||||
4 2001-01-04 2001-01-04
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-17039: Query plan changes when we use GROUP BY optimization with optimizer_use_condition_selectivity=4
|
||||
# and use_stat_tables= PREFERABLY
|
||||
#
|
||||
CREATE TABLE t1 (a INT, b INT,c INT DEFAULT 0, INDEX (a,b));
|
||||
INSERT INTO t1 (a, b) VALUES (1,1), (1,2), (1,3), (1,4), (1,5),
|
||||
(2,2), (2,3), (2,1), (3,1), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6);
|
||||
set @save_optimizer_use_condition_selectivity= @@optimizer_use_condition_selectivity;
|
||||
set @save_use_stat_tables= @@use_stat_tables;
|
||||
set @@optimizer_use_condition_selectivity=4;
|
||||
set @@use_stat_tables=PREFERABLY;
|
||||
explain extended SELECT a FROM t1 AS t1_outer WHERE a IN (SELECT max(b) FROM t1 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 8 100.00
|
||||
1 PRIMARY t1_outer ref a a 5 <subquery2>.max(b) 2 100.00 Using index
|
||||
2 MATERIALIZED t1 range NULL a 5 NULL 8 100.00 Using index for group-by
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1_outer`.`a` AS `a` from <materialize> (select max(`test`.`t1`.`b`) from `test`.`t1` group by `test`.`t1`.`a`) join `test`.`t1` `t1_outer` where `test`.`t1_outer`.`a` = `<subquery2>`.`max(b)`
|
||||
set @@optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
|
||||
set @@use_stat_tables=@save_use_stat_tables;
|
||||
explain extended SELECT a FROM t1 AS t1_outer WHERE a IN (SELECT max(b) FROM t1 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 8 100.00
|
||||
1 PRIMARY t1_outer ref a a 5 <subquery2>.max(b) 2 100.00 Using index
|
||||
2 MATERIALIZED t1 range NULL a 5 NULL 8 100.00 Using index for group-by
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1_outer`.`a` AS `a` from <materialize> (select max(`test`.`t1`.`b`) from `test`.`t1` group by `test`.`t1`.`a`) join `test`.`t1` `t1_outer` where `test`.`t1_outer`.`a` = `<subquery2>`.`max(b)`
|
||||
drop table t1;
|
||||
#
|
||||
# End of 10.0 tests
|
||||
#
|
||||
#
|
||||
|
@ -1521,11 +1521,13 @@ ERROR 42S22: Unknown column 'f' in 'from clause'
|
||||
DROP TABLE t;
|
||||
CREATE TABLE t (f INT);
|
||||
CALL p;
|
||||
ERROR 42S22: Unknown column 'f' in 'from clause'
|
||||
f
|
||||
DROP TABLE t;
|
||||
CREATE TABLE t (i INT);
|
||||
CALL p;
|
||||
ERROR 42S22: Unknown column 'f' in 'from clause'
|
||||
ERROR 42S22: Unknown column 't1.f' in 'field list'
|
||||
CALL p;
|
||||
ERROR 42S22: Unknown column 't1.f' in 'field list'
|
||||
DROP PROCEDURE p;
|
||||
DROP TABLE t;
|
||||
CREATE TABLE t1 (a INT, b INT);
|
||||
|
@ -84,7 +84,7 @@ t2id id
|
||||
use test;
|
||||
drop database `#mysql50#-`;
|
||||
SET NAMES default;
|
||||
FOUND 12 /\[ERROR\] Invalid \(old\?\) table or database name/ in mysqld.1.err
|
||||
FOUND 8 /\[ERROR\] Invalid \(old\?\) table or database name/ in mysqld.1.err
|
||||
set global query_cache_type=DEFAULT;
|
||||
set global query_cache_size=DEFAULT;
|
||||
End of 10.2 tests
|
||||
|
@ -782,9 +782,9 @@ set optimizer_use_condition_selectivity=3;
|
||||
explain extended
|
||||
select * from t1 where a < 1 and a > 7;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 8 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where 0
|
||||
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` < 1 and `test`.`t1`.`a` > 7
|
||||
select * from t1 where a < 1 and a > 7;
|
||||
a
|
||||
drop table t1;
|
||||
@ -1506,9 +1506,9 @@ col1
|
||||
explain extended
|
||||
select * from t2 where col1 < 'b' and col1 > 'd';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 8 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`col1` AS `col1` from `test`.`t2` where 0
|
||||
Note 1003 select `test`.`t2`.`col1` AS `col1` from `test`.`t2` where `test`.`t2`.`col1` < 'b' and `test`.`t2`.`col1` > 'd'
|
||||
drop table t1,t2;
|
||||
set optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
@ -1595,3 +1595,43 @@ drop table t1,t0;
|
||||
set histogram_size=@save_histogram_size;
|
||||
set optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
#
|
||||
# MDEV-15306: Wrong/Unexpected result with the value
|
||||
# optimizer_use_condition_selectivity set to 4
|
||||
#
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
|
||||
CREATE FUNCTION f1() RETURNS INT DETERMINISTIC
|
||||
BEGIN
|
||||
SET @cnt := @cnt + 1;
|
||||
RETURN 1;
|
||||
END;|
|
||||
set @save_optimizer_use_condition_selectivity=@@optimizer_use_condition_selectivity;
|
||||
set @save_use_stat_tables= @@use_stat_tables;
|
||||
set @@use_stat_tables='complementary';
|
||||
set @@optimizer_use_condition_selectivity=4;
|
||||
SET @cnt= 0;
|
||||
SELECT * FROM t1 WHERE a = f1();
|
||||
a
|
||||
1
|
||||
SELECT @cnt;
|
||||
@cnt
|
||||
1
|
||||
set @@use_stat_tables='preferably';
|
||||
analyze table t1 persistent for all;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
SET @cnt := 0;
|
||||
set @@optimizer_use_condition_selectivity=4;
|
||||
SELECT * FROM t1 WHERE a = f1();
|
||||
a
|
||||
1
|
||||
SELECT @cnt;
|
||||
@cnt
|
||||
2
|
||||
alter table t1 force;
|
||||
set @@use_stat_tables= @save_use_stat_tables;
|
||||
set @@optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
|
||||
drop table t1;
|
||||
drop function f1;
|
||||
|
@ -789,9 +789,9 @@ set optimizer_use_condition_selectivity=3;
|
||||
explain extended
|
||||
select * from t1 where a < 1 and a > 7;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 8 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where 0
|
||||
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where `test`.`t1`.`a` < 1 and `test`.`t1`.`a` > 7
|
||||
select * from t1 where a < 1 and a > 7;
|
||||
a
|
||||
drop table t1;
|
||||
@ -1516,9 +1516,9 @@ col1
|
||||
explain extended
|
||||
select * from t2 where col1 < 'b' and col1 > 'd';
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 8 100.00 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`col1` AS `col1` from `test`.`t2` where 0
|
||||
Note 1003 select `test`.`t2`.`col1` AS `col1` from `test`.`t2` where `test`.`t2`.`col1` < 'b' and `test`.`t2`.`col1` > 'd'
|
||||
drop table t1,t2;
|
||||
set optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
@ -1605,6 +1605,46 @@ drop table t1,t0;
|
||||
set histogram_size=@save_histogram_size;
|
||||
set optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
#
|
||||
# MDEV-15306: Wrong/Unexpected result with the value
|
||||
# optimizer_use_condition_selectivity set to 4
|
||||
#
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
|
||||
CREATE FUNCTION f1() RETURNS INT DETERMINISTIC
|
||||
BEGIN
|
||||
SET @cnt := @cnt + 1;
|
||||
RETURN 1;
|
||||
END;|
|
||||
set @save_optimizer_use_condition_selectivity=@@optimizer_use_condition_selectivity;
|
||||
set @save_use_stat_tables= @@use_stat_tables;
|
||||
set @@use_stat_tables='complementary';
|
||||
set @@optimizer_use_condition_selectivity=4;
|
||||
SET @cnt= 0;
|
||||
SELECT * FROM t1 WHERE a = f1();
|
||||
a
|
||||
1
|
||||
SELECT @cnt;
|
||||
@cnt
|
||||
1
|
||||
set @@use_stat_tables='preferably';
|
||||
analyze table t1 persistent for all;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
SET @cnt := 0;
|
||||
set @@optimizer_use_condition_selectivity=4;
|
||||
SELECT * FROM t1 WHERE a = f1();
|
||||
a
|
||||
1
|
||||
SELECT @cnt;
|
||||
@cnt
|
||||
2
|
||||
alter table t1 force;
|
||||
set @@use_stat_tables= @save_use_stat_tables;
|
||||
set @@optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
|
||||
drop table t1;
|
||||
drop function f1;
|
||||
set optimizer_switch=@save_optimizer_switch_for_selectivity_test;
|
||||
set @tmp_ust= @@use_stat_tables;
|
||||
set @tmp_oucs= @@optimizer_use_condition_selectivity;
|
||||
|
@ -7909,6 +7909,23 @@ SET S.CLOSE_YN = ''
|
||||
where 1=1;
|
||||
drop function if exists f1;
|
||||
drop table t1,t2;
|
||||
#
|
||||
# MDEV-16957: Server crashes in Field_iterator_natural_join::next
|
||||
# upon 2nd execution of SP
|
||||
#
|
||||
CREATE TABLE t1 (a INT, b VARCHAR(32));
|
||||
CREATE PROCEDURE sp() SELECT * FROM t1 AS t1x JOIN t1 AS t1y USING (c);
|
||||
CALL sp;
|
||||
ERROR 42S22: Unknown column 'c' in 'from clause'
|
||||
CALL sp;
|
||||
ERROR 42S22: Unknown column 'c' in 'from clause'
|
||||
CALL sp;
|
||||
ERROR 42S22: Unknown column 'c' in 'from clause'
|
||||
alter table t1 add column c int;
|
||||
CALL sp;
|
||||
c a b a b
|
||||
DROP PROCEDURE sp;
|
||||
DROP TABLE t1;
|
||||
# End of 5.5 test
|
||||
#
|
||||
# MDEV-7040: Crash in field_conv, memcpy_field_possible, part#2
|
||||
|
@ -578,6 +578,19 @@ db_name table_name column_name min_value max_value nulls_ratio avg_length avg_fr
|
||||
DROP TABLE t1;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
#
|
||||
# MDEV-17023: Crash during read_histogram_for_table with optimizer_use_condition_selectivity set to 4
|
||||
#
|
||||
set @save_optimizer_use_condition_selectivity=@@optimizer_use_condition_selectivity;
|
||||
set @@optimizer_use_condition_selectivity=4;
|
||||
set @@use_stat_tables= PREFERABLY;
|
||||
explain
|
||||
SELECT * FROM INFORMATION_SCHEMA.PROFILING, mysql.user;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE PROFILING ALL NULL NULL NULL NULL NULL
|
||||
1 SIMPLE user ALL NULL NULL NULL NULL 4 Using join buffer (flat, BNL join)
|
||||
set @@optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
#
|
||||
# MDEV-16757: manual addition of min/max statistics for BLOB
|
||||
#
|
||||
SET use_stat_tables= PREFERABLY;
|
||||
|
@ -605,6 +605,19 @@ db_name table_name column_name min_value max_value nulls_ratio avg_length avg_fr
|
||||
DROP TABLE t1;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
#
|
||||
# MDEV-17023: Crash during read_histogram_for_table with optimizer_use_condition_selectivity set to 4
|
||||
#
|
||||
set @save_optimizer_use_condition_selectivity=@@optimizer_use_condition_selectivity;
|
||||
set @@optimizer_use_condition_selectivity=4;
|
||||
set @@use_stat_tables= PREFERABLY;
|
||||
explain
|
||||
SELECT * FROM INFORMATION_SCHEMA.PROFILING, mysql.user;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE PROFILING ALL NULL NULL NULL NULL NULL
|
||||
1 SIMPLE user ALL NULL NULL NULL NULL 4 Using join buffer (flat, BNL join)
|
||||
set @@optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
#
|
||||
# MDEV-16757: manual addition of min/max statistics for BLOB
|
||||
#
|
||||
SET use_stat_tables= PREFERABLY;
|
||||
|
@ -37,3 +37,6 @@ galera_ist_progress: MDEV-15236 galera_ist_progress fails when trying to read tr
|
||||
pxc-421: Lock timeout exceeded
|
||||
galera_sst_mysqldump_with_key : MDEV-16890 Galera test failure
|
||||
galera.galera_kill_ddl : MDEV-17108 Test failure on galera.galera_kill_ddl
|
||||
galera.galera_binlog_stmt_autoinc : MDEV-17106 Test failure on galera.galera_binlog_stmt_autoinc
|
||||
galera.galera_kill_ddl : MDEV-17108 Test failure on galera.galera_kill_ddl
|
||||
galera.galera_var_node_address : MDEV-17151 Galera test failure on galera.galera_var_node_address
|
||||
|
@ -1,40 +1,39 @@
|
||||
CREATE TABLE t1 (f1 INTEGER) Engine=InnoDB;
|
||||
INSERT INTO t1 values(0);
|
||||
connection node_1;
|
||||
SET GLOBAL wsrep_slave_threads = 10;
|
||||
SET GLOBAL wsrep_slave_threads = 1;
|
||||
# Wait 10 slave threads to start 1
|
||||
connection node_2;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
# Generate 12 replication events
|
||||
connection node_1;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
13
|
||||
# Wait 9 slave threads to exit 1
|
||||
SET GLOBAL wsrep_slave_threads = 10;
|
||||
# Wait 10 slave threads to start 2
|
||||
SET GLOBAL wsrep_slave_threads = 20;
|
||||
# Wait 20 slave threads to start 3
|
||||
SET GLOBAL wsrep_slave_threads = 1;
|
||||
connection node_2;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t1 VALUES (2);
|
||||
INSERT INTO t1 VALUES (3);
|
||||
INSERT INTO t1 VALUES (4);
|
||||
INSERT INTO t1 VALUES (5);
|
||||
INSERT INTO t1 VALUES (6);
|
||||
INSERT INTO t1 VALUES (7);
|
||||
INSERT INTO t1 VALUES (8);
|
||||
INSERT INTO t1 VALUES (9);
|
||||
# Generate 40 replication events
|
||||
connection node_1;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
53
|
||||
# Wait 10 slave threads to exit 3
|
||||
SET GLOBAL wsrep_slave_threads = 10;
|
||||
SET GLOBAL wsrep_slave_threads = 0;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect wsrep_slave_threads value: '0'
|
||||
# Wait 10 slave threads to start 3
|
||||
connection node_2;
|
||||
INSERT INTO t1 VALUES (10);
|
||||
INSERT INTO t1 VALUES (11);
|
||||
INSERT INTO t1 VALUES (12);
|
||||
INSERT INTO t1 VALUES (13);
|
||||
INSERT INTO t1 VALUES (14);
|
||||
INSERT INTO t1 VALUES (15);
|
||||
INSERT INTO t1 VALUES (16);
|
||||
INSERT INTO t1 VALUES (17);
|
||||
INSERT INTO t1 VALUES (18);
|
||||
INSERT INTO t1 VALUES (19);
|
||||
INSERT INTO t1 VALUES (20);
|
||||
# Generate 12 replication events
|
||||
connection node_1;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
65
|
||||
# Wait 10 slave threads to exit 4
|
||||
connection node_1;
|
||||
SET GLOBAL wsrep_slave_threads = 1;
|
||||
DROP TABLE t1;
|
||||
|
@ -1,20 +1,25 @@
|
||||
SET GLOBAL general_log='OFF';
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
SET GLOBAL general_log='OFF';
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
SELECT Argument FROM mysql.general_log;
|
||||
Argument
|
||||
SELECT COUNT(*) = 0 FROM mysql.general_log WHERE argument LIKE 'TRUNCATE%'
|
||||
SELECT Argument FROM mysql.general_log
|
||||
SELECT Argument FROM mysql.general_log;
|
||||
Argument
|
||||
SELECT COUNT(*) = 0 FROM mysql.general_log WHERE argument LIKE 'TRUNCATE%'
|
||||
SELECT Argument FROM mysql.general_log
|
||||
SET GLOBAL general_log='ON';
|
||||
SELECT argument from mysql.general_log WHERE argument NOT LIKE 'SELECT%';
|
||||
argument
|
||||
SET SESSION wsrep_osu_method=TOI;
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
||||
SET SESSION wsrep_osu_method=RSU;
|
||||
ALTER TABLE t1 ADD COLUMN f2 INTEGER;
|
||||
SET SESSION wsrep_osu_method=TOI;
|
||||
SELECT COUNT(*) = 2 FROM mysql.general_log WHERE argument LIKE 'CREATE%' OR argument LIKE 'ALTER%';
|
||||
COUNT(*) = 2
|
||||
1
|
||||
SELECT argument FROM mysql.general_log WHERE argument LIKE 'CREATE%' OR argument LIKE 'ALTER%';
|
||||
argument
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB
|
||||
ALTER TABLE t1 ADD COLUMN f2 INTEGER
|
||||
SET GLOBAL general_log='ON';
|
||||
SELECT COUNT(*) = 0 FROM mysql.general_log WHERE argument NOT LIKE 'SELECT%';
|
||||
COUNT(*) = 0
|
||||
1
|
||||
0
|
||||
DROP TABLE t1;
|
||||
|
5
mysql-test/suite/galera/r/galera#505.result
Normal file
5
mysql-test/suite/galera/r/galera#505.result
Normal file
@ -0,0 +1,5 @@
|
||||
SET GLOBAL wsrep_provider_options = 'pc.weight=3';
|
||||
SHOW GLOBAL VARIABLES LIKE 'wsrep_provider_options';
|
||||
Variable_name Value
|
||||
wsrep_provider_options pc.weight = 3
|
||||
SET GLOBAL wsrep_provider_options = 'pc.weight=1';
|
@ -53,71 +53,3 @@ WSREP_SST_DONOR_REJECTS_QUERIES OFF
|
||||
WSREP_SST_METHOD rsync
|
||||
WSREP_SYNC_WAIT 15
|
||||
<BASE_DIR>; <BASE_HOST>; <BASE_PORT>; cert.log_conflicts = no; debug = no; evs.auto_evict = 0; evs.causal_keepalive_period = PT1S; evs.debug_log_mask = 0x1; evs.delay_margin = PT1S; evs.delayed_keep_period = PT30S; evs.inactive_check_period = PT0.5S; evs.inactive_timeout = PT30S; evs.info_log_mask = 0; evs.install_timeout = PT15S; evs.join_retrans_period = PT1S; evs.keepalive_period = PT1S; evs.max_install_timeouts = 3; evs.send_window = 4; evs.stats_report_period = PT1M; evs.suspect_timeout = PT10S; evs.use_aggregate = true; evs.user_send_window = 2; evs.version = 0; evs.view_forget_timeout = P1D; <GCACHE_DIR>; gcache.keep_pages_size = 0; gcache.mem_size = 0; <GCACHE_NAME>; gcache.page_size = 128M; gcache.recover = no; gcache.size = 10M; gcomm.thread_prio = ; gcs.fc_debug = 0; gcs.fc_factor = 1.0; gcs.fc_limit = 16; gcs.fc_master_slave = no; gcs.max_packet_size = 64500; gcs.max_throttle = 0.25; <GCS_RECV_Q_HARD_LIMIT>; gcs.recv_q_soft_limit = 0.25; gcs.sync_donor = no; <GMCAST_LISTEN_ADDR>; gmcast.mcast_addr = ; gmcast.mcast_ttl = 1; gmcast.peer_timeout = PT3S; gmcast.segment = 0; gmcast.time_wait = PT5S; gmcast.version = 0; <IST_RECV_ADDR>; pc.announce_timeout = PT3S; pc.checksum = false; pc.ignore_quorum = false; pc.ignore_sb = false; pc.linger = PT20S; pc.npvo = false; pc.recovery = true; pc.version = 0; pc.wait_prim = true; pc.wait_prim_timeout = PT30S; pc.weight = 1; protonet.backend = asio; protonet.version = 0; repl.causal_read_timeout = PT90S; repl.commit_order = 3; repl.key_format = FLAT8; repl.max_ws_size = 2147483647; <REPL_PROTO_MAX>;socket.checksum = 2; socket.recv_buf_size = 212992;
|
||||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.GLOBAL_STATUS
|
||||
WHERE VARIABLE_NAME LIKE 'wsrep_%'
|
||||
AND VARIABLE_NAME != 'wsrep_debug_sync_waiters';
|
||||
COUNT(*)
|
||||
58
|
||||
SELECT VARIABLE_NAME FROM INFORMATION_SCHEMA.GLOBAL_STATUS
|
||||
WHERE VARIABLE_NAME LIKE 'wsrep_%'
|
||||
AND VARIABLE_NAME != 'wsrep_debug_sync_waiters'
|
||||
ORDER BY VARIABLE_NAME;
|
||||
VARIABLE_NAME
|
||||
WSREP_APPLY_OOOE
|
||||
WSREP_APPLY_OOOL
|
||||
WSREP_APPLY_WINDOW
|
||||
WSREP_CAUSAL_READS
|
||||
WSREP_CERT_DEPS_DISTANCE
|
||||
WSREP_CERT_INDEX_SIZE
|
||||
WSREP_CERT_INTERVAL
|
||||
WSREP_CLUSTER_CONF_ID
|
||||
WSREP_CLUSTER_SIZE
|
||||
WSREP_CLUSTER_STATE_UUID
|
||||
WSREP_CLUSTER_STATUS
|
||||
WSREP_COMMIT_OOOE
|
||||
WSREP_COMMIT_OOOL
|
||||
WSREP_COMMIT_WINDOW
|
||||
WSREP_CONNECTED
|
||||
WSREP_DESYNC_COUNT
|
||||
WSREP_EVS_DELAYED
|
||||
WSREP_EVS_EVICT_LIST
|
||||
WSREP_EVS_REPL_LATENCY
|
||||
WSREP_EVS_STATE
|
||||
WSREP_FLOW_CONTROL_PAUSED
|
||||
WSREP_FLOW_CONTROL_PAUSED_NS
|
||||
WSREP_FLOW_CONTROL_RECV
|
||||
WSREP_FLOW_CONTROL_SENT
|
||||
WSREP_GCOMM_UUID
|
||||
WSREP_INCOMING_ADDRESSES
|
||||
WSREP_LAST_COMMITTED
|
||||
WSREP_LOCAL_BF_ABORTS
|
||||
WSREP_LOCAL_CACHED_DOWNTO
|
||||
WSREP_LOCAL_CERT_FAILURES
|
||||
WSREP_LOCAL_COMMITS
|
||||
WSREP_LOCAL_INDEX
|
||||
WSREP_LOCAL_RECV_QUEUE
|
||||
WSREP_LOCAL_RECV_QUEUE_AVG
|
||||
WSREP_LOCAL_RECV_QUEUE_MAX
|
||||
WSREP_LOCAL_RECV_QUEUE_MIN
|
||||
WSREP_LOCAL_REPLAYS
|
||||
WSREP_LOCAL_SEND_QUEUE
|
||||
WSREP_LOCAL_SEND_QUEUE_AVG
|
||||
WSREP_LOCAL_SEND_QUEUE_MAX
|
||||
WSREP_LOCAL_SEND_QUEUE_MIN
|
||||
WSREP_LOCAL_STATE
|
||||
WSREP_LOCAL_STATE_COMMENT
|
||||
WSREP_LOCAL_STATE_UUID
|
||||
WSREP_PROTOCOL_VERSION
|
||||
WSREP_PROVIDER_NAME
|
||||
WSREP_PROVIDER_VENDOR
|
||||
WSREP_PROVIDER_VERSION
|
||||
WSREP_READY
|
||||
WSREP_RECEIVED
|
||||
WSREP_RECEIVED_BYTES
|
||||
WSREP_REPLICATED
|
||||
WSREP_REPLICATED_BYTES
|
||||
WSREP_REPL_DATA_BYTES
|
||||
WSREP_REPL_KEYS
|
||||
WSREP_REPL_KEYS_BYTES
|
||||
WSREP_REPL_OTHER_BYTES
|
||||
WSREP_THREAD_COUNT
|
||||
|
@ -86,99 +86,3 @@ COUNT(*) = 0
|
||||
DROP TABLE t1;
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
Performing State Transfer on a server that has been killed and restarted
|
||||
while a DDL was in progress on it
|
||||
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
COMMIT;
|
||||
SET GLOBAL debug = 'd,sync.alter_opened_table';
|
||||
ALTER TABLE t1 ADD COLUMN f2 INTEGER;
|
||||
SET wsrep_sync_wait = 0;
|
||||
Killing server ...
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
COMMIT;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
Performing --wsrep-recover ...
|
||||
Starting server ...
|
||||
Using --wsrep-start-position when starting mysqld ...
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
COMMIT;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
COMMIT;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
ROLLBACK;
|
||||
SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||
COUNT(*) = 2
|
||||
1
|
||||
SELECT COUNT(*) = 35 FROM t1;
|
||||
COUNT(*) = 35
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||
COUNT(*) = 2
|
||||
1
|
||||
SELECT COUNT(*) = 35 FROM t1;
|
||||
COUNT(*) = 35
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
DROP TABLE t1;
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
|
@ -7,6 +7,7 @@ GRANT ALL PRIVILEGES ON *.* TO 'sst';
|
||||
SET GLOBAL wsrep_sst_auth = 'sst:';
|
||||
connection node_2;
|
||||
SET GLOBAL wsrep_sst_method = 'mysqldump';
|
||||
call mtr.add_suppression("WSREP: wsrep_sst_method is set to 'mysqldump' yet mysqld bind_address is set to .*");
|
||||
connection node_1;
|
||||
connection node_2;
|
||||
Performing State Transfer on a server that has been shut down cleanly and restarted
|
||||
@ -199,114 +200,6 @@ COUNT(*) = 0
|
||||
DROP TABLE t1;
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
Performing State Transfer on a server that has been killed and restarted
|
||||
while a DDL was in progress on it
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
connection node_2;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
COMMIT;
|
||||
SET GLOBAL debug_dbug = 'd,sync.alter_opened_table';
|
||||
connection node_1;
|
||||
ALTER TABLE t1 ADD COLUMN f2 INTEGER;
|
||||
connection node_2;
|
||||
SET wsrep_sync_wait = 0;
|
||||
Killing server ...
|
||||
connection node_1;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
COMMIT;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
connect node_1a_galera_st_kill_slave_ddl, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
connection node_2;
|
||||
Performing --wsrep-recover ...
|
||||
connection node_2;
|
||||
Starting server ...
|
||||
Using --wsrep-start-position when starting mysqld ...
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
COMMIT;
|
||||
connection node_1;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
COMMIT;
|
||||
connection node_1a_galera_st_kill_slave_ddl;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
ROLLBACK;
|
||||
SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||
COUNT(*) = 2
|
||||
1
|
||||
SELECT COUNT(*) = 35 FROM t1;
|
||||
COUNT(*) = 35
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
connection node_1;
|
||||
SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||
COUNT(*) = 2
|
||||
1
|
||||
SELECT COUNT(*) = 35 FROM t1;
|
||||
COUNT(*) = 35
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
DROP TABLE t1;
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
SET GLOBAL debug_dbug = $debug_orig;
|
||||
connection node_1;
|
||||
CALL mtr.add_suppression("Slave SQL: Error 'The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement' on query");
|
||||
DROP USER sst;
|
||||
|
@ -285,111 +285,3 @@ COUNT(*) = 0
|
||||
DROP TABLE t1;
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
Performing State Transfer on a server that has been killed and restarted
|
||||
while a DDL was in progress on it
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
connection node_2;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
COMMIT;
|
||||
SET GLOBAL debug_dbug = 'd,sync.alter_opened_table';
|
||||
connection node_1;
|
||||
ALTER TABLE t1 ADD COLUMN f2 INTEGER;
|
||||
connection node_2;
|
||||
SET wsrep_sync_wait = 0;
|
||||
Killing server ...
|
||||
connection node_1;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
COMMIT;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
connect node_1a_galera_st_kill_slave_ddl, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
connection node_2;
|
||||
Performing --wsrep-recover ...
|
||||
connection node_2;
|
||||
Starting server ...
|
||||
Using --wsrep-start-position when starting mysqld ...
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
COMMIT;
|
||||
connection node_1;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
COMMIT;
|
||||
connection node_1a_galera_st_kill_slave_ddl;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
ROLLBACK;
|
||||
SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||
COUNT(*) = 2
|
||||
1
|
||||
SELECT COUNT(*) = 35 FROM t1;
|
||||
COUNT(*) = 35
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
connection node_1;
|
||||
SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||
COUNT(*) = 2
|
||||
1
|
||||
SELECT COUNT(*) = 35 FROM t1;
|
||||
COUNT(*) = 35
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
DROP TABLE t1;
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
SET GLOBAL debug_dbug = $debug_orig;
|
||||
|
@ -259,99 +259,3 @@ COUNT(*) = 0
|
||||
DROP TABLE t1;
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
Performing State Transfer on a server that has been killed and restarted
|
||||
while a DDL was in progress on it
|
||||
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
COMMIT;
|
||||
SET GLOBAL debug = 'd,sync.alter_opened_table';
|
||||
ALTER TABLE t1 ADD COLUMN f2 INTEGER;
|
||||
SET wsrep_sync_wait = 0;
|
||||
Killing server ...
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
COMMIT;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
Performing --wsrep-recover ...
|
||||
Starting server ...
|
||||
Using --wsrep-start-position when starting mysqld ...
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
COMMIT;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
COMMIT;
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
ROLLBACK;
|
||||
SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||
COUNT(*) = 2
|
||||
1
|
||||
SELECT COUNT(*) = 35 FROM t1;
|
||||
COUNT(*) = 35
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||
COUNT(*) = 2
|
||||
1
|
||||
SELECT COUNT(*) = 35 FROM t1;
|
||||
COUNT(*) = 35
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
DROP TABLE t1;
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
|
114
mysql-test/suite/galera/r/galera_sst_rsync2,debug.rdiff
Normal file
114
mysql-test/suite/galera/r/galera_sst_rsync2,debug.rdiff
Normal file
@ -0,0 +1,114 @@
|
||||
--- suite/galera/r/galera_sst_rsync2.result 2018-09-12 13:09:35.352229478 +0200
|
||||
+++ suite/galera/r/galera_sst_rsync2,debug.reject 2018-09-12 17:00:51.601974979 +0200
|
||||
@@ -286,3 +286,111 @@
|
||||
DROP TABLE t1;
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
+Performing State Transfer on a server that has been killed and restarted
|
||||
+while a DDL was in progress on it
|
||||
+connection node_1;
|
||||
+CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
+connection node_2;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
+COMMIT;
|
||||
+SET GLOBAL debug_dbug = 'd,sync.alter_opened_table';
|
||||
+connection node_1;
|
||||
+ALTER TABLE t1 ADD COLUMN f2 INTEGER;
|
||||
+connection node_2;
|
||||
+SET wsrep_sync_wait = 0;
|
||||
+Killing server ...
|
||||
+connection node_1;
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
||||
+COMMIT;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+connect node_1a_galera_st_kill_slave_ddl, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+connection node_2;
|
||||
+Performing --wsrep-recover ...
|
||||
+connection node_2;
|
||||
+Starting server ...
|
||||
+Using --wsrep-start-position when starting mysqld ...
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
||||
+COMMIT;
|
||||
+connection node_1;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
||||
+COMMIT;
|
||||
+SET AUTOCOMMIT=OFF;
|
||||
+START TRANSACTION;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
||||
+COMMIT;
|
||||
+connection node_1a_galera_st_kill_slave_ddl;
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
||||
+ROLLBACK;
|
||||
+SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||
+COUNT(*) = 2
|
||||
+1
|
||||
+SELECT COUNT(*) = 35 FROM t1;
|
||||
+COUNT(*) = 35
|
||||
+1
|
||||
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
+COUNT(*) = 0
|
||||
+1
|
||||
+COMMIT;
|
||||
+SET AUTOCOMMIT=ON;
|
||||
+connection node_1;
|
||||
+SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||
+COUNT(*) = 2
|
||||
+1
|
||||
+SELECT COUNT(*) = 35 FROM t1;
|
||||
+COUNT(*) = 35
|
||||
+1
|
||||
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
+COUNT(*) = 0
|
||||
+1
|
||||
+DROP TABLE t1;
|
||||
+COMMIT;
|
||||
+SET AUTOCOMMIT=ON;
|
||||
+SET GLOBAL debug_dbug = $debug_orig;
|
288
mysql-test/suite/galera/r/galera_sst_rsync2.result
Normal file
288
mysql-test/suite/galera/r/galera_sst_rsync2.result
Normal file
@ -0,0 +1,288 @@
|
||||
connection node_1;
|
||||
connection node_2;
|
||||
Performing State Transfer on a server that has been shut down cleanly and restarted
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
COMMIT;
|
||||
connection node_2;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
COMMIT;
|
||||
Shutting down server ...
|
||||
connection node_1;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
COMMIT;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
connect node_1a_galera_st_shutdown_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
connection node_2;
|
||||
Starting server ...
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
COMMIT;
|
||||
connection node_1;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
COMMIT;
|
||||
connection node_1a_galera_st_shutdown_slave;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
ROLLBACK;
|
||||
SELECT COUNT(*) = 35 FROM t1;
|
||||
COUNT(*) = 35
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
connection node_1;
|
||||
SELECT COUNT(*) = 35 FROM t1;
|
||||
COUNT(*) = 35
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
DROP TABLE t1;
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
Performing State Transfer on a server that starts from a clean var directory
|
||||
This is accomplished by shutting down node #2 and removing its var directory before restarting it
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
COMMIT;
|
||||
connection node_2;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
COMMIT;
|
||||
Shutting down server ...
|
||||
connection node_1;
|
||||
Cleaning var directory ...
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
COMMIT;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
connect node_1a_galera_st_clean_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
connection node_2;
|
||||
Starting server ...
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
COMMIT;
|
||||
connection node_1;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
COMMIT;
|
||||
connection node_1a_galera_st_clean_slave;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
ROLLBACK;
|
||||
SELECT COUNT(*) = 35 FROM t1;
|
||||
COUNT(*) = 35
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
connection node_1;
|
||||
SELECT COUNT(*) = 35 FROM t1;
|
||||
COUNT(*) = 35
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
DROP TABLE t1;
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
Performing State Transfer on a server that has been killed and restarted
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
COMMIT;
|
||||
connection node_2;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
COMMIT;
|
||||
Killing server ...
|
||||
connection node_1;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
COMMIT;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
connect node_1a_galera_st_kill_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
connection node_2;
|
||||
Performing --wsrep-recover ...
|
||||
Starting server ...
|
||||
Using --wsrep-start-position when starting mysqld ...
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
COMMIT;
|
||||
connection node_1;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
COMMIT;
|
||||
connection node_1a_galera_st_kill_slave;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
ROLLBACK;
|
||||
SELECT COUNT(*) = 35 FROM t1;
|
||||
COUNT(*) = 35
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
connection node_1;
|
||||
SELECT COUNT(*) = 35 FROM t1;
|
||||
COUNT(*) = 35
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
DROP TABLE t1;
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
@ -0,0 +1,262 @@
|
||||
Performing State Transfer on a server that has been shut down cleanly and restarted
|
||||
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
COMMIT;
|
||||
Shutting down server ...
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
COMMIT;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
Starting server ...
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
COMMIT;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
COMMIT;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
ROLLBACK;
|
||||
SELECT COUNT(*) = 35 FROM t1;
|
||||
COUNT(*) = 35
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
SELECT COUNT(*) = 35 FROM t1;
|
||||
COUNT(*) = 35
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
DROP TABLE t1;
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
Performing State Transfer on a server that starts from a clean var directory
|
||||
This is accomplished by shutting down node #2 and removing its var directory before restarting it
|
||||
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
COMMIT;
|
||||
Shutting down server ...
|
||||
Cleaning var directory ...
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
COMMIT;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
Starting server ...
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
COMMIT;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
COMMIT;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
ROLLBACK;
|
||||
SELECT COUNT(*) = 35 FROM t1;
|
||||
COUNT(*) = 35
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
SELECT COUNT(*) = 35 FROM t1;
|
||||
COUNT(*) = 35
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
DROP TABLE t1;
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
Performing State Transfer on a server that has been killed and restarted
|
||||
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
||||
COMMIT;
|
||||
Killing server ...
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
||||
COMMIT;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
Performing --wsrep-recover ...
|
||||
Starting server ...
|
||||
Using --wsrep-start-position when starting mysqld ...
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
||||
COMMIT;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
||||
COMMIT;
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
||||
ROLLBACK;
|
||||
SELECT COUNT(*) = 35 FROM t1;
|
||||
COUNT(*) = 35
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
SELECT COUNT(*) = 35 FROM t1;
|
||||
COUNT(*) = 35
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
DROP TABLE t1;
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
@ -20,72 +20,11 @@ SET GLOBAL wsrep_slave_threads = 64;
|
||||
connection node_1;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
connection node_2;
|
||||
SELECT COUNT(*) = 1 FROM t1;
|
||||
COUNT(*) = 1
|
||||
1
|
||||
SET GLOBAL wsrep_slave_threads = 1;
|
||||
connection node_1;
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
connection node_2;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
|
111
mysql-test/suite/galera/r/mysql-wsrep#332.result
Normal file
111
mysql-test/suite/galera/r/mysql-wsrep#332.result
Normal file
@ -0,0 +1,111 @@
|
||||
CREATE TABLE p (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
||||
CREATE TABLE c (f1 INTEGER PRIMARY KEY, p_id INTEGER) ENGINE=INNODB;
|
||||
INSERT INTO p VALUES (1, 0);
|
||||
INSERT INTO p VALUES (2, 0);
|
||||
INSERT INTO c VALUES (1, 1);
|
||||
INSERT INTO c VALUES (2, 2);
|
||||
SET AUTOCOMMIT=ON;
|
||||
START TRANSACTION;
|
||||
UPDATE p SET f1 = f1 + 100;
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
SET GLOBAL wsrep_provider_options = 'dbug=d,apply_monitor_slave_enter_sync';
|
||||
ALTER TABLE c ADD FOREIGN KEY (p_id) REFERENCES p(f1);
|
||||
SET SESSION wsrep_on = 0;
|
||||
SET SESSION wsrep_on = 1;
|
||||
SET GLOBAL wsrep_provider_options = 'dbug=';
|
||||
SET GLOBAL wsrep_provider_options = 'dbug=d,local_monitor_enter_sync';
|
||||
COMMIT;
|
||||
SET SESSION wsrep_on = 0;
|
||||
SET SESSION wsrep_on = 1;
|
||||
SET GLOBAL wsrep_provider_options = 'signal=apply_monitor_slave_enter_sync';
|
||||
SET GLOBAL wsrep_provider_options = 'signal=local_monitor_enter_sync';
|
||||
SET GLOBAL wsrep_provider_options = 'dbug=';
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
SELECT * FROM p;
|
||||
f1 f2
|
||||
1 0
|
||||
2 0
|
||||
SELECT * FROM c;
|
||||
f1 p_id
|
||||
1 1
|
||||
2 2
|
||||
DROP TABLE c;
|
||||
DROP TABLE p;
|
||||
CREATE TABLE p1 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
||||
CREATE TABLE p2 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
||||
CREATE TABLE c (f1 INTEGER PRIMARY KEY, p_id1 INTEGER, p_id2 INTEGER) ENGINE=INNODB;
|
||||
INSERT INTO p1 VALUES (1, 0), (2, 0);
|
||||
INSERT INTO p2 VALUES (1, 0), (2, 0);
|
||||
INSERT INTO c VALUES (1, 1, 1);
|
||||
INSERT INTO c VALUES (2, 2, 2);
|
||||
SET AUTOCOMMIT=ON;
|
||||
START TRANSACTION;
|
||||
UPDATE p1 SET f1 = f1 + 100;
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
SET GLOBAL wsrep_provider_options = 'dbug=d,apply_monitor_slave_enter_sync';
|
||||
ALTER TABLE c ADD FOREIGN KEY (p_id1) REFERENCES p1(f1), ADD FOREIGN KEY (p_id2) REFERENCES p2(f1);
|
||||
SET SESSION wsrep_on = 0;
|
||||
SET SESSION wsrep_on = 1;
|
||||
SET GLOBAL wsrep_provider_options = 'dbug=';
|
||||
SET GLOBAL wsrep_provider_options = 'dbug=d,local_monitor_enter_sync';
|
||||
COMMIT;
|
||||
SET SESSION wsrep_on = 0;
|
||||
SET SESSION wsrep_on = 1;
|
||||
SET GLOBAL wsrep_provider_options = 'signal=apply_monitor_slave_enter_sync';
|
||||
SET GLOBAL wsrep_provider_options = 'signal=local_monitor_enter_sync';
|
||||
SET GLOBAL wsrep_provider_options = 'dbug=';
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
SELECT * FROM p1;
|
||||
f1 f2
|
||||
1 0
|
||||
2 0
|
||||
SELECT * FROM p2;
|
||||
f1 f2
|
||||
1 0
|
||||
2 0
|
||||
SELECT * FROM c;
|
||||
f1 p_id1 p_id2
|
||||
1 1 1
|
||||
2 2 2
|
||||
DROP TABLE c;
|
||||
DROP TABLE p1;
|
||||
DROP TABLE p2;
|
||||
CREATE TABLE p1 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
||||
CREATE TABLE p2 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
||||
CREATE TABLE c (f1 INTEGER PRIMARY KEY, p_id1 INTEGER, p_id2 INTEGER) ENGINE=INNODB;
|
||||
INSERT INTO p1 VALUES (1, 0), (2, 0);
|
||||
INSERT INTO p2 VALUES (1, 0), (2, 0);
|
||||
INSERT INTO c VALUES (1, 1, 1);
|
||||
INSERT INTO c VALUES (2, 2, 2);
|
||||
SET AUTOCOMMIT=ON;
|
||||
START TRANSACTION;
|
||||
UPDATE p2 SET f1 = f1 + 100;
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
SET GLOBAL wsrep_provider_options = 'dbug=d,apply_monitor_slave_enter_sync';
|
||||
ALTER TABLE c ADD FOREIGN KEY (p_id1) REFERENCES p1(f1), ADD FOREIGN KEY (p_id2) REFERENCES p2(f1);
|
||||
SET SESSION wsrep_on = 0;
|
||||
SET SESSION wsrep_on = 1;
|
||||
SET GLOBAL wsrep_provider_options = 'dbug=';
|
||||
SET GLOBAL wsrep_provider_options = 'dbug=d,local_monitor_enter_sync';
|
||||
COMMIT;
|
||||
SET SESSION wsrep_on = 0;
|
||||
SET SESSION wsrep_on = 1;
|
||||
SET GLOBAL wsrep_provider_options = 'signal=apply_monitor_slave_enter_sync';
|
||||
SET GLOBAL wsrep_provider_options = 'signal=local_monitor_enter_sync';
|
||||
SET GLOBAL wsrep_provider_options = 'dbug=';
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
SELECT * FROM p1;
|
||||
f1 f2
|
||||
1 0
|
||||
2 0
|
||||
SELECT * FROM p2;
|
||||
f1 f2
|
||||
1 0
|
||||
2 0
|
||||
SELECT * FROM c;
|
||||
f1 p_id1 p_id2
|
||||
1 1 1
|
||||
2 2 2
|
||||
DROP TABLE c;
|
||||
DROP TABLE p1;
|
||||
DROP TABLE p2;
|
@ -79,6 +79,8 @@ push @::global_suppressions,
|
||||
qr|WSREP: .*core_handle_uuid_msg.*|,
|
||||
qr(WSREP: --wsrep-causal-reads=ON takes precedence over --wsrep-sync-wait=0. WSREP_SYNC_WAIT_BEFORE_READ is on),
|
||||
qr|WSREP: JOIN message from member .* in non-primary configuration. Ignored.|,
|
||||
qr(WSREP: Failed to remove page file .*),
|
||||
qr(WSREP: wsrep_sst_method is set to 'mysqldump' yet mysqld bind_address is set to .*),
|
||||
);
|
||||
|
||||
$ENV{PATH}="$epath:$ENV{PATH}";
|
||||
|
@ -6,62 +6,118 @@
|
||||
--source include/have_innodb.inc
|
||||
|
||||
CREATE TABLE t1 (f1 INTEGER) Engine=InnoDB;
|
||||
INSERT INTO t1 values(0);
|
||||
|
||||
--connection node_1
|
||||
|
||||
SET GLOBAL wsrep_slave_threads = 10;
|
||||
SET GLOBAL wsrep_slave_threads = 1;
|
||||
|
||||
--echo # Wait 10 slave threads to start 1
|
||||
--let $wait_timeout=600
|
||||
--let $wait_condition = SELECT COUNT(*) = 11 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND (STATE IS NULL OR STATE NOT LIKE 'InnoDB%');
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--connection node_2
|
||||
INSERT INTO t1 VALUES (1);
|
||||
# Wait until inserts are replicated
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM t1;
|
||||
--source include/wait_condition.inc
|
||||
--echo # Generate 12 replication events
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
--let $count = 12
|
||||
while ($count)
|
||||
{
|
||||
INSERT INTO t1 VALUES (1);
|
||||
--dec $count
|
||||
}
|
||||
--enable_result_log
|
||||
--enable_query_log
|
||||
|
||||
--connection node_1
|
||||
# Wait until inserts are replicated
|
||||
--let $wait_condition = SELECT COUNT(*) = 13 FROM t1;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
--echo # Wait 9 slave threads to exit 1
|
||||
# Wait until appliers exit
|
||||
--let $wait_condition = SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND (STATE IS NULL OR STATE NOT LIKE 'InnoDB%');
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SET GLOBAL wsrep_slave_threads = 10;
|
||||
|
||||
--echo # Wait 10 slave threads to start 2
|
||||
--let $wait_condition = SELECT COUNT(*) = 11 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND (STATE IS NULL OR STATE NOT LIKE 'InnoDB%');
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SET GLOBAL wsrep_slave_threads = 20;
|
||||
|
||||
--echo # Wait 20 slave threads to start 3
|
||||
--let $wait_condition = SELECT COUNT(*) = 21 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND (STATE IS NULL OR STATE NOT LIKE 'InnoDB%');
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SET GLOBAL wsrep_slave_threads = 1;
|
||||
|
||||
--connection node_2
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t1 VALUES (2);
|
||||
INSERT INTO t1 VALUES (3);
|
||||
INSERT INTO t1 VALUES (4);
|
||||
INSERT INTO t1 VALUES (5);
|
||||
INSERT INTO t1 VALUES (6);
|
||||
INSERT INTO t1 VALUES (7);
|
||||
INSERT INTO t1 VALUES (8);
|
||||
INSERT INTO t1 VALUES (9);
|
||||
|
||||
--echo # Generate 40 replication events
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
--let $count = 40
|
||||
while ($count)
|
||||
{
|
||||
INSERT INTO t1 VALUES (1);
|
||||
--dec $count
|
||||
}
|
||||
--enable_query_log
|
||||
--enable_result_log
|
||||
|
||||
--connection node_1
|
||||
--let $wait_condition = SELECT COUNT(*) = 12 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND (STATE IS NULL OR STATE NOT LIKE 'InnoDB%');
|
||||
|
||||
# Wait until inserts are replicated
|
||||
--let $wait_condition = SELECT COUNT(*) = 53 FROM t1;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
--echo # Wait 10 slave threads to exit 3
|
||||
# Wait until appliers exit
|
||||
--let $wait_condition = SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND (STATE IS NULL OR STATE NOT LIKE 'InnoDB%');
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SET GLOBAL wsrep_slave_threads = 10;
|
||||
SET GLOBAL wsrep_slave_threads = 0;
|
||||
|
||||
--echo # Wait 10 slave threads to start 3
|
||||
--let $wait_timeout=600
|
||||
--let $wait_condition = SELECT COUNT(*) = 11 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND (STATE IS NULL OR STATE NOT LIKE 'InnoDB%');
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--connection node_2
|
||||
INSERT INTO t1 VALUES (10);
|
||||
INSERT INTO t1 VALUES (11);
|
||||
INSERT INTO t1 VALUES (12);
|
||||
INSERT INTO t1 VALUES (13);
|
||||
INSERT INTO t1 VALUES (14);
|
||||
INSERT INTO t1 VALUES (15);
|
||||
INSERT INTO t1 VALUES (16);
|
||||
INSERT INTO t1 VALUES (17);
|
||||
INSERT INTO t1 VALUES (18);
|
||||
INSERT INTO t1 VALUES (19);
|
||||
INSERT INTO t1 VALUES (20);
|
||||
--echo # Generate 12 replication events
|
||||
--disable_query_log
|
||||
--disable_result_log
|
||||
--let $count = 12
|
||||
while ($count)
|
||||
{
|
||||
INSERT INTO t1 VALUES (1);
|
||||
--dec $count
|
||||
}
|
||||
--enable_result_log
|
||||
--enable_query_log
|
||||
|
||||
--connection node_1
|
||||
# Wait until inserts are replicated
|
||||
--let $wait_condition = SELECT COUNT(*) = 65 FROM t1;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
--echo # Wait 10 slave threads to exit 4
|
||||
# Wait until appliers exit
|
||||
--let $wait_condition = SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND (STATE IS NULL OR STATE NOT LIKE 'InnoDB%');
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SET GLOBAL wsrep_slave_threads = 1;
|
||||
--connection node_1
|
||||
DROP TABLE t1;
|
||||
|
@ -6,30 +6,32 @@
|
||||
--source include/have_innodb.inc
|
||||
|
||||
--connection node_1
|
||||
SET GLOBAL general_log='OFF';
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
--let $wait_condition = SELECT COUNT(*) = 0 FROM mysql.general_log;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--sleep 1
|
||||
--connection node_2
|
||||
SET GLOBAL general_log='OFF';
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
--let $wait_condition = SELECT COUNT(*) = 0 FROM mysql.general_log;
|
||||
--let $wait_condition = SELECT COUNT(*) = 0 FROM mysql.general_log WHERE argument LIKE 'TRUNCATE%';
|
||||
--source include/wait_condition.inc
|
||||
SELECT Argument FROM mysql.general_log;
|
||||
|
||||
--sleep 1
|
||||
--connection node_1
|
||||
SET GLOBAL general_log='ON';
|
||||
SELECT argument from mysql.general_log WHERE argument NOT LIKE 'SELECT%';
|
||||
--let $wait_condition = SELECT COUNT(*) = 0 FROM mysql.general_log WHERE argument LIKE 'TRUNCATE%';
|
||||
--source include/wait_condition.inc
|
||||
SELECT Argument FROM mysql.general_log;
|
||||
|
||||
SET GLOBAL general_log='ON';
|
||||
SET SESSION wsrep_osu_method=TOI;
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
||||
SET SESSION wsrep_osu_method=RSU;
|
||||
ALTER TABLE t1 ADD COLUMN f2 INTEGER;
|
||||
SET SESSION wsrep_osu_method=TOI;
|
||||
|
||||
SELECT COUNT(*) = 2 FROM mysql.general_log WHERE argument LIKE 'CREATE%' OR argument LIKE 'ALTER%';
|
||||
--let $wait_condition = SELECT COUNT(argument) = 2 FROM mysql.general_log WHERE argument LIKE 'CREATE%' OR argument LIKE 'ALTER%';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SELECT argument FROM mysql.general_log WHERE argument LIKE 'CREATE%' OR argument LIKE 'ALTER%';
|
||||
|
||||
--connection node_2
|
||||
SET GLOBAL general_log='ON';
|
||||
|
26
mysql-test/suite/galera/t/galera#505.test
Normal file
26
mysql-test/suite/galera/t/galera#505.test
Normal file
@ -0,0 +1,26 @@
|
||||
# galera#505 - Change of pc.weight wsrep param will be correctly stored in wsrep_provider_options variable
|
||||
|
||||
--source include/galera_cluster.inc
|
||||
|
||||
--connection node_1
|
||||
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
--disable_result_log
|
||||
--disable_query_log
|
||||
--let $galera_version=25.3.24
|
||||
source ../../wsrep/include/check_galera_version.inc;
|
||||
--enable_result_log
|
||||
--enable_query_log
|
||||
SET SESSION wsrep_sync_wait=DEFAULT;
|
||||
|
||||
# Convert "... pc.weight = N; ..." to "N; ..."
|
||||
--let $s1 = `SELECT SUBSTR(@@wsrep_provider_options, LOCATE('pc.weight =', @@wsrep_provider_options) + LENGTH('pc.weight = '))`
|
||||
# Convert "N; ..." to "N"
|
||||
--let $pc_weight_value = `SELECT SUBSTR('$s1', 1, LOCATE(';', '$s1') - 1)`
|
||||
|
||||
SET GLOBAL wsrep_provider_options = 'pc.weight=3';
|
||||
|
||||
-- replace_regex /.*(pc\.weight = [0-9]+);.*/\1/
|
||||
SHOW GLOBAL VARIABLES LIKE 'wsrep_provider_options';
|
||||
|
||||
--eval SET GLOBAL wsrep_provider_options = 'pc.weight=$pc_weight_value'
|
@ -13,7 +13,7 @@
|
||||
|
||||
# Make sure that the test is operating on the right version of galera library.
|
||||
--disable_query_log
|
||||
--let $galera_version=3.20
|
||||
--let $galera_version=25.3.20
|
||||
source ../wsrep/include/check_galera_version.inc;
|
||||
--enable_query_log
|
||||
|
||||
@ -59,14 +59,3 @@ ORDER BY VARIABLE_NAME;
|
||||
$wsrep_provider_options =~ s/repl.proto_max = .*?;\s*/<REPL_PROTO_MAX>;/sgio;
|
||||
print $wsrep_provider_options."\n";
|
||||
EOF
|
||||
|
||||
# Global Status
|
||||
|
||||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.GLOBAL_STATUS
|
||||
WHERE VARIABLE_NAME LIKE 'wsrep_%'
|
||||
AND VARIABLE_NAME != 'wsrep_debug_sync_waiters';
|
||||
|
||||
SELECT VARIABLE_NAME FROM INFORMATION_SCHEMA.GLOBAL_STATUS
|
||||
WHERE VARIABLE_NAME LIKE 'wsrep_%'
|
||||
AND VARIABLE_NAME != 'wsrep_debug_sync_waiters'
|
||||
ORDER BY VARIABLE_NAME;
|
||||
|
@ -4,6 +4,8 @@
|
||||
|
||||
--source suite/galera/include/galera_sst_set_mysqldump.inc
|
||||
|
||||
call mtr.add_suppression("WSREP: wsrep_sst_method is set to 'mysqldump' yet mysqld bind_address is set to .*");
|
||||
|
||||
--let $node_1=node_1
|
||||
--let $node_2=node_2
|
||||
--source include/auto_increment_offset_save.inc
|
||||
|
@ -3,8 +3,13 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_xtrabackup.inc
|
||||
|
||||
--let $node_1=node_1
|
||||
--let $node_2=node_2
|
||||
--source include/auto_increment_offset_save.inc
|
||||
|
||||
--source suite/galera/include/galera_st_disconnect_slave.inc
|
||||
--source suite/galera/include/galera_st_shutdown_slave.inc
|
||||
|
||||
--source suite/galera/include/galera_st_kill_slave.inc
|
||||
--source suite/galera/include/galera_st_kill_slave_ddl.inc
|
||||
--source include/auto_increment_offset_restore.inc
|
||||
|
15
mysql-test/suite/galera/t/galera_sst_rsync2.cnf
Normal file
15
mysql-test/suite/galera/t/galera_sst_rsync2.cnf
Normal file
@ -0,0 +1,15 @@
|
||||
!include ../galera_2nodes.cnf
|
||||
|
||||
[mysqld]
|
||||
wsrep_sst_method=rsync
|
||||
|
||||
[mysqld.1]
|
||||
wsrep_provider_options='base_port=@mysqld.1.#galera_port;gcache.size=1;pc.ignore_sb=true'
|
||||
log_bin=@ENV.MYSQLTEST_VARDIR/server1_binlog
|
||||
log_bin_index=@ENV.MYSQLTEST_VARDIR/tmp/server1_binlog_index.index
|
||||
|
||||
[mysqld.2]
|
||||
wsrep_provider_options='base_port=@mysqld.2.#galera_port;gcache.size=1;pc.ignore_sb=true'
|
||||
log_bin=@ENV.MYSQLTEST_VARDIR/server2_binlog
|
||||
log_bin_index=@ENV.MYSQLTEST_VARDIR/tmp/server2_binlog_index.index
|
||||
|
12
mysql-test/suite/galera/t/galera_sst_rsync2.test
Normal file
12
mysql-test/suite/galera/t/galera_sst_rsync2.test
Normal file
@ -0,0 +1,12 @@
|
||||
--source include/galera_cluster.inc
|
||||
|
||||
--let $node_1=node_1
|
||||
--let $node_2=node_2
|
||||
--source include/auto_increment_offset_save.inc
|
||||
|
||||
--source suite/galera/include/galera_st_shutdown_slave.inc
|
||||
--source suite/galera/include/galera_st_clean_slave.inc
|
||||
|
||||
--source suite/galera/include/galera_st_kill_slave.inc
|
||||
--source suite/galera/include/galera_st_kill_slave_ddl.inc
|
||||
--source include/auto_increment_offset_restore.inc
|
@ -0,0 +1,16 @@
|
||||
!include ../galera_2nodes.cnf
|
||||
|
||||
[mysqld]
|
||||
wsrep_sst_method=xtrabackup-v2
|
||||
wsrep_sst_auth="root:"
|
||||
wsrep_debug=ON
|
||||
|
||||
[mysqld.1]
|
||||
wsrep_provider_options='base_port=@mysqld.1.#galera_port;gcache.size=1;pc.ignore_sb=true'
|
||||
|
||||
[mysqld.2]
|
||||
innodb_data_home_dir=@ENV.MYSQL_TMP_DIR/rsync_test_2
|
||||
wsrep_provider_options='base_port=@mysqld.2.#galera_port;gcache.size=1;pc.ignore_sb=true'
|
||||
|
||||
[sst]
|
||||
transferfmt=@ENV.MTR_GALERA_TFMT
|
@ -0,0 +1,23 @@
|
||||
--source include/big_test.inc
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_xtrabackup.inc
|
||||
|
||||
# Save original auto_increment_offset values.
|
||||
--let $node_1=node_1
|
||||
--let $node_2=node_2
|
||||
--source include/auto_increment_offset_save.inc
|
||||
|
||||
--source suite/galera/include/galera_st_shutdown_slave.inc
|
||||
--source suite/galera/include/galera_st_clean_slave.inc
|
||||
|
||||
--source suite/galera/include/galera_st_kill_slave.inc
|
||||
--source suite/galera/include/galera_st_kill_slave_ddl.inc
|
||||
|
||||
# Restore original auto_increment_offset values.
|
||||
--source include/auto_increment_offset_restore.inc
|
||||
|
||||
--source include/galera_end.inc
|
||||
|
||||
# cleanup temporary database files:
|
||||
--remove_files_wildcard $MYSQL_TMP_DIR/rsync_test_2 *
|
@ -33,6 +33,12 @@ SET GLOBAL wsrep_slave_threads = 64;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
--connection node_2
|
||||
--let $wait_timeout=600
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM t1;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SELECT COUNT(*) = 1 FROM t1;
|
||||
|
||||
--let $wait_condition = SELECT COUNT(*) = @@wsrep_slave_threads + 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND (STATE IS NULL OR STATE NOT LIKE 'InnoDB%');
|
||||
--source include/wait_condition.inc
|
||||
|
||||
@ -44,6 +50,8 @@ SET GLOBAL wsrep_slave_threads = 1;
|
||||
|
||||
--connection node_1
|
||||
|
||||
--disable_result_log
|
||||
--disable_query_log
|
||||
# Generate 64 replication events
|
||||
--let $count = 64
|
||||
while ($count)
|
||||
@ -51,6 +59,8 @@ while ($count)
|
||||
INSERT INTO t2 VALUES (DEFAULT);
|
||||
--dec $count
|
||||
}
|
||||
--enable_query_log
|
||||
--enable_result_log
|
||||
|
||||
--connection node_2
|
||||
SELECT COUNT(*) FROM t2;
|
||||
|
113
mysql-test/suite/galera/t/mysql-wsrep#332.test
Normal file
113
mysql-test/suite/galera/t/mysql-wsrep#332.test
Normal file
@ -0,0 +1,113 @@
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug_sync.inc
|
||||
--source suite/galera/include/galera_have_debug_sync.inc
|
||||
|
||||
# Open connection node_1a here, MW-369.inc will use it later
|
||||
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
||||
|
||||
#
|
||||
# Test the scenario where a foreign key is added to an existing child table, and
|
||||
# concurrently UPDATE the parent table so that it violates the constraint.
|
||||
#
|
||||
# We expect that ALTER TABLE ADD FOREIGN KEY adds a table level key on both
|
||||
# parent and child table. And therefore we also expect the UPDATE to fail
|
||||
# certification.
|
||||
#
|
||||
--connection node_1
|
||||
CREATE TABLE p (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
||||
CREATE TABLE c (f1 INTEGER PRIMARY KEY, p_id INTEGER) ENGINE=INNODB;
|
||||
|
||||
INSERT INTO p VALUES (1, 0);
|
||||
INSERT INTO p VALUES (2, 0);
|
||||
|
||||
INSERT INTO c VALUES (1, 1);
|
||||
INSERT INTO c VALUES (2, 2);
|
||||
|
||||
--let $mw_369_parent_query = UPDATE p SET f1 = f1 + 100
|
||||
--let $mw_369_child_query = ALTER TABLE c ADD FOREIGN KEY (p_id) REFERENCES p(f1)
|
||||
|
||||
--source MW-369.inc
|
||||
|
||||
# Expect certification failure
|
||||
--connection node_1
|
||||
--error ER_LOCK_DEADLOCK
|
||||
--reap
|
||||
|
||||
--connection node_2
|
||||
SELECT * FROM p;
|
||||
SELECT * FROM c;
|
||||
|
||||
DROP TABLE c;
|
||||
DROP TABLE p;
|
||||
|
||||
|
||||
#
|
||||
# Same as above, except that two foreign keys pointing to different parent
|
||||
# tables are added, p1 and p2. Concurrently UPDATE p1.
|
||||
#
|
||||
# Expect certification error on UPDATE.
|
||||
#
|
||||
--connection node_1
|
||||
CREATE TABLE p1 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
||||
CREATE TABLE p2 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
||||
CREATE TABLE c (f1 INTEGER PRIMARY KEY, p_id1 INTEGER, p_id2 INTEGER) ENGINE=INNODB;
|
||||
|
||||
INSERT INTO p1 VALUES (1, 0), (2, 0);
|
||||
INSERT INTO p2 VALUES (1, 0), (2, 0);
|
||||
|
||||
INSERT INTO c VALUES (1, 1, 1);
|
||||
INSERT INTO c VALUES (2, 2, 2);
|
||||
|
||||
--let $mw_369_parent_query = UPDATE p1 SET f1 = f1 + 100
|
||||
--let $mw_369_child_query = ALTER TABLE c ADD FOREIGN KEY (p_id1) REFERENCES p1(f1), ADD FOREIGN KEY (p_id2) REFERENCES p2(f1)
|
||||
|
||||
--source MW-369.inc
|
||||
|
||||
# Expect certification failure
|
||||
--connection node_1
|
||||
--error ER_LOCK_DEADLOCK
|
||||
--reap
|
||||
|
||||
--connection node_2
|
||||
SELECT * FROM p1;
|
||||
SELECT * FROM p2;
|
||||
SELECT * FROM c;
|
||||
|
||||
DROP TABLE c;
|
||||
DROP TABLE p1;
|
||||
DROP TABLE p2;
|
||||
|
||||
|
||||
#
|
||||
# Same as above, except that UPDATE is on p2.
|
||||
#
|
||||
--connection node_1
|
||||
CREATE TABLE p1 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
||||
CREATE TABLE p2 (f1 INTEGER PRIMARY KEY, f2 INTEGER) ENGINE=INNODB;
|
||||
CREATE TABLE c (f1 INTEGER PRIMARY KEY, p_id1 INTEGER, p_id2 INTEGER) ENGINE=INNODB;
|
||||
|
||||
INSERT INTO p1 VALUES (1, 0), (2, 0);
|
||||
INSERT INTO p2 VALUES (1, 0), (2, 0);
|
||||
|
||||
INSERT INTO c VALUES (1, 1, 1);
|
||||
INSERT INTO c VALUES (2, 2, 2);
|
||||
|
||||
--let $mw_369_parent_query = UPDATE p2 SET f1 = f1 + 100
|
||||
--let $mw_369_child_query = ALTER TABLE c ADD FOREIGN KEY (p_id1) REFERENCES p1(f1), ADD FOREIGN KEY (p_id2) REFERENCES p2(f1)
|
||||
|
||||
--source MW-369.inc
|
||||
|
||||
# Expect certification failure
|
||||
--connection node_1
|
||||
--error ER_LOCK_DEADLOCK
|
||||
--reap
|
||||
|
||||
--connection node_2
|
||||
SELECT * FROM p1;
|
||||
SELECT * FROM p2;
|
||||
SELECT * FROM c;
|
||||
|
||||
DROP TABLE c;
|
||||
DROP TABLE p1;
|
||||
DROP TABLE p2;
|
@ -1,11 +1,17 @@
|
||||
SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_weight';
|
||||
VARIABLE_VALUE = 3
|
||||
SET GLOBAL wsrep_provider_options = 'pc.weight=3';
|
||||
Suspending node ...
|
||||
SELECT VARIABLE_VALUE = 5 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_weight';
|
||||
VARIABLE_VALUE = 5
|
||||
SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1';
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
SET SESSION wsrep_on=OFF;
|
||||
SET SESSION wsrep_on=ON;
|
||||
SHOW STATUS LIKE 'wsrep_cluster_size';
|
||||
Variable_name Value
|
||||
wsrep_cluster_size 2
|
||||
SHOW STATUS LIKE 'wsrep_cluster_weight';
|
||||
Variable_name Value
|
||||
SHOW STATUS LIKE 'wsrep_cluster_status';
|
||||
Variable_name Value
|
||||
wsrep_cluster_status non-Primary
|
||||
@ -22,9 +28,13 @@ SHOW STATUS LIKE 'wsrep_local_state_comment';
|
||||
Variable_name Value
|
||||
wsrep_local_state_comment Initialized
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
SET SESSION wsrep_on=OFF;
|
||||
SET SESSION wsrep_on=ON;
|
||||
SHOW STATUS LIKE 'wsrep_cluster_size';
|
||||
Variable_name Value
|
||||
wsrep_cluster_size 2
|
||||
SHOW STATUS LIKE 'wsrep_cluster_weight';
|
||||
Variable_name Value
|
||||
SHOW STATUS LIKE 'wsrep_cluster_status';
|
||||
Variable_name Value
|
||||
wsrep_cluster_status non-Primary
|
||||
@ -40,7 +50,8 @@ wsrep_local_state 0
|
||||
SHOW STATUS LIKE 'wsrep_local_state_comment';
|
||||
Variable_name Value
|
||||
wsrep_local_state_comment Initialized
|
||||
Resuming node ...
|
||||
SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_weight';
|
||||
VARIABLE_VALUE = 3
|
||||
SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
|
||||
VARIABLE_VALUE = 'Primary'
|
||||
1
|
||||
@ -57,11 +68,14 @@ SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VAR
|
||||
VARIABLE_VALUE = 'Synced'
|
||||
1
|
||||
SET GLOBAL wsrep_provider_options = 'pc.weight=1';
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_weight';
|
||||
VARIABLE_VALUE = 1
|
||||
SET GLOBAL wsrep_provider_options = 'gmcast.isolate=0';
|
||||
SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
VARIABLE_VALUE = 3
|
||||
1
|
||||
SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_weight';
|
||||
VARIABLE_VALUE = 3
|
||||
SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
|
||||
VARIABLE_VALUE = 'Primary'
|
||||
1
|
||||
@ -80,6 +94,8 @@ VARIABLE_VALUE = 'Synced'
|
||||
SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
VARIABLE_VALUE = 3
|
||||
1
|
||||
SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_weight';
|
||||
VARIABLE_VALUE = 3
|
||||
SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
|
||||
VARIABLE_VALUE = 'Primary'
|
||||
1
|
||||
@ -98,6 +114,8 @@ VARIABLE_VALUE = 'Synced'
|
||||
SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
VARIABLE_VALUE = 3
|
||||
1
|
||||
SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_weight';
|
||||
VARIABLE_VALUE = 3
|
||||
SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
|
||||
VARIABLE_VALUE = 'Primary'
|
||||
1
|
||||
@ -116,6 +134,9 @@ VARIABLE_VALUE = 'Synced'
|
||||
SET GLOBAL wsrep_provider_options = 'pc.weight=1';
|
||||
CALL mtr.add_suppression('WSREP: gcs_caused\\(\\) returned -1');
|
||||
CALL mtr.add_suppression('overriding reported weight for');
|
||||
CALL mtr.add_suppression('SYNC message from member');
|
||||
CALL mtr.add_suppression('user message in state LEAVING');
|
||||
CALL mtr.add_suppression('sending install message failed: (Transport endpoint is not connected|Socket is not connected)');
|
||||
CALL mtr.add_suppression('WSREP: user message in state LEAVING');
|
||||
CALL mtr.add_suppression('sending install message failed: Transport endpoint is not connected');
|
||||
CALL mtr.add_suppression('sending install message failed: (Transport endpoint is not connected|Socket is not connected)');
|
||||
CALL mtr.add_suppression('overriding reported weight for');
|
||||
|
@ -8,9 +8,12 @@
|
||||
--source include/have_innodb.inc
|
||||
|
||||
--connection node_1
|
||||
SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_weight';
|
||||
SET GLOBAL wsrep_provider_options = 'pc.weight=3';
|
||||
--source include/galera_suspend.inc
|
||||
--sleep 10
|
||||
SELECT VARIABLE_VALUE = 5 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_weight';
|
||||
|
||||
# Isolate node_1 from the cluster.
|
||||
SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1';
|
||||
|
||||
--connection node_2
|
||||
# Do not wait for causality as we are no longer in the primary component
|
||||
@ -22,8 +25,9 @@ SET SESSION wsrep_on=ON;
|
||||
|
||||
# We can not use SELECT queries here, as only SHOW is allowed to run.
|
||||
# For nodes #2 and #3, we expect a non-primary component of size 2
|
||||
|
||||
# and cluster weight 0
|
||||
SHOW STATUS LIKE 'wsrep_cluster_size';
|
||||
SHOW STATUS LIKE 'wsrep_cluster_weight';
|
||||
SHOW STATUS LIKE 'wsrep_cluster_status';
|
||||
SHOW STATUS LIKE 'wsrep_connected';
|
||||
SHOW STATUS LIKE 'wsrep_ready';
|
||||
@ -35,8 +39,13 @@ SHOW STATUS LIKE 'wsrep_local_state_comment';
|
||||
--source include/galera_connect.inc
|
||||
--connection node_3
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
SET SESSION wsrep_on=OFF;
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'non-Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'
|
||||
--source include/wait_condition.inc
|
||||
SET SESSION wsrep_on=ON;
|
||||
|
||||
SHOW STATUS LIKE 'wsrep_cluster_size';
|
||||
SHOW STATUS LIKE 'wsrep_cluster_weight';
|
||||
SHOW STATUS LIKE 'wsrep_cluster_status';
|
||||
SHOW STATUS LIKE 'wsrep_connected';
|
||||
SHOW STATUS LIKE 'wsrep_ready';
|
||||
@ -44,15 +53,13 @@ SHOW STATUS LIKE 'wsrep_local_state';
|
||||
SHOW STATUS LIKE 'wsrep_local_state_comment';
|
||||
|
||||
--connection node_1
|
||||
--source include/galera_resume.inc
|
||||
--sleep 10
|
||||
--source include/wait_until_connected_again.inc
|
||||
|
||||
# For Node #1, we expect a primary component of size 1
|
||||
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_weight';
|
||||
SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
|
||||
SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_connected';
|
||||
SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
|
||||
@ -60,30 +67,27 @@ SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_N
|
||||
SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment';
|
||||
|
||||
SET GLOBAL wsrep_provider_options = 'pc.weight=1';
|
||||
SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_weight';
|
||||
|
||||
# Restore the cluster by resetting wsrep_cluster_address on nodes #1 and #2
|
||||
# Resume cluster connectivity on node_1
|
||||
--connection node_1
|
||||
SET GLOBAL wsrep_provider_options = 'gmcast.isolate=0';
|
||||
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--connection node_2
|
||||
--disable_query_log
|
||||
--eval SET GLOBAL wsrep_cluster_address = @@wsrep_cluster_address;
|
||||
--enable_query_log
|
||||
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
--source include/wait_until_connected_again.inc
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--connection node_3
|
||||
--disable_query_log
|
||||
--eval SET GLOBAL wsrep_cluster_address = @@wsrep_cluster_address;
|
||||
--enable_query_log
|
||||
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
--source include/wait_until_connected_again.inc
|
||||
|
||||
# On all nodes, we now expect a Primary component of size 3, Synced and ready
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--connection node_1
|
||||
--source include/wait_until_connected_again.inc
|
||||
--source include/wait_condition.inc
|
||||
|
||||
# On all nodes, we now expect a Primary component of size 3, weight 3, Synced and ready
|
||||
SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_weight';
|
||||
SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
|
||||
SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_connected';
|
||||
SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
|
||||
@ -92,6 +96,7 @@ SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VAR
|
||||
|
||||
--connection node_2
|
||||
SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_weight';
|
||||
SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
|
||||
SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_connected';
|
||||
SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
|
||||
@ -100,6 +105,7 @@ SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VAR
|
||||
|
||||
--connection node_3
|
||||
SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_weight';
|
||||
SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
|
||||
SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_connected';
|
||||
SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
|
||||
@ -116,8 +122,11 @@ CALL mtr.add_suppression('WSREP: gcs_caused\\(\\) returned -1');
|
||||
|
||||
--connection node_2
|
||||
CALL mtr.add_suppression('overriding reported weight for');
|
||||
CALL mtr.add_suppression('SYNC message from member');
|
||||
CALL mtr.add_suppression('user message in state LEAVING');
|
||||
CALL mtr.add_suppression('sending install message failed: (Transport endpoint is not connected|Socket is not connected)');
|
||||
|
||||
--connection node_3
|
||||
CALL mtr.add_suppression('WSREP: user message in state LEAVING');
|
||||
CALL mtr.add_suppression('sending install message failed: Transport endpoint is not connected');
|
||||
CALL mtr.add_suppression('sending install message failed: (Transport endpoint is not connected|Socket is not connected)');
|
||||
CALL mtr.add_suppression('overriding reported weight for');
|
||||
|
@ -51,3 +51,76 @@ c d
|
||||
6 30
|
||||
drop table t2, t1;
|
||||
drop user foo;
|
||||
create table t1 (f1 int primary key) engine=innodb;
|
||||
create table t2 (f2 int primary key) engine=innodb;
|
||||
create table t3 (f3 int primary key, foreign key (f3) references t2(f2)) engine=innodb;
|
||||
insert into t1 values (1),(2),(3),(4),(5);
|
||||
insert into t2 values (1),(2),(3),(4),(5);
|
||||
insert into t3 values (1),(2),(3),(4),(5);
|
||||
connect con1,localhost,root;
|
||||
set debug_sync='alter_table_before_rename_result_table signal g1 wait_for g2';
|
||||
alter table t2 add constraint foreign key (f2) references t1(f1) on delete cascade on update cascade;
|
||||
connection default;
|
||||
set debug_sync='before_execute_sql_command wait_for g1';
|
||||
update t1 set f1 = f1 + 100000 limit 2;
|
||||
connect con2,localhost,root;
|
||||
kill query UPDATE;
|
||||
disconnect con2;
|
||||
connection default;
|
||||
ERROR 70100: Query execution was interrupted
|
||||
set debug_sync='now signal g2';
|
||||
connection con1;
|
||||
show create table t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`f2` int(11) NOT NULL,
|
||||
PRIMARY KEY (`f2`),
|
||||
CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`f2`) REFERENCES `t1` (`f1`) ON DELETE CASCADE ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
disconnect con1;
|
||||
connection default;
|
||||
select * from t2 where f2 not in (select f1 from t1);
|
||||
f2
|
||||
select * from t3 where f3 not in (select f2 from t2);
|
||||
f3
|
||||
drop table t3;
|
||||
drop table t2;
|
||||
drop table t1;
|
||||
set debug_sync='reset';
|
||||
create table t1 (a int primary key, b int) engine=innodb;
|
||||
create table t2 (c int primary key, d int,
|
||||
foreign key (d) references t1 (a) on update cascade) engine=innodb;
|
||||
insert t1 values (1,1),(2,2),(3,3);
|
||||
insert t2 values (4,1),(5,2),(6,3);
|
||||
flush table t2 with read lock;
|
||||
connect con1,localhost,root;
|
||||
delete from t1 where a=2;
|
||||
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`d`) REFERENCES `t1` (`a`) ON UPDATE CASCADE)
|
||||
update t1 set a=10 where a=1;
|
||||
connection default;
|
||||
unlock tables;
|
||||
connection con1;
|
||||
connection default;
|
||||
lock table t2 write;
|
||||
connection con1;
|
||||
delete from t1 where a=2;
|
||||
connection default;
|
||||
unlock tables;
|
||||
connection con1;
|
||||
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`d`) REFERENCES `t1` (`a`) ON UPDATE CASCADE)
|
||||
connection default;
|
||||
unlock tables;
|
||||
disconnect con1;
|
||||
create user foo;
|
||||
grant select,update on test.t1 to foo;
|
||||
connect foo,localhost,foo;
|
||||
update t1 set a=30 where a=3;
|
||||
disconnect foo;
|
||||
connection default;
|
||||
select * from t2;
|
||||
c d
|
||||
5 2
|
||||
4 10
|
||||
6 30
|
||||
drop table t2, t1;
|
||||
drop user foo;
|
||||
|
@ -317,3 +317,22 @@ engine=innodb;
|
||||
insert into t1 values(1, 1);
|
||||
insert into t2(f1) values(1);
|
||||
drop table t2, t1;
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
CREATE TABLE staff (
|
||||
staff_id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
store_id TINYINT UNSIGNED NOT NULL,
|
||||
PRIMARY KEY (staff_id),
|
||||
KEY idx_fk_store_id (store_id),
|
||||
CONSTRAINT fk_staff_store FOREIGN KEY (store_id) REFERENCES store (store_id) ON DELETE RESTRICT ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
CREATE TABLE store (
|
||||
store_id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
manager_staff_id TINYINT UNSIGNED NOT NULL,
|
||||
PRIMARY KEY (store_id),
|
||||
UNIQUE KEY idx_unique_manager (manager_staff_id),
|
||||
CONSTRAINT fk_store_staff FOREIGN KEY (manager_staff_id) REFERENCES staff (staff_id) ON DELETE RESTRICT ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
SET FOREIGN_KEY_CHECKS=DEFAULT;
|
||||
LOCK TABLE staff WRITE;
|
||||
UNLOCK TABLES;
|
||||
DROP TABLES staff, store;
|
||||
|
@ -2,18 +2,15 @@ set global innodb_table_locks=1;
|
||||
select @@innodb_table_locks;
|
||||
@@innodb_table_locks
|
||||
1
|
||||
connect con1,localhost,root,,;
|
||||
connect con2,localhost,root,,;
|
||||
drop table if exists t1;
|
||||
set @@innodb_table_locks=1;
|
||||
connection con1;
|
||||
connect con1,localhost,root,,;
|
||||
create table t1 (id integer, x integer) engine=INNODB;
|
||||
insert into t1 values(0, 0);
|
||||
set autocommit=0;
|
||||
SELECT * from t1 where id = 0 FOR UPDATE;
|
||||
id x
|
||||
0 0
|
||||
connection con2;
|
||||
connect con2,localhost,root,,;
|
||||
set autocommit=0;
|
||||
lock table t1 write;
|
||||
connection con1;
|
||||
@ -116,13 +113,49 @@ Warnings:
|
||||
Warning 1062 Duplicate entry '3' for key 'PRIMARY'
|
||||
SELECT * FROM t1 FOR UPDATE;
|
||||
connection con2;
|
||||
disconnect con2;
|
||||
connection default;
|
||||
COMMIT;
|
||||
connection con1;
|
||||
a b
|
||||
3 1
|
||||
COMMIT;
|
||||
disconnect con1;
|
||||
disconnect con2;
|
||||
connection default;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-11080 InnoDB: Failing assertion:
|
||||
# table->n_waiting_or_granted_auto_inc_locks > 0
|
||||
#
|
||||
CREATE TABLE t1 (pk INTEGER AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (NULL),(NULL);
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
BEGIN;
|
||||
connection con1;
|
||||
BEGIN;
|
||||
DELETE FROM t2;
|
||||
connection default;
|
||||
LOCK TABLE t2 READ;;
|
||||
connection con1;
|
||||
SET innodb_lock_wait_timeout= 1, lock_wait_timeout= 2;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
COMMIT;
|
||||
connection default;
|
||||
UNLOCK TABLES;
|
||||
DROP TABLE t1, t2;
|
||||
#
|
||||
# MDEV-16709 InnoDB: Error: trx already had an AUTO-INC lock
|
||||
#
|
||||
CREATE TABLE t1 (pk INT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB
|
||||
PARTITION BY key (pk) PARTITIONS 2;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1),(2),(3),(4),(5),(6);
|
||||
CREATE TABLE t3 (b INT) ENGINE=InnoDB;
|
||||
INSERT INTO t3 VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
connection con1;
|
||||
INSERT t1 SELECT NULL FROM t2;
|
||||
connection default;
|
||||
INSERT t1 SELECT NULL FROM t3;
|
||||
connection con1;
|
||||
disconnect con1;
|
||||
connection default;
|
||||
DROP TABLE t1, t2, t3;
|
||||
|
@ -1,5 +1,8 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/have_debug_sync.inc
|
||||
|
||||
--enable_connect_log
|
||||
|
||||
--echo #
|
||||
--echo # Bug #19471516 SERVER CRASHES WHEN EXECUTING ALTER TABLE
|
||||
@ -70,3 +73,87 @@ connection default;
|
||||
select * from t2;
|
||||
drop table t2, t1;
|
||||
drop user foo;
|
||||
|
||||
#
|
||||
# MDEV-16465 Invalid (old?) table or database name or hang in ha_innobase::delete_table and log semaphore wait upon concurrent DDL with foreign keys
|
||||
#
|
||||
create table t1 (f1 int primary key) engine=innodb;
|
||||
create table t2 (f2 int primary key) engine=innodb;
|
||||
create table t3 (f3 int primary key, foreign key (f3) references t2(f2)) engine=innodb;
|
||||
insert into t1 values (1),(2),(3),(4),(5);
|
||||
insert into t2 values (1),(2),(3),(4),(5);
|
||||
insert into t3 values (1),(2),(3),(4),(5);
|
||||
connect con1,localhost,root;
|
||||
set debug_sync='alter_table_before_rename_result_table signal g1 wait_for g2';
|
||||
send alter table t2 add constraint foreign key (f2) references t1(f1) on delete cascade on update cascade;
|
||||
connection default;
|
||||
let $conn=`select connection_id()`;
|
||||
set debug_sync='before_execute_sql_command wait_for g1';
|
||||
send update t1 set f1 = f1 + 100000 limit 2;
|
||||
connect con2,localhost,root;
|
||||
let $wait_condition= select 1 from information_schema.processlist where state='Waiting for table metadata lock' and info like 'update t1 %';
|
||||
source include/wait_condition.inc;
|
||||
--replace_result $conn UPDATE
|
||||
eval kill query $conn;
|
||||
disconnect con2;
|
||||
connection default;
|
||||
error ER_QUERY_INTERRUPTED;
|
||||
reap;
|
||||
set debug_sync='now signal g2';
|
||||
connection con1;
|
||||
reap;
|
||||
show create table t2;
|
||||
disconnect con1;
|
||||
connection default;
|
||||
select * from t2 where f2 not in (select f1 from t1);
|
||||
select * from t3 where f3 not in (select f2 from t2);
|
||||
drop table t3;
|
||||
drop table t2;
|
||||
drop table t1;
|
||||
set debug_sync='reset';
|
||||
|
||||
#
|
||||
# FK and prelocking:
|
||||
# child table accesses (reads and writes) wait for locks.
|
||||
#
|
||||
create table t1 (a int primary key, b int) engine=innodb;
|
||||
create table t2 (c int primary key, d int,
|
||||
foreign key (d) references t1 (a) on update cascade) engine=innodb;
|
||||
insert t1 values (1,1),(2,2),(3,3);
|
||||
insert t2 values (4,1),(5,2),(6,3);
|
||||
flush table t2 with read lock; # this takes MDL_SHARED_NO_WRITE
|
||||
connect (con1,localhost,root);
|
||||
--error ER_ROW_IS_REFERENCED_2
|
||||
delete from t1 where a=2;
|
||||
send update t1 set a=10 where a=1;
|
||||
connection default;
|
||||
let $wait_condition= select 1 from information_schema.processlist where state='Waiting for table metadata lock';
|
||||
source include/wait_condition.inc;
|
||||
unlock tables;
|
||||
connection con1;
|
||||
reap;
|
||||
connection default;
|
||||
lock table t2 write; # this takes MDL_SHARED_NO_READ_WRITE
|
||||
connection con1;
|
||||
send delete from t1 where a=2;
|
||||
connection default;
|
||||
let $wait_condition= select 1 from information_schema.processlist where state='Waiting for table metadata lock';
|
||||
source include/wait_condition.inc;
|
||||
unlock tables;
|
||||
connection con1;
|
||||
--error ER_ROW_IS_REFERENCED_2
|
||||
reap;
|
||||
connection default;
|
||||
unlock tables;
|
||||
disconnect con1;
|
||||
|
||||
# but privileges should not be checked
|
||||
create user foo;
|
||||
grant select,update on test.t1 to foo;
|
||||
connect(foo,localhost,foo);
|
||||
update t1 set a=30 where a=3;
|
||||
disconnect foo;
|
||||
connection default;
|
||||
select * from t2;
|
||||
drop table t2, t1;
|
||||
drop user foo;
|
||||
|
@ -289,3 +289,27 @@ insert into t2(f1) values(1);
|
||||
drop table t2, t1;
|
||||
|
||||
--source include/wait_until_count_sessions.inc
|
||||
|
||||
#
|
||||
# MDEV-12669 Circular foreign keys cause a loop and OOM upon LOCK TABLE
|
||||
#
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
CREATE TABLE staff (
|
||||
staff_id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
store_id TINYINT UNSIGNED NOT NULL,
|
||||
PRIMARY KEY (staff_id),
|
||||
KEY idx_fk_store_id (store_id),
|
||||
CONSTRAINT fk_staff_store FOREIGN KEY (store_id) REFERENCES store (store_id) ON DELETE RESTRICT ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
CREATE TABLE store (
|
||||
store_id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
manager_staff_id TINYINT UNSIGNED NOT NULL,
|
||||
PRIMARY KEY (store_id),
|
||||
UNIQUE KEY idx_unique_manager (manager_staff_id),
|
||||
CONSTRAINT fk_store_staff FOREIGN KEY (manager_staff_id) REFERENCES staff (staff_id) ON DELETE RESTRICT ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
SET FOREIGN_KEY_CHECKS=DEFAULT;
|
||||
|
||||
LOCK TABLE staff WRITE;
|
||||
UNLOCK TABLES;
|
||||
DROP TABLES staff, store;
|
||||
|
@ -1,4 +1,5 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_partition.inc
|
||||
|
||||
#
|
||||
# Check and select innodb lock type
|
||||
@ -12,26 +13,15 @@ select @@innodb_table_locks;
|
||||
# Testing of explicit table locks with enforced table locks
|
||||
#
|
||||
|
||||
connect (con1,localhost,root,,);
|
||||
connect (con2,localhost,root,,);
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
#
|
||||
# Testing of explicit table locks with enforced table locks
|
||||
#
|
||||
|
||||
set @@innodb_table_locks=1;
|
||||
|
||||
connection con1;
|
||||
connect (con1,localhost,root,,);
|
||||
create table t1 (id integer, x integer) engine=INNODB;
|
||||
insert into t1 values(0, 0);
|
||||
set autocommit=0;
|
||||
SELECT * from t1 where id = 0 FOR UPDATE;
|
||||
|
||||
connection con2;
|
||||
connect (con2,localhost,root,,);
|
||||
set autocommit=0;
|
||||
|
||||
# The following statement should hang because con1 is locking the page
|
||||
@ -166,14 +156,66 @@ let $wait_condition=
|
||||
where state = 'Sending data' and
|
||||
info = 'SELECT * FROM t1 FOR UPDATE';
|
||||
--source include/wait_condition.inc
|
||||
disconnect con2;
|
||||
|
||||
connection default;
|
||||
COMMIT;
|
||||
connection con1;
|
||||
reap;
|
||||
COMMIT;
|
||||
disconnect con1;
|
||||
disconnect con2;
|
||||
|
||||
connection default;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-11080 InnoDB: Failing assertion:
|
||||
--echo # table->n_waiting_or_granted_auto_inc_locks > 0
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (pk INTEGER AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (NULL),(NULL);
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
|
||||
BEGIN;
|
||||
|
||||
connection con1;
|
||||
BEGIN;
|
||||
DELETE FROM t2;
|
||||
connection default;
|
||||
--send LOCK TABLE t2 READ;
|
||||
connection con1;
|
||||
SET innodb_lock_wait_timeout= 1, lock_wait_timeout= 2;
|
||||
--error 0,ER_LOCK_WAIT_TIMEOUT
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
COMMIT;
|
||||
|
||||
connection default;
|
||||
reap;
|
||||
UNLOCK TABLES;
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-16709 InnoDB: Error: trx already had an AUTO-INC lock
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (pk INT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB
|
||||
PARTITION BY key (pk) PARTITIONS 2;
|
||||
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1),(2),(3),(4),(5),(6);
|
||||
|
||||
CREATE TABLE t3 (b INT) ENGINE=InnoDB;
|
||||
INSERT INTO t3 VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
|
||||
connection con1;
|
||||
send INSERT t1 SELECT NULL FROM t2;
|
||||
|
||||
connection default;
|
||||
--error 0,ER_DUP_ENTRY,ER_LOCK_DEADLOCK
|
||||
INSERT t1 SELECT NULL FROM t3;
|
||||
|
||||
connection con1;
|
||||
--error 0,ER_DUP_ENTRY,ER_LOCK_DEADLOCK
|
||||
reap;
|
||||
disconnect con1;
|
||||
connection default;
|
||||
DROP TABLE t1, t2, t3;
|
||||
|
33
mysql-test/suite/maria/create.result
Normal file
33
mysql-test/suite/maria/create.result
Normal file
@ -0,0 +1,33 @@
|
||||
CREATE OR REPLACE TABLE t1 (
|
||||
f1 DECIMAL(43,0) NOT NULL,
|
||||
f2 TIME(4) NULL,
|
||||
f3 BINARY(101) NULL,
|
||||
f4 TIMESTAMP(4) NULL,
|
||||
f5 DATETIME(1) NULL,
|
||||
f6 SET('a','b','c') NOT NULL DEFAULT 'a',
|
||||
f7 VARBINARY(2332) NOT NULL DEFAULT '',
|
||||
f8 DATE NULL,
|
||||
f9 BLOB NULL,
|
||||
f10 MEDIUMINT(45) NOT NULL DEFAULT 0,
|
||||
f11 YEAR NULL,
|
||||
f12 BIT(58) NULL,
|
||||
v2 TIME(1) AS (f2) VIRTUAL,
|
||||
v3 BINARY(115) AS (f3) VIRTUAL,
|
||||
v4 TIMESTAMP(3) AS (f4) VIRTUAL,
|
||||
v7 VARBINARY(658) AS (f7) PERSISTENT,
|
||||
v8 DATE AS (f8) PERSISTENT,
|
||||
v9 TINYTEXT AS (f9) PERSISTENT,
|
||||
v11 YEAR AS (f11) VIRTUAL
|
||||
) ENGINE=Aria;
|
||||
INSERT IGNORE INTO t1 (f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12) VALUES
|
||||
(0.8,'16:01:46',NULL,'2006-03-01 12:44:34','2029-10-10 21:27:53','a','foo','1989-12-24','bar',9,1975,b'1');
|
||||
Warnings:
|
||||
Note 1265 Data truncated for column 'f1' at row 1
|
||||
DROP TABLE t1;
|
||||
CREATE OR REPLACE TABLE t1 (a INT(45));
|
||||
INSERT IGNORE INTO t1 VALUES (1),(2);
|
||||
CREATE OR REPLACE TABLE t2 ENGINE=Aria AS SELECT SUM(a) AS f1, IFNULL( 'qux', ExtractValue( 'foo', 'bar' ) ) AS f2 FROM t1;
|
||||
select * from t2;
|
||||
f1 f2
|
||||
3 qux
|
||||
DROP TABLE t1, t2;
|
42
mysql-test/suite/maria/create.test
Normal file
42
mysql-test/suite/maria/create.test
Normal file
@ -0,0 +1,42 @@
|
||||
--source include/have_maria.inc
|
||||
|
||||
# MDEV-17021
|
||||
# Server crash or assertion `length <= column->length' failure in
|
||||
# write_block_record
|
||||
#
|
||||
|
||||
CREATE OR REPLACE TABLE t1 (
|
||||
f1 DECIMAL(43,0) NOT NULL,
|
||||
f2 TIME(4) NULL,
|
||||
f3 BINARY(101) NULL,
|
||||
f4 TIMESTAMP(4) NULL,
|
||||
f5 DATETIME(1) NULL,
|
||||
f6 SET('a','b','c') NOT NULL DEFAULT 'a',
|
||||
f7 VARBINARY(2332) NOT NULL DEFAULT '',
|
||||
f8 DATE NULL,
|
||||
f9 BLOB NULL,
|
||||
f10 MEDIUMINT(45) NOT NULL DEFAULT 0,
|
||||
f11 YEAR NULL,
|
||||
f12 BIT(58) NULL,
|
||||
v2 TIME(1) AS (f2) VIRTUAL,
|
||||
v3 BINARY(115) AS (f3) VIRTUAL,
|
||||
v4 TIMESTAMP(3) AS (f4) VIRTUAL,
|
||||
v7 VARBINARY(658) AS (f7) PERSISTENT,
|
||||
v8 DATE AS (f8) PERSISTENT,
|
||||
v9 TINYTEXT AS (f9) PERSISTENT,
|
||||
v11 YEAR AS (f11) VIRTUAL
|
||||
) ENGINE=Aria;
|
||||
INSERT IGNORE INTO t1 (f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12) VALUES
|
||||
(0.8,'16:01:46',NULL,'2006-03-01 12:44:34','2029-10-10 21:27:53','a','foo','1989-12-24','bar',9,1975,b'1');
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# MDEV-17067 Server crash in write_block_record
|
||||
#
|
||||
|
||||
CREATE OR REPLACE TABLE t1 (a INT(45));
|
||||
INSERT IGNORE INTO t1 VALUES (1),(2);
|
||||
|
||||
CREATE OR REPLACE TABLE t2 ENGINE=Aria AS SELECT SUM(a) AS f1, IFNULL( 'qux', ExtractValue( 'foo', 'bar' ) ) AS f2 FROM t1;
|
||||
select * from t2;
|
||||
DROP TABLE t1, t2;
|
@ -2770,6 +2770,10 @@ id name
|
||||
-1 dog
|
||||
2 cat
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (pk int, i2 int) ENGINE=Aria;
|
||||
INSERT INTO t1 VALUES (1,2), (2,3),(3,4);
|
||||
DELETE FROM tt.*, t1.* USING t1 AS tt LEFT JOIN t1 ON (tt.i2 = t1.pk);
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of 5.5 tests
|
||||
#
|
||||
|
@ -2009,6 +2009,16 @@ INSERT INTO t1 (name) VALUES ('cat');
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# MDEV-16682
|
||||
# Assertion `(buff[7] & 7) == HEAD_PAGE' failed.
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (pk int, i2 int) ENGINE=Aria;
|
||||
INSERT INTO t1 VALUES (1,2), (2,3),(3,4);
|
||||
DELETE FROM tt.*, t1.* USING t1 AS tt LEFT JOIN t1 ON (tt.i2 = t1.pk);
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.5 tests
|
||||
--echo #
|
||||
|
@ -43,8 +43,7 @@ SET FOREIGN_KEY_CHECKS=1;
|
||||
connection slave;
|
||||
connection master;
|
||||
create table t1 (b int primary key) engine = INNODB;
|
||||
create table t2 (a int primary key, b int, foreign key (b) references t1(b))
|
||||
engine = INNODB;
|
||||
create table t2 (a int primary key, b int, foreign key (b) references t1(b)) engine = INNODB;
|
||||
insert into t1 set b=1;
|
||||
insert into t2 set a=1, b=1;
|
||||
set foreign_key_checks=0;
|
||||
|
@ -1,3 +1,61 @@
|
||||
-- source include/have_innodb.inc
|
||||
let $engine_type=INNODB;
|
||||
-- source extra/rpl_tests/rpl_foreign_key.test
|
||||
|
||||
# Check the replication of the FOREIGN_KEY_CHECKS variable.
|
||||
|
||||
-- source include/master-slave.inc
|
||||
|
||||
CREATE TABLE t1 (a INT AUTO_INCREMENT KEY) ENGINE=INNODB;
|
||||
CREATE TABLE t2 (b INT AUTO_INCREMENT KEY, c INT, FOREIGN KEY(b) REFERENCES t1(a)) ENGINE=INNODB;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
INSERT INTO t1 VALUES (10);
|
||||
INSERT INTO t1 VALUES (NULL),(NULL),(NULL);
|
||||
INSERT INTO t2 VALUES (5,0);
|
||||
INSERT INTO t2 VALUES (NULL,LAST_INSERT_ID());
|
||||
SET FOREIGN_KEY_CHECKS=1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
SELECT * FROM t2 ORDER BY b;
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
SELECT * FROM t2 ORDER BY b;
|
||||
|
||||
connection master;
|
||||
SET TIMESTAMP=1000000000;
|
||||
CREATE TABLE t3 ( a INT UNIQUE );
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
--error ER_DUP_ENTRY
|
||||
INSERT INTO t3 VALUES (1),(1);
|
||||
sync_slave_with_master;
|
||||
|
||||
connection master;
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
DROP TABLE IF EXISTS t1,t2,t3;
|
||||
SET FOREIGN_KEY_CHECKS=1;
|
||||
sync_slave_with_master;
|
||||
|
||||
#
|
||||
# Bug #32468 delete rows event on a table with foreign key constraint fails
|
||||
#
|
||||
|
||||
connection master;
|
||||
|
||||
create table t1 (b int primary key) engine = INNODB;
|
||||
create table t2 (a int primary key, b int, foreign key (b) references t1(b)) engine = INNODB;
|
||||
|
||||
insert into t1 set b=1;
|
||||
insert into t2 set a=1, b=1;
|
||||
|
||||
set foreign_key_checks=0;
|
||||
delete from t1;
|
||||
|
||||
--echo must sync w/o a problem (could not with the buggy code)
|
||||
sync_slave_with_master;
|
||||
select count(*) from t1 /* must be zero */;
|
||||
|
||||
|
||||
# cleanup for bug#32468
|
||||
|
||||
connection master;
|
||||
drop table t2,t1;
|
||||
|
||||
--source include/rpl_end.inc
|
||||
|
@ -17,6 +17,10 @@ SELECT @@global.wsrep_start_position;
|
||||
00000000-0000-0000-0000-000000000000:-1
|
||||
|
||||
# valid values
|
||||
SET @@global.wsrep_start_position='00000000-0000-0000-0000-000000000000:-2';
|
||||
SELECT @@global.wsrep_start_position;
|
||||
@@global.wsrep_start_position
|
||||
00000000-0000-0000-0000-000000000000:-2
|
||||
SET @@global.wsrep_start_position='12345678-1234-1234-1234-123456789012:100';
|
||||
SELECT @@global.wsrep_start_position;
|
||||
@@global.wsrep_start_position
|
||||
@ -27,12 +31,6 @@ SELECT @@global.wsrep_start_position;
|
||||
00000000-0000-0000-0000-000000000000:-1
|
||||
|
||||
# invalid values
|
||||
call mtr.add_suppression("WSREP: SST position can't be set in past. Requested: -2, Current: -1.");
|
||||
SET @@global.wsrep_start_position='00000000-0000-0000-0000-000000000000:-2';
|
||||
ERROR 42000: Variable 'wsrep_start_position' can't be set to the value of '00000000-0000-0000-0000-000000000000:-2'
|
||||
SELECT @@global.wsrep_start_position;
|
||||
@@global.wsrep_start_position
|
||||
00000000-0000-0000-0000-000000000000:-1
|
||||
SET @@global.wsrep_start_position='000000000000000-0000-0000-0000-000000000000:-1';
|
||||
ERROR 42000: Variable 'wsrep_start_position' can't be set to the value of '000000000000000-0000-0000-0000-000000000000:-1'
|
||||
SET @@global.wsrep_start_position='12345678-1234-1234-12345-123456789012:100';
|
||||
|
@ -19,6 +19,8 @@ SELECT @@global.wsrep_start_position;
|
||||
|
||||
--echo
|
||||
--echo # valid values
|
||||
SET @@global.wsrep_start_position='00000000-0000-0000-0000-000000000000:-2';
|
||||
SELECT @@global.wsrep_start_position;
|
||||
SET @@global.wsrep_start_position='12345678-1234-1234-1234-123456789012:100';
|
||||
SELECT @@global.wsrep_start_position;
|
||||
SET @@global.wsrep_start_position=default;
|
||||
@ -26,10 +28,6 @@ SELECT @@global.wsrep_start_position;
|
||||
|
||||
--echo
|
||||
--echo # invalid values
|
||||
call mtr.add_suppression("WSREP: SST position can't be set in past. Requested: -2, Current: -1.");
|
||||
--error ER_WRONG_VALUE_FOR_VAR
|
||||
SET @@global.wsrep_start_position='00000000-0000-0000-0000-000000000000:-2';
|
||||
SELECT @@global.wsrep_start_position;
|
||||
--error ER_WRONG_VALUE_FOR_VAR
|
||||
SET @@global.wsrep_start_position='000000000000000-0000-0000-0000-000000000000:-1';
|
||||
--error ER_WRONG_VALUE_FOR_VAR
|
||||
|
@ -17,23 +17,27 @@
|
||||
eval SET @GALERA_VERSION='$galera_version';
|
||||
SELECT CAST(REGEXP_REPLACE(@GALERA_VERSION,'^(\\d+)\\.(\\d+).*','\\1') AS UNSIGNED) INTO @GALERA_MAJOR_VERSION;
|
||||
SELECT CAST(REGEXP_REPLACE(@GALERA_VERSION,'^(\\d+)\\.(\\d+).*','\\2') AS UNSIGNED) INTO @GALERA_MINOR_VERSION;
|
||||
SELECT CAST(REGEXP_REPLACE(@GALERA_VERSION,'^(\\d+)\\.(\\d+)\\.(\\d+).*','\\3') AS UNSIGNED) INTO @GALERA_RELEASE_VERSION;
|
||||
|
||||
# Actual
|
||||
SELECT VARIABLE_VALUE INTO @ACTUAL_GALERA_VERSION FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME LIKE 'wsrep_provider_version';
|
||||
|
||||
SELECT CAST(REGEXP_REPLACE(@ACTUAL_GALERA_VERSION,'^(\\d+)\\.(\\d+).*','\\1') AS UNSIGNED) INTO @ACTUAL_GALERA_MAJOR_VERSION;
|
||||
SELECT CAST(REGEXP_REPLACE(@ACTUAL_GALERA_VERSION,'^(\\d+)\\.(\\d+).*','\\2') AS UNSIGNED) INTO @ACTUAL_GALERA_MINOR_VERSION;
|
||||
SELECT CAST(REGEXP_REPLACE(@ACTUAL_GALERA_VERSION,'^[\\d\\.]*(\\d+)\\.\\d+.*','\\1') AS UNSIGNED) INTO @ACTUAL_GALERA_MINOR_VERSION;
|
||||
SELECT CAST(REGEXP_REPLACE(@ACTUAL_GALERA_VERSION,'^[\\d\\.]*\\.(\\d+).*','\\1') AS UNSIGNED) INTO @ACTUAL_GALERA_RELEASE_VERSION;
|
||||
|
||||
# For testing
|
||||
#SELECT @GALERA_MAJOR_VERSION, @GALERA_MINOR_VERSION;
|
||||
#SELECT @GALERA_MAJOR_VERSION;
|
||||
#SELECT @GALERA_MINOR_VERSION;
|
||||
#SELECT @GALERA_RELEASE_VERSION;
|
||||
#SELECT @ACTUAL_GALERA_VERSION;
|
||||
#SELECT @ACTUAL_GALERA_MAJOR_VERSION, @ACTUAL_GALERA_MINOR_VERSION;
|
||||
#SELECT @ACTUAL_GALERA_MINOR_VERSION;
|
||||
#SELECT @ACTUAL_GALERA_RELEASE_VERSION;
|
||||
|
||||
if (!`SELECT (@ACTUAL_GALERA_MAJOR_VERSION > @GALERA_MAJOR_VERSION) OR
|
||||
(@ACTUAL_GALERA_MAJOR_VERSION = @GALERA_MAJOR_VERSION AND @ACTUAL_GALERA_MINOR_VERSION >= @GALERA_MINOR_VERSION)
|
||||
if (!`SELECT (@ACTUAL_GALERA_MINOR_VERSION > @GALERA_MINOR_VERSION) OR
|
||||
(@ACTUAL_GALERA_MINOR_VERSION = @GALERA_MINOR_VERSION AND
|
||||
@ACTUAL_GALERA_RELEASE_VERSION >= @GALERA_RELEASE_VERSION)
|
||||
`)
|
||||
{
|
||||
skip Test requires Galera library version $galera_version;
|
||||
skip Test requires Galera library version >= $galera_version;
|
||||
}
|
||||
|
||||
--enable_query_log
|
||||
|
@ -19,6 +19,7 @@ SET GLOBAL wsrep_provider=none;
|
||||
# variables when using "_"
|
||||
#
|
||||
CALL mtr.add_suppression("WSREP: Could not open saved state file for reading.*");
|
||||
# wsrep
|
||||
SHOW GLOBAL STATUS LIKE 'wsrep%';
|
||||
Variable_name Value
|
||||
wsrep_apply_oooe #
|
||||
@ -73,61 +74,6 @@ wsrep_repl_other_bytes #
|
||||
wsrep_replicated #
|
||||
wsrep_replicated_bytes #
|
||||
wsrep_thread_count #
|
||||
|
||||
SHOW GLOBAL STATUS LIKE 'wsrep_%';
|
||||
Variable_name Value
|
||||
wsrep_apply_oooe #
|
||||
wsrep_apply_oool #
|
||||
wsrep_apply_window #
|
||||
wsrep_causal_reads #
|
||||
wsrep_cert_deps_distance #
|
||||
wsrep_cert_index_size #
|
||||
wsrep_cert_interval #
|
||||
wsrep_cluster_conf_id #
|
||||
wsrep_cluster_size #
|
||||
wsrep_cluster_state_uuid #
|
||||
wsrep_cluster_status #
|
||||
wsrep_commit_oooe #
|
||||
wsrep_commit_oool #
|
||||
wsrep_commit_window #
|
||||
wsrep_connected #
|
||||
wsrep_flow_control_paused #
|
||||
wsrep_flow_control_paused_ns #
|
||||
wsrep_flow_control_recv #
|
||||
wsrep_flow_control_sent #
|
||||
wsrep_incoming_addresses #
|
||||
wsrep_last_committed #
|
||||
wsrep_local_bf_aborts #
|
||||
wsrep_local_cached_downto #
|
||||
wsrep_local_cert_failures #
|
||||
wsrep_local_commits #
|
||||
wsrep_local_index #
|
||||
wsrep_local_recv_queue #
|
||||
wsrep_local_recv_queue_avg #
|
||||
wsrep_local_recv_queue_max #
|
||||
wsrep_local_recv_queue_min #
|
||||
wsrep_local_replays #
|
||||
wsrep_local_send_queue #
|
||||
wsrep_local_send_queue_avg #
|
||||
wsrep_local_send_queue_max #
|
||||
wsrep_local_send_queue_min #
|
||||
wsrep_local_state #
|
||||
wsrep_local_state_comment #
|
||||
wsrep_local_state_uuid #
|
||||
wsrep_protocol_version #
|
||||
wsrep_provider_name #
|
||||
wsrep_provider_vendor #
|
||||
wsrep_provider_version #
|
||||
wsrep_ready #
|
||||
wsrep_received #
|
||||
wsrep_received_bytes #
|
||||
wsrep_repl_data_bytes #
|
||||
wsrep_repl_keys #
|
||||
wsrep_repl_keys_bytes #
|
||||
wsrep_repl_other_bytes #
|
||||
wsrep_replicated #
|
||||
wsrep_replicated_bytes #
|
||||
wsrep_thread_count #
|
||||
SHOW GLOBAL STATUS LIKE 'wsrep_local_state_comment';
|
||||
Variable_name Value
|
||||
wsrep_local_state_comment #
|
||||
|
@ -27,19 +27,19 @@ SET GLOBAL wsrep_provider=none;
|
||||
|
||||
CALL mtr.add_suppression("WSREP: Could not open saved state file for reading.*");
|
||||
|
||||
--disable_result_log
|
||||
--disable_query_log
|
||||
eval SET GLOBAL wsrep_provider= '$WSREP_PROVIDER';
|
||||
--let $galera_version=25.3.17
|
||||
source include/check_galera_version.inc;
|
||||
--enable_result_log
|
||||
--enable_query_log
|
||||
|
||||
--echo # wsrep
|
||||
--sorted_result
|
||||
--replace_column 2 #
|
||||
SHOW GLOBAL STATUS LIKE 'wsrep%';
|
||||
|
||||
--echo
|
||||
--replace_column 2 #
|
||||
SHOW GLOBAL STATUS LIKE 'wsrep_%';
|
||||
|
||||
--replace_column 2 #
|
||||
SHOW GLOBAL STATUS LIKE 'wsrep_local_state_comment';
|
||||
|
||||
@ -101,8 +101,11 @@ SHOW STATUS LIKE 'wsrep_thread_count';
|
||||
--echo # Setting wsrep_cluster_address triggers the creation of
|
||||
--echo # applier/rollbacker threads.
|
||||
SET GLOBAL wsrep_cluster_address= 'gcomm://';
|
||||
|
||||
--echo # Wait for applier threads to get created.
|
||||
sleep 3;
|
||||
--let $wait_timeout=600
|
||||
--let $wait_condition = SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND (STATE IS NULL OR STATE NOT LIKE 'InnoDB%');
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--replace_regex /.*libgalera_smm.*/libgalera_smm.so/
|
||||
SELECT @@global.wsrep_provider;
|
||||
@ -113,8 +116,11 @@ SHOW STATUS LIKE 'wsrep_thread_count';
|
||||
|
||||
SET @wsrep_slave_threads_saved= @@global.wsrep_slave_threads;
|
||||
SET GLOBAL wsrep_slave_threads= 10;
|
||||
|
||||
--echo # Wait for applier threads to get created.
|
||||
sleep 3;
|
||||
--let $wait_condition = SELECT COUNT(*) = 11 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND (STATE IS NULL OR STATE NOT LIKE 'InnoDB%');
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SHOW STATUS LIKE 'threads_connected';
|
||||
SHOW STATUS LIKE 'wsrep_thread_count';
|
||||
|
||||
|
@ -673,3 +673,35 @@ DROP TABLE t1;
|
||||
flush relay logs,relay logs;
|
||||
--error ER_WRONG_USAGE
|
||||
flush slave,slave;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-15890 Strange error message if you try to
|
||||
--echo # FLUSH TABLES <view> after LOCK TABLES <view>.
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (qty INT, price INT);
|
||||
CREATE VIEW v1 AS SELECT qty, price, qty*price AS value FROM t1;
|
||||
|
||||
LOCK TABLES v1 READ;
|
||||
--error ER_TABLE_NOT_LOCKED_FOR_WRITE
|
||||
FLUSH TABLES v1;
|
||||
UNLOCK TABLES;
|
||||
|
||||
LOCK TABLES v1 WRITE;
|
||||
--error ER_TABLE_NOT_LOCKED_FOR_WRITE
|
||||
FLUSH TABLES v1;
|
||||
UNLOCK TABLES;
|
||||
|
||||
LOCK TABLES v1 READ;
|
||||
--error ER_TABLE_NOT_LOCKED_FOR_WRITE
|
||||
FLUSH TABLES t1;
|
||||
UNLOCK TABLES;
|
||||
|
||||
LOCK TABLES t1 READ;
|
||||
--error ER_TABLE_NOT_LOCKED
|
||||
FLUSH TABLES v1;
|
||||
UNLOCK TABLES;
|
||||
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
@ -1478,6 +1478,21 @@ SELECT LENGTH(CONCAT(t2,'--',t2)) c2 FROM (SELECT ST_BUFFER(POINT(x,y), 0) t2 FR
|
||||
DROP TABLE t1;
|
||||
SET optimizer_switch=@save_optimizer_switch;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-16995: ER_CANT_CREATE_GEOMETRY_OBJECT encountered for a query with
|
||||
--echo # optimizer_use_condition_selectivity>=3
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (a POINT);
|
||||
INSERT INTO t1 VALUES (POINT(1,1)),(POINT(1,2)),(POINT(1,3));
|
||||
set @save_use_stat_tables= @@use_stat_tables;
|
||||
set @save_optimizer_use_condition_selectivity= @@optimizer_use_condition_selectivity;
|
||||
set @@use_stat_tables= PREFERABLY;
|
||||
set @@optimizer_use_condition_selectivity=3;
|
||||
SELECT COUNT(*) FROM t1 WHERE a IN ('test','test1');
|
||||
set @@use_stat_tables= @save_use_stat_tables;
|
||||
set @@optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # End 10.0 tests
|
||||
|
@ -1519,6 +1519,23 @@ ALTER TABLE t1 ADD KEY(id,a);
|
||||
SELECT id,MIN(a),MAX(a) FROM t1 WHERE a>=DATE'2001-01-04' GROUP BY id;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-17039: Query plan changes when we use GROUP BY optimization with optimizer_use_condition_selectivity=4
|
||||
--echo # and use_stat_tables= PREFERABLY
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (a INT, b INT,c INT DEFAULT 0, INDEX (a,b));
|
||||
INSERT INTO t1 (a, b) VALUES (1,1), (1,2), (1,3), (1,4), (1,5),
|
||||
(2,2), (2,3), (2,1), (3,1), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6);
|
||||
set @save_optimizer_use_condition_selectivity= @@optimizer_use_condition_selectivity;
|
||||
set @save_use_stat_tables= @@use_stat_tables;
|
||||
set @@optimizer_use_condition_selectivity=4;
|
||||
set @@use_stat_tables=PREFERABLY;
|
||||
explain extended SELECT a FROM t1 AS t1_outer WHERE a IN (SELECT max(b) FROM t1 GROUP BY a);
|
||||
set @@optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
|
||||
set @@use_stat_tables=@save_use_stat_tables;
|
||||
explain extended SELECT a FROM t1 AS t1_outer WHERE a IN (SELECT max(b) FROM t1 GROUP BY a);
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.0 tests
|
||||
|
@ -1185,12 +1185,13 @@ CREATE TABLE t (f INT);
|
||||
#
|
||||
# The following shouldn't fail as the table is now matching the using
|
||||
#
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
CALL p;
|
||||
DROP TABLE t;
|
||||
CREATE TABLE t (i INT);
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
CALL p;
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
CALL p;
|
||||
DROP PROCEDURE p;
|
||||
DROP TABLE t;
|
||||
|
||||
|
@ -1066,3 +1066,39 @@ drop table t1,t0;
|
||||
set histogram_size=@save_histogram_size;
|
||||
set optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-15306: Wrong/Unexpected result with the value
|
||||
--echo # optimizer_use_condition_selectivity set to 4
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
|
||||
|
||||
delimiter |;
|
||||
CREATE FUNCTION f1() RETURNS INT DETERMINISTIC
|
||||
BEGIN
|
||||
SET @cnt := @cnt + 1;
|
||||
RETURN 1;
|
||||
END;|
|
||||
delimiter ;|
|
||||
set @save_optimizer_use_condition_selectivity=@@optimizer_use_condition_selectivity;
|
||||
set @save_use_stat_tables= @@use_stat_tables;
|
||||
set @@use_stat_tables='complementary';
|
||||
set @@optimizer_use_condition_selectivity=4;
|
||||
SET @cnt= 0;
|
||||
SELECT * FROM t1 WHERE a = f1();
|
||||
SELECT @cnt;
|
||||
|
||||
set @@use_stat_tables='preferably';
|
||||
analyze table t1 persistent for all;
|
||||
SET @cnt := 0;
|
||||
set @@optimizer_use_condition_selectivity=4;
|
||||
SELECT * FROM t1 WHERE a = f1();
|
||||
SELECT @cnt;
|
||||
alter table t1 force;
|
||||
set @@use_stat_tables= @save_use_stat_tables;
|
||||
set @@optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
|
||||
drop table t1;
|
||||
drop function f1;
|
||||
|
||||
|
@ -9342,6 +9342,27 @@ where 1=1;
|
||||
drop function if exists f1;
|
||||
drop table t1,t2;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-16957: Server crashes in Field_iterator_natural_join::next
|
||||
--echo # upon 2nd execution of SP
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (a INT, b VARCHAR(32));
|
||||
CREATE PROCEDURE sp() SELECT * FROM t1 AS t1x JOIN t1 AS t1y USING (c);
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
CALL sp;
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
CALL sp;
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
CALL sp;
|
||||
alter table t1 add column c int;
|
||||
CALL sp;
|
||||
|
||||
# Cleanup
|
||||
DROP PROCEDURE sp;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo # End of 5.5 test
|
||||
|
||||
--echo #
|
||||
|
@ -357,6 +357,18 @@ DROP TABLE t1;
|
||||
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-17023: Crash during read_histogram_for_table with optimizer_use_condition_selectivity set to 4
|
||||
--echo #
|
||||
|
||||
set @save_optimizer_use_condition_selectivity=@@optimizer_use_condition_selectivity;
|
||||
set @@optimizer_use_condition_selectivity=4;
|
||||
set @@use_stat_tables= PREFERABLY;
|
||||
explain
|
||||
SELECT * FROM INFORMATION_SCHEMA.PROFILING, mysql.user;
|
||||
set @@optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-16757: manual addition of min/max statistics for BLOB
|
||||
--echo #
|
||||
|
@ -21,9 +21,6 @@ EOF
|
||||
exit 0
|
||||
fi
|
||||
|
||||
VERSION="@VERSION@@MYSQL_SERVER_SUFFIX@"
|
||||
COMPILATION_COMMENT="@COMPILATION_COMMENT@"
|
||||
|
||||
systemctl set-environment _WSREP_NEW_CLUSTER='--wsrep-new-cluster' && \
|
||||
systemctl start ${1:-mariadb}
|
||||
|
||||
|
@ -239,7 +239,7 @@ cannot_find_file()
|
||||
echo
|
||||
echo "If you compiled from source, you need to either run 'make install' to"
|
||||
echo "copy the software into the correct location ready for operation."
|
||||
echo "If you don't want to do a full install, you can use the --srcddir"
|
||||
echo "If you don't want to do a full install, you can use the --srcdir"
|
||||
echo "option to only install the mysql database and privilege tables"
|
||||
echo
|
||||
echo "If you compiled from source, you need to either run 'make install' to"
|
||||
|
@ -20,6 +20,7 @@ set -u
|
||||
|
||||
WSREP_SST_OPT_BYPASS=0
|
||||
WSREP_SST_OPT_BINLOG=""
|
||||
WSREP_SST_OPT_BINLOG_INDEX=""
|
||||
WSREP_SST_OPT_DATA=""
|
||||
WSREP_SST_OPT_AUTH=${WSREP_SST_OPT_AUTH:-}
|
||||
WSREP_SST_OPT_USER=${WSREP_SST_OPT_USER:-}
|
||||
@ -28,6 +29,7 @@ WSREP_SST_OPT_DEFAULT=""
|
||||
WSREP_SST_OPT_EXTRA_DEFAULT=""
|
||||
WSREP_SST_OPT_SUFFIX_DEFAULT=""
|
||||
WSREP_SST_OPT_SUFFIX_VALUE=""
|
||||
INNODB_DATA_HOME_DIR_ARG=""
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
@ -67,6 +69,10 @@ case "$1" in
|
||||
readonly WSREP_SST_OPT_DATA="$2"
|
||||
shift
|
||||
;;
|
||||
'--innodb-data-home-dir')
|
||||
readonly INNODB_DATA_HOME_DIR_ARG="$2"
|
||||
shift
|
||||
;;
|
||||
'--defaults-file')
|
||||
readonly WSREP_SST_OPT_DEFAULT="$1=$2"
|
||||
shift
|
||||
@ -120,6 +126,10 @@ case "$1" in
|
||||
WSREP_SST_OPT_BINLOG="$2"
|
||||
shift
|
||||
;;
|
||||
'--binlog-index')
|
||||
WSREP_SST_OPT_BINLOG_INDEX="$2"
|
||||
shift
|
||||
;;
|
||||
'--gtid-domain-id')
|
||||
readonly WSREP_SST_OPT_GTID_DOMAIN_ID="$2"
|
||||
shift
|
||||
@ -133,6 +143,7 @@ shift
|
||||
done
|
||||
readonly WSREP_SST_OPT_BYPASS
|
||||
readonly WSREP_SST_OPT_BINLOG
|
||||
readonly WSREP_SST_OPT_BINLOG_INDEX
|
||||
|
||||
if [ -n "${WSREP_SST_OPT_ADDR_PORT:-}" ]; then
|
||||
if [ -n "${WSREP_SST_OPT_PORT:-}" ]; then
|
||||
|
@ -138,6 +138,14 @@ if ! [ -z $WSREP_SST_OPT_BINLOG ]
|
||||
then
|
||||
BINLOG_DIRNAME=$(dirname $WSREP_SST_OPT_BINLOG)
|
||||
BINLOG_FILENAME=$(basename $WSREP_SST_OPT_BINLOG)
|
||||
BINLOG_INDEX_DIRNAME=$(dirname $WSREP_SST_OPT_BINLOG)
|
||||
BINLOG_INDEX_FILENAME=$(basename $WSREP_SST_OPT_BINLOG)
|
||||
fi
|
||||
|
||||
if ! [ -z $WSREP_SST_OPT_BINLOG_INDEX ]
|
||||
then
|
||||
BINLOG_INDEX_DIRNAME=$(dirname $WSREP_SST_OPT_BINLOG_INDEX)
|
||||
BINLOG_INDEX_FILENAME=$(basename $WSREP_SST_OPT_BINLOG_INDEX)
|
||||
fi
|
||||
|
||||
WSREP_LOG_DIR=${WSREP_LOG_DIR:-""}
|
||||
@ -155,10 +163,17 @@ else
|
||||
fi
|
||||
|
||||
INNODB_DATA_HOME_DIR=${INNODB_DATA_HOME_DIR:-""}
|
||||
# Try to set INNODB_DATA_HOME_DIR from the command line:
|
||||
if [ ! -z "$INNODB_DATA_HOME_DIR_ARG" ]; then
|
||||
INNODB_DATA_HOME_DIR=$INNODB_DATA_HOME_DIR_ARG
|
||||
fi
|
||||
# if INNODB_DATA_HOME_DIR env. variable is not set, try to get it from my.cnf
|
||||
if [ -z "$INNODB_DATA_HOME_DIR" ]; then
|
||||
INNODB_DATA_HOME_DIR=$(parse_cnf mysqld$WSREP_SST_OPT_SUFFIX_VALUE innodb-data-home-dir '')
|
||||
fi
|
||||
if [ -z "$INNODB_DATA_HOME_DIR" ]; then
|
||||
INNODB_DATA_HOME_DIR=$(parse_cnf --mysqld innodb-data-home-dir "")
|
||||
fi
|
||||
|
||||
if [ -n "$INNODB_DATA_HOME_DIR" ]; then
|
||||
# handle both relative and absolute paths
|
||||
@ -175,8 +190,15 @@ fi
|
||||
# --exclude '*.[0-9][0-9][0-9][0-9][0-9][0-9]' --exclude '*.index')
|
||||
|
||||
# New filter - exclude everything except dirs (schemas) and innodb files
|
||||
FILTER="-f '- /lost+found' -f '- /.fseventsd' -f '- /.Trashes'
|
||||
-f '+ /wsrep_sst_binlog.tar' -f '- $INNODB_DATA_HOME_DIR/ib_lru_dump' -f '- $INNODB_DATA_HOME_DIR/ibdata*' -f '+ /*/' -f '- /*'"
|
||||
FILTER="-f '- /lost+found'
|
||||
-f '- /.fseventsd'
|
||||
-f '- /.Trashes'
|
||||
-f '+ /wsrep_sst_binlog.tar'
|
||||
-f '- $INNODB_DATA_HOME_DIR/ib_lru_dump'
|
||||
-f '- $INNODB_DATA_HOME_DIR/ibdata*'
|
||||
-f '+ /undo*'
|
||||
-f '+ /*/'
|
||||
-f '- /*'"
|
||||
|
||||
SSTKEY=$(parse_cnf sst tkey "")
|
||||
SSTCERT=$(parse_cnf sst tcert "")
|
||||
@ -245,12 +267,20 @@ EOF
|
||||
OLD_PWD="$(pwd)"
|
||||
cd $BINLOG_DIRNAME
|
||||
|
||||
binlog_files_full=$(tail -n $BINLOG_N_FILES ${BINLOG_FILENAME}.index)
|
||||
if ! [ -z $WSREP_SST_OPT_BINLOG_INDEX ]
|
||||
binlog_files_full=$(tail -n $BINLOG_N_FILES ${BINLOG_FILENAME}.index)
|
||||
then
|
||||
cd $BINLOG_INDEX_DIRNAME
|
||||
binlog_files_full=$(tail -n $BINLOG_N_FILES ${BINLOG_INDEX_FILENAME}.index)
|
||||
fi
|
||||
|
||||
cd $BINLOG_DIRNAME
|
||||
binlog_files=""
|
||||
for ii in $binlog_files_full
|
||||
do
|
||||
binlog_files="$binlog_files $(basename $ii)"
|
||||
done
|
||||
|
||||
if ! [ -z "$binlog_files" ]
|
||||
then
|
||||
wsrep_log_info "Preparing binlog files for transfer:"
|
||||
@ -476,7 +506,11 @@ EOF
|
||||
tar -xvf $BINLOG_TAR_FILE >&2
|
||||
for ii in $(ls -1 ${BINLOG_FILENAME}.*)
|
||||
do
|
||||
echo ${BINLOG_DIRNAME}/${ii} >> ${BINLOG_FILENAME}.index
|
||||
if ! [ -z $WSREP_SST_OPT_BINLOG_INDEX ]
|
||||
echo ${BINLOG_DIRNAME}/${ii} >> ${BINLOG_FILENAME}.index
|
||||
then
|
||||
echo ${BINLOG_DIRNAME}/${ii} >> ${BINLOG_INDEX_DIRNAME}/${BINLOG_INDEX_FILENAME}.index
|
||||
fi
|
||||
done
|
||||
fi
|
||||
cd "$OLD_PWD"
|
||||
|
@ -899,7 +899,31 @@ fi
|
||||
get_stream
|
||||
get_transfer
|
||||
|
||||
INNOAPPLY="${INNOBACKUPEX_BIN} $disver $iapts --apply-log \$rebuildcmd \${DATA} ${INNOAPPLY}"
|
||||
INNODB_DATA_HOME_DIR=${INNODB_DATA_HOME_DIR:-""}
|
||||
# Try to set INNODB_DATA_HOME_DIR from the command line:
|
||||
if [ ! -z "$INNODB_DATA_HOME_DIR_ARG" ]; then
|
||||
INNODB_DATA_HOME_DIR=$INNODB_DATA_HOME_DIR_ARG
|
||||
fi
|
||||
# if INNODB_DATA_HOME_DIR env. variable is not set, try to get it from my.cnf
|
||||
if [ -z "$INNODB_DATA_HOME_DIR" ]; then
|
||||
INNODB_DATA_HOME_DIR=$(parse_cnf mysqld$WSREP_SST_OPT_SUFFIX_VALUE innodb-data-home-dir '')
|
||||
fi
|
||||
if [ -z "$INNODB_DATA_HOME_DIR" ]; then
|
||||
INNODB_DATA_HOME_DIR=$(parse_cnf --mysqld innodb-data-home-dir "")
|
||||
fi
|
||||
if [ ! -z "$INNODB_DATA_HOME_DIR" ]; then
|
||||
INNOEXTRA+=" --innodb-data-home-dir=$INNODB_DATA_HOME_DIR"
|
||||
fi
|
||||
|
||||
if [ -n "$INNODB_DATA_HOME_DIR" ]; then
|
||||
# handle both relative and absolute paths
|
||||
INNODB_DATA_HOME_DIR=$(cd $DATA; mkdir -p "$INNODB_DATA_HOME_DIR"; cd $INNODB_DATA_HOME_DIR; pwd -P)
|
||||
else
|
||||
# default to datadir
|
||||
INNODB_DATA_HOME_DIR=$(cd $DATA; pwd -P)
|
||||
fi
|
||||
|
||||
INNOAPPLY="${INNOBACKUPEX_BIN} $disver $iapts \$INNOEXTRA --apply-log \$rebuildcmd \${DATA} ${INNOAPPLY}"
|
||||
INNOMOVE="${INNOBACKUPEX_BIN} ${WSREP_SST_OPT_CONF} $disver $impts --move-back --force-non-empty-directories \${DATA} ${INNOMOVE}"
|
||||
INNOBACKUP="${INNOBACKUPEX_BIN} ${WSREP_SST_OPT_CONF} $disver $iopts \$tmpopts \$INNOEXTRA --galera-info --stream=\$sfmt \$itmpdir ${INNOBACKUP}"
|
||||
|
||||
@ -1035,7 +1059,7 @@ then
|
||||
[[ -e $SST_PROGRESS_FILE ]] && wsrep_log_info "Stale sst_in_progress file: $SST_PROGRESS_FILE"
|
||||
[[ -n $SST_PROGRESS_FILE ]] && touch $SST_PROGRESS_FILE
|
||||
|
||||
ib_home_dir=$(parse_cnf --mysqld innodb-data-home-dir "")
|
||||
ib_home_dir=$INNODB_DATA_HOME_DIR
|
||||
ib_log_dir=$(parse_cnf --mysqld innodb-log-group-home-dir "")
|
||||
ib_undo_dir=$(parse_cnf --mysqld innodb-undo-directory "")
|
||||
|
||||
|
@ -462,6 +462,7 @@ Events::update_event(THD *thd, Event_parse_data *parse_data,
|
||||
|
||||
if (check_access(thd, EVENT_ACL, parse_data->dbname.str, NULL, NULL, 0, 0))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL);
|
||||
|
||||
if (lock_object_name(thd, MDL_key::EVENT,
|
||||
@ -591,6 +592,7 @@ Events::drop_event(THD *thd, LEX_STRING dbname, LEX_STRING name, bool if_exists)
|
||||
|
||||
if (check_access(thd, EVENT_ACL, dbname.str, NULL, NULL, 0, 0))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL);
|
||||
|
||||
/*
|
||||
|
17
sql/field.cc
17
sql/field.cc
@ -9815,13 +9815,18 @@ void Column_definition::create_length_to_internal_length(void)
|
||||
}
|
||||
break;
|
||||
case MYSQL_TYPE_NEWDECIMAL:
|
||||
key_length= pack_length=
|
||||
my_decimal_get_binary_size(my_decimal_length_to_precision((uint)length,
|
||||
decimals,
|
||||
flags &
|
||||
UNSIGNED_FLAG),
|
||||
decimals);
|
||||
{
|
||||
/*
|
||||
This code must be identical to code in
|
||||
Field_new_decimal::Field_new_decimal as otherwise the record layout
|
||||
gets out of sync.
|
||||
*/
|
||||
uint precision= my_decimal_length_to_precision((uint)length, decimals,
|
||||
flags & UNSIGNED_FLAG);
|
||||
set_if_smaller(precision, DECIMAL_MAX_PRECISION);
|
||||
key_length= pack_length= my_decimal_get_binary_size(precision, decimals);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
key_length= pack_length= calc_pack_length(sql_type, (uint)length);
|
||||
break;
|
||||
|
@ -21,6 +21,7 @@
|
||||
*/
|
||||
|
||||
#include <my_global.h>
|
||||
#include <inttypes.h>
|
||||
#include "sql_priv.h"
|
||||
#include "unireg.h"
|
||||
#include "rpl_handler.h"
|
||||
@ -4384,6 +4385,7 @@ handler::ha_create_partitioning_metadata(const char *name,
|
||||
(!old_name && strcmp(name, table_share->path.str)));
|
||||
|
||||
|
||||
mark_trx_read_write();
|
||||
return create_partitioning_metadata(name, old_name, action_flag);
|
||||
}
|
||||
|
||||
@ -6188,7 +6190,7 @@ void ha_fake_trx_id(THD *thd)
|
||||
|
||||
if (thd->wsrep_ws_handle.trx_id != WSREP_UNDEFINED_TRX_ID)
|
||||
{
|
||||
WSREP_DEBUG("fake trx id skipped: %lu", thd->wsrep_ws_handle.trx_id);
|
||||
WSREP_DEBUG("fake trx id skipped: %" PRIu64, thd->wsrep_ws_handle.trx_id);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
10
sql/item.cc
10
sql/item.cc
@ -9356,13 +9356,11 @@ void Item_trigger_field::cleanup()
|
||||
|
||||
Item_result item_cmp_type(Item_result a,Item_result b)
|
||||
{
|
||||
if (a == STRING_RESULT && b == STRING_RESULT)
|
||||
return STRING_RESULT;
|
||||
if (a == INT_RESULT && b == INT_RESULT)
|
||||
return INT_RESULT;
|
||||
else if (a == ROW_RESULT || b == ROW_RESULT)
|
||||
if (a == b)
|
||||
return a;
|
||||
if (a == ROW_RESULT || b == ROW_RESULT)
|
||||
return ROW_RESULT;
|
||||
else if (a == TIME_RESULT || b == TIME_RESULT)
|
||||
if (a == TIME_RESULT || b == TIME_RESULT)
|
||||
return TIME_RESULT;
|
||||
if ((a == INT_RESULT || a == DECIMAL_RESULT) &&
|
||||
(b == INT_RESULT || b == DECIMAL_RESULT))
|
||||
|
@ -1668,14 +1668,14 @@ static int binlog_close_connection(handlerton *hton, THD *thd)
|
||||
uchar *buf;
|
||||
size_t len=0;
|
||||
wsrep_write_cache_buf(cache, &buf, &len);
|
||||
WSREP_WARN("binlog trx cache not empty (%lu bytes) @ connection close %lld",
|
||||
(ulong) len, (longlong) thd->thread_id);
|
||||
WSREP_WARN("binlog trx cache not empty (%zu bytes) @ connection close %lld",
|
||||
len, (longlong) thd->thread_id);
|
||||
if (len > 0) wsrep_dump_rbr_buf(thd, buf, len);
|
||||
|
||||
cache = cache_mngr->get_binlog_cache_log(false);
|
||||
wsrep_write_cache_buf(cache, &buf, &len);
|
||||
WSREP_WARN("binlog stmt cache not empty (%lu bytes) @ connection close %lld",
|
||||
(ulong) len, (longlong) thd->thread_id);
|
||||
WSREP_WARN("binlog stmt cache not empty (%zu bytes) @ connection close %lld",
|
||||
len, (longlong) thd->thread_id);
|
||||
if (len > 0) wsrep_dump_rbr_buf(thd, buf, len);
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
@ -8727,11 +8727,6 @@ User_var_log_event(const char* buf, uint event_len,
|
||||
we keep the flags set to UNDEF_F.
|
||||
*/
|
||||
size_t bytes_read= (val + val_len) - buf_start;
|
||||
if (bytes_read > size_t(event_len))
|
||||
{
|
||||
error= true;
|
||||
goto err;
|
||||
}
|
||||
if ((data_written - bytes_read) > 0)
|
||||
{
|
||||
flags= (uint) *(buf + UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE +
|
||||
|
@ -799,6 +799,7 @@ char *master_info_file;
|
||||
char *relay_log_info_file, *report_user, *report_password, *report_host;
|
||||
char *opt_relay_logname = 0, *opt_relaylog_index_name=0;
|
||||
char *opt_logname, *opt_slow_logname, *opt_bin_logname;
|
||||
char *opt_binlog_index_name=0;
|
||||
|
||||
/* Static variables */
|
||||
|
||||
@ -808,7 +809,6 @@ my_bool opt_expect_abort= 0, opt_bootstrap= 0;
|
||||
static my_bool opt_myisam_log;
|
||||
static int cleanup_done;
|
||||
static ulong opt_specialflag;
|
||||
static char *opt_binlog_index_name;
|
||||
char *mysql_home_ptr, *pidfile_name_ptr;
|
||||
/** Initial command line arguments (count), after load_defaults().*/
|
||||
static int defaults_argc;
|
||||
|
@ -172,6 +172,7 @@ extern uint protocol_version, mysqld_port, dropping_tables;
|
||||
extern ulong delay_key_write_options;
|
||||
extern char *opt_logname, *opt_slow_logname, *opt_bin_logname,
|
||||
*opt_relay_logname;
|
||||
extern char *opt_binlog_index_name;
|
||||
extern char *opt_backup_history_logname, *opt_backup_progress_logname,
|
||||
*opt_backup_settings_name;
|
||||
extern const char *log_output_str;
|
||||
|
@ -2727,13 +2727,19 @@ bool create_key_parts_for_pseudo_indexes(RANGE_OPT_PARAM *param,
|
||||
|
||||
for (field_ptr= table->field; *field_ptr; field_ptr++)
|
||||
{
|
||||
if (bitmap_is_set(used_fields, (*field_ptr)->field_index))
|
||||
Column_statistics* col_stats= (*field_ptr)->read_stats;
|
||||
if (bitmap_is_set(used_fields, (*field_ptr)->field_index)
|
||||
&& col_stats && !col_stats->no_stat_values_provided()
|
||||
&& !((*field_ptr)->type() == MYSQL_TYPE_GEOMETRY))
|
||||
parts++;
|
||||
}
|
||||
|
||||
KEY_PART *key_part;
|
||||
uint keys= 0;
|
||||
|
||||
if (!parts)
|
||||
return TRUE;
|
||||
|
||||
if (!(key_part= (KEY_PART *) alloc_root(param->mem_root,
|
||||
sizeof(KEY_PART) * parts)))
|
||||
return TRUE;
|
||||
@ -2745,6 +2751,9 @@ bool create_key_parts_for_pseudo_indexes(RANGE_OPT_PARAM *param,
|
||||
if (bitmap_is_set(used_fields, (*field_ptr)->field_index))
|
||||
{
|
||||
Field *field= *field_ptr;
|
||||
if (field->type() == MYSQL_TYPE_GEOMETRY)
|
||||
continue;
|
||||
|
||||
uint16 store_length;
|
||||
uint16 max_key_part_length= (uint16) table->file->max_key_part_length();
|
||||
key_part->key= keys;
|
||||
@ -2902,7 +2911,18 @@ bool calculate_cond_selectivity_for_table(THD *thd, TABLE *table, Item **cond)
|
||||
|
||||
table->cond_selectivity= 1.0;
|
||||
|
||||
if (!*cond || table_records == 0)
|
||||
if (table_records == 0)
|
||||
DBUG_RETURN(FALSE);
|
||||
|
||||
QUICK_SELECT_I *quick;
|
||||
if ((quick=table->reginfo.join_tab->quick) &&
|
||||
quick->get_type() == QUICK_SELECT_I::QS_TYPE_GROUP_MIN_MAX)
|
||||
{
|
||||
table->cond_selectivity*= (quick->records/table_records);
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
|
||||
if (!*cond)
|
||||
DBUG_RETURN(FALSE);
|
||||
|
||||
if (table->pos_in_table_list->schema_table)
|
||||
@ -3019,7 +3039,8 @@ bool calculate_cond_selectivity_for_table(THD *thd, TABLE *table, Item **cond)
|
||||
*/
|
||||
|
||||
if (thd->variables.optimizer_use_condition_selectivity > 2 &&
|
||||
!bitmap_is_clear_all(used_fields))
|
||||
!bitmap_is_clear_all(used_fields) &&
|
||||
thd->variables.use_stat_tables > 0)
|
||||
{
|
||||
PARAM param;
|
||||
MEM_ROOT alloc;
|
||||
|
@ -306,12 +306,17 @@ bool Sql_cmd_alter_table::execute(THD *thd)
|
||||
thd->enable_slow_log= opt_log_slow_admin_statements;
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if ((!thd->is_current_stmt_binlog_format_row() ||
|
||||
if (WSREP(thd) &&
|
||||
(!thd->is_current_stmt_binlog_format_row() ||
|
||||
!thd->find_temporary_table(first_table)))
|
||||
{
|
||||
WSREP_TO_ISOLATION_BEGIN(((lex->name.str) ? select_lex->db : NULL),
|
||||
((lex->name.str) ? lex->name.str : NULL),
|
||||
first_table);
|
||||
WSREP_TO_ISOLATION_BEGIN_ALTER(((lex->name.str) ? select_lex->db : NULL),
|
||||
((lex->name.str) ? lex->name.str : NULL),
|
||||
first_table,
|
||||
&alter_info);
|
||||
|
||||
thd->variables.auto_increment_offset = 1;
|
||||
thd->variables.auto_increment_increment = 1;
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
@ -324,11 +329,12 @@ bool Sql_cmd_alter_table::execute(THD *thd)
|
||||
lex->ignore);
|
||||
|
||||
DBUG_RETURN(result);
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
error:
|
||||
WSREP_WARN("ALTER TABLE isolation failure");
|
||||
DBUG_RETURN(TRUE);
|
||||
{
|
||||
WSREP_WARN("ALTER TABLE isolation failure");
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
}
|
||||
|
||||
|
160
sql/sql_base.cc
160
sql/sql_base.cc
@ -411,9 +411,10 @@ bool close_cached_tables(THD *thd, TABLE_LIST *tables,
|
||||
for (TABLE_LIST *table_list= tables_to_reopen; table_list;
|
||||
table_list= table_list->next_global)
|
||||
{
|
||||
int err;
|
||||
/* A check that the table was locked for write is done by the caller. */
|
||||
TABLE *table= find_table_for_mdl_upgrade(thd, table_list->db,
|
||||
table_list->table_name, TRUE);
|
||||
table_list->table_name, &err);
|
||||
|
||||
/* May return NULL if this table has already been closed via an alias. */
|
||||
if (! table)
|
||||
@ -1460,6 +1461,66 @@ open_table_get_mdl_lock(THD *thd, Open_table_context *ot_ctx,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Check if the given table is actually a VIEW that was LOCK-ed
|
||||
|
||||
@param thd Thread context.
|
||||
@param t Table to check.
|
||||
|
||||
@retval TRUE The 't'-table is a locked view
|
||||
needed to remedy problem before retrying again.
|
||||
@retval FALSE 't' was not locked, not a VIEW or an error happened.
|
||||
*/
|
||||
bool is_locked_view(THD *thd, TABLE_LIST *t)
|
||||
{
|
||||
DBUG_ENTER("check_locked_view");
|
||||
/*
|
||||
Is this table a view and not a base table?
|
||||
(it is work around to allow to open view with locked tables,
|
||||
real fix will be made after definition cache will be made)
|
||||
|
||||
Since opening of view which was not explicitly locked by LOCK
|
||||
TABLES breaks metadata locking protocol (potentially can lead
|
||||
to deadlocks) it should be disallowed.
|
||||
*/
|
||||
if (thd->mdl_context.is_lock_owner(MDL_key::TABLE,
|
||||
t->db, t->table_name,
|
||||
MDL_SHARED))
|
||||
{
|
||||
char path[FN_REFLEN + 1];
|
||||
build_table_filename(path, sizeof(path) - 1,
|
||||
t->db, t->table_name, reg_ext, 0);
|
||||
/*
|
||||
Note that we can't be 100% sure that it is a view since it's
|
||||
possible that we either simply have not found unused TABLE
|
||||
instance in THD::open_tables list or were unable to open table
|
||||
during prelocking process (in this case in theory we still
|
||||
should hold shared metadata lock on it).
|
||||
*/
|
||||
if (dd_frm_is_view(thd, path))
|
||||
{
|
||||
/*
|
||||
If parent_l of the table_list is non null then a merge table
|
||||
has this view as child table, which is not supported.
|
||||
*/
|
||||
if (t->parent_l)
|
||||
{
|
||||
my_error(ER_WRONG_MRG_TABLE, MYF(0));
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
|
||||
if (!tdc_open_view(thd, t, CHECK_METADATA_VERSION))
|
||||
{
|
||||
DBUG_ASSERT(t->view != 0);
|
||||
DBUG_RETURN(TRUE); // VIEW
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Open a base table.
|
||||
|
||||
@ -1608,49 +1669,10 @@ bool open_table(THD *thd, TABLE_LIST *table_list, Open_table_context *ot_ctx)
|
||||
DBUG_PRINT("info",("Using locked table"));
|
||||
goto reset;
|
||||
}
|
||||
/*
|
||||
Is this table a view and not a base table?
|
||||
(it is work around to allow to open view with locked tables,
|
||||
real fix will be made after definition cache will be made)
|
||||
|
||||
Since opening of view which was not explicitly locked by LOCK
|
||||
TABLES breaks metadata locking protocol (potentially can lead
|
||||
to deadlocks) it should be disallowed.
|
||||
*/
|
||||
if (thd->mdl_context.is_lock_owner(MDL_key::TABLE,
|
||||
table_list->db,
|
||||
table_list->table_name,
|
||||
MDL_SHARED))
|
||||
{
|
||||
char path[FN_REFLEN + 1];
|
||||
build_table_filename(path, sizeof(path) - 1,
|
||||
table_list->db, table_list->table_name, reg_ext, 0);
|
||||
/*
|
||||
Note that we can't be 100% sure that it is a view since it's
|
||||
possible that we either simply have not found unused TABLE
|
||||
instance in THD::open_tables list or were unable to open table
|
||||
during prelocking process (in this case in theory we still
|
||||
should hold shared metadata lock on it).
|
||||
*/
|
||||
if (dd_frm_is_view(thd, path))
|
||||
{
|
||||
/*
|
||||
If parent_l of the table_list is non null then a merge table
|
||||
has this view as child table, which is not supported.
|
||||
*/
|
||||
if (table_list->parent_l)
|
||||
{
|
||||
my_error(ER_WRONG_MRG_TABLE, MYF(0));
|
||||
DBUG_RETURN(true);
|
||||
}
|
||||
if (is_locked_view(thd, table_list))
|
||||
DBUG_RETURN(FALSE); // VIEW
|
||||
|
||||
if (!tdc_open_view(thd, table_list, CHECK_METADATA_VERSION))
|
||||
{
|
||||
DBUG_ASSERT(table_list->view != 0);
|
||||
DBUG_RETURN(FALSE); // VIEW
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
No table in the locked tables list. In case of explicit LOCK TABLES
|
||||
this can happen if a user did not include the table into the list.
|
||||
@ -2003,8 +2025,9 @@ TABLE *find_locked_table(TABLE *list, const char *db, const char *table_name)
|
||||
@param thd Thread context
|
||||
@param db Database name.
|
||||
@param table_name Name of table.
|
||||
@param no_error Don't emit error if no suitable TABLE
|
||||
instance were found.
|
||||
@param p_error In the case of an error (when the function returns NULL)
|
||||
the error number is stored there.
|
||||
If the p_error is NULL, function launches the error itself.
|
||||
|
||||
@note This function checks if the connection holds a global IX
|
||||
metadata lock. If no such lock is found, it is not safe to
|
||||
@ -2017,15 +2040,15 @@ TABLE *find_locked_table(TABLE *list, const char *db, const char *table_name)
|
||||
*/
|
||||
|
||||
TABLE *find_table_for_mdl_upgrade(THD *thd, const char *db,
|
||||
const char *table_name, bool no_error)
|
||||
const char *table_name, int *p_error)
|
||||
{
|
||||
TABLE *tab= find_locked_table(thd->open_tables, db, table_name);
|
||||
int error;
|
||||
|
||||
if (!tab)
|
||||
{
|
||||
if (!no_error)
|
||||
my_error(ER_TABLE_NOT_LOCKED, MYF(0), table_name);
|
||||
return NULL;
|
||||
error= ER_TABLE_NOT_LOCKED;
|
||||
goto err_exit;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2037,9 +2060,8 @@ TABLE *find_table_for_mdl_upgrade(THD *thd, const char *db,
|
||||
if (!thd->mdl_context.is_lock_owner(MDL_key::GLOBAL, "", "",
|
||||
MDL_INTENTION_EXCLUSIVE))
|
||||
{
|
||||
if (!no_error)
|
||||
my_error(ER_TABLE_NOT_LOCKED_FOR_WRITE, MYF(0), table_name);
|
||||
return NULL;
|
||||
error= ER_TABLE_NOT_LOCKED_FOR_WRITE;
|
||||
goto err_exit;
|
||||
}
|
||||
|
||||
while (tab->mdl_ticket != NULL &&
|
||||
@ -2047,10 +2069,21 @@ TABLE *find_table_for_mdl_upgrade(THD *thd, const char *db,
|
||||
(tab= find_locked_table(tab->next, db, table_name)))
|
||||
continue;
|
||||
|
||||
if (!tab && !no_error)
|
||||
my_error(ER_TABLE_NOT_LOCKED_FOR_WRITE, MYF(0), table_name);
|
||||
if (unlikely(!tab))
|
||||
{
|
||||
error= ER_TABLE_NOT_LOCKED_FOR_WRITE;
|
||||
goto err_exit;
|
||||
}
|
||||
|
||||
return tab;
|
||||
|
||||
err_exit:
|
||||
if (p_error)
|
||||
*p_error= error;
|
||||
else
|
||||
my_error(error, MYF(0), table_name);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
@ -3816,7 +3849,7 @@ open_tables_check_upgradable_mdl(THD *thd, TABLE_LIST *tables_start,
|
||||
Note that find_table_for_mdl_upgrade() will report an error if
|
||||
no suitable ticket is found.
|
||||
*/
|
||||
if (!find_table_for_mdl_upgrade(thd, table->db, table->table_name, false))
|
||||
if (!find_table_for_mdl_upgrade(thd, table->db, table->table_name, NULL))
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -4213,8 +4246,9 @@ handle_routine(THD *thd, Query_tables_list *prelocking_ctx,
|
||||
@note this can be changed to use a hash, instead of scanning the linked
|
||||
list, if the performance of this function will ever become an issue
|
||||
*/
|
||||
static bool table_already_fk_prelocked(TABLE_LIST *tl, LEX_STRING *db,
|
||||
LEX_STRING *table, thr_lock_type lock_type)
|
||||
|
||||
bool table_already_fk_prelocked(TABLE_LIST *tl, LEX_STRING *db,
|
||||
LEX_STRING *table, thr_lock_type lock_type)
|
||||
{
|
||||
for (; tl; tl= tl->next_global )
|
||||
{
|
||||
@ -6673,10 +6707,22 @@ store_natural_using_join_columns(THD *thd, TABLE_LIST *natural_using_join,
|
||||
|
||||
result= FALSE;
|
||||
|
||||
err:
|
||||
if (arena)
|
||||
thd->restore_active_arena(arena, &backup);
|
||||
DBUG_RETURN(result);
|
||||
|
||||
err:
|
||||
/*
|
||||
Actually we failed to build join columns list, so we have to
|
||||
clear it to avoid problems with half-build join on next run.
|
||||
The list was created in mark_common_columns().
|
||||
*/
|
||||
table_ref_1->remove_join_columns();
|
||||
table_ref_2->remove_join_columns();
|
||||
|
||||
if (arena)
|
||||
thd->restore_active_arena(arena, &backup);
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
||||
|
||||
|
@ -125,6 +125,7 @@ TABLE *open_ltable(THD *thd, TABLE_LIST *table_list, thr_lock_type update,
|
||||
MYSQL_OPEN_GET_NEW_TABLE |\
|
||||
MYSQL_OPEN_HAS_MDL_LOCK)
|
||||
|
||||
bool is_locked_view(THD *thd, TABLE_LIST *t);
|
||||
bool open_table(THD *thd, TABLE_LIST *table_list, Open_table_context *ot_ctx);
|
||||
|
||||
bool get_key_map_from_key_list(key_map *map, TABLE *table,
|
||||
@ -140,6 +141,8 @@ thr_lock_type read_lock_type_for_table(THD *thd,
|
||||
my_bool mysql_rm_tmp_tables(void);
|
||||
void close_tables_for_reopen(THD *thd, TABLE_LIST **tables,
|
||||
const MDL_savepoint &start_of_statement_svp);
|
||||
bool table_already_fk_prelocked(TABLE_LIST *tl, LEX_STRING *db,
|
||||
LEX_STRING *table, thr_lock_type lock_type);
|
||||
TABLE_LIST *find_table_in_list(TABLE_LIST *table,
|
||||
TABLE_LIST *TABLE_LIST::*link,
|
||||
const char *db_name,
|
||||
@ -295,7 +298,8 @@ bool tdc_open_view(THD *thd, TABLE_LIST *table_list, uint flags);
|
||||
|
||||
TABLE *find_table_for_mdl_upgrade(THD *thd, const char *db,
|
||||
const char *table_name,
|
||||
bool no_error);
|
||||
int *p_error);
|
||||
void mark_tmp_table_for_reuse(TABLE *table);
|
||||
|
||||
int dynamic_column_error_message(enum_dyncol_func_result rc);
|
||||
|
||||
|
@ -7797,7 +7797,9 @@ static void wsrep_mysql_parse(THD *thd, char *rawbuf, uint length,
|
||||
"WAIT_FOR wsrep_retry_autocommit_continue";
|
||||
DBUG_ASSERT(!debug_sync_set_action(thd, STRING_WITH_LEN(act)));
|
||||
});
|
||||
WSREP_DEBUG("Retry autocommit query: %s", thd->query());
|
||||
}
|
||||
|
||||
mysql_parse(thd, rawbuf, length, parser_state, is_com_multi,
|
||||
is_next_command);
|
||||
|
||||
|
@ -179,7 +179,8 @@ static struct wsrep_service_st wsrep_handler = {
|
||||
wsrep_thd_ws_handle,
|
||||
wsrep_trx_is_aborting,
|
||||
wsrep_trx_order_before,
|
||||
wsrep_unlock_rollback
|
||||
wsrep_unlock_rollback,
|
||||
wsrep_set_data_home_dir
|
||||
};
|
||||
|
||||
static struct thd_specifics_service_st thd_specifics_handler=
|
||||
|
@ -289,9 +289,18 @@ bool reload_acl_and_cache(THD *thd, unsigned long long options,
|
||||
*/
|
||||
if (tables)
|
||||
{
|
||||
int err;
|
||||
for (TABLE_LIST *t= tables; t; t= t->next_local)
|
||||
if (!find_table_for_mdl_upgrade(thd, t->db, t->table_name, false))
|
||||
return 1;
|
||||
if (!find_table_for_mdl_upgrade(thd, t->db, t->table_name, &err))
|
||||
{
|
||||
if (is_locked_view(thd, t))
|
||||
t->next_local= t->next_global;
|
||||
else
|
||||
{
|
||||
my_error(err, MYF(0), t->table_name);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -25446,7 +25446,7 @@ void TABLE_LIST::print(THD *thd, table_map eliminated_tables, String *str,
|
||||
const char *t_alias= alias;
|
||||
|
||||
str->append(' ');
|
||||
if (lower_case_table_names== 1)
|
||||
if (lower_case_table_names == 1)
|
||||
{
|
||||
if (alias && alias[0])
|
||||
{
|
||||
|
@ -3278,6 +3278,9 @@ int read_statistics_for_tables_if_needed(THD *thd, TABLE_LIST *tables)
|
||||
if (!tl->is_view_or_derived() && !is_temporary_table(tl) && tl->table)
|
||||
{
|
||||
TABLE_SHARE *table_share= tl->table->s;
|
||||
if (table_share && !(table_share->table_category == TABLE_CATEGORY_USER))
|
||||
continue;
|
||||
|
||||
if (table_share &&
|
||||
table_share->stats_cb.stats_can_be_read &&
|
||||
!table_share->stats_cb.stats_is_read)
|
||||
|
@ -345,12 +345,17 @@ private:
|
||||
public:
|
||||
|
||||
Histogram histogram;
|
||||
|
||||
uint32 no_values_provided_bitmap()
|
||||
{
|
||||
return
|
||||
((1 << (COLUMN_STAT_HISTOGRAM-COLUMN_STAT_COLUMN_NAME))-1) <<
|
||||
(COLUMN_STAT_COLUMN_NAME+1);
|
||||
}
|
||||
|
||||
void set_all_nulls()
|
||||
{
|
||||
column_stat_nulls=
|
||||
((1 << (COLUMN_STAT_HISTOGRAM-COLUMN_STAT_COLUMN_NAME))-1) <<
|
||||
(COLUMN_STAT_COLUMN_NAME+1);
|
||||
column_stat_nulls= no_values_provided_bitmap();
|
||||
}
|
||||
|
||||
void set_not_null(uint stat_field_no)
|
||||
@ -396,8 +401,22 @@ public:
|
||||
bool min_max_values_are_provided()
|
||||
{
|
||||
return !is_null(COLUMN_STAT_MIN_VALUE) &&
|
||||
!is_null(COLUMN_STAT_MIN_VALUE);
|
||||
}
|
||||
!is_null(COLUMN_STAT_MAX_VALUE);
|
||||
}
|
||||
/*
|
||||
This function checks whether the values for the fields of the statistical
|
||||
tables that were NULL by DEFAULT for a column have changed or not.
|
||||
|
||||
@retval
|
||||
TRUE: Statistics are not present for a column
|
||||
FALSE: Statisitics are present for a column
|
||||
*/
|
||||
bool no_stat_values_provided()
|
||||
{
|
||||
if (column_stat_nulls == no_values_provided_bitmap())
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
@ -2073,7 +2073,7 @@ bool mysql_rm_table(THD *thd,TABLE_LIST *tables, my_bool if_exists,
|
||||
in its elements.
|
||||
*/
|
||||
table->table= find_table_for_mdl_upgrade(thd, table->db,
|
||||
table->table_name, false);
|
||||
table->table_name, NULL);
|
||||
if (!table->table)
|
||||
DBUG_RETURN(true);
|
||||
table->mdl_request.ticket= table->table->mdl_ticket;
|
||||
@ -3402,6 +3402,10 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info,
|
||||
thd->change_item_tree(&sql_field->default_value->expr, item);
|
||||
}
|
||||
|
||||
/* Virtual fields are always NULL */
|
||||
if (sql_field->vcol_info)
|
||||
sql_field->flags&= ~NOT_NULL_FLAG;
|
||||
|
||||
if (sql_field->default_value &&
|
||||
sql_field->default_value->expr->basic_const_item() &&
|
||||
(sql_field->sql_type == MYSQL_TYPE_SET ||
|
||||
@ -9481,8 +9485,10 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
|
||||
Table can be found in the list of open tables in THD::all_temp_tables
|
||||
list.
|
||||
*/
|
||||
tbl.table= thd->find_temporary_table(&tbl);
|
||||
if ((tbl.table= thd->find_temporary_table(&tbl)) == NULL)
|
||||
goto err_new_table_cleanup;
|
||||
new_table= tbl.table;
|
||||
DBUG_ASSERT(new_table);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -9495,9 +9501,59 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
|
||||
alter_ctx.get_tmp_path(),
|
||||
alter_ctx.new_db, alter_ctx.tmp_name,
|
||||
true);
|
||||
if (!new_table)
|
||||
goto err_new_table_cleanup;
|
||||
|
||||
/*
|
||||
Normally, an attempt to modify an FK parent table will cause
|
||||
FK children to be prelocked, so the table-being-altered cannot
|
||||
be modified by a cascade FK action, because ALTER holds a lock
|
||||
and prelocking will wait.
|
||||
|
||||
But if a new FK is being added by this very ALTER, then the target
|
||||
table is not locked yet (it's a temporary table). So, we have to
|
||||
lock FK parents explicitly.
|
||||
*/
|
||||
if (alter_info->flags & Alter_info::ADD_FOREIGN_KEY)
|
||||
{
|
||||
List <FOREIGN_KEY_INFO> fk_list;
|
||||
List_iterator<FOREIGN_KEY_INFO> fk_list_it(fk_list);
|
||||
FOREIGN_KEY_INFO *fk;
|
||||
|
||||
/* tables_opened can be > 1 only for MERGE tables */
|
||||
DBUG_ASSERT(tables_opened == 1);
|
||||
DBUG_ASSERT(&table_list->next_global == thd->lex->query_tables_last);
|
||||
|
||||
new_table->file->get_foreign_key_list(thd, &fk_list);
|
||||
while ((fk= fk_list_it++))
|
||||
{
|
||||
if (lower_case_table_names)
|
||||
{
|
||||
char buf[NAME_LEN];
|
||||
uint len;
|
||||
strmake_buf(buf, fk->referenced_db->str);
|
||||
len = my_casedn_str(files_charset_info, buf);
|
||||
thd->make_lex_string(fk->referenced_db, buf, len);
|
||||
strmake_buf(buf, fk->referenced_table->str);
|
||||
len = my_casedn_str(files_charset_info, buf);
|
||||
thd->make_lex_string(fk->referenced_table, buf, len);
|
||||
}
|
||||
if (table_already_fk_prelocked(table_list, fk->referenced_db,
|
||||
fk->referenced_table, TL_READ_NO_INSERT))
|
||||
continue;
|
||||
|
||||
TABLE_LIST *tl= (TABLE_LIST *) thd->alloc(sizeof(TABLE_LIST));
|
||||
tl->init_one_table_for_prelocking(fk->referenced_db->str, fk->referenced_db->length,
|
||||
fk->referenced_table->str, fk->referenced_table->length,
|
||||
NULL, TL_READ_NO_INSERT, false, NULL, 0,
|
||||
&thd->lex->query_tables_last);
|
||||
}
|
||||
|
||||
if (open_tables(thd, &table_list->next_global, &tables_opened, 0,
|
||||
&alter_prelocking_strategy))
|
||||
goto err_new_table_cleanup;
|
||||
}
|
||||
}
|
||||
if (!new_table)
|
||||
goto err_new_table_cleanup;
|
||||
/*
|
||||
Note: In case of MERGE table, we do not attach children. We do not
|
||||
copy data for MERGE tables. Only the children have data.
|
||||
|
@ -514,7 +514,11 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
|
||||
if (err_status)
|
||||
goto end;
|
||||
}
|
||||
WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL);
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (thd->wsrep_exec_mode == LOCAL_STATE)
|
||||
WSREP_TO_ISOLATION_BEGIN(WSREP_MYSQL_DB, NULL, NULL);
|
||||
#endif
|
||||
|
||||
/* We should have only one table in table list. */
|
||||
DBUG_ASSERT(tables->next_global == 0);
|
||||
@ -542,7 +546,7 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
|
||||
/* Under LOCK TABLES we must only accept write locked tables. */
|
||||
if (!(tables->table= find_table_for_mdl_upgrade(thd, tables->db,
|
||||
tables->table_name,
|
||||
FALSE)))
|
||||
NULL)))
|
||||
goto end;
|
||||
}
|
||||
else
|
||||
|
@ -302,7 +302,7 @@ bool Sql_cmd_truncate_table::lock_table(THD *thd, TABLE_LIST *table_ref,
|
||||
if (thd->locked_tables_mode)
|
||||
{
|
||||
if (!(table= find_table_for_mdl_upgrade(thd, table_ref->db,
|
||||
table_ref->table_name, FALSE)))
|
||||
table_ref->table_name, NULL)))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
*hton_can_recreate= ha_check_storage_engine_flag(table->s->db_type(),
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user