Merge 10.4 into 10.5
This commit is contained in:
commit
ea847cbeaf
17
debian/autobake-deb.sh
vendored
17
debian/autobake-deb.sh
vendored
@ -56,8 +56,15 @@ remove_rocksdb_tools()
|
|||||||
|
|
||||||
architecture=$(dpkg-architecture -q DEB_BUILD_ARCH)
|
architecture=$(dpkg-architecture -q DEB_BUILD_ARCH)
|
||||||
|
|
||||||
CODENAME="$(lsb_release -sc)"
|
LSBID="$(lsb_release -si | tr '[:upper:]' '[:lower:]')"
|
||||||
case "${CODENAME}" in
|
LSBVERSION="$(lsb_release -sr | sed -e "s#\.##g")"
|
||||||
|
LSBNAME="$(lsb_release -sc)"
|
||||||
|
|
||||||
|
if [ -z "${LSBID}" ]
|
||||||
|
then
|
||||||
|
LSBID="unknown"
|
||||||
|
fi
|
||||||
|
case "${LSBNAME}" in
|
||||||
stretch)
|
stretch)
|
||||||
# MDEV-16525 libzstd-dev-1.1.3 minimum version
|
# MDEV-16525 libzstd-dev-1.1.3 minimum version
|
||||||
sed -e '/libzstd-dev/d' \
|
sed -e '/libzstd-dev/d' \
|
||||||
@ -90,7 +97,7 @@ case "${CODENAME}" in
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Error - unknown release codename $CODENAME" >&2
|
echo "Error - unknown release codename $LSBNAME" >&2
|
||||||
exit 1
|
exit 1
|
||||||
esac
|
esac
|
||||||
|
|
||||||
@ -107,9 +114,9 @@ UPSTREAM="${MYSQL_VERSION_MAJOR}.${MYSQL_VERSION_MINOR}.${MYSQL_VERSION_PATCH}${
|
|||||||
PATCHLEVEL="+maria"
|
PATCHLEVEL="+maria"
|
||||||
LOGSTRING="MariaDB build"
|
LOGSTRING="MariaDB build"
|
||||||
EPOCH="1:"
|
EPOCH="1:"
|
||||||
VERSION="${EPOCH}${UPSTREAM}${PATCHLEVEL}~${CODENAME}"
|
VERSION="${EPOCH}${UPSTREAM}${PATCHLEVEL}~${LSBID:0:3}${LSBVERSION}"
|
||||||
|
|
||||||
dch -b -D "${CODENAME}" -v "${VERSION}" "Automatic build with ${LOGSTRING}." --controlmaint
|
dch -b -D ${LSBNAME} -v "${VERSION}" "Automatic build with ${LOGSTRING}." --controlmaint
|
||||||
|
|
||||||
echo "Creating package version ${VERSION} ... "
|
echo "Creating package version ${VERSION} ... "
|
||||||
|
|
||||||
|
@ -834,3 +834,25 @@ set global keycache2.key_buffer_size=0;
|
|||||||
set global key_buffer_size=@save_key_buffer_size;
|
set global key_buffer_size=@save_key_buffer_size;
|
||||||
set global key_cache_segments=@save_key_cache_segments;
|
set global key_cache_segments=@save_key_cache_segments;
|
||||||
set global key_cache_file_hash_size=@save_key_cache_file_hash_size;
|
set global key_cache_file_hash_size=@save_key_cache_file_hash_size;
|
||||||
|
#
|
||||||
|
# SIGSEGV in flush_all_key_blocks when changing
|
||||||
|
# key_buffer_size / ASAN: heap-use-after-free in flush_all_key_blocks
|
||||||
|
#
|
||||||
|
SET GLOBAL keycache1.key_cache_segments=7;
|
||||||
|
SET GLOBAL keycache1.key_buffer_size=1*1024*1024;
|
||||||
|
SET GLOBAL keycache1.key_buffer_size=0;
|
||||||
|
SET GLOBAL keycache1.key_buffer_size=128*1024;
|
||||||
|
create table t1 (p int primary key, a char(10)) delay_key_write=1;
|
||||||
|
cache index t1 key (`primary`) in keycache1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 assign_to_keycache status OK
|
||||||
|
insert into t1 values (1, 'qqqq'), (11, 'yyyy');
|
||||||
|
select * from t1;
|
||||||
|
p a
|
||||||
|
1 qqqq
|
||||||
|
11 yyyy
|
||||||
|
drop table t1;
|
||||||
|
SET GLOBAL keycache1.key_buffer_size=0;
|
||||||
|
#
|
||||||
|
# End of 10.3 tests
|
||||||
|
#
|
||||||
|
@ -538,3 +538,24 @@ set global key_cache_segments=@save_key_cache_segments;
|
|||||||
set global key_cache_file_hash_size=@save_key_cache_file_hash_size;
|
set global key_cache_file_hash_size=@save_key_cache_file_hash_size;
|
||||||
|
|
||||||
# End of 5.2 tests
|
# End of 5.2 tests
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # SIGSEGV in flush_all_key_blocks when changing
|
||||||
|
--echo # key_buffer_size / ASAN: heap-use-after-free in flush_all_key_blocks
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SET GLOBAL keycache1.key_cache_segments=7;
|
||||||
|
SET GLOBAL keycache1.key_buffer_size=1*1024*1024;
|
||||||
|
SET GLOBAL keycache1.key_buffer_size=0;
|
||||||
|
SET GLOBAL keycache1.key_buffer_size=128*1024;
|
||||||
|
create table t1 (p int primary key, a char(10)) delay_key_write=1;
|
||||||
|
cache index t1 key (`primary`) in keycache1;
|
||||||
|
insert into t1 values (1, 'qqqq'), (11, 'yyyy');
|
||||||
|
select * from t1;
|
||||||
|
drop table t1;
|
||||||
|
SET GLOBAL keycache1.key_buffer_size=0;
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.3 tests
|
||||||
|
--echo #
|
||||||
|
@ -197,20 +197,6 @@ f2
|
|||||||
connection default;
|
connection default;
|
||||||
SET DEBUG_SYNC = 'RESET';
|
SET DEBUG_SYNC = 'RESET';
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
connection con1;
|
|
||||||
connection con2;
|
|
||||||
connection con1;
|
|
||||||
SET SESSION optimizer_search_depth=0;
|
|
||||||
SET DEBUG_SYNC= 'before_join_optimize SIGNAL in_sync';
|
|
||||||
PREPARE stmt FROM 'EXPLAIN SELECT * FROM t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28,t29,t30,t31,t32,t33,t34,t35,t36,t37,t38,t39,t40 WHERE a1=a2 AND a2=a3 AND a3=a4 AND a4=a5 AND a5=a6 AND a6=a7 AND a7=a8 AND a8=a9 AND a9=a10 AND a10=a11 AND a11=a12 AND a12=a13 AND a13=a14 AND a14=a15 AND a15=a16 AND a16=a17 AND a17=a18 AND a18=a19 AND a19=a20 AND a20=a21 AND a21=a22 AND a22=a23 AND a23=a24 AND a24=a25 AND a25=a26 AND a26=a27 AND a27=a28 AND a28=a29 AND a29=a30 AND a30=a31 AND a31=a32 AND a32=a33 AND a33=a34 AND a34=a35 AND a35=a36 AND a36=a37 AND a37=a38 AND a38=a39 AND a39=a40 ';
|
|
||||||
EXECUTE stmt;
|
|
||||||
connection con2;
|
|
||||||
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
|
||||||
KILL QUERY @id;
|
|
||||||
connection con1;
|
|
||||||
ERROR 70100: Query execution was interrupted
|
|
||||||
connection default;
|
|
||||||
SET DEBUG_SYNC = 'RESET';
|
|
||||||
#
|
#
|
||||||
# Bug#19723: kill of active connection yields different error code
|
# Bug#19723: kill of active connection yields different error code
|
||||||
# depending on platform.
|
# depending on platform.
|
||||||
|
@ -271,74 +271,6 @@ connection default;
|
|||||||
SET DEBUG_SYNC = 'RESET';
|
SET DEBUG_SYNC = 'RESET';
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
#
|
|
||||||
# Bug#28598: mysqld crash when killing a long-running explain query.
|
|
||||||
#
|
|
||||||
connection con1;
|
|
||||||
let $ID= `SELECT @id := CONNECTION_ID()`;
|
|
||||||
connection con2;
|
|
||||||
let $ignore= `SELECT @id := $ID`;
|
|
||||||
connection con1;
|
|
||||||
--disable_query_log
|
|
||||||
let $tab_count= 40;
|
|
||||||
|
|
||||||
--disable_query_log
|
|
||||||
begin;
|
|
||||||
let $i= $tab_count;
|
|
||||||
while ($i)
|
|
||||||
{
|
|
||||||
eval CREATE TABLE t$i (a$i INT, KEY(a$i));
|
|
||||||
eval INSERT INTO t$i VALUES (1),(2),(3),(4),(5),(6),(7);
|
|
||||||
dec $i ;
|
|
||||||
}
|
|
||||||
|
|
||||||
commit;
|
|
||||||
--enable_query_log
|
|
||||||
|
|
||||||
SET SESSION optimizer_search_depth=0;
|
|
||||||
|
|
||||||
let $i=$tab_count;
|
|
||||||
while ($i)
|
|
||||||
{
|
|
||||||
let $a= a$i;
|
|
||||||
let $t= t$i;
|
|
||||||
dec $i;
|
|
||||||
if ($i)
|
|
||||||
{
|
|
||||||
let $comma=,;
|
|
||||||
let $from=$comma$t$from;
|
|
||||||
let $where=a$i=$a $and $where;
|
|
||||||
}
|
|
||||||
if (!$i)
|
|
||||||
{
|
|
||||||
let $from=FROM $t$from;
|
|
||||||
let $where=WHERE $where;
|
|
||||||
}
|
|
||||||
let $and=AND;
|
|
||||||
}
|
|
||||||
|
|
||||||
--enable_query_log
|
|
||||||
SET DEBUG_SYNC= 'before_join_optimize SIGNAL in_sync';
|
|
||||||
eval PREPARE stmt FROM 'EXPLAIN SELECT * $from $where';
|
|
||||||
send EXECUTE stmt;
|
|
||||||
|
|
||||||
connection con2;
|
|
||||||
SET DEBUG_SYNC= 'now WAIT_FOR in_sync';
|
|
||||||
KILL QUERY @id;
|
|
||||||
connection con1;
|
|
||||||
--error 1317
|
|
||||||
reap;
|
|
||||||
--disable_query_log
|
|
||||||
let $i= $tab_count;
|
|
||||||
while ($i)
|
|
||||||
{
|
|
||||||
eval DROP TABLE t$i;
|
|
||||||
dec $i ;
|
|
||||||
}
|
|
||||||
--enable_query_log
|
|
||||||
connection default;
|
|
||||||
SET DEBUG_SYNC = 'RESET';
|
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # Bug#19723: kill of active connection yields different error code
|
--echo # Bug#19723: kill of active connection yields different error code
|
||||||
--echo # depending on platform.
|
--echo # depending on platform.
|
||||||
|
@ -3253,17 +3253,21 @@ sub do_before_run_mysqltest($)
|
|||||||
if ($^O eq "MSWin32") {
|
if ($^O eq "MSWin32") {
|
||||||
push @cmd, '--binary';
|
push @cmd, '--binary';
|
||||||
}
|
}
|
||||||
push @cmd, (qw/-r - -f -s -o/, $dest, $base_result, $resfile);
|
push @cmd, (qw/-r - -f -s -o/, $dest . $$, $base_result, $resfile);
|
||||||
if (-w $resdir) {
|
if (-w $resdir) {
|
||||||
# don't rebuild a file if it's up to date
|
# don't rebuild a file if it's up to date
|
||||||
unless (-e $dest and -M $dest < -M $resfile
|
unless (-e $dest and -M $dest < -M $resfile
|
||||||
and -M $dest < -M $base_result) {
|
and -M $dest < -M $base_result) {
|
||||||
run_system(@cmd);
|
run_system(@cmd);
|
||||||
|
rename $cmd[-3], $dest or unlink $cmd[-3];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$cmd[-3] = $dest = $opt_tmpdir . '/' . basename($dest);
|
$dest = $opt_tmpdir . '/' . basename($dest);
|
||||||
|
$cmd[-3] = $dest . $$;
|
||||||
run_system(@cmd);
|
run_system(@cmd);
|
||||||
|
rename $cmd[-3], $dest or unlink $cmd[-3];
|
||||||
}
|
}
|
||||||
|
|
||||||
$tinfo->{result_file} = $dest;
|
$tinfo->{result_file} = $dest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,27 +1,27 @@
|
|||||||
--- r/galera_ist_MDEV-28423.result
|
--- r/galera_ist_MDEV-28423.result
|
||||||
+++ r/galera_ist_MDEV-28423.reject
|
+++ r/galera_ist_MDEV-28423.reject
|
||||||
@@ -286,3 +286,111 @@
|
@@ -517,3 +517,187 @@
|
||||||
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
SET AUTOCOMMIT=ON;
|
|
||||||
+Performing State Transfer on a server that has been killed and restarted
|
+Performing State Transfer on a server that has been killed and restarted
|
||||||
+while a DDL was in progress on it
|
+while a DDL was in progress on it
|
||||||
+connection node_1;
|
+connection node_1;
|
||||||
+CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
+CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB;
|
||||||
+SET AUTOCOMMIT=OFF;
|
+SET AUTOCOMMIT=OFF;
|
||||||
+START TRANSACTION;
|
+START TRANSACTION;
|
||||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
+INSERT INTO t1 VALUES (1,'node1_committed_before');
|
||||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
+INSERT INTO t1 VALUES (2,'node1_committed_before');
|
||||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
+INSERT INTO t1 VALUES (3,'node1_committed_before');
|
||||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
+INSERT INTO t1 VALUES (4,'node1_committed_before');
|
||||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
+INSERT INTO t1 VALUES (5,'node1_committed_before');
|
||||||
+connection node_2;
|
+connection node_2;
|
||||||
+START TRANSACTION;
|
+START TRANSACTION;
|
||||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
+INSERT INTO t1 VALUES (6,'node2_committed_before');
|
||||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
+INSERT INTO t1 VALUES (7,'node2_committed_before');
|
||||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
+INSERT INTO t1 VALUES (8,'node2_committed_before');
|
||||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
+INSERT INTO t1 VALUES (9,'node2_committed_before');
|
||||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
+INSERT INTO t1 VALUES (10,'node2_committed_before');
|
||||||
+COMMIT;
|
+COMMIT;
|
||||||
+SET GLOBAL debug_dbug = 'd,sync.alter_opened_table';
|
+SET GLOBAL debug_dbug = 'd,sync.alter_opened_table';
|
||||||
+connection node_1;
|
+connection node_1;
|
||||||
@ -32,26 +32,26 @@
|
|||||||
+connection node_1;
|
+connection node_1;
|
||||||
+SET AUTOCOMMIT=OFF;
|
+SET AUTOCOMMIT=OFF;
|
||||||
+START TRANSACTION;
|
+START TRANSACTION;
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
+INSERT INTO t1 (id,f1) VALUES (11,'node1_committed_during');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
+INSERT INTO t1 (id,f1) VALUES (12,'node1_committed_during');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
+INSERT INTO t1 (id,f1) VALUES (13,'node1_committed_during');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
+INSERT INTO t1 (id,f1) VALUES (14,'node1_committed_during');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
+INSERT INTO t1 (id,f1) VALUES (15,'node1_committed_during');
|
||||||
+COMMIT;
|
+COMMIT;
|
||||||
+START TRANSACTION;
|
+START TRANSACTION;
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (16,'node1_to_be_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (17,'node1_to_be_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (18,'node1_to_be_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (19,'node1_to_be_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (20,'node1_to_be_committed_after');
|
||||||
+connect node_1a_galera_st_kill_slave_ddl, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
+connect node_1a_galera_st_kill_slave_ddl, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||||
+SET AUTOCOMMIT=OFF;
|
+SET AUTOCOMMIT=OFF;
|
||||||
+START TRANSACTION;
|
+START TRANSACTION;
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
+INSERT INTO t1 (id,f1) VALUES (21,'node1_to_be_rollbacked_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
+INSERT INTO t1 (id,f1) VALUES (22,'node1_to_be_rollbacked_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
+INSERT INTO t1 (id,f1) VALUES (23,'node1_to_be_rollbacked_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
+INSERT INTO t1 (id,f1) VALUES (24,'node1_to_be_rollbacked_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
+INSERT INTO t1 (id,f1) VALUES (25,'node1_to_be_rollbacked_after');
|
||||||
+connection node_2;
|
+connection node_2;
|
||||||
+Performing --wsrep-recover ...
|
+Performing --wsrep-recover ...
|
||||||
+connection node_2;
|
+connection node_2;
|
||||||
@ -59,56 +59,132 @@
|
|||||||
+Using --wsrep-start-position when starting mysqld ...
|
+Using --wsrep-start-position when starting mysqld ...
|
||||||
+SET AUTOCOMMIT=OFF;
|
+SET AUTOCOMMIT=OFF;
|
||||||
+START TRANSACTION;
|
+START TRANSACTION;
|
||||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (26,'node2_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (27,'node2_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (28,'node2_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (29,'node2_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (30,'node2_committed_after');
|
||||||
+COMMIT;
|
+COMMIT;
|
||||||
+connection node_1;
|
+connection node_1;
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (31,'node1_to_be_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (32,'node1_to_be_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (33,'node1_to_be_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (34,'node1_to_be_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (35,'node1_to_be_committed_after');
|
||||||
+COMMIT;
|
+COMMIT;
|
||||||
+SET AUTOCOMMIT=OFF;
|
+SET AUTOCOMMIT=OFF;
|
||||||
+START TRANSACTION;
|
+START TRANSACTION;
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (36,'node1_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (37,'node1_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (38,'node1_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (39,'node1_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (40,'node1_committed_after');
|
||||||
+COMMIT;
|
+COMMIT;
|
||||||
+connection node_1a_galera_st_kill_slave_ddl;
|
+connection node_1a_galera_st_kill_slave_ddl;
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
+INSERT INTO t1 (id,f1) VALUES (41,'node1_to_be_rollbacked_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
+INSERT INTO t1 (id,f1) VALUES (42,'node1_to_be_rollbacked_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
+INSERT INTO t1 (id,f1) VALUES (43,'node1_to_be_rollbacked_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
+INSERT INTO t1 (id,f1) VALUES (44,'node1_to_be_rollbacked_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
+INSERT INTO t1 (id,f1) VALUES (45,'node1_to_be_rollbacked_after');
|
||||||
+ROLLBACK;
|
+ROLLBACK;
|
||||||
+SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
+SET AUTOCOMMIT=ON;
|
||||||
+COUNT(*) = 2
|
+SET SESSION wsrep_sync_wait=15;
|
||||||
+1
|
+SELECT COUNT(*) AS EXPECT_3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||||
+SELECT COUNT(*) = 35 FROM t1;
|
+EXPECT_3
|
||||||
+COUNT(*) = 35
|
+3
|
||||||
+1
|
+SELECT COUNT(*) AS EXPECT_35 FROM t1;
|
||||||
|
+EXPECT_35
|
||||||
|
+35
|
||||||
|
+SELECT * FROM t1;
|
||||||
|
+id f1 f2
|
||||||
|
+1 node1_committed_before NULL
|
||||||
|
+2 node1_committed_before NULL
|
||||||
|
+3 node1_committed_before NULL
|
||||||
|
+4 node1_committed_before NULL
|
||||||
|
+5 node1_committed_before NULL
|
||||||
|
+6 node2_committed_before NULL
|
||||||
|
+7 node2_committed_before NULL
|
||||||
|
+8 node2_committed_before NULL
|
||||||
|
+9 node2_committed_before NULL
|
||||||
|
+10 node2_committed_before NULL
|
||||||
|
+11 node1_committed_during NULL
|
||||||
|
+12 node1_committed_during NULL
|
||||||
|
+13 node1_committed_during NULL
|
||||||
|
+14 node1_committed_during NULL
|
||||||
|
+15 node1_committed_during NULL
|
||||||
|
+16 node1_to_be_committed_after NULL
|
||||||
|
+17 node1_to_be_committed_after NULL
|
||||||
|
+18 node1_to_be_committed_after NULL
|
||||||
|
+19 node1_to_be_committed_after NULL
|
||||||
|
+20 node1_to_be_committed_after NULL
|
||||||
|
+26 node2_committed_after NULL
|
||||||
|
+27 node2_committed_after NULL
|
||||||
|
+28 node2_committed_after NULL
|
||||||
|
+29 node2_committed_after NULL
|
||||||
|
+30 node2_committed_after NULL
|
||||||
|
+31 node1_to_be_committed_after NULL
|
||||||
|
+32 node1_to_be_committed_after NULL
|
||||||
|
+33 node1_to_be_committed_after NULL
|
||||||
|
+34 node1_to_be_committed_after NULL
|
||||||
|
+35 node1_to_be_committed_after NULL
|
||||||
|
+36 node1_committed_after NULL
|
||||||
|
+37 node1_committed_after NULL
|
||||||
|
+38 node1_committed_after NULL
|
||||||
|
+39 node1_committed_after NULL
|
||||||
|
+40 node1_committed_after NULL
|
||||||
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||||
+COUNT(*) = 0
|
+COUNT(*) = 0
|
||||||
+1
|
+1
|
||||||
+COMMIT;
|
+COMMIT;
|
||||||
+SET AUTOCOMMIT=ON;
|
|
||||||
+connection node_1;
|
+connection node_1;
|
||||||
+SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
+SET AUTOCOMMIT=ON;
|
||||||
+COUNT(*) = 2
|
+SET SESSION wsrep_sync_wait=15;
|
||||||
+1
|
+SELECT COUNT(*) AS EXPECT_3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||||
+SELECT COUNT(*) = 35 FROM t1;
|
+EXPECT_3
|
||||||
+COUNT(*) = 35
|
+3
|
||||||
+1
|
+SELECT COUNT(*) AS EXPECT_35 FROM t1;
|
||||||
|
+EXPECT_35
|
||||||
|
+35
|
||||||
|
+SELECT * FROM t1;
|
||||||
|
+id f1 f2
|
||||||
|
+1 node1_committed_before NULL
|
||||||
|
+2 node1_committed_before NULL
|
||||||
|
+3 node1_committed_before NULL
|
||||||
|
+4 node1_committed_before NULL
|
||||||
|
+5 node1_committed_before NULL
|
||||||
|
+6 node2_committed_before NULL
|
||||||
|
+7 node2_committed_before NULL
|
||||||
|
+8 node2_committed_before NULL
|
||||||
|
+9 node2_committed_before NULL
|
||||||
|
+10 node2_committed_before NULL
|
||||||
|
+11 node1_committed_during NULL
|
||||||
|
+12 node1_committed_during NULL
|
||||||
|
+13 node1_committed_during NULL
|
||||||
|
+14 node1_committed_during NULL
|
||||||
|
+15 node1_committed_during NULL
|
||||||
|
+16 node1_to_be_committed_after NULL
|
||||||
|
+17 node1_to_be_committed_after NULL
|
||||||
|
+18 node1_to_be_committed_after NULL
|
||||||
|
+19 node1_to_be_committed_after NULL
|
||||||
|
+20 node1_to_be_committed_after NULL
|
||||||
|
+26 node2_committed_after NULL
|
||||||
|
+27 node2_committed_after NULL
|
||||||
|
+28 node2_committed_after NULL
|
||||||
|
+29 node2_committed_after NULL
|
||||||
|
+30 node2_committed_after NULL
|
||||||
|
+31 node1_to_be_committed_after NULL
|
||||||
|
+32 node1_to_be_committed_after NULL
|
||||||
|
+33 node1_to_be_committed_after NULL
|
||||||
|
+34 node1_to_be_committed_after NULL
|
||||||
|
+35 node1_to_be_committed_after NULL
|
||||||
|
+36 node1_committed_after NULL
|
||||||
|
+37 node1_committed_after NULL
|
||||||
|
+38 node1_committed_after NULL
|
||||||
|
+39 node1_committed_after NULL
|
||||||
|
+40 node1_committed_after NULL
|
||||||
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||||
+COUNT(*) = 0
|
+COUNT(*) = 0
|
||||||
+1
|
+1
|
||||||
+DROP TABLE t1;
|
+DROP TABLE t1;
|
||||||
+COMMIT;
|
+COMMIT;
|
||||||
+SET AUTOCOMMIT=ON;
|
|
||||||
+SET GLOBAL debug_dbug = $debug_orig;
|
+SET GLOBAL debug_dbug = $debug_orig;
|
||||||
|
@ -1,287 +1,519 @@
|
|||||||
|
connection node_2;
|
||||||
|
connection node_1;
|
||||||
connection node_1;
|
connection node_1;
|
||||||
connection node_2;
|
connection node_2;
|
||||||
Performing State Transfer on a server that has been temporarily disconnected
|
Performing State Transfer on a server that has been temporarily disconnected
|
||||||
connection node_1;
|
connection node_1;
|
||||||
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (1,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (2,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (3,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (4,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (5,'node1_committed_before');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
connection node_2;
|
connection node_2;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (6,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (7,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (8,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (9,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (10,'node2_committed_before');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
Unloading wsrep provider ...
|
Unloading wsrep provider ...
|
||||||
SET GLOBAL wsrep_cluster_address = '';
|
SET GLOBAL wsrep_cluster_address = '';
|
||||||
connection node_1;
|
connection node_1;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (11,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (12,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (13,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (14,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (15,'node1_committed_during');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (16,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (17,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (18,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (19,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (20,'node1_to_be_committed_after');
|
||||||
connect node_1a_galera_st_disconnect_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
connect node_1a_galera_st_disconnect_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (21,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (22,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (23,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (24,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (25,'node1_to_be_rollbacked_after');
|
||||||
connection node_2;
|
connection node_2;
|
||||||
Loading wsrep provider ...
|
Loading wsrep provider ...
|
||||||
|
disconnect node_2;
|
||||||
|
connect node_2, 127.0.0.1, root, , test, $NODE_MYPORT_2;
|
||||||
|
connection node_2;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (26,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (27,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (28,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (29,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (30,'node2_committed_after');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
connection node_1;
|
connection node_1;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (31,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (32,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (33,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (34,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (35,'node1_to_be_committed_after');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (36,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (37,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (38,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (39,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (40,'node1_committed_after');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
connection node_1a_galera_st_disconnect_slave;
|
connection node_1a_galera_st_disconnect_slave;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (41,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (42,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (43,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (44,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (45,'node1_to_be_rollbacked_after');
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
SELECT COUNT(*) = 35 FROM t1;
|
SET AUTOCOMMIT=ON;
|
||||||
COUNT(*) = 35
|
SET SESSION wsrep_sync_wait=15;
|
||||||
1
|
SELECT COUNT(*) AS EXPECT_35 FROM t1;
|
||||||
|
EXPECT_35
|
||||||
|
35
|
||||||
|
SELECT * FROM t1;
|
||||||
|
id f1
|
||||||
|
1 node1_committed_before
|
||||||
|
2 node1_committed_before
|
||||||
|
3 node1_committed_before
|
||||||
|
4 node1_committed_before
|
||||||
|
5 node1_committed_before
|
||||||
|
6 node2_committed_before
|
||||||
|
7 node2_committed_before
|
||||||
|
8 node2_committed_before
|
||||||
|
9 node2_committed_before
|
||||||
|
10 node2_committed_before
|
||||||
|
11 node1_committed_during
|
||||||
|
12 node1_committed_during
|
||||||
|
13 node1_committed_during
|
||||||
|
14 node1_committed_during
|
||||||
|
15 node1_committed_during
|
||||||
|
16 node1_to_be_committed_after
|
||||||
|
17 node1_to_be_committed_after
|
||||||
|
18 node1_to_be_committed_after
|
||||||
|
19 node1_to_be_committed_after
|
||||||
|
20 node1_to_be_committed_after
|
||||||
|
26 node2_committed_after
|
||||||
|
27 node2_committed_after
|
||||||
|
28 node2_committed_after
|
||||||
|
29 node2_committed_after
|
||||||
|
30 node2_committed_after
|
||||||
|
31 node1_to_be_committed_after
|
||||||
|
32 node1_to_be_committed_after
|
||||||
|
33 node1_to_be_committed_after
|
||||||
|
34 node1_to_be_committed_after
|
||||||
|
35 node1_to_be_committed_after
|
||||||
|
36 node1_committed_after
|
||||||
|
37 node1_committed_after
|
||||||
|
38 node1_committed_after
|
||||||
|
39 node1_committed_after
|
||||||
|
40 node1_committed_after
|
||||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||||
COUNT(*) = 0
|
COUNT(*) = 0
|
||||||
1
|
1
|
||||||
COMMIT;
|
|
||||||
SET AUTOCOMMIT=ON;
|
|
||||||
connection node_1;
|
connection node_1;
|
||||||
SELECT COUNT(*) = 35 FROM t1;
|
SET AUTOCOMMIT=ON;
|
||||||
COUNT(*) = 35
|
SET SESSION wsrep_sync_wait=15;
|
||||||
1
|
SELECT COUNT(*) AS EXPECT_35 FROM t1;
|
||||||
|
EXPECT_35
|
||||||
|
35
|
||||||
|
SELECT * FROM t1;
|
||||||
|
id f1
|
||||||
|
1 node1_committed_before
|
||||||
|
2 node1_committed_before
|
||||||
|
3 node1_committed_before
|
||||||
|
4 node1_committed_before
|
||||||
|
5 node1_committed_before
|
||||||
|
6 node2_committed_before
|
||||||
|
7 node2_committed_before
|
||||||
|
8 node2_committed_before
|
||||||
|
9 node2_committed_before
|
||||||
|
10 node2_committed_before
|
||||||
|
11 node1_committed_during
|
||||||
|
12 node1_committed_during
|
||||||
|
13 node1_committed_during
|
||||||
|
14 node1_committed_during
|
||||||
|
15 node1_committed_during
|
||||||
|
16 node1_to_be_committed_after
|
||||||
|
17 node1_to_be_committed_after
|
||||||
|
18 node1_to_be_committed_after
|
||||||
|
19 node1_to_be_committed_after
|
||||||
|
20 node1_to_be_committed_after
|
||||||
|
26 node2_committed_after
|
||||||
|
27 node2_committed_after
|
||||||
|
28 node2_committed_after
|
||||||
|
29 node2_committed_after
|
||||||
|
30 node2_committed_after
|
||||||
|
31 node1_to_be_committed_after
|
||||||
|
32 node1_to_be_committed_after
|
||||||
|
33 node1_to_be_committed_after
|
||||||
|
34 node1_to_be_committed_after
|
||||||
|
35 node1_to_be_committed_after
|
||||||
|
36 node1_committed_after
|
||||||
|
37 node1_committed_after
|
||||||
|
38 node1_committed_after
|
||||||
|
39 node1_committed_after
|
||||||
|
40 node1_committed_after
|
||||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||||
COUNT(*) = 0
|
COUNT(*) = 0
|
||||||
1
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
SET AUTOCOMMIT=ON;
|
|
||||||
Performing State Transfer on a server that has been shut down cleanly and restarted
|
Performing State Transfer on a server that has been shut down cleanly and restarted
|
||||||
connection node_1;
|
connection node_1;
|
||||||
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (1,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (2,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (3,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (4,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (5,'node1_committed_before');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
connection node_2;
|
connection node_2;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (6,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (7,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (8,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (9,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (10,'node2_committed_before');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
Shutting down server ...
|
Shutting down server ...
|
||||||
connection node_1;
|
connection node_1;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (11,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (12,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (13,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (14,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (15,'node1_committed_during');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (16,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (17,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (18,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (19,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (20,'node1_to_be_committed_after');
|
||||||
connect node_1a_galera_st_shutdown_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
connect node_1a_galera_st_shutdown_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (21,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (22,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (23,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (24,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (25,'node1_to_be_rollbacked_after');
|
||||||
connection node_2;
|
connection node_2;
|
||||||
Starting server ...
|
Starting server ...
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (26,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (27,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (28,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (29,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (30,'node2_committed_after');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
connection node_1;
|
connection node_1;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (31,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (32,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (33,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (34,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (35,'node1_to_be_committed_after');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (36,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (37,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (38,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (39,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (40,'node1_committed_after');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
connection node_1a_galera_st_shutdown_slave;
|
connection node_1a_galera_st_shutdown_slave;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (41,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (42,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (43,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (44,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (45,'node1_to_be_rollbacked_after');
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
SELECT COUNT(*) = 35 FROM t1;
|
SET AUTOCOMMIT=ON;
|
||||||
COUNT(*) = 35
|
SET SESSION wsrep_sync_wait=15;
|
||||||
1
|
SELECT COUNT(*) AS EXPECT_15 FROM t1;
|
||||||
|
EXPECT_15
|
||||||
|
35
|
||||||
|
SELECT * from t1;
|
||||||
|
id f1
|
||||||
|
1 node1_committed_before
|
||||||
|
2 node1_committed_before
|
||||||
|
3 node1_committed_before
|
||||||
|
4 node1_committed_before
|
||||||
|
5 node1_committed_before
|
||||||
|
6 node2_committed_before
|
||||||
|
7 node2_committed_before
|
||||||
|
8 node2_committed_before
|
||||||
|
9 node2_committed_before
|
||||||
|
10 node2_committed_before
|
||||||
|
11 node1_committed_during
|
||||||
|
12 node1_committed_during
|
||||||
|
13 node1_committed_during
|
||||||
|
14 node1_committed_during
|
||||||
|
15 node1_committed_during
|
||||||
|
16 node1_to_be_committed_after
|
||||||
|
17 node1_to_be_committed_after
|
||||||
|
18 node1_to_be_committed_after
|
||||||
|
19 node1_to_be_committed_after
|
||||||
|
20 node1_to_be_committed_after
|
||||||
|
26 node2_committed_after
|
||||||
|
27 node2_committed_after
|
||||||
|
28 node2_committed_after
|
||||||
|
29 node2_committed_after
|
||||||
|
30 node2_committed_after
|
||||||
|
31 node1_to_be_committed_after
|
||||||
|
32 node1_to_be_committed_after
|
||||||
|
33 node1_to_be_committed_after
|
||||||
|
34 node1_to_be_committed_after
|
||||||
|
35 node1_to_be_committed_after
|
||||||
|
36 node1_committed_after
|
||||||
|
37 node1_committed_after
|
||||||
|
38 node1_committed_after
|
||||||
|
39 node1_committed_after
|
||||||
|
40 node1_committed_after
|
||||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||||
COUNT(*) = 0
|
COUNT(*) = 0
|
||||||
1
|
1
|
||||||
COMMIT;
|
COMMIT;
|
||||||
SET AUTOCOMMIT=ON;
|
|
||||||
connection node_1;
|
connection node_1;
|
||||||
SELECT COUNT(*) = 35 FROM t1;
|
SET AUTOCOMMIT=ON;
|
||||||
COUNT(*) = 35
|
SET SESSION wsrep_sync_wait=15;
|
||||||
1
|
SELECT COUNT(*) AS EXPECT_15 FROM t1;
|
||||||
|
EXPECT_15
|
||||||
|
35
|
||||||
|
SELECT * from t1;
|
||||||
|
id f1
|
||||||
|
1 node1_committed_before
|
||||||
|
2 node1_committed_before
|
||||||
|
3 node1_committed_before
|
||||||
|
4 node1_committed_before
|
||||||
|
5 node1_committed_before
|
||||||
|
6 node2_committed_before
|
||||||
|
7 node2_committed_before
|
||||||
|
8 node2_committed_before
|
||||||
|
9 node2_committed_before
|
||||||
|
10 node2_committed_before
|
||||||
|
11 node1_committed_during
|
||||||
|
12 node1_committed_during
|
||||||
|
13 node1_committed_during
|
||||||
|
14 node1_committed_during
|
||||||
|
15 node1_committed_during
|
||||||
|
16 node1_to_be_committed_after
|
||||||
|
17 node1_to_be_committed_after
|
||||||
|
18 node1_to_be_committed_after
|
||||||
|
19 node1_to_be_committed_after
|
||||||
|
20 node1_to_be_committed_after
|
||||||
|
26 node2_committed_after
|
||||||
|
27 node2_committed_after
|
||||||
|
28 node2_committed_after
|
||||||
|
29 node2_committed_after
|
||||||
|
30 node2_committed_after
|
||||||
|
31 node1_to_be_committed_after
|
||||||
|
32 node1_to_be_committed_after
|
||||||
|
33 node1_to_be_committed_after
|
||||||
|
34 node1_to_be_committed_after
|
||||||
|
35 node1_to_be_committed_after
|
||||||
|
36 node1_committed_after
|
||||||
|
37 node1_committed_after
|
||||||
|
38 node1_committed_after
|
||||||
|
39 node1_committed_after
|
||||||
|
40 node1_committed_after
|
||||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||||
COUNT(*) = 0
|
COUNT(*) = 0
|
||||||
1
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
SET AUTOCOMMIT=ON;
|
|
||||||
Performing State Transfer on a server that has been killed and restarted
|
Performing State Transfer on a server that has been killed and restarted
|
||||||
connection node_1;
|
connection node_1;
|
||||||
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (1,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (2,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (3,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (4,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (5,'node1_committed_before');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
connection node_2;
|
connection node_2;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (6,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (7,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (8,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (9,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (10,'node2_committed_before');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
Killing server ...
|
Killing server ...
|
||||||
connection node_1;
|
connection node_1;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (11,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (12,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (13,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (14,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (15,'node1_committed_during');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (16,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (17,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (18,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (19,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (20,'node1_to_be_committed_after');
|
||||||
connect node_1a_galera_st_kill_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
connect node_1a_galera_st_kill_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (21,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (22,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (23,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (24,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (25,'node1_to_be_rollbacked_after');
|
||||||
connection node_2;
|
connection node_2;
|
||||||
Performing --wsrep-recover ...
|
Performing --wsrep-recover ...
|
||||||
Starting server ...
|
Starting server ...
|
||||||
Using --wsrep-start-position when starting mysqld ...
|
Using --wsrep-start-position when starting mysqld ...
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (26,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (27,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (28,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (29,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (30,'node2_committed_after');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
connection node_1;
|
connection node_1;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (31,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (32,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (33,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (34,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (35,'node1_to_be_committed_after');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (36,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (37,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (38,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (39,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (40,'node1_committed_after');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
connection node_1a_galera_st_kill_slave;
|
connection node_1a_galera_st_kill_slave;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (41,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (42,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (43,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (45,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (46,'node1_to_be_rollbacked_after');
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
SELECT COUNT(*) = 35 FROM t1;
|
SET AUTOCOMMIT=ON;
|
||||||
COUNT(*) = 35
|
SET SESSION wsrep_sync_wait=15;
|
||||||
1
|
SELECT COUNT(*) AS EXPECT_35 FROM t1;
|
||||||
|
EXPECT_35
|
||||||
|
35
|
||||||
|
SELECT * FROM t1;
|
||||||
|
id f1
|
||||||
|
1 node1_committed_before
|
||||||
|
2 node1_committed_before
|
||||||
|
3 node1_committed_before
|
||||||
|
4 node1_committed_before
|
||||||
|
5 node1_committed_before
|
||||||
|
6 node2_committed_before
|
||||||
|
7 node2_committed_before
|
||||||
|
8 node2_committed_before
|
||||||
|
9 node2_committed_before
|
||||||
|
10 node2_committed_before
|
||||||
|
11 node1_committed_during
|
||||||
|
12 node1_committed_during
|
||||||
|
13 node1_committed_during
|
||||||
|
14 node1_committed_during
|
||||||
|
15 node1_committed_during
|
||||||
|
16 node1_to_be_committed_after
|
||||||
|
17 node1_to_be_committed_after
|
||||||
|
18 node1_to_be_committed_after
|
||||||
|
19 node1_to_be_committed_after
|
||||||
|
20 node1_to_be_committed_after
|
||||||
|
26 node2_committed_after
|
||||||
|
27 node2_committed_after
|
||||||
|
28 node2_committed_after
|
||||||
|
29 node2_committed_after
|
||||||
|
30 node2_committed_after
|
||||||
|
31 node1_to_be_committed_after
|
||||||
|
32 node1_to_be_committed_after
|
||||||
|
33 node1_to_be_committed_after
|
||||||
|
34 node1_to_be_committed_after
|
||||||
|
35 node1_to_be_committed_after
|
||||||
|
36 node1_committed_after
|
||||||
|
37 node1_committed_after
|
||||||
|
38 node1_committed_after
|
||||||
|
39 node1_committed_after
|
||||||
|
40 node1_committed_after
|
||||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||||
COUNT(*) = 0
|
COUNT(*) = 0
|
||||||
1
|
1
|
||||||
COMMIT;
|
COMMIT;
|
||||||
SET AUTOCOMMIT=ON;
|
|
||||||
connection node_1;
|
connection node_1;
|
||||||
SELECT COUNT(*) = 35 FROM t1;
|
SET AUTOCOMMIT=ON;
|
||||||
COUNT(*) = 35
|
SET SESSION wsrep_sync_wait=15;
|
||||||
1
|
SELECT COUNT(*) AS EXPECT_35 FROM t1;
|
||||||
|
EXPECT_35
|
||||||
|
35
|
||||||
|
SELECT * FROM t1;
|
||||||
|
id f1
|
||||||
|
1 node1_committed_before
|
||||||
|
2 node1_committed_before
|
||||||
|
3 node1_committed_before
|
||||||
|
4 node1_committed_before
|
||||||
|
5 node1_committed_before
|
||||||
|
6 node2_committed_before
|
||||||
|
7 node2_committed_before
|
||||||
|
8 node2_committed_before
|
||||||
|
9 node2_committed_before
|
||||||
|
10 node2_committed_before
|
||||||
|
11 node1_committed_during
|
||||||
|
12 node1_committed_during
|
||||||
|
13 node1_committed_during
|
||||||
|
14 node1_committed_during
|
||||||
|
15 node1_committed_during
|
||||||
|
16 node1_to_be_committed_after
|
||||||
|
17 node1_to_be_committed_after
|
||||||
|
18 node1_to_be_committed_after
|
||||||
|
19 node1_to_be_committed_after
|
||||||
|
20 node1_to_be_committed_after
|
||||||
|
26 node2_committed_after
|
||||||
|
27 node2_committed_after
|
||||||
|
28 node2_committed_after
|
||||||
|
29 node2_committed_after
|
||||||
|
30 node2_committed_after
|
||||||
|
31 node1_to_be_committed_after
|
||||||
|
32 node1_to_be_committed_after
|
||||||
|
33 node1_to_be_committed_after
|
||||||
|
34 node1_to_be_committed_after
|
||||||
|
35 node1_to_be_committed_after
|
||||||
|
36 node1_committed_after
|
||||||
|
37 node1_committed_after
|
||||||
|
38 node1_committed_after
|
||||||
|
39 node1_committed_after
|
||||||
|
40 node1_committed_after
|
||||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||||
COUNT(*) = 0
|
COUNT(*) = 0
|
||||||
1
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
SET AUTOCOMMIT=ON;
|
|
||||||
|
@ -1,27 +1,27 @@
|
|||||||
--- r/galera_ist_MDEV-28583.result
|
--- r/galera_ist_MDEV-28583.result
|
||||||
+++ r/galera_ist_MDEV-28583.reject
|
+++ r/galera_ist_MDEV-28583.reject
|
||||||
@@ -285,3 +285,111 @@
|
@@ -517,3 +517,187 @@
|
||||||
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
SET AUTOCOMMIT=ON;
|
|
||||||
+Performing State Transfer on a server that has been killed and restarted
|
+Performing State Transfer on a server that has been killed and restarted
|
||||||
+while a DDL was in progress on it
|
+while a DDL was in progress on it
|
||||||
+connection node_1;
|
+connection node_1;
|
||||||
+CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
+CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB;
|
||||||
+SET AUTOCOMMIT=OFF;
|
+SET AUTOCOMMIT=OFF;
|
||||||
+START TRANSACTION;
|
+START TRANSACTION;
|
||||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
+INSERT INTO t1 VALUES (1,'node1_committed_before');
|
||||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
+INSERT INTO t1 VALUES (2,'node1_committed_before');
|
||||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
+INSERT INTO t1 VALUES (3,'node1_committed_before');
|
||||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
+INSERT INTO t1 VALUES (4,'node1_committed_before');
|
||||||
+INSERT INTO t1 VALUES ('node1_committed_before');
|
+INSERT INTO t1 VALUES (5,'node1_committed_before');
|
||||||
+connection node_2;
|
+connection node_2;
|
||||||
+START TRANSACTION;
|
+START TRANSACTION;
|
||||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
+INSERT INTO t1 VALUES (6,'node2_committed_before');
|
||||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
+INSERT INTO t1 VALUES (7,'node2_committed_before');
|
||||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
+INSERT INTO t1 VALUES (8,'node2_committed_before');
|
||||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
+INSERT INTO t1 VALUES (9,'node2_committed_before');
|
||||||
+INSERT INTO t1 VALUES ('node2_committed_before');
|
+INSERT INTO t1 VALUES (10,'node2_committed_before');
|
||||||
+COMMIT;
|
+COMMIT;
|
||||||
+SET GLOBAL debug_dbug = 'd,sync.alter_opened_table';
|
+SET GLOBAL debug_dbug = 'd,sync.alter_opened_table';
|
||||||
+connection node_1;
|
+connection node_1;
|
||||||
@ -32,26 +32,26 @@
|
|||||||
+connection node_1;
|
+connection node_1;
|
||||||
+SET AUTOCOMMIT=OFF;
|
+SET AUTOCOMMIT=OFF;
|
||||||
+START TRANSACTION;
|
+START TRANSACTION;
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
+INSERT INTO t1 (id,f1) VALUES (11,'node1_committed_during');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
+INSERT INTO t1 (id,f1) VALUES (12,'node1_committed_during');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
+INSERT INTO t1 (id,f1) VALUES (13,'node1_committed_during');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
+INSERT INTO t1 (id,f1) VALUES (14,'node1_committed_during');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_during');
|
+INSERT INTO t1 (id,f1) VALUES (15,'node1_committed_during');
|
||||||
+COMMIT;
|
+COMMIT;
|
||||||
+START TRANSACTION;
|
+START TRANSACTION;
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (16,'node1_to_be_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (17,'node1_to_be_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (18,'node1_to_be_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (19,'node1_to_be_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (20,'node1_to_be_committed_after');
|
||||||
+connect node_1a_galera_st_kill_slave_ddl, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
+connect node_1a_galera_st_kill_slave_ddl, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||||
+SET AUTOCOMMIT=OFF;
|
+SET AUTOCOMMIT=OFF;
|
||||||
+START TRANSACTION;
|
+START TRANSACTION;
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
+INSERT INTO t1 (id,f1) VALUES (21,'node1_to_be_rollbacked_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
+INSERT INTO t1 (id,f1) VALUES (22,'node1_to_be_rollbacked_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
+INSERT INTO t1 (id,f1) VALUES (23,'node1_to_be_rollbacked_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
+INSERT INTO t1 (id,f1) VALUES (24,'node1_to_be_rollbacked_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
+INSERT INTO t1 (id,f1) VALUES (25,'node1_to_be_rollbacked_after');
|
||||||
+connection node_2;
|
+connection node_2;
|
||||||
+Performing --wsrep-recover ...
|
+Performing --wsrep-recover ...
|
||||||
+connection node_2;
|
+connection node_2;
|
||||||
@ -59,56 +59,132 @@
|
|||||||
+Using --wsrep-start-position when starting mysqld ...
|
+Using --wsrep-start-position when starting mysqld ...
|
||||||
+SET AUTOCOMMIT=OFF;
|
+SET AUTOCOMMIT=OFF;
|
||||||
+START TRANSACTION;
|
+START TRANSACTION;
|
||||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (26,'node2_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (27,'node2_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (28,'node2_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (29,'node2_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node2_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (30,'node2_committed_after');
|
||||||
+COMMIT;
|
+COMMIT;
|
||||||
+connection node_1;
|
+connection node_1;
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (31,'node1_to_be_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (32,'node1_to_be_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (33,'node1_to_be_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (34,'node1_to_be_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (35,'node1_to_be_committed_after');
|
||||||
+COMMIT;
|
+COMMIT;
|
||||||
+SET AUTOCOMMIT=OFF;
|
+SET AUTOCOMMIT=OFF;
|
||||||
+START TRANSACTION;
|
+START TRANSACTION;
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (36,'node1_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (37,'node1_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (38,'node1_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (39,'node1_committed_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_committed_after');
|
+INSERT INTO t1 (id,f1) VALUES (40,'node1_committed_after');
|
||||||
+COMMIT;
|
+COMMIT;
|
||||||
+connection node_1a_galera_st_kill_slave_ddl;
|
+connection node_1a_galera_st_kill_slave_ddl;
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
+INSERT INTO t1 (id,f1) VALUES (41,'node1_to_be_rollbacked_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
+INSERT INTO t1 (id,f1) VALUES (42,'node1_to_be_rollbacked_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
+INSERT INTO t1 (id,f1) VALUES (43,'node1_to_be_rollbacked_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
+INSERT INTO t1 (id,f1) VALUES (44,'node1_to_be_rollbacked_after');
|
||||||
+INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
|
+INSERT INTO t1 (id,f1) VALUES (45,'node1_to_be_rollbacked_after');
|
||||||
+ROLLBACK;
|
+ROLLBACK;
|
||||||
+SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
+SET AUTOCOMMIT=ON;
|
||||||
+COUNT(*) = 2
|
+SET SESSION wsrep_sync_wait=15;
|
||||||
+1
|
+SELECT COUNT(*) AS EXPECT_3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||||
+SELECT COUNT(*) = 35 FROM t1;
|
+EXPECT_3
|
||||||
+COUNT(*) = 35
|
+3
|
||||||
+1
|
+SELECT COUNT(*) AS EXPECT_35 FROM t1;
|
||||||
|
+EXPECT_35
|
||||||
|
+35
|
||||||
|
+SELECT * FROM t1;
|
||||||
|
+id f1 f2
|
||||||
|
+1 node1_committed_before NULL
|
||||||
|
+2 node1_committed_before NULL
|
||||||
|
+3 node1_committed_before NULL
|
||||||
|
+4 node1_committed_before NULL
|
||||||
|
+5 node1_committed_before NULL
|
||||||
|
+6 node2_committed_before NULL
|
||||||
|
+7 node2_committed_before NULL
|
||||||
|
+8 node2_committed_before NULL
|
||||||
|
+9 node2_committed_before NULL
|
||||||
|
+10 node2_committed_before NULL
|
||||||
|
+11 node1_committed_during NULL
|
||||||
|
+12 node1_committed_during NULL
|
||||||
|
+13 node1_committed_during NULL
|
||||||
|
+14 node1_committed_during NULL
|
||||||
|
+15 node1_committed_during NULL
|
||||||
|
+16 node1_to_be_committed_after NULL
|
||||||
|
+17 node1_to_be_committed_after NULL
|
||||||
|
+18 node1_to_be_committed_after NULL
|
||||||
|
+19 node1_to_be_committed_after NULL
|
||||||
|
+20 node1_to_be_committed_after NULL
|
||||||
|
+26 node2_committed_after NULL
|
||||||
|
+27 node2_committed_after NULL
|
||||||
|
+28 node2_committed_after NULL
|
||||||
|
+29 node2_committed_after NULL
|
||||||
|
+30 node2_committed_after NULL
|
||||||
|
+31 node1_to_be_committed_after NULL
|
||||||
|
+32 node1_to_be_committed_after NULL
|
||||||
|
+33 node1_to_be_committed_after NULL
|
||||||
|
+34 node1_to_be_committed_after NULL
|
||||||
|
+35 node1_to_be_committed_after NULL
|
||||||
|
+36 node1_committed_after NULL
|
||||||
|
+37 node1_committed_after NULL
|
||||||
|
+38 node1_committed_after NULL
|
||||||
|
+39 node1_committed_after NULL
|
||||||
|
+40 node1_committed_after NULL
|
||||||
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||||
+COUNT(*) = 0
|
+COUNT(*) = 0
|
||||||
+1
|
+1
|
||||||
+COMMIT;
|
+COMMIT;
|
||||||
+SET AUTOCOMMIT=ON;
|
|
||||||
+connection node_1;
|
+connection node_1;
|
||||||
+SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
+SET AUTOCOMMIT=ON;
|
||||||
+COUNT(*) = 2
|
+SET SESSION wsrep_sync_wait=15;
|
||||||
+1
|
+SELECT COUNT(*) AS EXPECT_3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
|
||||||
+SELECT COUNT(*) = 35 FROM t1;
|
+EXPECT_3
|
||||||
+COUNT(*) = 35
|
+3
|
||||||
+1
|
+SELECT COUNT(*) AS EXPECT_35 FROM t1;
|
||||||
|
+EXPECT_35
|
||||||
|
+35
|
||||||
|
+SELECT * FROM t1;
|
||||||
|
+id f1 f2
|
||||||
|
+1 node1_committed_before NULL
|
||||||
|
+2 node1_committed_before NULL
|
||||||
|
+3 node1_committed_before NULL
|
||||||
|
+4 node1_committed_before NULL
|
||||||
|
+5 node1_committed_before NULL
|
||||||
|
+6 node2_committed_before NULL
|
||||||
|
+7 node2_committed_before NULL
|
||||||
|
+8 node2_committed_before NULL
|
||||||
|
+9 node2_committed_before NULL
|
||||||
|
+10 node2_committed_before NULL
|
||||||
|
+11 node1_committed_during NULL
|
||||||
|
+12 node1_committed_during NULL
|
||||||
|
+13 node1_committed_during NULL
|
||||||
|
+14 node1_committed_during NULL
|
||||||
|
+15 node1_committed_during NULL
|
||||||
|
+16 node1_to_be_committed_after NULL
|
||||||
|
+17 node1_to_be_committed_after NULL
|
||||||
|
+18 node1_to_be_committed_after NULL
|
||||||
|
+19 node1_to_be_committed_after NULL
|
||||||
|
+20 node1_to_be_committed_after NULL
|
||||||
|
+26 node2_committed_after NULL
|
||||||
|
+27 node2_committed_after NULL
|
||||||
|
+28 node2_committed_after NULL
|
||||||
|
+29 node2_committed_after NULL
|
||||||
|
+30 node2_committed_after NULL
|
||||||
|
+31 node1_to_be_committed_after NULL
|
||||||
|
+32 node1_to_be_committed_after NULL
|
||||||
|
+33 node1_to_be_committed_after NULL
|
||||||
|
+34 node1_to_be_committed_after NULL
|
||||||
|
+35 node1_to_be_committed_after NULL
|
||||||
|
+36 node1_committed_after NULL
|
||||||
|
+37 node1_committed_after NULL
|
||||||
|
+38 node1_committed_after NULL
|
||||||
|
+39 node1_committed_after NULL
|
||||||
|
+40 node1_committed_after NULL
|
||||||
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||||
+COUNT(*) = 0
|
+COUNT(*) = 0
|
||||||
+1
|
+1
|
||||||
+DROP TABLE t1;
|
+DROP TABLE t1;
|
||||||
+COMMIT;
|
+COMMIT;
|
||||||
+SET AUTOCOMMIT=ON;
|
|
||||||
+SET GLOBAL debug_dbug = $debug_orig;
|
+SET GLOBAL debug_dbug = $debug_orig;
|
||||||
|
@ -1,287 +1,519 @@
|
|||||||
|
connection node_2;
|
||||||
|
connection node_1;
|
||||||
connection node_1;
|
connection node_1;
|
||||||
connection node_2;
|
connection node_2;
|
||||||
Performing State Transfer on a server that has been temporarily disconnected
|
Performing State Transfer on a server that has been temporarily disconnected
|
||||||
connection node_1;
|
connection node_1;
|
||||||
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (1,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (2,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (3,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (4,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (5,'node1_committed_before');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
connection node_2;
|
connection node_2;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (6,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (7,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (8,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (9,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (10,'node2_committed_before');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
Unloading wsrep provider ...
|
Unloading wsrep provider ...
|
||||||
SET GLOBAL wsrep_cluster_address = '';
|
SET GLOBAL wsrep_cluster_address = '';
|
||||||
connection node_1;
|
connection node_1;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (11,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (12,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (13,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (14,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (15,'node1_committed_during');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (16,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (17,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (18,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (19,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (20,'node1_to_be_committed_after');
|
||||||
connect node_1a_galera_st_disconnect_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
connect node_1a_galera_st_disconnect_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (21,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (22,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (23,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (24,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (25,'node1_to_be_rollbacked_after');
|
||||||
connection node_2;
|
connection node_2;
|
||||||
Loading wsrep provider ...
|
Loading wsrep provider ...
|
||||||
|
disconnect node_2;
|
||||||
|
connect node_2, 127.0.0.1, root, , test, $NODE_MYPORT_2;
|
||||||
|
connection node_2;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (26,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (27,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (28,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (29,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (30,'node2_committed_after');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
connection node_1;
|
connection node_1;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (31,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (32,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (33,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (34,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (35,'node1_to_be_committed_after');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (36,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (37,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (38,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (39,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (40,'node1_committed_after');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
connection node_1a_galera_st_disconnect_slave;
|
connection node_1a_galera_st_disconnect_slave;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (41,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (42,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (43,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (44,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (45,'node1_to_be_rollbacked_after');
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
SELECT COUNT(*) = 35 FROM t1;
|
SET AUTOCOMMIT=ON;
|
||||||
COUNT(*) = 35
|
SET SESSION wsrep_sync_wait=15;
|
||||||
1
|
SELECT COUNT(*) AS EXPECT_35 FROM t1;
|
||||||
|
EXPECT_35
|
||||||
|
35
|
||||||
|
SELECT * FROM t1;
|
||||||
|
id f1
|
||||||
|
1 node1_committed_before
|
||||||
|
2 node1_committed_before
|
||||||
|
3 node1_committed_before
|
||||||
|
4 node1_committed_before
|
||||||
|
5 node1_committed_before
|
||||||
|
6 node2_committed_before
|
||||||
|
7 node2_committed_before
|
||||||
|
8 node2_committed_before
|
||||||
|
9 node2_committed_before
|
||||||
|
10 node2_committed_before
|
||||||
|
11 node1_committed_during
|
||||||
|
12 node1_committed_during
|
||||||
|
13 node1_committed_during
|
||||||
|
14 node1_committed_during
|
||||||
|
15 node1_committed_during
|
||||||
|
16 node1_to_be_committed_after
|
||||||
|
17 node1_to_be_committed_after
|
||||||
|
18 node1_to_be_committed_after
|
||||||
|
19 node1_to_be_committed_after
|
||||||
|
20 node1_to_be_committed_after
|
||||||
|
26 node2_committed_after
|
||||||
|
27 node2_committed_after
|
||||||
|
28 node2_committed_after
|
||||||
|
29 node2_committed_after
|
||||||
|
30 node2_committed_after
|
||||||
|
31 node1_to_be_committed_after
|
||||||
|
32 node1_to_be_committed_after
|
||||||
|
33 node1_to_be_committed_after
|
||||||
|
34 node1_to_be_committed_after
|
||||||
|
35 node1_to_be_committed_after
|
||||||
|
36 node1_committed_after
|
||||||
|
37 node1_committed_after
|
||||||
|
38 node1_committed_after
|
||||||
|
39 node1_committed_after
|
||||||
|
40 node1_committed_after
|
||||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||||
COUNT(*) = 0
|
COUNT(*) = 0
|
||||||
1
|
1
|
||||||
COMMIT;
|
|
||||||
SET AUTOCOMMIT=ON;
|
|
||||||
connection node_1;
|
connection node_1;
|
||||||
SELECT COUNT(*) = 35 FROM t1;
|
SET AUTOCOMMIT=ON;
|
||||||
COUNT(*) = 35
|
SET SESSION wsrep_sync_wait=15;
|
||||||
1
|
SELECT COUNT(*) AS EXPECT_35 FROM t1;
|
||||||
|
EXPECT_35
|
||||||
|
35
|
||||||
|
SELECT * FROM t1;
|
||||||
|
id f1
|
||||||
|
1 node1_committed_before
|
||||||
|
2 node1_committed_before
|
||||||
|
3 node1_committed_before
|
||||||
|
4 node1_committed_before
|
||||||
|
5 node1_committed_before
|
||||||
|
6 node2_committed_before
|
||||||
|
7 node2_committed_before
|
||||||
|
8 node2_committed_before
|
||||||
|
9 node2_committed_before
|
||||||
|
10 node2_committed_before
|
||||||
|
11 node1_committed_during
|
||||||
|
12 node1_committed_during
|
||||||
|
13 node1_committed_during
|
||||||
|
14 node1_committed_during
|
||||||
|
15 node1_committed_during
|
||||||
|
16 node1_to_be_committed_after
|
||||||
|
17 node1_to_be_committed_after
|
||||||
|
18 node1_to_be_committed_after
|
||||||
|
19 node1_to_be_committed_after
|
||||||
|
20 node1_to_be_committed_after
|
||||||
|
26 node2_committed_after
|
||||||
|
27 node2_committed_after
|
||||||
|
28 node2_committed_after
|
||||||
|
29 node2_committed_after
|
||||||
|
30 node2_committed_after
|
||||||
|
31 node1_to_be_committed_after
|
||||||
|
32 node1_to_be_committed_after
|
||||||
|
33 node1_to_be_committed_after
|
||||||
|
34 node1_to_be_committed_after
|
||||||
|
35 node1_to_be_committed_after
|
||||||
|
36 node1_committed_after
|
||||||
|
37 node1_committed_after
|
||||||
|
38 node1_committed_after
|
||||||
|
39 node1_committed_after
|
||||||
|
40 node1_committed_after
|
||||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||||
COUNT(*) = 0
|
COUNT(*) = 0
|
||||||
1
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
SET AUTOCOMMIT=ON;
|
|
||||||
Performing State Transfer on a server that has been shut down cleanly and restarted
|
Performing State Transfer on a server that has been shut down cleanly and restarted
|
||||||
connection node_1;
|
connection node_1;
|
||||||
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (1,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (2,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (3,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (4,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (5,'node1_committed_before');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
connection node_2;
|
connection node_2;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (6,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (7,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (8,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (9,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (10,'node2_committed_before');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
Shutting down server ...
|
Shutting down server ...
|
||||||
connection node_1;
|
connection node_1;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (11,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (12,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (13,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (14,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (15,'node1_committed_during');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (16,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (17,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (18,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (19,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (20,'node1_to_be_committed_after');
|
||||||
connect node_1a_galera_st_shutdown_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
connect node_1a_galera_st_shutdown_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (21,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (22,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (23,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (24,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (25,'node1_to_be_rollbacked_after');
|
||||||
connection node_2;
|
connection node_2;
|
||||||
Starting server ...
|
Starting server ...
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (26,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (27,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (28,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (29,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (30,'node2_committed_after');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
connection node_1;
|
connection node_1;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (31,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (32,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (33,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (34,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (35,'node1_to_be_committed_after');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (36,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (37,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (38,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (39,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (40,'node1_committed_after');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
connection node_1a_galera_st_shutdown_slave;
|
connection node_1a_galera_st_shutdown_slave;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (41,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (42,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (43,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (44,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (45,'node1_to_be_rollbacked_after');
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
SELECT COUNT(*) = 35 FROM t1;
|
SET AUTOCOMMIT=ON;
|
||||||
COUNT(*) = 35
|
SET SESSION wsrep_sync_wait=15;
|
||||||
1
|
SELECT COUNT(*) AS EXPECT_15 FROM t1;
|
||||||
|
EXPECT_15
|
||||||
|
35
|
||||||
|
SELECT * from t1;
|
||||||
|
id f1
|
||||||
|
1 node1_committed_before
|
||||||
|
2 node1_committed_before
|
||||||
|
3 node1_committed_before
|
||||||
|
4 node1_committed_before
|
||||||
|
5 node1_committed_before
|
||||||
|
6 node2_committed_before
|
||||||
|
7 node2_committed_before
|
||||||
|
8 node2_committed_before
|
||||||
|
9 node2_committed_before
|
||||||
|
10 node2_committed_before
|
||||||
|
11 node1_committed_during
|
||||||
|
12 node1_committed_during
|
||||||
|
13 node1_committed_during
|
||||||
|
14 node1_committed_during
|
||||||
|
15 node1_committed_during
|
||||||
|
16 node1_to_be_committed_after
|
||||||
|
17 node1_to_be_committed_after
|
||||||
|
18 node1_to_be_committed_after
|
||||||
|
19 node1_to_be_committed_after
|
||||||
|
20 node1_to_be_committed_after
|
||||||
|
26 node2_committed_after
|
||||||
|
27 node2_committed_after
|
||||||
|
28 node2_committed_after
|
||||||
|
29 node2_committed_after
|
||||||
|
30 node2_committed_after
|
||||||
|
31 node1_to_be_committed_after
|
||||||
|
32 node1_to_be_committed_after
|
||||||
|
33 node1_to_be_committed_after
|
||||||
|
34 node1_to_be_committed_after
|
||||||
|
35 node1_to_be_committed_after
|
||||||
|
36 node1_committed_after
|
||||||
|
37 node1_committed_after
|
||||||
|
38 node1_committed_after
|
||||||
|
39 node1_committed_after
|
||||||
|
40 node1_committed_after
|
||||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||||
COUNT(*) = 0
|
COUNT(*) = 0
|
||||||
1
|
1
|
||||||
COMMIT;
|
COMMIT;
|
||||||
SET AUTOCOMMIT=ON;
|
|
||||||
connection node_1;
|
connection node_1;
|
||||||
SELECT COUNT(*) = 35 FROM t1;
|
SET AUTOCOMMIT=ON;
|
||||||
COUNT(*) = 35
|
SET SESSION wsrep_sync_wait=15;
|
||||||
1
|
SELECT COUNT(*) AS EXPECT_15 FROM t1;
|
||||||
|
EXPECT_15
|
||||||
|
35
|
||||||
|
SELECT * from t1;
|
||||||
|
id f1
|
||||||
|
1 node1_committed_before
|
||||||
|
2 node1_committed_before
|
||||||
|
3 node1_committed_before
|
||||||
|
4 node1_committed_before
|
||||||
|
5 node1_committed_before
|
||||||
|
6 node2_committed_before
|
||||||
|
7 node2_committed_before
|
||||||
|
8 node2_committed_before
|
||||||
|
9 node2_committed_before
|
||||||
|
10 node2_committed_before
|
||||||
|
11 node1_committed_during
|
||||||
|
12 node1_committed_during
|
||||||
|
13 node1_committed_during
|
||||||
|
14 node1_committed_during
|
||||||
|
15 node1_committed_during
|
||||||
|
16 node1_to_be_committed_after
|
||||||
|
17 node1_to_be_committed_after
|
||||||
|
18 node1_to_be_committed_after
|
||||||
|
19 node1_to_be_committed_after
|
||||||
|
20 node1_to_be_committed_after
|
||||||
|
26 node2_committed_after
|
||||||
|
27 node2_committed_after
|
||||||
|
28 node2_committed_after
|
||||||
|
29 node2_committed_after
|
||||||
|
30 node2_committed_after
|
||||||
|
31 node1_to_be_committed_after
|
||||||
|
32 node1_to_be_committed_after
|
||||||
|
33 node1_to_be_committed_after
|
||||||
|
34 node1_to_be_committed_after
|
||||||
|
35 node1_to_be_committed_after
|
||||||
|
36 node1_committed_after
|
||||||
|
37 node1_committed_after
|
||||||
|
38 node1_committed_after
|
||||||
|
39 node1_committed_after
|
||||||
|
40 node1_committed_after
|
||||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||||
COUNT(*) = 0
|
COUNT(*) = 0
|
||||||
1
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
SET AUTOCOMMIT=ON;
|
|
||||||
Performing State Transfer on a server that has been killed and restarted
|
Performing State Transfer on a server that has been killed and restarted
|
||||||
connection node_1;
|
connection node_1;
|
||||||
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (1,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (2,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (3,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (4,'node1_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_before');
|
INSERT INTO t1 VALUES (5,'node1_committed_before');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
connection node_2;
|
connection node_2;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (6,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (7,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (8,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (9,'node2_committed_before');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_before');
|
INSERT INTO t1 VALUES (10,'node2_committed_before');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
Killing server ...
|
Killing server ...
|
||||||
connection node_1;
|
connection node_1;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (11,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (12,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (13,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (14,'node1_committed_during');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_during');
|
INSERT INTO t1 VALUES (15,'node1_committed_during');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (16,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (17,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (18,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (19,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (20,'node1_to_be_committed_after');
|
||||||
connect node_1a_galera_st_kill_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
connect node_1a_galera_st_kill_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (21,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (22,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (23,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (24,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (25,'node1_to_be_rollbacked_after');
|
||||||
connection node_2;
|
connection node_2;
|
||||||
Performing --wsrep-recover ...
|
Performing --wsrep-recover ...
|
||||||
Starting server ...
|
Starting server ...
|
||||||
Using --wsrep-start-position when starting mysqld ...
|
Using --wsrep-start-position when starting mysqld ...
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (26,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (27,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (28,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (29,'node2_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node2_committed_after');
|
INSERT INTO t1 VALUES (30,'node2_committed_after');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
connection node_1;
|
connection node_1;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (31,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (32,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (33,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (34,'node1_to_be_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_committed_after');
|
INSERT INTO t1 VALUES (35,'node1_to_be_committed_after');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
SET AUTOCOMMIT=OFF;
|
SET AUTOCOMMIT=OFF;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (36,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (37,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (38,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (39,'node1_committed_after');
|
||||||
INSERT INTO t1 VALUES ('node1_committed_after');
|
INSERT INTO t1 VALUES (40,'node1_committed_after');
|
||||||
COMMIT;
|
COMMIT;
|
||||||
connection node_1a_galera_st_kill_slave;
|
connection node_1a_galera_st_kill_slave;
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (41,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (42,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (43,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (45,'node1_to_be_rollbacked_after');
|
||||||
INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
|
INSERT INTO t1 VALUES (46,'node1_to_be_rollbacked_after');
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
SELECT COUNT(*) = 35 FROM t1;
|
SET AUTOCOMMIT=ON;
|
||||||
COUNT(*) = 35
|
SET SESSION wsrep_sync_wait=15;
|
||||||
1
|
SELECT COUNT(*) AS EXPECT_35 FROM t1;
|
||||||
|
EXPECT_35
|
||||||
|
35
|
||||||
|
SELECT * FROM t1;
|
||||||
|
id f1
|
||||||
|
1 node1_committed_before
|
||||||
|
2 node1_committed_before
|
||||||
|
3 node1_committed_before
|
||||||
|
4 node1_committed_before
|
||||||
|
5 node1_committed_before
|
||||||
|
6 node2_committed_before
|
||||||
|
7 node2_committed_before
|
||||||
|
8 node2_committed_before
|
||||||
|
9 node2_committed_before
|
||||||
|
10 node2_committed_before
|
||||||
|
11 node1_committed_during
|
||||||
|
12 node1_committed_during
|
||||||
|
13 node1_committed_during
|
||||||
|
14 node1_committed_during
|
||||||
|
15 node1_committed_during
|
||||||
|
16 node1_to_be_committed_after
|
||||||
|
17 node1_to_be_committed_after
|
||||||
|
18 node1_to_be_committed_after
|
||||||
|
19 node1_to_be_committed_after
|
||||||
|
20 node1_to_be_committed_after
|
||||||
|
26 node2_committed_after
|
||||||
|
27 node2_committed_after
|
||||||
|
28 node2_committed_after
|
||||||
|
29 node2_committed_after
|
||||||
|
30 node2_committed_after
|
||||||
|
31 node1_to_be_committed_after
|
||||||
|
32 node1_to_be_committed_after
|
||||||
|
33 node1_to_be_committed_after
|
||||||
|
34 node1_to_be_committed_after
|
||||||
|
35 node1_to_be_committed_after
|
||||||
|
36 node1_committed_after
|
||||||
|
37 node1_committed_after
|
||||||
|
38 node1_committed_after
|
||||||
|
39 node1_committed_after
|
||||||
|
40 node1_committed_after
|
||||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||||
COUNT(*) = 0
|
COUNT(*) = 0
|
||||||
1
|
1
|
||||||
COMMIT;
|
COMMIT;
|
||||||
SET AUTOCOMMIT=ON;
|
|
||||||
connection node_1;
|
connection node_1;
|
||||||
SELECT COUNT(*) = 35 FROM t1;
|
SET AUTOCOMMIT=ON;
|
||||||
COUNT(*) = 35
|
SET SESSION wsrep_sync_wait=15;
|
||||||
1
|
SELECT COUNT(*) AS EXPECT_35 FROM t1;
|
||||||
|
EXPECT_35
|
||||||
|
35
|
||||||
|
SELECT * FROM t1;
|
||||||
|
id f1
|
||||||
|
1 node1_committed_before
|
||||||
|
2 node1_committed_before
|
||||||
|
3 node1_committed_before
|
||||||
|
4 node1_committed_before
|
||||||
|
5 node1_committed_before
|
||||||
|
6 node2_committed_before
|
||||||
|
7 node2_committed_before
|
||||||
|
8 node2_committed_before
|
||||||
|
9 node2_committed_before
|
||||||
|
10 node2_committed_before
|
||||||
|
11 node1_committed_during
|
||||||
|
12 node1_committed_during
|
||||||
|
13 node1_committed_during
|
||||||
|
14 node1_committed_during
|
||||||
|
15 node1_committed_during
|
||||||
|
16 node1_to_be_committed_after
|
||||||
|
17 node1_to_be_committed_after
|
||||||
|
18 node1_to_be_committed_after
|
||||||
|
19 node1_to_be_committed_after
|
||||||
|
20 node1_to_be_committed_after
|
||||||
|
26 node2_committed_after
|
||||||
|
27 node2_committed_after
|
||||||
|
28 node2_committed_after
|
||||||
|
29 node2_committed_after
|
||||||
|
30 node2_committed_after
|
||||||
|
31 node1_to_be_committed_after
|
||||||
|
32 node1_to_be_committed_after
|
||||||
|
33 node1_to_be_committed_after
|
||||||
|
34 node1_to_be_committed_after
|
||||||
|
35 node1_to_be_committed_after
|
||||||
|
36 node1_committed_after
|
||||||
|
37 node1_committed_after
|
||||||
|
38 node1_committed_after
|
||||||
|
39 node1_committed_after
|
||||||
|
40 node1_committed_after
|
||||||
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
||||||
COUNT(*) = 0
|
COUNT(*) = 0
|
||||||
1
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
SET AUTOCOMMIT=ON;
|
|
||||||
|
@ -6,9 +6,9 @@ SET DEBUG_SYNC='dict_stats_update_persistent SIGNAL stop WAIT_FOR go';
|
|||||||
ANALYZE TABLE t1;
|
ANALYZE TABLE t1;
|
||||||
connect con1, localhost, root;
|
connect con1, localhost, root;
|
||||||
SET DEBUG_SYNC='now WAIT_FOR stop';
|
SET DEBUG_SYNC='now WAIT_FOR stop';
|
||||||
SELECT ENGINE,SUM(DATA_LENGTH+INDEX_LENGTH),COUNT(ENGINE),SUM(DATA_LENGTH),SUM(INDEX_LENGTH) FROM information_schema.TABLES WHERE ENGINE='InnoDB';
|
SELECT SUM(DATA_LENGTH+INDEX_LENGTH) FROM information_schema.TABLES WHERE ENGINE='InnoDB';
|
||||||
ENGINE SUM(DATA_LENGTH+INDEX_LENGTH) COUNT(ENGINE) SUM(DATA_LENGTH) SUM(INDEX_LENGTH)
|
SUM(DATA_LENGTH+INDEX_LENGTH)
|
||||||
InnoDB 114688 4 65536 49152
|
SUM
|
||||||
SET DEBUG_SYNC='now SIGNAL go';
|
SET DEBUG_SYNC='now SIGNAL go';
|
||||||
disconnect con1;
|
disconnect con1;
|
||||||
connection default;
|
connection default;
|
||||||
|
@ -14,7 +14,8 @@ SET DEBUG_SYNC='dict_stats_update_persistent SIGNAL stop WAIT_FOR go';
|
|||||||
--connect(con1, localhost, root)
|
--connect(con1, localhost, root)
|
||||||
SET DEBUG_SYNC='now WAIT_FOR stop';
|
SET DEBUG_SYNC='now WAIT_FOR stop';
|
||||||
|
|
||||||
SELECT ENGINE,SUM(DATA_LENGTH+INDEX_LENGTH),COUNT(ENGINE),SUM(DATA_LENGTH),SUM(INDEX_LENGTH) FROM information_schema.TABLES WHERE ENGINE='InnoDB';
|
--replace_column 1 SUM
|
||||||
|
SELECT SUM(DATA_LENGTH+INDEX_LENGTH) FROM information_schema.TABLES WHERE ENGINE='InnoDB';
|
||||||
|
|
||||||
SET DEBUG_SYNC='now SIGNAL go';
|
SET DEBUG_SYNC='now SIGNAL go';
|
||||||
--disconnect con1
|
--disconnect con1
|
||||||
|
@ -873,5 +873,16 @@ UPDATE t1 SET pk = 0;
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!$skip_update)
|
||||||
|
{
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-21027 Assertion `part_share->auto_inc_initialized || !can_use_for_auto_inc_init()'
|
||||||
|
--echo # ha_partition::set_auto_increment_if_higher
|
||||||
|
--echo #
|
||||||
|
eval CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY) ENGINE=$engine PARTITION BY HASH (a) PARTITIONS 3;
|
||||||
|
REPLACE INTO t1 PARTITION (p0) VALUES (3);
|
||||||
|
DROP TABLE t1;
|
||||||
|
}
|
||||||
|
|
||||||
--echo ##############################################################################
|
--echo ##############################################################################
|
||||||
}
|
}
|
||||||
|
@ -1109,4 +1109,11 @@ CREATE OR REPLACE TABLE t1 (pk INT AUTO_INCREMENT, a INT, KEY(pk)) ENGINE=myisam
|
|||||||
INSERT INTO t1 VALUES (1,1),(2,2);
|
INSERT INTO t1 VALUES (1,1),(2,2);
|
||||||
UPDATE t1 SET pk = 0;
|
UPDATE t1 SET pk = 0;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV-21027 Assertion `part_share->auto_inc_initialized || !can_use_for_auto_inc_init()'
|
||||||
|
# ha_partition::set_auto_increment_if_higher
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY) ENGINE='InnoDB' PARTITION BY HASH (a) PARTITIONS 3;
|
||||||
|
REPLACE INTO t1 PARTITION (p0) VALUES (3);
|
||||||
|
DROP TABLE t1;
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
@ -1156,4 +1156,11 @@ CREATE OR REPLACE TABLE t1 (pk INT AUTO_INCREMENT, a INT, KEY(pk)) ENGINE=myisam
|
|||||||
INSERT INTO t1 VALUES (1,1),(2,2);
|
INSERT INTO t1 VALUES (1,1),(2,2);
|
||||||
UPDATE t1 SET pk = 0;
|
UPDATE t1 SET pk = 0;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV-21027 Assertion `part_share->auto_inc_initialized || !can_use_for_auto_inc_init()'
|
||||||
|
# ha_partition::set_auto_increment_if_higher
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY) ENGINE='Aria' PARTITION BY HASH (a) PARTITIONS 3;
|
||||||
|
REPLACE INTO t1 PARTITION (p0) VALUES (3);
|
||||||
|
DROP TABLE t1;
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
@ -1137,4 +1137,11 @@ CREATE OR REPLACE TABLE t1 (pk INT AUTO_INCREMENT, a INT, KEY(pk)) ENGINE=myisam
|
|||||||
INSERT INTO t1 VALUES (1,1),(2,2);
|
INSERT INTO t1 VALUES (1,1),(2,2);
|
||||||
UPDATE t1 SET pk = 0;
|
UPDATE t1 SET pk = 0;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV-21027 Assertion `part_share->auto_inc_initialized || !can_use_for_auto_inc_init()'
|
||||||
|
# ha_partition::set_auto_increment_if_higher
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY) ENGINE='Memory' PARTITION BY HASH (a) PARTITIONS 3;
|
||||||
|
REPLACE INTO t1 PARTITION (p0) VALUES (3);
|
||||||
|
DROP TABLE t1;
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
@ -1156,4 +1156,11 @@ CREATE OR REPLACE TABLE t1 (pk INT AUTO_INCREMENT, a INT, KEY(pk)) ENGINE=myisam
|
|||||||
INSERT INTO t1 VALUES (1,1),(2,2);
|
INSERT INTO t1 VALUES (1,1),(2,2);
|
||||||
UPDATE t1 SET pk = 0;
|
UPDATE t1 SET pk = 0;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV-21027 Assertion `part_share->auto_inc_initialized || !can_use_for_auto_inc_init()'
|
||||||
|
# ha_partition::set_auto_increment_if_higher
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY) ENGINE='MyISAM' PARTITION BY HASH (a) PARTITIONS 3;
|
||||||
|
REPLACE INTO t1 PARTITION (p0) VALUES (3);
|
||||||
|
DROP TABLE t1;
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
@ -13,6 +13,5 @@
|
|||||||
rpl_partition_archive : MDEV-5077 2013-09-27 svoj Cannot exchange partition with archive table
|
rpl_partition_archive : MDEV-5077 2013-09-27 svoj Cannot exchange partition with archive table
|
||||||
rpl_row_binlog_max_cache_size : MDEV-11092
|
rpl_row_binlog_max_cache_size : MDEV-11092
|
||||||
rpl_row_index_choice : MDEV-11666
|
rpl_row_index_choice : MDEV-11666
|
||||||
rpl_semi_sync_after_sync : fails after MDEV-16172
|
|
||||||
rpl_auto_increment_update_failure : disabled for now
|
rpl_auto_increment_update_failure : disabled for now
|
||||||
rpl_current_user : waits for MDEV-22374 fix
|
rpl_current_user : waits for MDEV-22374 fix
|
||||||
|
@ -701,7 +701,7 @@ int prepare_resize_simple_key_cache(SIMPLE_KEY_CACHE_CB *keycache,
|
|||||||
keycache->in_resize= 1;
|
keycache->in_resize= 1;
|
||||||
|
|
||||||
/* Need to flush only if keycache is enabled. */
|
/* Need to flush only if keycache is enabled. */
|
||||||
if (keycache->can_be_used)
|
if (keycache->can_be_used && keycache->disk_blocks != -1)
|
||||||
{
|
{
|
||||||
/* Start the flush phase. */
|
/* Start the flush phase. */
|
||||||
keycache->resize_in_flush= 1;
|
keycache->resize_in_flush= 1;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
SET(FILE_KEY_MANAGEMENT_PLUGIN_SOURCES file_key_management_plugin.cc parser.cc)
|
SET(FILE_KEY_MANAGEMENT_PLUGIN_SOURCES file_key_management_plugin.cc parser.cc)
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/sql)
|
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/sql)
|
||||||
MYSQL_ADD_PLUGIN(FILE_KEY_MANAGEMENT ${FILE_KEY_MANAGEMENT_PLUGIN_SOURCES})
|
MYSQL_ADD_PLUGIN(FILE_KEY_MANAGEMENT ${FILE_KEY_MANAGEMENT_PLUGIN_SOURCES} MODULE_ONLY)
|
||||||
|
@ -72,7 +72,7 @@ then
|
|||||||
# (c) ERROR file, in case flush tables operation failed.
|
# (c) ERROR file, in case flush tables operation failed.
|
||||||
|
|
||||||
while [ ! -r "$FLUSHED" ] && \
|
while [ ! -r "$FLUSHED" ] && \
|
||||||
! grep -q -F ':' -- "$FLUSHED" >/dev/null 2>&1
|
! grep -q -F ':' -- "$FLUSHED"
|
||||||
do
|
do
|
||||||
# Check whether ERROR file exists.
|
# Check whether ERROR file exists.
|
||||||
if [ -f "$ERROR" ]; then
|
if [ -f "$ERROR" ]; then
|
||||||
@ -105,4 +105,5 @@ else # joiner
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
wsrep_log_info "$WSREP_METHOD $WSREP_TRANSFER_TYPE completed on $WSREP_SST_OPT_ROLE"
|
||||||
exit 0
|
exit 0
|
||||||
|
@ -80,6 +80,7 @@ to_minuses()
|
|||||||
}
|
}
|
||||||
|
|
||||||
WSREP_SST_OPT_BYPASS=0
|
WSREP_SST_OPT_BYPASS=0
|
||||||
|
WSREP_SST_OPT_PROGRESS=0
|
||||||
WSREP_SST_OPT_BINLOG=""
|
WSREP_SST_OPT_BINLOG=""
|
||||||
WSREP_SST_OPT_BINLOG_INDEX=""
|
WSREP_SST_OPT_BINLOG_INDEX=""
|
||||||
WSREP_SST_OPT_LOG_BASENAME=""
|
WSREP_SST_OPT_LOG_BASENAME=""
|
||||||
@ -187,6 +188,10 @@ case "$1" in
|
|||||||
'--bypass')
|
'--bypass')
|
||||||
readonly WSREP_SST_OPT_BYPASS=1
|
readonly WSREP_SST_OPT_BYPASS=1
|
||||||
;;
|
;;
|
||||||
|
'--progress')
|
||||||
|
readonly WSREP_SST_OPT_PROGRESS=$(( $2 ))
|
||||||
|
shift
|
||||||
|
;;
|
||||||
'--datadir')
|
'--datadir')
|
||||||
# Let's remove the trailing slash:
|
# Let's remove the trailing slash:
|
||||||
readonly WSREP_SST_OPT_DATA=$(trim_dir "$2")
|
readonly WSREP_SST_OPT_DATA=$(trim_dir "$2")
|
||||||
@ -246,11 +251,11 @@ case "$1" in
|
|||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
'--local-port')
|
'--local-port')
|
||||||
readonly WSREP_SST_OPT_LPORT="$2"
|
readonly WSREP_SST_OPT_LPORT=$(( $2 ))
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
'--parent')
|
'--parent')
|
||||||
readonly WSREP_SST_OPT_PARENT="$2"
|
readonly WSREP_SST_OPT_PARENT=$(( $2 ))
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
'--password')
|
'--password')
|
||||||
@ -258,7 +263,7 @@ case "$1" in
|
|||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
'--port')
|
'--port')
|
||||||
readonly WSREP_SST_OPT_PORT="$2"
|
readonly WSREP_SST_OPT_PORT=$(( $2 ))
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
'--role')
|
'--role')
|
||||||
@ -531,6 +536,8 @@ else
|
|||||||
readonly WSREP_SST_OPT_ROLE='donor'
|
readonly WSREP_SST_OPT_ROLE='donor'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
readonly WSREP_SST_OPT_PROGRESS
|
||||||
|
|
||||||
# The same argument can be present on the command line several
|
# The same argument can be present on the command line several
|
||||||
# times, in this case we must take its last value:
|
# times, in this case we must take its last value:
|
||||||
if [ -n "${MYSQLD_OPT_INNODB_DATA_HOME_DIR:-}" -a \
|
if [ -n "${MYSQLD_OPT_INNODB_DATA_HOME_DIR:-}" -a \
|
||||||
@ -1180,7 +1187,6 @@ check_port()
|
|||||||
check_for_dhparams()
|
check_for_dhparams()
|
||||||
{
|
{
|
||||||
ssl_dhparams="$DATA/dhparams.pem"
|
ssl_dhparams="$DATA/dhparams.pem"
|
||||||
if [ ! -r "$ssl_dhparams" ]; then
|
|
||||||
get_openssl
|
get_openssl
|
||||||
if [ -n "$OPENSSL_BINARY" ]; then
|
if [ -n "$OPENSSL_BINARY" ]; then
|
||||||
wsrep_log_info \
|
wsrep_log_info \
|
||||||
@ -1188,9 +1194,10 @@ check_for_dhparams()
|
|||||||
local bug=0
|
local bug=0
|
||||||
local errmsg
|
local errmsg
|
||||||
errmsg=$("$OPENSSL_BINARY" \
|
errmsg=$("$OPENSSL_BINARY" \
|
||||||
dhparam -out "$ssl_dhparams" 2048 2>&1) || bug=1
|
dhparam -out "$ssl_dhparams" -dsaparam 2048 2>&1) || bug=1
|
||||||
if [ $bug -ne 0 ]; then
|
if [ $bug -ne 0 ]; then
|
||||||
wsrep_log_info "run: \"$OPENSSL_BINARY\" dhparam -out \"$ssl_dhparams\" 2048"
|
wsrep_log_info "run: \"$OPENSSL_BINARY\" dhparam"\
|
||||||
|
"-out \"$ssl_dhparams\" -dsaparam 2048"
|
||||||
wsrep_log_info "output: $errmsg"
|
wsrep_log_info "output: $errmsg"
|
||||||
wsrep_log_error "******** ERROR *****************************************"
|
wsrep_log_error "******** ERROR *****************************************"
|
||||||
wsrep_log_error "* Could not create the dhparams.pem file with OpenSSL. *"
|
wsrep_log_error "* Could not create the dhparams.pem file with OpenSSL. *"
|
||||||
@ -1202,7 +1209,6 @@ check_for_dhparams()
|
|||||||
# the default parameters:
|
# the default parameters:
|
||||||
ssl_dhparams=""
|
ssl_dhparams=""
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -1303,29 +1309,39 @@ verify_cert_matches_key()
|
|||||||
#
|
#
|
||||||
check_for_version()
|
check_for_version()
|
||||||
{
|
{
|
||||||
y1="${1#*.}"
|
local y1="${1#*.}"
|
||||||
[ "$y1" = "$1" ] && y1=""
|
[ "$y1" = "$1" ] && y1=""
|
||||||
z1=${y1#*.}
|
local z1="${y1#*.}"
|
||||||
[ "$z1" = "$y1" ] && z1=""
|
[ "$z1" = "$y1" ] && z1=""
|
||||||
x1="${1%%.*}"
|
local w1="${z1#*.}"
|
||||||
|
[ "$w1" = "$z1" ] && w1=""
|
||||||
|
local x1="${1%%.*}"
|
||||||
y1="${y1%%.*}"
|
y1="${y1%%.*}"
|
||||||
z1="${z1%%.*}"
|
z1="${z1%%.*}"
|
||||||
|
w1="${w1%%.*}"
|
||||||
[ -z "$y1" ] && y1=0
|
[ -z "$y1" ] && y1=0
|
||||||
[ -z "$z1" ] && z1=0
|
[ -z "$z1" ] && z1=0
|
||||||
y2="${2#*.}"
|
[ -z "$w1" ] && w1=0
|
||||||
|
local y2="${2#*.}"
|
||||||
[ "$y2" = "$2" ] && y2=""
|
[ "$y2" = "$2" ] && y2=""
|
||||||
z2="${y2#*.}"
|
local z2="${y2#*.}"
|
||||||
[ "$z2" = "$y2" ] && z2=""
|
[ "$z2" = "$y2" ] && z2=""
|
||||||
x2="${2%%.*}"
|
local w2="${z2#*.}"
|
||||||
|
[ "$w2" = "$z2" ] && w2=""
|
||||||
|
local x2="${2%%.*}"
|
||||||
y2="${y2%%.*}"
|
y2="${y2%%.*}"
|
||||||
z2="${z2%%.*}"
|
z2="${z2%%.*}"
|
||||||
|
w2="${w2%%.*}"
|
||||||
[ -z "$y2" ] && y2=0
|
[ -z "$y2" ] && y2=0
|
||||||
[ -z "$z2" ] && z2=0
|
[ -z "$z2" ] && z2=0
|
||||||
|
[ -z "$w2" ] && w2=0
|
||||||
[ $x1 -lt $x2 ] && return 1
|
[ $x1 -lt $x2 ] && return 1
|
||||||
[ $x1 -gt $x2 ] && return 0
|
[ $x1 -gt $x2 ] && return 0
|
||||||
[ $y1 -lt $y2 ] && return 1
|
[ $y1 -lt $y2 ] && return 1
|
||||||
[ $y1 -gt $y2 ] && return 0
|
[ $y1 -gt $y2 ] && return 0
|
||||||
[ $z1 -lt $z2 ] && return 1
|
[ $z1 -lt $z2 ] && return 1
|
||||||
|
[ $z1 -gt $z2 ] && return 0
|
||||||
|
[ $w1 -lt $w2 ] && return 1
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,15 +86,12 @@ encrypt_threads=""
|
|||||||
encrypt_chunk=""
|
encrypt_chunk=""
|
||||||
|
|
||||||
readonly SECRET_TAG='secret'
|
readonly SECRET_TAG='secret'
|
||||||
|
readonly TOTAL_TAG='total'
|
||||||
|
|
||||||
# Required for backup locks
|
# Required for backup locks
|
||||||
# For backup locks it is 1 sent by joiner
|
# For backup locks it is 1 sent by joiner
|
||||||
sst_ver=1
|
sst_ver=1
|
||||||
|
|
||||||
if [ -n "$(commandex pv)" ] && pv --help | grep -qw -F -- '-F'; then
|
|
||||||
pvopts="$pvopts $pvformat"
|
|
||||||
fi
|
|
||||||
pcmd="pv $pvopts"
|
|
||||||
declare -a RC
|
declare -a RC
|
||||||
|
|
||||||
BACKUP_BIN=$(commandex 'mariabackup')
|
BACKUP_BIN=$(commandex 'mariabackup')
|
||||||
@ -121,18 +118,19 @@ timeit()
|
|||||||
|
|
||||||
if [ $ttime -eq 1 ]; then
|
if [ $ttime -eq 1 ]; then
|
||||||
x1=$(date +%s)
|
x1=$(date +%s)
|
||||||
|
fi
|
||||||
|
|
||||||
wsrep_log_info "Evaluating $cmd"
|
wsrep_log_info "Evaluating $cmd"
|
||||||
eval "$cmd"
|
eval $cmd
|
||||||
extcode=$?
|
extcode=$?
|
||||||
|
|
||||||
|
if [ $ttime -eq 1 ]; then
|
||||||
x2=$(date +%s)
|
x2=$(date +%s)
|
||||||
took=$(( x2-x1 ))
|
took=$(( x2-x1 ))
|
||||||
wsrep_log_info "NOTE: $stage took $took seconds"
|
wsrep_log_info "NOTE: $stage took $took seconds"
|
||||||
totime=$(( totime+took ))
|
totime=$(( totime+took ))
|
||||||
else
|
|
||||||
wsrep_log_info "Evaluating $cmd"
|
|
||||||
eval "$cmd"
|
|
||||||
extcode=$?
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
return $extcode
|
return $extcode
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -220,6 +218,21 @@ get_keys()
|
|||||||
stagemsg="$stagemsg-XB-Encrypted"
|
stagemsg="$stagemsg-XB-Encrypted"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get_socat_ver()
|
||||||
|
{
|
||||||
|
[ -n "${SOCAT_VERSION+x}" ] && return
|
||||||
|
# Determine the socat version
|
||||||
|
SOCAT_VERSION=$(socat -V 2>&1 | \
|
||||||
|
grep -m1 -owE '[0-9]+(\.[0-9]+)+' | \
|
||||||
|
head -n1 || :)
|
||||||
|
if [ -z "$SOCAT_VERSION" ]; then
|
||||||
|
wsrep_log_error "******** FATAL ERROR ******************"
|
||||||
|
wsrep_log_error "* Cannot determine the socat version. *"
|
||||||
|
wsrep_log_error "***************************************"
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
get_transfer()
|
get_transfer()
|
||||||
{
|
{
|
||||||
if [ "$tfmt" = 'nc' ]; then
|
if [ "$tfmt" = 'nc' ]; then
|
||||||
@ -285,7 +298,7 @@ get_transfer()
|
|||||||
# If sockopt contains 'pf=ip6' somewhere in the middle,
|
# If sockopt contains 'pf=ip6' somewhere in the middle,
|
||||||
# this will not interfere with socat, but exclude the trivial
|
# this will not interfere with socat, but exclude the trivial
|
||||||
# cases when sockopt contains 'pf=ip6' as prefix or suffix:
|
# cases when sockopt contains 'pf=ip6' as prefix or suffix:
|
||||||
if [ "$sockopt" = "${sockopt#,pf=ip6}" -a \
|
if [ "$sockopt" = "${sockopt#,pf=ip6,}" -a \
|
||||||
"$sockopt" = "${sockopt%,pf=ip6}" ]
|
"$sockopt" = "${sockopt%,pf=ip6}" ]
|
||||||
then
|
then
|
||||||
sockopt=",pf=ip6$sockopt"
|
sockopt=",pf=ip6$sockopt"
|
||||||
@ -312,22 +325,25 @@ get_transfer()
|
|||||||
if [ "$WSREP_SST_OPT_ROLE" = 'joiner' ]; then
|
if [ "$WSREP_SST_OPT_ROLE" = 'joiner' ]; then
|
||||||
tcmd="socat -u openssl-listen:$SST_PORT,reuseaddr"
|
tcmd="socat -u openssl-listen:$SST_PORT,reuseaddr"
|
||||||
else
|
else
|
||||||
tcmd="socat -u stdio openssl-connect:$REMOTEIP:$SST_PORT"
|
local addr="$REMOTEIP:$SST_PORT"
|
||||||
|
tcmd="socat -u stdio openssl-connect:$addr"
|
||||||
action='Encrypting'
|
action='Encrypting'
|
||||||
|
get_socat_ver
|
||||||
|
if ! check_for_version "$SOCAT_VERSION" '1.7.4.1'; then
|
||||||
|
if check_for_version "$SOCAT_VERSION" '1.7.3.3'; then
|
||||||
|
# Workaround for a bug known as 'Red Hat issue 1870279'
|
||||||
|
# (connection reset by peer) in socat versions 1.7.3.3
|
||||||
|
# to 1.7.4.0:
|
||||||
|
tcmd="socat stdio openssl-connect:$addr,linger=10"
|
||||||
|
wsrep_log_info \
|
||||||
|
"Use workaround for socat $SOCAT_VERSION bug"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${sockopt#*,dhparam=}" != "$sockopt" ]; then
|
if [ "${sockopt#*,dhparam=}" = "$sockopt" ]; then
|
||||||
if [ -z "$ssl_dhparams" ]; then
|
if [ -z "$ssl_dhparams" ]; then
|
||||||
# Determine the socat version
|
get_socat_ver
|
||||||
SOCAT_VERSION=$(socat -V 2>&1 | \
|
|
||||||
grep -m1 -owE '[0-9]+(\.[0-9]+)+' | \
|
|
||||||
head -n1 || :)
|
|
||||||
if [ -z "$SOCAT_VERSION" ]; then
|
|
||||||
wsrep_log_error "******** FATAL ERROR ******************"
|
|
||||||
wsrep_log_error "* Cannot determine the socat version. *"
|
|
||||||
wsrep_log_error "***************************************"
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
if ! check_for_version "$SOCAT_VERSION" '1.7.3'; then
|
if ! check_for_version "$SOCAT_VERSION" '1.7.3'; then
|
||||||
# socat versions < 1.7.3 will have 512-bit dhparams (too small)
|
# socat versions < 1.7.3 will have 512-bit dhparams (too small)
|
||||||
# so create 2048-bit dhparams and send that as a parameter:
|
# so create 2048-bit dhparams and send that as a parameter:
|
||||||
@ -419,44 +435,90 @@ get_transfer()
|
|||||||
get_footprint()
|
get_footprint()
|
||||||
{
|
{
|
||||||
cd "$DATA_DIR"
|
cd "$DATA_DIR"
|
||||||
payload=$(find . -regex '.*\.ibd$\|.*\.MYI$\|.*\.MYD$\|.*ibdata1$' \
|
local payload_data=$(find . \
|
||||||
|
-regex '.*undo[0-9]+$\|.*\.ibd$\|.*\.MYI$\|.*\.MYD$\|.*ibdata1$' \
|
||||||
-type f -print0 | du --files0-from=- --block-size=1 -c -s | \
|
-type f -print0 | du --files0-from=- --block-size=1 -c -s | \
|
||||||
awk 'END { print $1 }')
|
awk 'END { print $1 }')
|
||||||
|
|
||||||
|
local payload_undo=0
|
||||||
|
if [ -n "$ib_undo_dir" -a -d "$ib_undo_dir" ]; then
|
||||||
|
cd "$ib_undo_dir"
|
||||||
|
payload_undo=$(find . -regex '.*undo[0-9]+$' -type f -print0 | \
|
||||||
|
du --files0-from=- --block-size=1 -c -s | awk 'END { print $1 }')
|
||||||
|
fi
|
||||||
|
cd "$OLD_PWD"
|
||||||
|
|
||||||
|
wsrep_log_info \
|
||||||
|
"SST footprint estimate: data: $payload_data, undo: $payload_undo"
|
||||||
|
|
||||||
|
payload=$(( payload_data + payload_undo ))
|
||||||
|
|
||||||
if [ "$compress" != 'none' ]; then
|
if [ "$compress" != 'none' ]; then
|
||||||
# QuickLZ has around 50% compression ratio
|
# QuickLZ has around 50% compression ratio
|
||||||
# When compression/compaction used, the progress is only an approximate.
|
# When compression/compaction used, the progress is only an approximate.
|
||||||
payload=$(( payload*1/2 ))
|
payload=$(( payload*1/2 ))
|
||||||
fi
|
fi
|
||||||
cd "$OLD_PWD"
|
|
||||||
pcmd="$pcmd -s $payload"
|
if [ $WSREP_SST_OPT_PROGRESS -eq 1 ]; then
|
||||||
|
# report to parent the total footprint of the SST
|
||||||
|
echo "$TOTAL_TAG $payload"
|
||||||
|
fi
|
||||||
|
|
||||||
adjust_progress
|
adjust_progress
|
||||||
}
|
}
|
||||||
|
|
||||||
adjust_progress()
|
adjust_progress()
|
||||||
{
|
{
|
||||||
if [ -z "$(commandex pv)" ]; then
|
|
||||||
wsrep_log_error "pv not found in path: $PATH"
|
|
||||||
wsrep_log_error "Disabling all progress/rate-limiting"
|
|
||||||
pcmd=""
|
pcmd=""
|
||||||
rlimit=""
|
rcmd=""
|
||||||
progress=""
|
|
||||||
return
|
[ "$progress" = 'none' ] && return
|
||||||
|
|
||||||
|
rlimitopts=""
|
||||||
|
if [ -n "$rlimit" -a "$WSREP_SST_OPT_ROLE" = 'donor' ]; then
|
||||||
|
wsrep_log_info "Rate-limiting SST to $rlimit"
|
||||||
|
rlimitopts=" -L $rlimit"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$progress" -a "$progress" != '1' ]; then
|
if [ -n "$progress" ]; then
|
||||||
|
|
||||||
|
# Backward compatibility: user-configured progress output
|
||||||
|
pcmd="pv $pvopts$rlimitopts"
|
||||||
|
|
||||||
|
if [ -z "${PV_FORMAT+x}" ]; then
|
||||||
|
PV_FORMAT=0
|
||||||
|
pv --help | grep -qw -F -- '-F' && PV_FORMAT=1
|
||||||
|
fi
|
||||||
|
if [ $PV_FORMAT -eq 1 ]; then
|
||||||
|
pcmd="$pcmd $pvformat"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $payload -ne 0 ]; then
|
||||||
|
pcmd="$pcmd -s $payload"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$progress" != '1' ]; then
|
||||||
if [ -e "$progress" ]; then
|
if [ -e "$progress" ]; then
|
||||||
pcmd="$pcmd 2>>'$progress'"
|
pcmd="$pcmd 2>>'$progress'"
|
||||||
else
|
else
|
||||||
pcmd="$pcmd 2>'$progress'"
|
pcmd="$pcmd 2>'$progress'"
|
||||||
fi
|
fi
|
||||||
elif [ -z "$progress" -a -n "$rlimit" ]; then
|
|
||||||
# When rlimit is non-zero
|
|
||||||
pcmd='pv -q'
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$rlimit" -a "$WSREP_SST_OPT_ROLE" = 'donor' ]; then
|
elif [ $WSREP_SST_OPT_PROGRESS -eq 1 ]; then
|
||||||
wsrep_log_info "Rate-limiting SST to $rlimit"
|
|
||||||
pcmd="$pcmd -L \$rlimit"
|
# Default progress output parseable by parent
|
||||||
|
pcmd="pv -f -i 1 -n -b$rlimitopts"
|
||||||
|
|
||||||
|
# read progress data, add tag and post to stdout
|
||||||
|
# for the parent
|
||||||
|
rcmd="stdbuf -oL tr '\r' '\n' | xargs -n1 echo complete"
|
||||||
|
|
||||||
|
elif [ -n "$rlimitopts" ]; then
|
||||||
|
|
||||||
|
# Rate-limiting only, when rlimit is non-zero
|
||||||
|
pcmd="pv -q$rlimitopts"
|
||||||
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -512,6 +574,10 @@ read_cnf()
|
|||||||
"CERT='$tpem', KEY='$tkey', MODE='$tmode'," \
|
"CERT='$tpem', KEY='$tkey', MODE='$tmode'," \
|
||||||
"encrypt='$encrypt'"
|
"encrypt='$encrypt'"
|
||||||
|
|
||||||
|
if [ $encrypt -ge 2 ]; then
|
||||||
|
ssl_dhparams=$(parse_cnf "$encgroups" 'ssl-dhparams')
|
||||||
|
fi
|
||||||
|
|
||||||
sockopt=$(parse_cnf sst sockopt "")
|
sockopt=$(parse_cnf sst sockopt "")
|
||||||
progress=$(parse_cnf sst progress "")
|
progress=$(parse_cnf sst progress "")
|
||||||
ttime=$(parse_cnf sst time 0)
|
ttime=$(parse_cnf sst time 0)
|
||||||
@ -765,13 +831,10 @@ recv_joiner()
|
|||||||
wsrep_log_info $(ls -l "$dir/"*)
|
wsrep_log_info $(ls -l "$dir/"*)
|
||||||
exit 32
|
exit 32
|
||||||
fi
|
fi
|
||||||
# Select the "secret" tag whose value does not start
|
|
||||||
# with a slash symbol. All new tags must to start with
|
if [ -n "$MY_SECRET" ]; then
|
||||||
# the space and the slash symbol after the word "secret" -
|
|
||||||
# to be removed by older versions of the SST scripts:
|
|
||||||
SECRET=$(grep -m1 -E "^$SECRET_TAG[[:space:]]+[^/]" \
|
|
||||||
-- "$MAGIC_FILE" || :)
|
|
||||||
# Check donor supplied secret:
|
# Check donor supplied secret:
|
||||||
|
SECRET=$(grep -m1 -E "^$SECRET_TAG[[:space:]]" "$MAGIC_FILE" || :)
|
||||||
SECRET=$(trim_string "${SECRET#$SECRET_TAG}")
|
SECRET=$(trim_string "${SECRET#$SECRET_TAG}")
|
||||||
if [ "$SECRET" != "$MY_SECRET" ]; then
|
if [ "$SECRET" != "$MY_SECRET" ]; then
|
||||||
wsrep_log_error "Donor does not know my secret!"
|
wsrep_log_error "Donor does not know my secret!"
|
||||||
@ -779,6 +842,19 @@ recv_joiner()
|
|||||||
exit 32
|
exit 32
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ $WSREP_SST_OPT_PROGRESS -eq 1 ]; then
|
||||||
|
# check total SST footprint
|
||||||
|
payload=$(grep -m1 -E "^$TOTAL_TAG[[:space:]]" "$MAGIC_FILE" || :)
|
||||||
|
if [ -n "$payload" ]; then
|
||||||
|
payload=$(trim_string "${payload#$TOTAL_TAG}")
|
||||||
|
if [ $payload -ge 0 ]; then
|
||||||
|
# report to parent
|
||||||
|
echo "$TOTAL_TAG $payload"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
send_donor()
|
send_donor()
|
||||||
@ -825,6 +901,14 @@ monitor_process()
|
|||||||
read_cnf
|
read_cnf
|
||||||
setup_ports
|
setup_ports
|
||||||
|
|
||||||
|
if [ "$progress" = 'none' ]; then
|
||||||
|
wsrep_log_info "All progress/rate-limiting disabled by configuration"
|
||||||
|
elif [ -z "$(commandex pv)" ]; then
|
||||||
|
wsrep_log_info "Progress reporting tool pv not found in path: $PATH"
|
||||||
|
wsrep_log_info "Disabling all progress/rate-limiting"
|
||||||
|
progress='none'
|
||||||
|
fi
|
||||||
|
|
||||||
if "$BACKUP_BIN" --help 2>/dev/null | grep -qw -F -- '--version-check'; then
|
if "$BACKUP_BIN" --help 2>/dev/null | grep -qw -F -- '--version-check'; then
|
||||||
disver=' --no-version-check'
|
disver=' --no-version-check'
|
||||||
fi
|
fi
|
||||||
@ -980,6 +1064,14 @@ if [ "$WSREP_SST_OPT_ROLE" = 'donor' ]; then
|
|||||||
|
|
||||||
check_extra
|
check_extra
|
||||||
|
|
||||||
|
if [ -n "$progress" -o $WSREP_SST_OPT_PROGRESS -eq 1 ]; then
|
||||||
|
wsrep_log_info "Estimating total transfer size"
|
||||||
|
get_footprint
|
||||||
|
wsrep_log_info "To transfer: $payload"
|
||||||
|
else
|
||||||
|
adjust_progress
|
||||||
|
fi
|
||||||
|
|
||||||
wsrep_log_info "Streaming GTID file before SST"
|
wsrep_log_info "Streaming GTID file before SST"
|
||||||
|
|
||||||
# Store donor's wsrep GTID (state ID) and wsrep_gtid_domain_id
|
# Store donor's wsrep GTID (state ID) and wsrep_gtid_domain_id
|
||||||
@ -991,6 +1083,11 @@ if [ "$WSREP_SST_OPT_ROLE" = 'donor' ]; then
|
|||||||
echo "$SECRET_TAG $WSREP_SST_OPT_REMOTE_PSWD" >> "$MAGIC_FILE"
|
echo "$SECRET_TAG $WSREP_SST_OPT_REMOTE_PSWD" >> "$MAGIC_FILE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ $WSREP_SST_OPT_PROGRESS -eq 1 ]; then
|
||||||
|
# Tell joiner what to expect:
|
||||||
|
echo "$TOTAL_TAG $payload" >> "$MAGIC_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
ttcmd="$tcmd"
|
ttcmd="$tcmd"
|
||||||
|
|
||||||
if [ -n "$scomp" ]; then
|
if [ -n "$scomp" ]; then
|
||||||
@ -1007,13 +1104,15 @@ if [ "$WSREP_SST_OPT_ROLE" = 'donor' ]; then
|
|||||||
# Restore the transport commmand to its original state
|
# Restore the transport commmand to its original state
|
||||||
tcmd="$ttcmd"
|
tcmd="$ttcmd"
|
||||||
|
|
||||||
if [ -n "$progress" ]; then
|
if [ -n "$pcmd" ]; then
|
||||||
get_footprint
|
if [ -n "$rcmd" ]; then
|
||||||
tcmd="$pcmd | $tcmd"
|
# redirect pv stderr to rcmd for tagging and output to parent
|
||||||
elif [ -n "$rlimit" ]; then
|
tcmd="{ $pcmd 2>&3 | $tcmd; } 3>&1 | $rcmd"
|
||||||
adjust_progress
|
else
|
||||||
|
# use user-configured pv output
|
||||||
tcmd="$pcmd | $tcmd"
|
tcmd="$pcmd | $tcmd"
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
wsrep_log_info "Sleeping before data transfer for SST"
|
wsrep_log_info "Sleeping before data transfer for SST"
|
||||||
sleep 10
|
sleep 10
|
||||||
@ -1214,13 +1313,6 @@ else # joiner
|
|||||||
MY_SECRET="" # for check down in recv_joiner()
|
MY_SECRET="" # for check down in recv_joiner()
|
||||||
fi
|
fi
|
||||||
|
|
||||||
trap cleanup_at_exit EXIT
|
|
||||||
|
|
||||||
if [ -n "$progress" ]; then
|
|
||||||
adjust_progress
|
|
||||||
tcmd="$tcmd | $pcmd"
|
|
||||||
fi
|
|
||||||
|
|
||||||
get_keys
|
get_keys
|
||||||
if [ $encrypt -eq 1 ]; then
|
if [ $encrypt -eq 1 ]; then
|
||||||
strmcmd="$ecmd | $strmcmd"
|
strmcmd="$ecmd | $strmcmd"
|
||||||
@ -1232,6 +1324,8 @@ else # joiner
|
|||||||
|
|
||||||
check_sockets_utils
|
check_sockets_utils
|
||||||
|
|
||||||
|
trap cleanup_at_exit EXIT
|
||||||
|
|
||||||
STATDIR="$(mktemp -d)"
|
STATDIR="$(mktemp -d)"
|
||||||
MAGIC_FILE="$STATDIR/$INFO_FILE"
|
MAGIC_FILE="$STATDIR/$INFO_FILE"
|
||||||
|
|
||||||
@ -1245,6 +1339,17 @@ else # joiner
|
|||||||
|
|
||||||
if [ ! -r "$STATDIR/$IST_FILE" ]; then
|
if [ ! -r "$STATDIR/$IST_FILE" ]; then
|
||||||
|
|
||||||
|
adjust_progress
|
||||||
|
if [ -n "$pcmd" ]; then
|
||||||
|
if [ -n "$rcmd" ]; then
|
||||||
|
# redirect pv stderr to rcmd for tagging and output to parent
|
||||||
|
strmcmd="{ $pcmd 2>&3 | $strmcmd; } 3>&1 | $rcmd"
|
||||||
|
else
|
||||||
|
# use user-configured pv output
|
||||||
|
strmcmd="$pcmd | $strmcmd"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -d "$DATA/.sst" ]; then
|
if [ -d "$DATA/.sst" ]; then
|
||||||
wsrep_log_info \
|
wsrep_log_info \
|
||||||
"WARNING: Stale temporary SST directory:" \
|
"WARNING: Stale temporary SST directory:" \
|
||||||
@ -1265,13 +1370,13 @@ else # joiner
|
|||||||
cd "$DATA"
|
cd "$DATA"
|
||||||
wsrep_log_info "Cleaning the old binary logs"
|
wsrep_log_info "Cleaning the old binary logs"
|
||||||
# If there is a file with binlogs state, delete it:
|
# If there is a file with binlogs state, delete it:
|
||||||
[ -f "$binlog_base.state" ] && rm -f "$binlog_base.state" >&2
|
[ -f "$binlog_base.state" ] && rm "$binlog_base.state" >&2
|
||||||
# Clean up the old binlog files and index:
|
# Clean up the old binlog files and index:
|
||||||
if [ -f "$binlog_index" ]; then
|
if [ -f "$binlog_index" ]; then
|
||||||
while read bin_file || [ -n "$bin_file" ]; do
|
while read bin_file || [ -n "$bin_file" ]; do
|
||||||
rm -f "$bin_file" >&2 || :
|
rm -f "$bin_file" >&2 || :
|
||||||
done < "$binlog_index"
|
done < "$binlog_index"
|
||||||
rm -f "$binlog_index" >&2
|
rm "$binlog_index" >&2
|
||||||
fi
|
fi
|
||||||
if [ -n "$binlog_dir" -a "$binlog_dir" != '.' -a \
|
if [ -n "$binlog_dir" -a "$binlog_dir" != '.' -a \
|
||||||
-d "$binlog_dir" ]
|
-d "$binlog_dir" ]
|
||||||
@ -1335,16 +1440,14 @@ else # joiner
|
|||||||
|
|
||||||
dcmd="xargs -n 2 qpress -dT$nproc"
|
dcmd="xargs -n 2 qpress -dT$nproc"
|
||||||
|
|
||||||
if [ -n "$progress" ] && \
|
if [ -n "$progress" -a "$progress" != 'none' ] && \
|
||||||
pv --help | grep -qw -F -- '--line-mode'
|
pv --help | grep -qw -F -- '--line-mode'
|
||||||
then
|
then
|
||||||
count=$(find "$DATA" -type f -name '*.qp' | wc -l)
|
count=$(find "$DATA" -maxdepth 1 -type f -name '*.qp' | wc -l)
|
||||||
count=$(( count*2 ))
|
count=$(( count*2 ))
|
||||||
pvopts="-f -s $count -l -N Decompression"
|
pvopts='-f -l -N Decompression'
|
||||||
if pv --help | grep -qw -F -- '-F'; then
|
pvformat="-F '%N => Rate:%r Elapsed:%t %e Progress: [%b/$count]'"
|
||||||
pvopts="$pvopts -F '%N => Rate:%r Elapsed:%t %e Progress: [%b/$count]'"
|
payload=$count
|
||||||
fi
|
|
||||||
pcmd="pv $pvopts"
|
|
||||||
adjust_progress
|
adjust_progress
|
||||||
dcmd="$pcmd | $dcmd"
|
dcmd="$pcmd | $dcmd"
|
||||||
fi
|
fi
|
||||||
@ -1442,7 +1545,7 @@ else # joiner
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Remove special tags from the magic file, and from the output:
|
# Remove special tags from the magic file, and from the output:
|
||||||
coords=$(grep -v -E "^$SECRET_TAG[[:space:]]" -- "$MAGIC_FILE")
|
coords=$(head -n1 "$MAGIC_FILE")
|
||||||
wsrep_log_info "Galera co-ords from recovery: $coords"
|
wsrep_log_info "Galera co-ords from recovery: $coords"
|
||||||
echo "$coords" # Output : UUID:seqno wsrep_gtid_domain_id
|
echo "$coords" # Output : UUID:seqno wsrep_gtid_domain_id
|
||||||
|
|
||||||
|
@ -65,21 +65,21 @@ cleanup_joiner()
|
|||||||
|
|
||||||
if [ $failure -eq 0 ]; then
|
if [ $failure -eq 0 ]; then
|
||||||
if cleanup_pid $RSYNC_REAL_PID "$RSYNC_PID" "$RSYNC_CONF"; then
|
if cleanup_pid $RSYNC_REAL_PID "$RSYNC_PID" "$RSYNC_CONF"; then
|
||||||
[ -f "$MAGIC_FILE" ] && rm -f "$MAGIC_FILE"
|
[ -f "$MAGIC_FILE" ] && rm -f "$MAGIC_FILE" || :
|
||||||
[ -f "$BINLOG_TAR_FILE" ] && rm -f "$BINLOG_TAR_FILE"
|
[ -f "$BINLOG_TAR_FILE" ] && rm -f "$BINLOG_TAR_FILE" || :
|
||||||
else
|
else
|
||||||
wsrep_log_warning "rsync cleanup failed."
|
wsrep_log_warning "rsync cleanup failed."
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
wsrep_log_info "Joiner cleanup done."
|
|
||||||
|
|
||||||
if [ "$WSREP_SST_OPT_ROLE" = 'joiner' ]; then
|
if [ "$WSREP_SST_OPT_ROLE" = 'joiner' ]; then
|
||||||
wsrep_cleanup_progress_file
|
wsrep_cleanup_progress_file
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -f "$SST_PID" ] && rm -f "$SST_PID" || :
|
[ -f "$SST_PID" ] && rm -f "$SST_PID" || :
|
||||||
|
|
||||||
|
wsrep_log_info "Joiner cleanup done."
|
||||||
|
|
||||||
exit $estatus
|
exit $estatus
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -318,7 +318,7 @@ if [ -n "$SSLMODE" -a "$SSLMODE" != 'DISABLED' ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
readonly SECRET_TAG='secret'
|
readonly SECRET_TAG='secret'
|
||||||
readonly BYPASS_TAG='secret /bypass'
|
readonly BYPASS_TAG='bypass'
|
||||||
|
|
||||||
SST_PID="$WSREP_SST_OPT_DATA/wsrep_sst.pid"
|
SST_PID="$WSREP_SST_OPT_DATA/wsrep_sst.pid"
|
||||||
|
|
||||||
@ -371,10 +371,11 @@ done
|
|||||||
[ -f "$MAGIC_FILE" ] && rm -f "$MAGIC_FILE"
|
[ -f "$MAGIC_FILE" ] && rm -f "$MAGIC_FILE"
|
||||||
[ -f "$BINLOG_TAR_FILE" ] && rm -f "$BINLOG_TAR_FILE"
|
[ -f "$BINLOG_TAR_FILE" ] && rm -f "$BINLOG_TAR_FILE"
|
||||||
|
|
||||||
|
RC=0
|
||||||
|
|
||||||
if [ "$WSREP_SST_OPT_ROLE" = 'donor' ]; then
|
if [ "$WSREP_SST_OPT_ROLE" = 'donor' ]; then
|
||||||
|
|
||||||
if [ -n "$STUNNEL" ]
|
if [ -n "$STUNNEL" ]; then
|
||||||
then
|
|
||||||
cat << EOF > "$STUNNEL_CONF"
|
cat << EOF > "$STUNNEL_CONF"
|
||||||
key = $SSTKEY
|
key = $SSTKEY
|
||||||
cert = $SSTCERT
|
cert = $SSTCERT
|
||||||
@ -392,8 +393,6 @@ ${CHECK_OPT_LOCAL}
|
|||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RC=0
|
|
||||||
|
|
||||||
if [ $WSREP_SST_OPT_BYPASS -eq 0 ]; then
|
if [ $WSREP_SST_OPT_BYPASS -eq 0 ]; then
|
||||||
|
|
||||||
FLUSHED="$WSREP_SST_OPT_DATA/tables_flushed"
|
FLUSHED="$WSREP_SST_OPT_DATA/tables_flushed"
|
||||||
@ -410,19 +409,19 @@ EOF
|
|||||||
# (c) ERROR file, in case flush tables operation failed.
|
# (c) ERROR file, in case flush tables operation failed.
|
||||||
|
|
||||||
while [ ! -r "$FLUSHED" ] && \
|
while [ ! -r "$FLUSHED" ] && \
|
||||||
! grep -q -F ':' -- "$FLUSHED" 2>/dev/null
|
! grep -q -F ':' -- "$FLUSHED"
|
||||||
do
|
do
|
||||||
# Check whether ERROR file exists.
|
# Check whether ERROR file exists.
|
||||||
if [ -f "$ERROR" ]; then
|
if [ -f "$ERROR" ]; then
|
||||||
# Flush tables operation failed.
|
# Flush tables operation failed.
|
||||||
rm -f "$ERROR"
|
rm "$ERROR"
|
||||||
exit 255
|
exit 255
|
||||||
fi
|
fi
|
||||||
sleep 0.2
|
sleep 0.2
|
||||||
done
|
done
|
||||||
|
|
||||||
STATE=$(cat "$FLUSHED")
|
STATE=$(cat "$FLUSHED")
|
||||||
rm -f "$FLUSHED"
|
rm "$FLUSHED"
|
||||||
|
|
||||||
sync
|
sync
|
||||||
|
|
||||||
@ -629,6 +628,8 @@ FILTER="-f '- /lost+found'
|
|||||||
|
|
||||||
wsrep_log_info "Transfer of data done"
|
wsrep_log_info "Transfer of data done"
|
||||||
|
|
||||||
|
[ -f "$BINLOG_TAR_FILE" ] && rm "$BINLOG_TAR_FILE"
|
||||||
|
|
||||||
else # BYPASS
|
else # BYPASS
|
||||||
|
|
||||||
wsrep_log_info "Bypassing state dump."
|
wsrep_log_info "Bypassing state dump."
|
||||||
@ -657,6 +658,8 @@ FILTER="-f '- /lost+found'
|
|||||||
--archive --quiet --checksum "$MAGIC_FILE" \
|
--archive --quiet --checksum "$MAGIC_FILE" \
|
||||||
"rsync://$WSREP_SST_OPT_ADDR" >&2 || RC=$?
|
"rsync://$WSREP_SST_OPT_ADDR" >&2 || RC=$?
|
||||||
|
|
||||||
|
rm "$MAGIC_FILE"
|
||||||
|
|
||||||
if [ $RC -ne 0 ]; then
|
if [ $RC -ne 0 ]; then
|
||||||
wsrep_log_error "rsync $MAGIC_FILE returned code $RC:"
|
wsrep_log_error "rsync $MAGIC_FILE returned code $RC:"
|
||||||
exit 255 # unknown error
|
exit 255 # unknown error
|
||||||
@ -665,8 +668,8 @@ FILTER="-f '- /lost+found'
|
|||||||
echo "done $STATE"
|
echo "done $STATE"
|
||||||
|
|
||||||
if [ -n "$STUNNEL" ]; then
|
if [ -n "$STUNNEL" ]; then
|
||||||
[ -f "$STUNNEL_CONF" ] && rm -f "$STUNNEL_CONF"
|
rm "$STUNNEL_CONF"
|
||||||
[ -f "$STUNNEL_PID" ] && rm -f "$STUNNEL_PID"
|
[ -f "$STUNNEL_PID" ] && rm "$STUNNEL_PID"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
else # joiner
|
else # joiner
|
||||||
@ -704,8 +707,7 @@ $SILENT
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
# If the IP is local, listen only on it:
|
# If the IP is local, listen only on it:
|
||||||
if is_local_ip "$RSYNC_ADDR_UNESCAPED"
|
if is_local_ip "$RSYNC_ADDR_UNESCAPED"; then
|
||||||
then
|
|
||||||
RSYNC_EXTRA_ARGS="--address $RSYNC_ADDR_UNESCAPED"
|
RSYNC_EXTRA_ARGS="--address $RSYNC_ADDR_UNESCAPED"
|
||||||
STUNNEL_ACCEPT="$RSYNC_ADDR_UNESCAPED:$RSYNC_PORT"
|
STUNNEL_ACCEPT="$RSYNC_ADDR_UNESCAPED:$RSYNC_PORT"
|
||||||
else
|
else
|
||||||
@ -826,13 +828,8 @@ EOF
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$MY_SECRET" ]; then
|
if [ -n "$MY_SECRET" ]; then
|
||||||
# Select the "secret" tag whose value does not start
|
|
||||||
# with a slash symbol. All new tags must to start with
|
|
||||||
# the space and the slash symbol after the word "secret" -
|
|
||||||
# to be removed by older versions of the SST scripts:
|
|
||||||
SECRET=$(grep -m1 -E "^$SECRET_TAG[[:space:]]+[^/]" \
|
|
||||||
-- "$MAGIC_FILE" || :)
|
|
||||||
# Check donor supplied secret:
|
# Check donor supplied secret:
|
||||||
|
SECRET=$(grep -m1 -E "^$SECRET_TAG[[:space:]]" "$MAGIC_FILE" || :)
|
||||||
SECRET=$(trim_string "${SECRET#$SECRET_TAG}")
|
SECRET=$(trim_string "${SECRET#$SECRET_TAG}")
|
||||||
if [ "$SECRET" != "$MY_SECRET" ]; then
|
if [ "$SECRET" != "$MY_SECRET" ]; then
|
||||||
wsrep_log_error "Donor does not know my secret!"
|
wsrep_log_error "Donor does not know my secret!"
|
||||||
@ -842,7 +839,7 @@ EOF
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $WSREP_SST_OPT_BYPASS -eq 0 ]; then
|
if [ $WSREP_SST_OPT_BYPASS -eq 0 ]; then
|
||||||
if grep -m1 -qE "^$BYPASS_TAG([[:space:]]+.*)?\$" -- "$MAGIC_FILE"; then
|
if grep -m1 -qE "^$BYPASS_TAG([[:space:]]+.*)?\$" "$MAGIC_FILE"; then
|
||||||
readonly WSREP_SST_OPT_BYPASS=1
|
readonly WSREP_SST_OPT_BYPASS=1
|
||||||
readonly WSREP_TRANSFER_TYPE='IST'
|
readonly WSREP_TRANSFER_TYPE='IST'
|
||||||
fi
|
fi
|
||||||
@ -850,10 +847,10 @@ EOF
|
|||||||
|
|
||||||
binlog_tar_present=0
|
binlog_tar_present=0
|
||||||
if [ -f "$BINLOG_TAR_FILE" ]; then
|
if [ -f "$BINLOG_TAR_FILE" ]; then
|
||||||
|
binlog_tar_present=1
|
||||||
if [ $WSREP_SST_OPT_BYPASS -ne 0 ]; then
|
if [ $WSREP_SST_OPT_BYPASS -ne 0 ]; then
|
||||||
wsrep_log_warning "tar with binlogs transferred in the IST mode"
|
wsrep_log_warning "tar with binlogs transferred in the IST mode"
|
||||||
fi
|
fi
|
||||||
binlog_tar_present=1
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $WSREP_SST_OPT_BYPASS -eq 0 -a -n "$WSREP_SST_OPT_BINLOG" ]; then
|
if [ $WSREP_SST_OPT_BYPASS -eq 0 -a -n "$WSREP_SST_OPT_BINLOG" ]; then
|
||||||
@ -867,7 +864,7 @@ EOF
|
|||||||
while read bin_file || [ -n "$bin_file" ]; do
|
while read bin_file || [ -n "$bin_file" ]; do
|
||||||
rm -f "$bin_file" || :
|
rm -f "$bin_file" || :
|
||||||
done < "$binlog_index"
|
done < "$binlog_index"
|
||||||
rm -f "$binlog_index"
|
rm "$binlog_index"
|
||||||
fi
|
fi
|
||||||
binlog_cd=0
|
binlog_cd=0
|
||||||
# Change the directory to binlog base (if possible):
|
# Change the directory to binlog base (if possible):
|
||||||
@ -902,7 +899,6 @@ EOF
|
|||||||
fi
|
fi
|
||||||
# Extracting binlog files:
|
# Extracting binlog files:
|
||||||
wsrep_log_info "Extracting binlog files:"
|
wsrep_log_info "Extracting binlog files:"
|
||||||
RC=0
|
|
||||||
if tar --version | grep -qw -E '^bsdtar'; then
|
if tar --version | grep -qw -E '^bsdtar'; then
|
||||||
tar -tf "$BINLOG_TAR_FILE" > "$tmpfile" && \
|
tar -tf "$BINLOG_TAR_FILE" > "$tmpfile" && \
|
||||||
tar -xvf "$BINLOG_TAR_FILE" > /dev/null || RC=$?
|
tar -xvf "$BINLOG_TAR_FILE" > /dev/null || RC=$?
|
||||||
@ -912,7 +908,7 @@ EOF
|
|||||||
fi
|
fi
|
||||||
if [ $RC -ne 0 ]; then
|
if [ $RC -ne 0 ]; then
|
||||||
wsrep_log_error "Error unpacking tar file with binlog files"
|
wsrep_log_error "Error unpacking tar file with binlog files"
|
||||||
rm -f "$tmpfile"
|
rm "$tmpfile"
|
||||||
exit 32
|
exit 32
|
||||||
fi
|
fi
|
||||||
# Rebuild binlog index:
|
# Rebuild binlog index:
|
||||||
@ -920,18 +916,16 @@ EOF
|
|||||||
while read bin_file || [ -n "$bin_file" ]; do
|
while read bin_file || [ -n "$bin_file" ]; do
|
||||||
echo "$binlog_dir${binlog_dir:+/}$bin_file" >> "$binlog_index"
|
echo "$binlog_dir${binlog_dir:+/}$bin_file" >> "$binlog_index"
|
||||||
done < "$tmpfile"
|
done < "$tmpfile"
|
||||||
rm -f "$tmpfile"
|
rm "$tmpfile"
|
||||||
cd "$OLD_PWD"
|
cd "$OLD_PWD"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Remove special tags from the magic file, and from the output:
|
# Remove special tags from the magic file, and from the output:
|
||||||
coords=$(grep -v -E "^$SECRET_TAG[[:space:]]" -- "$MAGIC_FILE")
|
coords=$(head -n1 "$MAGIC_FILE")
|
||||||
wsrep_log_info "Galera co-ords from recovery: $coords"
|
wsrep_log_info "Galera co-ords from recovery: $coords"
|
||||||
echo "$coords" # Output : UUID:seqno wsrep_gtid_domain_id
|
echo "$coords" # Output : UUID:seqno wsrep_gtid_domain_id
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -f "$BINLOG_TAR_FILE" ] && rm -f "$BINLOG_TAR_FILE"
|
|
||||||
|
|
||||||
wsrep_log_info "$WSREP_METHOD $WSREP_TRANSFER_TYPE completed on $WSREP_SST_OPT_ROLE"
|
wsrep_log_info "$WSREP_METHOD $WSREP_TRANSFER_TYPE completed on $WSREP_SST_OPT_ROLE"
|
||||||
exit 0
|
exit 0
|
||||||
|
@ -3783,7 +3783,7 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
check_insert_autoincrement();
|
check_insert_or_replace_autoincrement();
|
||||||
if (unlikely((error= open_read_partitions(name_buff, sizeof(name_buff)))))
|
if (unlikely((error= open_read_partitions(name_buff, sizeof(name_buff)))))
|
||||||
goto err_handler;
|
goto err_handler;
|
||||||
m_num_locks= m_file_sample->lock_count();
|
m_num_locks= m_file_sample->lock_count();
|
||||||
@ -8831,7 +8831,7 @@ int ha_partition::change_partitions_to_open(List<String> *partition_names)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
check_insert_autoincrement();
|
check_insert_or_replace_autoincrement();
|
||||||
if (bitmap_cmp(&m_opened_partitions, &m_part_info->read_partitions) != 0)
|
if (bitmap_cmp(&m_opened_partitions, &m_part_info->read_partitions) != 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -1404,15 +1404,16 @@ private:
|
|||||||
unlock_auto_increment();
|
unlock_auto_increment();
|
||||||
}
|
}
|
||||||
|
|
||||||
void check_insert_autoincrement()
|
void check_insert_or_replace_autoincrement()
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
If we INSERT into the table having the AUTO_INCREMENT column,
|
If we INSERT or REPLACE into the table having the AUTO_INCREMENT column,
|
||||||
we have to read all partitions for the next autoincrement value
|
we have to read all partitions for the next autoincrement value
|
||||||
unless we already did it.
|
unless we already did it.
|
||||||
*/
|
*/
|
||||||
if (!part_share->auto_inc_initialized &&
|
if (!part_share->auto_inc_initialized &&
|
||||||
ha_thd()->lex->sql_command == SQLCOM_INSERT &&
|
(ha_thd()->lex->sql_command == SQLCOM_INSERT ||
|
||||||
|
ha_thd()->lex->sql_command == SQLCOM_REPLACE) &&
|
||||||
table->found_next_number_field)
|
table->found_next_number_field)
|
||||||
bitmap_set_all(&m_part_info->read_partitions);
|
bitmap_set_all(&m_part_info->read_partitions);
|
||||||
}
|
}
|
||||||
|
@ -84,6 +84,12 @@ static inline void output_core_info()
|
|||||||
my_safe_printf_stderr("Core pattern: %.*s\n", (int) len, buff);
|
my_safe_printf_stderr("Core pattern: %.*s\n", (int) len, buff);
|
||||||
my_close(fd, MYF(0));
|
my_close(fd, MYF(0));
|
||||||
}
|
}
|
||||||
|
if ((fd= my_open("/proc/version", O_RDONLY, MYF(0))) >= 0)
|
||||||
|
{
|
||||||
|
len= my_read(fd, (uchar*)buff, sizeof(buff), MYF(0));
|
||||||
|
my_safe_printf_stderr("Kernel version: %.*s\n", (int) len, buff);
|
||||||
|
my_close(fd, MYF(0));
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
#elif defined(__APPLE__) || defined(__FreeBSD__)
|
#elif defined(__APPLE__) || defined(__FreeBSD__)
|
||||||
char buff[PATH_MAX];
|
char buff[PATH_MAX];
|
||||||
@ -92,6 +98,10 @@ static inline void output_core_info()
|
|||||||
{
|
{
|
||||||
my_safe_printf_stderr("Core pattern: %.*s\n", (int) len, buff);
|
my_safe_printf_stderr("Core pattern: %.*s\n", (int) len, buff);
|
||||||
}
|
}
|
||||||
|
if (sysctlbyname("kern.version", buff, &len, NULL, 0) == 0)
|
||||||
|
{
|
||||||
|
my_safe_printf_stderr("Kernel version: %.*s\n", (int) len, buff);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
char buff[80];
|
char buff[80];
|
||||||
my_getwd(buff, sizeof(buff), 0);
|
my_getwd(buff, sizeof(buff), 0);
|
||||||
|
@ -6991,19 +6991,18 @@ static int get_check_constraints_record(THD *thd, TABLE_LIST *tables,
|
|||||||
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
||||||
TABLE_LIST table_acl_check;
|
TABLE_LIST table_acl_check;
|
||||||
bzero((char*) &table_acl_check, sizeof(table_acl_check));
|
bzero((char*) &table_acl_check, sizeof(table_acl_check));
|
||||||
#endif
|
|
||||||
for (uint i= 0; i < tables->table->s->table_check_constraints; i++)
|
|
||||||
{
|
|
||||||
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
|
||||||
if (!(thd->col_access & TABLE_ACLS))
|
if (!(thd->col_access & TABLE_ACLS))
|
||||||
{
|
{
|
||||||
table_acl_check.db= *db_name;
|
table_acl_check.db= *db_name;
|
||||||
table_acl_check.table_name= *table_name;
|
table_acl_check.table_name= *table_name;
|
||||||
table_acl_check.grant.privilege= thd->col_access;
|
table_acl_check.grant.privilege= thd->col_access;
|
||||||
if (check_grant(thd, TABLE_ACLS, &table_acl_check, FALSE, 1, TRUE))
|
if (check_grant(thd, TABLE_ACLS, &table_acl_check, FALSE, 1, TRUE))
|
||||||
continue;
|
DBUG_RETURN(res);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
for (uint i= 0; i < tables->table->s->table_check_constraints; i++)
|
||||||
|
{
|
||||||
Virtual_column_info *check= tables->table->check_constraints[i];
|
Virtual_column_info *check= tables->table->check_constraints[i];
|
||||||
table->field[0]->store(STRING_WITH_LEN("def"), system_charset_info);
|
table->field[0]->store(STRING_WITH_LEN("def"), system_charset_info);
|
||||||
table->field[3]->store(check->name.str, check->name.length,
|
table->field[3]->store(check->name.str, check->name.length,
|
||||||
|
@ -1069,12 +1069,14 @@ static ssize_t sst_prepare_other (const char* method,
|
|||||||
WSREP_SST_OPT_ADDR " '%s' "
|
WSREP_SST_OPT_ADDR " '%s' "
|
||||||
WSREP_SST_OPT_DATA " '%s' "
|
WSREP_SST_OPT_DATA " '%s' "
|
||||||
"%s"
|
"%s"
|
||||||
WSREP_SST_OPT_PARENT " '%d'"
|
WSREP_SST_OPT_PARENT " %d "
|
||||||
|
WSREP_SST_OPT_PROGRESS " %d"
|
||||||
"%s"
|
"%s"
|
||||||
"%s",
|
"%s",
|
||||||
method, addr_in, mysql_real_data_home,
|
method, addr_in, mysql_real_data_home,
|
||||||
wsrep_defaults_file,
|
wsrep_defaults_file,
|
||||||
(int)getpid(),
|
(int)getpid(),
|
||||||
|
0,
|
||||||
binlog_opt_val, binlog_index_opt_val);
|
binlog_opt_val, binlog_index_opt_val);
|
||||||
|
|
||||||
my_free(binlog_opt_val);
|
my_free(binlog_opt_val);
|
||||||
@ -1853,16 +1855,18 @@ static int sst_donate_other (const char* method,
|
|||||||
"wsrep_sst_%s "
|
"wsrep_sst_%s "
|
||||||
WSREP_SST_OPT_ROLE " 'donor' "
|
WSREP_SST_OPT_ROLE " 'donor' "
|
||||||
WSREP_SST_OPT_ADDR " '%s' "
|
WSREP_SST_OPT_ADDR " '%s' "
|
||||||
WSREP_SST_OPT_LPORT " '%u' "
|
WSREP_SST_OPT_LPORT " %u "
|
||||||
WSREP_SST_OPT_SOCKET " '%s' "
|
WSREP_SST_OPT_SOCKET " '%s' "
|
||||||
|
WSREP_SST_OPT_PROGRESS " %d "
|
||||||
WSREP_SST_OPT_DATA " '%s' "
|
WSREP_SST_OPT_DATA " '%s' "
|
||||||
"%s"
|
"%s"
|
||||||
WSREP_SST_OPT_GTID " '%s:%lld' "
|
WSREP_SST_OPT_GTID " '%s:%lld' "
|
||||||
WSREP_SST_OPT_GTID_DOMAIN_ID " '%d'"
|
WSREP_SST_OPT_GTID_DOMAIN_ID " %d"
|
||||||
"%s"
|
"%s"
|
||||||
"%s"
|
"%s"
|
||||||
"%s",
|
"%s",
|
||||||
method, addr, mysqld_port, mysqld_unix_port,
|
method, addr, mysqld_port, mysqld_unix_port,
|
||||||
|
0,
|
||||||
mysql_real_data_home,
|
mysql_real_data_home,
|
||||||
wsrep_defaults_file,
|
wsrep_defaults_file,
|
||||||
uuid_oss.str().c_str(), gtid.seqno().get(), wsrep_gtid_server.domain_id,
|
uuid_oss.str().c_str(), gtid.seqno().get(), wsrep_gtid_server.domain_id,
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#define WSREP_SST_OPT_PARENT "--parent"
|
#define WSREP_SST_OPT_PARENT "--parent"
|
||||||
#define WSREP_SST_OPT_BINLOG "--binlog"
|
#define WSREP_SST_OPT_BINLOG "--binlog"
|
||||||
#define WSREP_SST_OPT_BINLOG_INDEX "--binlog-index"
|
#define WSREP_SST_OPT_BINLOG_INDEX "--binlog-index"
|
||||||
|
#define WSREP_SST_OPT_PROGRESS "--progress"
|
||||||
#define WSREP_SST_OPT_MYSQLD "--mysqld-args"
|
#define WSREP_SST_OPT_MYSQLD "--mysqld-args"
|
||||||
|
|
||||||
// mysqldump-specific options
|
// mysqldump-specific options
|
||||||
|
@ -294,3 +294,15 @@ a
|
|||||||
30
|
30
|
||||||
DROP TABLE t2;
|
DROP TABLE t2;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV-27766 CONNECT Engine Support for INSERT IGNORE with Mysql Table type
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES (10),(20),(30);
|
||||||
|
CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=MYSQL CONNECTION='mysql://root@localhost:PORT/test/t1' OPTION_LIST="Delayed=1,Ignored=1";
|
||||||
|
INSERT INTO t2 VALUES (10),(20),(30),(40);
|
||||||
|
DROP TABLE t2;
|
||||||
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# End of 10.3 tests
|
||||||
|
#
|
||||||
|
@ -470,3 +470,19 @@ SELECT * FROM t2;
|
|||||||
DROP TABLE t2;
|
DROP TABLE t2;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-27766 CONNECT Engine Support for INSERT IGNORE with Mysql Table type
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a INT PRIMARY KEY);
|
||||||
|
INSERT INTO t1 VALUES (10),(20),(30);
|
||||||
|
--replace_result $PORT PORT
|
||||||
|
--eval CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=MYSQL CONNECTION='mysql://root@localhost:$PORT/test/t1' OPTION_LIST="Delayed=1,Ignored=1"
|
||||||
|
INSERT INTO t2 VALUES (10),(20),(30),(40);
|
||||||
|
DROP TABLE t2;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.3 tests
|
||||||
|
--echo #
|
||||||
|
@ -94,6 +94,7 @@ MYSQLDEF::MYSQLDEF(void)
|
|||||||
Isview = false;
|
Isview = false;
|
||||||
Bind = false;
|
Bind = false;
|
||||||
Delayed = false;
|
Delayed = false;
|
||||||
|
Ignored = false;
|
||||||
//Xsrc = false;
|
//Xsrc = false;
|
||||||
Huge = false;
|
Huge = false;
|
||||||
} // end of MYSQLDEF constructor
|
} // end of MYSQLDEF constructor
|
||||||
@ -321,6 +322,9 @@ bool MYSQLDEF::DefineAM(PGLOBAL g, LPCSTR am, int)
|
|||||||
|
|
||||||
Desc = "MySQL Table";
|
Desc = "MySQL Table";
|
||||||
|
|
||||||
|
Delayed = !!GetIntCatInfo("Delayed", 0);
|
||||||
|
Ignored = !!GetIntCatInfo("Ignored", 0);
|
||||||
|
|
||||||
if (stricmp(am, "MYPRX")) {
|
if (stricmp(am, "MYPRX")) {
|
||||||
// Normal case of specific MYSQL table
|
// Normal case of specific MYSQL table
|
||||||
url = GetStringCatInfo(g, "Connect", NULL);
|
url = GetStringCatInfo(g, "Connect", NULL);
|
||||||
@ -339,7 +343,6 @@ bool MYSQLDEF::DefineAM(PGLOBAL g, LPCSTR am, int)
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
Bind = !!GetIntCatInfo("Bind", 0);
|
Bind = !!GetIntCatInfo("Bind", 0);
|
||||||
Delayed = !!GetIntCatInfo("Delayed", 0);
|
|
||||||
} else {
|
} else {
|
||||||
// MYSQL access from a PROXY table
|
// MYSQL access from a PROXY table
|
||||||
TABLE_SHARE* s;
|
TABLE_SHARE* s;
|
||||||
@ -425,6 +428,7 @@ TDBMYSQL::TDBMYSQL(PMYDEF tdp) : TDBEXT(tdp)
|
|||||||
Isview = tdp->Isview;
|
Isview = tdp->Isview;
|
||||||
Prep = tdp->Bind;
|
Prep = tdp->Bind;
|
||||||
Delayed = tdp->Delayed;
|
Delayed = tdp->Delayed;
|
||||||
|
Ignored = tdp->Ignored;
|
||||||
Myc.m_Use = tdp->Huge;
|
Myc.m_Use = tdp->Huge;
|
||||||
} else {
|
} else {
|
||||||
Host = NULL;
|
Host = NULL;
|
||||||
@ -440,6 +444,7 @@ TDBMYSQL::TDBMYSQL(PMYDEF tdp) : TDBEXT(tdp)
|
|||||||
Isview = false;
|
Isview = false;
|
||||||
Prep = false;
|
Prep = false;
|
||||||
Delayed = false;
|
Delayed = false;
|
||||||
|
Ignored = false;
|
||||||
} // endif tdp
|
} // endif tdp
|
||||||
|
|
||||||
Bind = NULL;
|
Bind = NULL;
|
||||||
@ -466,6 +471,7 @@ TDBMYSQL::TDBMYSQL(PTDBMY tdbp) : TDBEXT(tdbp)
|
|||||||
Isview = tdbp->Isview;
|
Isview = tdbp->Isview;
|
||||||
Prep = tdbp->Prep;
|
Prep = tdbp->Prep;
|
||||||
Delayed = tdbp->Delayed;
|
Delayed = tdbp->Delayed;
|
||||||
|
Ignored = tdbp->Ignored;
|
||||||
Bind = NULL;
|
Bind = NULL;
|
||||||
//Query = tdbp->Query;
|
//Query = tdbp->Query;
|
||||||
Fetched = tdbp->Fetched;
|
Fetched = tdbp->Fetched;
|
||||||
@ -623,11 +629,13 @@ bool TDBMYSQL::MakeInsert(PGLOBAL g)
|
|||||||
len += (strlen(TableName) + 40);
|
len += (strlen(TableName) + 40);
|
||||||
Query = new(g) STRING(g, len);
|
Query = new(g) STRING(g, len);
|
||||||
|
|
||||||
|
Query->Set("INSERT ");
|
||||||
if (Delayed)
|
if (Delayed)
|
||||||
Query->Set("INSERT DELAYED INTO ");
|
Query->Append("DELAYED ");
|
||||||
else
|
if (Ignored)
|
||||||
Query->Set("INSERT INTO ");
|
Query->Append("IGNORE ");
|
||||||
|
|
||||||
|
Query->Append("INTO ");
|
||||||
Query->Append(tk);
|
Query->Append(tk);
|
||||||
Query->Append(TableName);
|
Query->Append(TableName);
|
||||||
Query->Append("` (");
|
Query->Append("` (");
|
||||||
|
@ -60,6 +60,7 @@ class MYSQLDEF : public EXTDEF {/* Logical table description */
|
|||||||
bool Isview; /* true if this table is a MySQL view */
|
bool Isview; /* true if this table is a MySQL view */
|
||||||
bool Bind; /* Use prepared statement on insert */
|
bool Bind; /* Use prepared statement on insert */
|
||||||
bool Delayed; /* Delayed insert */
|
bool Delayed; /* Delayed insert */
|
||||||
|
bool Ignored; /* Use insert IGNORE */
|
||||||
//bool Xsrc; /* Execution type */
|
//bool Xsrc; /* Execution type */
|
||||||
bool Huge; /* True for big table */
|
bool Huge; /* True for big table */
|
||||||
}; // end of MYSQLDEF
|
}; // end of MYSQLDEF
|
||||||
@ -132,6 +133,7 @@ class TDBMYSQL : public TDBEXT {
|
|||||||
bool Isview; // True if this table is a MySQL view
|
bool Isview; // True if this table is a MySQL view
|
||||||
bool Prep; // Use prepared statement on insert
|
bool Prep; // Use prepared statement on insert
|
||||||
bool Delayed; // Use delayed insert
|
bool Delayed; // Use delayed insert
|
||||||
|
bool Ignored; // Use insert IGNORE
|
||||||
int m_Rc; // Return code from command
|
int m_Rc; // Return code from command
|
||||||
//int AftRows; // The number of affected rows
|
//int AftRows; // The number of affected rows
|
||||||
int N; // The current table index
|
int N; // The current table index
|
||||||
|
@ -68,6 +68,7 @@ Created 11/5/1995 Heikki Tuuri
|
|||||||
#include "buf0dump.h"
|
#include "buf0dump.h"
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include "log.h"
|
||||||
|
|
||||||
using st_::span;
|
using st_::span;
|
||||||
|
|
||||||
@ -979,171 +980,35 @@ buf_madvise_do_dump()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static inline byte hex_to_ascii(byte hex_digit)
|
||||||
|
{
|
||||||
|
return hex_digit <= 9 ? '0' + hex_digit : ('a' - 10) + hex_digit;
|
||||||
|
}
|
||||||
|
|
||||||
/** Dump a page to stderr.
|
/** Dump a page to stderr.
|
||||||
@param[in] read_buf database page
|
@param[in] read_buf database page
|
||||||
@param[in] zip_size compressed page size, or 0 */
|
@param[in] zip_size compressed page size, or 0 */
|
||||||
void buf_page_print(const byte* read_buf, ulint zip_size)
|
ATTRIBUTE_COLD
|
||||||
|
void buf_page_print(const byte *read_buf, ulint zip_size)
|
||||||
{
|
{
|
||||||
dict_index_t* index;
|
|
||||||
|
|
||||||
#ifndef UNIV_DEBUG
|
#ifndef UNIV_DEBUG
|
||||||
const ulint size = zip_size ? zip_size : srv_page_size;
|
const size_t size = zip_size ? zip_size : srv_page_size;
|
||||||
ib::info() << "Page dump in ascii and hex ("
|
const byte * const end= read_buf + size;
|
||||||
<< size << " bytes):";
|
sql_print_information("InnoDB: Page dump (%zu bytes):", size);
|
||||||
|
|
||||||
ut_print_buf(stderr, read_buf, size);
|
do
|
||||||
fputs("\nInnoDB: End of page dump\n", stderr);
|
{
|
||||||
|
byte row[64];
|
||||||
|
|
||||||
|
for (byte *r= row; r != &row[64]; r+= 2, read_buf++)
|
||||||
|
r[0]= hex_to_ascii(*read_buf >> 4), r[1]= hex_to_ascii(*read_buf & 15);
|
||||||
|
|
||||||
|
sql_print_information("InnoDB: %.*s", 64, row);
|
||||||
|
}
|
||||||
|
while (read_buf != end);
|
||||||
|
|
||||||
|
sql_print_information("InnoDB: End of page dump");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (zip_size) {
|
|
||||||
/* Print compressed page. */
|
|
||||||
ib::info() << "Compressed page type ("
|
|
||||||
<< fil_page_get_type(read_buf)
|
|
||||||
<< "); stored checksum in field1 "
|
|
||||||
<< mach_read_from_4(
|
|
||||||
read_buf + FIL_PAGE_SPACE_OR_CHKSUM)
|
|
||||||
<< "; calculated checksums for field1: "
|
|
||||||
<< buf_checksum_algorithm_name(
|
|
||||||
SRV_CHECKSUM_ALGORITHM_CRC32)
|
|
||||||
<< " "
|
|
||||||
<< page_zip_calc_checksum(
|
|
||||||
read_buf, zip_size,
|
|
||||||
SRV_CHECKSUM_ALGORITHM_CRC32)
|
|
||||||
<< ", "
|
|
||||||
<< buf_checksum_algorithm_name(
|
|
||||||
SRV_CHECKSUM_ALGORITHM_INNODB)
|
|
||||||
<< " "
|
|
||||||
<< page_zip_calc_checksum(
|
|
||||||
read_buf, zip_size,
|
|
||||||
SRV_CHECKSUM_ALGORITHM_INNODB)
|
|
||||||
<< ", "
|
|
||||||
<< buf_checksum_algorithm_name(
|
|
||||||
SRV_CHECKSUM_ALGORITHM_NONE)
|
|
||||||
<< " "
|
|
||||||
<< page_zip_calc_checksum(
|
|
||||||
read_buf, zip_size,
|
|
||||||
SRV_CHECKSUM_ALGORITHM_NONE)
|
|
||||||
<< "; page LSN "
|
|
||||||
<< mach_read_from_8(read_buf + FIL_PAGE_LSN)
|
|
||||||
<< "; page number (if stored to page"
|
|
||||||
<< " already) "
|
|
||||||
<< mach_read_from_4(read_buf + FIL_PAGE_OFFSET)
|
|
||||||
<< "; space id (if stored to page already) "
|
|
||||||
<< mach_read_from_4(
|
|
||||||
read_buf + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
const uint32_t crc32 = buf_calc_page_crc32(read_buf);
|
|
||||||
ulint page_type = fil_page_get_type(read_buf);
|
|
||||||
|
|
||||||
ib::info() << "Uncompressed page, stored checksum in field1 "
|
|
||||||
<< mach_read_from_4(
|
|
||||||
read_buf + FIL_PAGE_SPACE_OR_CHKSUM)
|
|
||||||
<< ", calculated checksums for field1: "
|
|
||||||
<< buf_checksum_algorithm_name(
|
|
||||||
SRV_CHECKSUM_ALGORITHM_CRC32) << " "
|
|
||||||
<< crc32
|
|
||||||
<< ", "
|
|
||||||
<< buf_checksum_algorithm_name(
|
|
||||||
SRV_CHECKSUM_ALGORITHM_INNODB) << " "
|
|
||||||
<< buf_calc_page_new_checksum(read_buf)
|
|
||||||
<< ", "
|
|
||||||
<< " page type " << page_type << " == "
|
|
||||||
<< fil_get_page_type_name(page_type) << "."
|
|
||||||
<< buf_checksum_algorithm_name(
|
|
||||||
SRV_CHECKSUM_ALGORITHM_NONE) << " "
|
|
||||||
<< BUF_NO_CHECKSUM_MAGIC
|
|
||||||
<< ", stored checksum in field2 "
|
|
||||||
<< mach_read_from_4(read_buf + srv_page_size
|
|
||||||
- FIL_PAGE_END_LSN_OLD_CHKSUM)
|
|
||||||
<< ", calculated checksums for field2: "
|
|
||||||
<< buf_checksum_algorithm_name(
|
|
||||||
SRV_CHECKSUM_ALGORITHM_CRC32) << " "
|
|
||||||
<< crc32
|
|
||||||
<< ", "
|
|
||||||
<< buf_checksum_algorithm_name(
|
|
||||||
SRV_CHECKSUM_ALGORITHM_INNODB) << " "
|
|
||||||
<< buf_calc_page_old_checksum(read_buf)
|
|
||||||
<< ", "
|
|
||||||
<< buf_checksum_algorithm_name(
|
|
||||||
SRV_CHECKSUM_ALGORITHM_NONE) << " "
|
|
||||||
<< BUF_NO_CHECKSUM_MAGIC
|
|
||||||
<< ", page LSN "
|
|
||||||
<< mach_read_from_4(read_buf + FIL_PAGE_LSN)
|
|
||||||
<< " "
|
|
||||||
<< mach_read_from_4(read_buf + FIL_PAGE_LSN + 4)
|
|
||||||
<< ", low 4 bytes of LSN at page end "
|
|
||||||
<< mach_read_from_4(read_buf + srv_page_size
|
|
||||||
- FIL_PAGE_END_LSN_OLD_CHKSUM + 4)
|
|
||||||
<< ", page number (if stored to page already) "
|
|
||||||
<< mach_read_from_4(read_buf + FIL_PAGE_OFFSET)
|
|
||||||
<< ", space id (if created with >= MySQL-4.1.1"
|
|
||||||
" and stored already) "
|
|
||||||
<< mach_read_from_4(
|
|
||||||
read_buf + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (fil_page_get_type(read_buf)) {
|
|
||||||
index_id_t index_id;
|
|
||||||
case FIL_PAGE_INDEX:
|
|
||||||
case FIL_PAGE_TYPE_INSTANT:
|
|
||||||
case FIL_PAGE_RTREE:
|
|
||||||
index_id = btr_page_get_index_id(read_buf);
|
|
||||||
ib::info() << "Page may be an index page where"
|
|
||||||
" index id is " << index_id;
|
|
||||||
|
|
||||||
index = dict_index_find_on_id_low(index_id);
|
|
||||||
if (index) {
|
|
||||||
ib::info()
|
|
||||||
<< "Index " << index_id
|
|
||||||
<< " is " << index->name
|
|
||||||
<< " in table " << index->table->name;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case FIL_PAGE_UNDO_LOG:
|
|
||||||
fputs("InnoDB: Page may be an undo log page\n", stderr);
|
|
||||||
break;
|
|
||||||
case FIL_PAGE_INODE:
|
|
||||||
fputs("InnoDB: Page may be an 'inode' page\n", stderr);
|
|
||||||
break;
|
|
||||||
case FIL_PAGE_IBUF_FREE_LIST:
|
|
||||||
fputs("InnoDB: Page may be an insert buffer free list page\n",
|
|
||||||
stderr);
|
|
||||||
break;
|
|
||||||
case FIL_PAGE_TYPE_ALLOCATED:
|
|
||||||
fputs("InnoDB: Page may be a freshly allocated page\n",
|
|
||||||
stderr);
|
|
||||||
break;
|
|
||||||
case FIL_PAGE_IBUF_BITMAP:
|
|
||||||
fputs("InnoDB: Page may be an insert buffer bitmap page\n",
|
|
||||||
stderr);
|
|
||||||
break;
|
|
||||||
case FIL_PAGE_TYPE_SYS:
|
|
||||||
fputs("InnoDB: Page may be a system page\n",
|
|
||||||
stderr);
|
|
||||||
break;
|
|
||||||
case FIL_PAGE_TYPE_TRX_SYS:
|
|
||||||
fputs("InnoDB: Page may be a transaction system page\n",
|
|
||||||
stderr);
|
|
||||||
break;
|
|
||||||
case FIL_PAGE_TYPE_FSP_HDR:
|
|
||||||
fputs("InnoDB: Page may be a file space header page\n",
|
|
||||||
stderr);
|
|
||||||
break;
|
|
||||||
case FIL_PAGE_TYPE_XDES:
|
|
||||||
fputs("InnoDB: Page may be an extent descriptor page\n",
|
|
||||||
stderr);
|
|
||||||
break;
|
|
||||||
case FIL_PAGE_TYPE_BLOB:
|
|
||||||
fputs("InnoDB: Page may be a BLOB page\n",
|
|
||||||
stderr);
|
|
||||||
break;
|
|
||||||
case FIL_PAGE_TYPE_ZBLOB:
|
|
||||||
case FIL_PAGE_TYPE_ZBLOB2:
|
|
||||||
fputs("InnoDB: Page may be a compressed BLOB page\n",
|
|
||||||
stderr);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Initialize a buffer page descriptor.
|
/** Initialize a buffer page descriptor.
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2012, Facebook Inc.
|
Copyright (c) 2012, Facebook Inc.
|
||||||
Copyright (c) 2013, 2021, MariaDB Corporation.
|
Copyright (c) 2013, 2022, MariaDB Corporation.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -1439,45 +1439,6 @@ dict_table_find_index_on_id(
|
|||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**********************************************************************//**
|
|
||||||
Looks for an index with the given id. NOTE that we do not reserve
|
|
||||||
the dictionary mutex: this function is for emergency purposes like
|
|
||||||
printing info of a corrupt database page!
|
|
||||||
@return index or NULL if not found in cache */
|
|
||||||
dict_index_t*
|
|
||||||
dict_index_find_on_id_low(
|
|
||||||
/*======================*/
|
|
||||||
index_id_t id) /*!< in: index id */
|
|
||||||
{
|
|
||||||
if (!dict_sys.is_initialised()) return NULL;
|
|
||||||
|
|
||||||
dict_table_t* table;
|
|
||||||
|
|
||||||
for (table = UT_LIST_GET_FIRST(dict_sys.table_LRU);
|
|
||||||
table != NULL;
|
|
||||||
table = UT_LIST_GET_NEXT(table_LRU, table)) {
|
|
||||||
|
|
||||||
dict_index_t* index = dict_table_find_index_on_id(table, id);
|
|
||||||
|
|
||||||
if (index != NULL) {
|
|
||||||
return(index);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (table = UT_LIST_GET_FIRST(dict_sys.table_non_LRU);
|
|
||||||
table != NULL;
|
|
||||||
table = UT_LIST_GET_NEXT(table_LRU, table)) {
|
|
||||||
|
|
||||||
dict_index_t* index = dict_table_find_index_on_id(table, id);
|
|
||||||
|
|
||||||
if (index != NULL) {
|
|
||||||
return(index);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return(NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Function object to remove a foreign key constraint from the
|
/** Function object to remove a foreign key constraint from the
|
||||||
referenced_set of the referenced table. The foreign key object is
|
referenced_set of the referenced table. The foreign key object is
|
||||||
also removed from the dictionary cache. The foreign key constraint
|
also removed from the dictionary cache. The foreign key constraint
|
||||||
@ -3781,7 +3742,17 @@ dict_index_get_if_in_cache_low(
|
|||||||
{
|
{
|
||||||
ut_ad(mutex_own(&dict_sys.mutex));
|
ut_ad(mutex_own(&dict_sys.mutex));
|
||||||
|
|
||||||
return(dict_index_find_on_id_low(index_id));
|
for (dict_table_t *table= UT_LIST_GET_FIRST(dict_sys.table_LRU);
|
||||||
|
table; table= UT_LIST_GET_NEXT(table_LRU, table))
|
||||||
|
if (dict_index_t *index= dict_table_find_index_on_id(table, index_id))
|
||||||
|
return index;
|
||||||
|
|
||||||
|
for (dict_table_t *table = UT_LIST_GET_FIRST(dict_sys.table_non_LRU);
|
||||||
|
table; table= UT_LIST_GET_NEXT(table_LRU, table))
|
||||||
|
if (dict_index_t *index= dict_table_find_index_on_id(table, index_id))
|
||||||
|
return index;
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef UNIV_DEBUG
|
#ifdef UNIV_DEBUG
|
||||||
|
@ -1362,9 +1362,8 @@ i_s_cmp_per_index_fill_low(
|
|||||||
|
|
||||||
for (iter = snap.begin(), i = 0; iter != snap.end(); iter++, i++) {
|
for (iter = snap.begin(), i = 0; iter != snap.end(); iter++, i++) {
|
||||||
|
|
||||||
dict_index_t* index = dict_index_find_on_id_low(iter->first);
|
if (dict_index_t* index
|
||||||
|
= dict_index_get_if_in_cache_low(iter->first)) {
|
||||||
if (index != NULL) {
|
|
||||||
char db_utf8[MAX_DB_UTF8_LEN];
|
char db_utf8[MAX_DB_UTF8_LEN];
|
||||||
char table_utf8[MAX_TABLE_UTF8_LEN];
|
char table_utf8[MAX_TABLE_UTF8_LEN];
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Copyright (c) 1996, 2018, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1996, 2018, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2012, Facebook Inc.
|
Copyright (c) 2012, Facebook Inc.
|
||||||
Copyright (c) 2013, 2021, MariaDB Corporation.
|
Copyright (c) 2013, 2022, MariaDB Corporation.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -947,16 +947,6 @@ dict_table_copy_types(
|
|||||||
const dict_table_t* table) /*!< in: table */
|
const dict_table_t* table) /*!< in: table */
|
||||||
MY_ATTRIBUTE((nonnull));
|
MY_ATTRIBUTE((nonnull));
|
||||||
/**********************************************************************//**
|
/**********************************************************************//**
|
||||||
Looks for an index with the given id. NOTE that we do not reserve
|
|
||||||
the dictionary mutex: this function is for emergency purposes like
|
|
||||||
printing info of a corrupt database page!
|
|
||||||
@return index or NULL if not found from cache */
|
|
||||||
dict_index_t*
|
|
||||||
dict_index_find_on_id_low(
|
|
||||||
/*======================*/
|
|
||||||
index_id_t id) /*!< in: index id */
|
|
||||||
MY_ATTRIBUTE((warn_unused_result));
|
|
||||||
/**********************************************************************//**
|
|
||||||
Make room in the table cache by evicting an unused table. The unused table
|
Make room in the table cache by evicting an unused table. The unused table
|
||||||
should not be part of FK relationship and currently not used in any user
|
should not be part of FK relationship and currently not used in any user
|
||||||
transaction. There is no guarantee that it will remove a table.
|
transaction. There is no guarantee that it will remove a table.
|
||||||
|
@ -1054,9 +1054,6 @@ THR_LOCK_DATA **ha_spider::store_lock(
|
|||||||
case TL_READ_HIGH_PRIORITY:
|
case TL_READ_HIGH_PRIORITY:
|
||||||
wide_handler->high_priority = TRUE;
|
wide_handler->high_priority = TRUE;
|
||||||
break;
|
break;
|
||||||
case TL_WRITE_DELAYED:
|
|
||||||
wide_handler->insert_delayed = TRUE;
|
|
||||||
break;
|
|
||||||
case TL_WRITE_LOW_PRIORITY:
|
case TL_WRITE_LOW_PRIORITY:
|
||||||
wide_handler->low_priority = TRUE;
|
wide_handler->low_priority = TRUE;
|
||||||
break;
|
break;
|
||||||
@ -1164,7 +1161,6 @@ THR_LOCK_DATA **ha_spider::store_lock(
|
|||||||
lock_type = TL_READ;
|
lock_type = TL_READ;
|
||||||
if (
|
if (
|
||||||
lock_type >= TL_WRITE_CONCURRENT_INSERT && lock_type <= TL_WRITE &&
|
lock_type >= TL_WRITE_CONCURRENT_INSERT && lock_type <= TL_WRITE &&
|
||||||
lock_type != TL_WRITE_DELAYED &&
|
|
||||||
!thd->in_lock_tables && !thd_tablespace_op(thd)
|
!thd->in_lock_tables && !thd_tablespace_op(thd)
|
||||||
)
|
)
|
||||||
lock_type = TL_WRITE_ALLOW_WRITE;
|
lock_type = TL_WRITE_ALLOW_WRITE;
|
||||||
@ -1394,7 +1390,6 @@ int ha_spider::reset()
|
|||||||
wide_handler->insert_with_update = FALSE;
|
wide_handler->insert_with_update = FALSE;
|
||||||
wide_handler->low_priority = FALSE;
|
wide_handler->low_priority = FALSE;
|
||||||
wide_handler->high_priority = FALSE;
|
wide_handler->high_priority = FALSE;
|
||||||
wide_handler->insert_delayed = FALSE;
|
|
||||||
wide_handler->lock_table_type = 0;
|
wide_handler->lock_table_type = 0;
|
||||||
wide_handler->semi_trx_isolation_chk = FALSE;
|
wide_handler->semi_trx_isolation_chk = FALSE;
|
||||||
wide_handler->semi_trx_chk = FALSE;
|
wide_handler->semi_trx_chk = FALSE;
|
||||||
@ -9435,7 +9430,6 @@ ulonglong ha_spider::table_flags() const
|
|||||||
HA_CAN_FULLTEXT |
|
HA_CAN_FULLTEXT |
|
||||||
HA_CAN_SQL_HANDLER |
|
HA_CAN_SQL_HANDLER |
|
||||||
HA_FILE_BASED |
|
HA_FILE_BASED |
|
||||||
HA_CAN_INSERT_DELAYED |
|
|
||||||
HA_CAN_BIT_FIELD |
|
HA_CAN_BIT_FIELD |
|
||||||
HA_NO_COPY_ON_ALTER |
|
HA_NO_COPY_ON_ALTER |
|
||||||
HA_BINLOG_ROW_CAPABLE |
|
HA_BINLOG_ROW_CAPABLE |
|
||||||
@ -13965,7 +13959,6 @@ int ha_spider::sync_from_clone_source(
|
|||||||
update_request = spider->update_request;
|
update_request = spider->update_request;
|
||||||
lock_mode = spider->lock_mode;
|
lock_mode = spider->lock_mode;
|
||||||
high_priority = spider->high_priority;
|
high_priority = spider->high_priority;
|
||||||
insert_delayed = spider->insert_delayed;
|
|
||||||
low_priority = spider->low_priority;
|
low_priority = spider->low_priority;
|
||||||
memcpy(conns, spider->conns,
|
memcpy(conns, spider->conns,
|
||||||
sizeof(SPIDER_CONN *) * share->link_count);
|
sizeof(SPIDER_CONN *) * share->link_count);
|
||||||
@ -14007,7 +14000,6 @@ int ha_spider::sync_from_clone_source(
|
|||||||
update_request = spider->update_request;
|
update_request = spider->update_request;
|
||||||
lock_mode = spider->lock_mode;
|
lock_mode = spider->lock_mode;
|
||||||
high_priority = spider->high_priority;
|
high_priority = spider->high_priority;
|
||||||
insert_delayed = spider->insert_delayed;
|
|
||||||
low_priority = spider->low_priority;
|
low_priority = spider->low_priority;
|
||||||
|
|
||||||
if ((error_num = spider_check_trx_and_get_conn(
|
if ((error_num = spider_check_trx_and_get_conn(
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
#
|
|
||||||
# MDEV-26583 SIGSEGV's in spider_get_select_limit_from_select_lex when DELAYED INSERT is used
|
|
||||||
#
|
|
||||||
for master_1
|
|
||||||
for child2
|
|
||||||
child2_1
|
|
||||||
child2_2
|
|
||||||
child2_3
|
|
||||||
for child3
|
|
||||||
connection child2_1;
|
|
||||||
CREATE DATABASE auto_test_remote;
|
|
||||||
USE auto_test_remote;
|
|
||||||
CREATE TABLE tbl_a (
|
|
||||||
a INT AUTO_INCREMENT KEY,
|
|
||||||
b INT,INDEX i (b)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
||||||
connection master_1;
|
|
||||||
CREATE DATABASE auto_test_local;
|
|
||||||
USE auto_test_local;
|
|
||||||
CREATE TABLE tbl_a (
|
|
||||||
a INT AUTO_INCREMENT KEY,
|
|
||||||
b INT,INDEX i (b)
|
|
||||||
) ENGINE=Spider DEFAULT CHARSET=utf8 COMMENT='srv "s_2_1", table "tbl_a"';
|
|
||||||
INSERT DELAYED INTO tbl_a VALUES (0,0),(0,0),(0,0);
|
|
||||||
connection master_1;
|
|
||||||
DROP DATABASE auto_test_local;
|
|
||||||
connection child2_1;
|
|
||||||
DROP DATABASE auto_test_remote;
|
|
||||||
for master_1
|
|
||||||
for child2
|
|
||||||
child2_1
|
|
||||||
child2_2
|
|
||||||
child2_3
|
|
||||||
for child3
|
|
32
storage/spider/mysql-test/spider/bugfix/r/mdev_28854.result
Normal file
32
storage/spider/mysql-test/spider/bugfix/r/mdev_28854.result
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
#
|
||||||
|
# MDEV-28854 Spider: Disallow INSERT DELAYED on Spider table
|
||||||
|
#
|
||||||
|
for master_1
|
||||||
|
for child2
|
||||||
|
child2_1
|
||||||
|
child2_2
|
||||||
|
child2_3
|
||||||
|
for child3
|
||||||
|
connection child2_1;
|
||||||
|
CREATE DATABASE auto_test_remote;
|
||||||
|
USE auto_test_remote;
|
||||||
|
CREATE TABLE tbl_a (id INT);
|
||||||
|
connection master_1;
|
||||||
|
CREATE DATABASE auto_test_local;
|
||||||
|
USE auto_test_local;
|
||||||
|
CREATE TABLE tbl_a (
|
||||||
|
id INT
|
||||||
|
) ENGINE=Spider DEFAULT CHARSET=utf8 COMMENT='table "tbl_a", srv "s_2_1"';
|
||||||
|
connection master_1;
|
||||||
|
INSERT DELAYED INTO tbl_a VALUES (1);
|
||||||
|
ERROR HY000: DELAYED option not supported for table 'tbl_a'
|
||||||
|
connection master_1;
|
||||||
|
DROP DATABASE IF EXISTS auto_test_local;
|
||||||
|
connection child2_1;
|
||||||
|
DROP DATABASE IF EXISTS auto_test_remote;
|
||||||
|
for master_1
|
||||||
|
for child2
|
||||||
|
child2_1
|
||||||
|
child2_2
|
||||||
|
child2_3
|
||||||
|
for child3
|
@ -1,44 +0,0 @@
|
|||||||
--echo #
|
|
||||||
--echo # MDEV-26583 SIGSEGV's in spider_get_select_limit_from_select_lex when DELAYED INSERT is used
|
|
||||||
--echo #
|
|
||||||
|
|
||||||
--disable_query_log
|
|
||||||
--disable_result_log
|
|
||||||
--source ../../t/test_init.inc
|
|
||||||
--enable_result_log
|
|
||||||
--enable_query_log
|
|
||||||
|
|
||||||
--connection child2_1
|
|
||||||
CREATE DATABASE auto_test_remote;
|
|
||||||
USE auto_test_remote;
|
|
||||||
|
|
||||||
eval CREATE TABLE tbl_a (
|
|
||||||
a INT AUTO_INCREMENT KEY,
|
|
||||||
b INT,INDEX i (b)
|
|
||||||
) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
|
|
||||||
|
|
||||||
--connection master_1
|
|
||||||
CREATE DATABASE auto_test_local;
|
|
||||||
USE auto_test_local;
|
|
||||||
|
|
||||||
eval CREATE TABLE tbl_a (
|
|
||||||
a INT AUTO_INCREMENT KEY,
|
|
||||||
b INT,INDEX i (b)
|
|
||||||
) $MASTER_1_ENGINE $MASTER_1_CHARSET COMMENT='srv "s_2_1", table "tbl_a"';
|
|
||||||
|
|
||||||
INSERT DELAYED INTO tbl_a VALUES (0,0),(0,0),(0,0);
|
|
||||||
|
|
||||||
let $wait_condition=select count(*)=3 from tbl_a
|
|
||||||
source include/wait_condition.inc;
|
|
||||||
|
|
||||||
--connection master_1
|
|
||||||
DROP DATABASE auto_test_local;
|
|
||||||
|
|
||||||
--connection child2_1
|
|
||||||
DROP DATABASE auto_test_remote;
|
|
||||||
|
|
||||||
--disable_query_log
|
|
||||||
--disable_result_log
|
|
||||||
--source ../../t/test_deinit.inc
|
|
||||||
--enable_result_log
|
|
||||||
--enable_query_log
|
|
36
storage/spider/mysql-test/spider/bugfix/t/mdev_28854.test
Normal file
36
storage/spider/mysql-test/spider/bugfix/t/mdev_28854.test
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
--echo #
|
||||||
|
--echo # MDEV-28854 Spider: Disallow INSERT DELAYED on Spider table
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
--disable_result_log
|
||||||
|
--source ../../t/test_init.inc
|
||||||
|
--enable_result_log
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
--connection child2_1
|
||||||
|
CREATE DATABASE auto_test_remote;
|
||||||
|
USE auto_test_remote;
|
||||||
|
CREATE TABLE tbl_a (id INT);
|
||||||
|
|
||||||
|
--connection master_1
|
||||||
|
CREATE DATABASE auto_test_local;
|
||||||
|
USE auto_test_local;
|
||||||
|
eval CREATE TABLE tbl_a (
|
||||||
|
id INT
|
||||||
|
) $MASTER_1_ENGINE $MASTER_1_CHARSET COMMENT='table "tbl_a", srv "s_2_1"';
|
||||||
|
|
||||||
|
--connection master_1
|
||||||
|
--error ER_DELAYED_NOT_SUPPORTED
|
||||||
|
INSERT DELAYED INTO tbl_a VALUES (1);
|
||||||
|
|
||||||
|
--connection master_1
|
||||||
|
DROP DATABASE IF EXISTS auto_test_local;
|
||||||
|
--connection child2_1
|
||||||
|
DROP DATABASE IF EXISTS auto_test_remote;
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
--disable_result_log
|
||||||
|
--source ../t/test_deinit.inc
|
||||||
|
--enable_query_log
|
||||||
|
--enable_result_log
|
@ -34,7 +34,6 @@
|
|||||||
#define SPIDER_DB_INSERT_IGNORE (1 << 1)
|
#define SPIDER_DB_INSERT_IGNORE (1 << 1)
|
||||||
#define SPIDER_DB_INSERT_LOW_PRIORITY (1 << 2)
|
#define SPIDER_DB_INSERT_LOW_PRIORITY (1 << 2)
|
||||||
#define SPIDER_DB_INSERT_HIGH_PRIORITY (1 << 3)
|
#define SPIDER_DB_INSERT_HIGH_PRIORITY (1 << 3)
|
||||||
#define SPIDER_DB_INSERT_DELAYED (1 << 4)
|
|
||||||
|
|
||||||
#define SPIDER_SQL_OPEN_PAREN_STR "("
|
#define SPIDER_SQL_OPEN_PAREN_STR "("
|
||||||
#define SPIDER_SQL_OPEN_PAREN_LEN (sizeof(SPIDER_SQL_OPEN_PAREN_STR) - 1)
|
#define SPIDER_SQL_OPEN_PAREN_LEN (sizeof(SPIDER_SQL_OPEN_PAREN_STR) - 1)
|
||||||
@ -80,8 +79,6 @@
|
|||||||
#define SPIDER_SQL_HIGH_PRIORITY_LEN (sizeof(SPIDER_SQL_HIGH_PRIORITY_STR) - 1)
|
#define SPIDER_SQL_HIGH_PRIORITY_LEN (sizeof(SPIDER_SQL_HIGH_PRIORITY_STR) - 1)
|
||||||
#define SPIDER_SQL_LOW_PRIORITY_STR "low_priority "
|
#define SPIDER_SQL_LOW_PRIORITY_STR "low_priority "
|
||||||
#define SPIDER_SQL_LOW_PRIORITY_LEN (sizeof(SPIDER_SQL_LOW_PRIORITY_STR) - 1)
|
#define SPIDER_SQL_LOW_PRIORITY_LEN (sizeof(SPIDER_SQL_LOW_PRIORITY_STR) - 1)
|
||||||
#define SPIDER_SQL_SQL_DELAYED_STR "delayed "
|
|
||||||
#define SPIDER_SQL_SQL_DELAYED_LEN (sizeof(SPIDER_SQL_SQL_DELAYED_STR) - 1)
|
|
||||||
#define SPIDER_SQL_SQL_IGNORE_STR "ignore "
|
#define SPIDER_SQL_SQL_IGNORE_STR "ignore "
|
||||||
#define SPIDER_SQL_SQL_IGNORE_LEN (sizeof(SPIDER_SQL_SQL_IGNORE_STR) - 1)
|
#define SPIDER_SQL_SQL_IGNORE_LEN (sizeof(SPIDER_SQL_SQL_IGNORE_STR) - 1)
|
||||||
#define SPIDER_SQL_FROM_STR " from "
|
#define SPIDER_SQL_FROM_STR " from "
|
||||||
|
@ -9742,7 +9742,6 @@ int spider_mbase_handler::append_insert(
|
|||||||
spider_string *str,
|
spider_string *str,
|
||||||
int link_idx
|
int link_idx
|
||||||
) {
|
) {
|
||||||
SPIDER_SHARE *share = spider->share;
|
|
||||||
DBUG_ENTER("spider_mbase_handler::append_insert");
|
DBUG_ENTER("spider_mbase_handler::append_insert");
|
||||||
direct_insert_kind = SPIDER_SQL_DIRECT_INSERT_KIND_INSERT;
|
direct_insert_kind = SPIDER_SQL_DIRECT_INSERT_KIND_INSERT;
|
||||||
if (
|
if (
|
||||||
@ -9769,15 +9768,6 @@ int spider_mbase_handler::append_insert(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
str->q_append(SPIDER_SQL_LOW_PRIORITY_STR, SPIDER_SQL_LOW_PRIORITY_LEN);
|
str->q_append(SPIDER_SQL_LOW_PRIORITY_STR, SPIDER_SQL_LOW_PRIORITY_LEN);
|
||||||
}
|
}
|
||||||
else if (spider->wide_handler->insert_delayed)
|
|
||||||
{
|
|
||||||
if (share->internal_delayed)
|
|
||||||
{
|
|
||||||
if (str->reserve(SPIDER_SQL_SQL_DELAYED_LEN))
|
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
|
||||||
str->q_append(SPIDER_SQL_SQL_DELAYED_STR, SPIDER_SQL_SQL_DELAYED_LEN);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (
|
else if (
|
||||||
spider->wide_handler->lock_type >= TL_WRITE &&
|
spider->wide_handler->lock_type >= TL_WRITE &&
|
||||||
!spider->wide_handler->write_can_replace &&
|
!spider->wide_handler->write_can_replace &&
|
||||||
@ -16758,12 +16748,6 @@ int spider_mbase_copy_table::append_insert_str(
|
|||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
||||||
sql.q_append(SPIDER_SQL_LOW_PRIORITY_STR, SPIDER_SQL_LOW_PRIORITY_LEN);
|
sql.q_append(SPIDER_SQL_LOW_PRIORITY_STR, SPIDER_SQL_LOW_PRIORITY_LEN);
|
||||||
}
|
}
|
||||||
else if (insert_flg & SPIDER_DB_INSERT_DELAYED)
|
|
||||||
{
|
|
||||||
if (sql.reserve(SPIDER_SQL_SQL_DELAYED_LEN))
|
|
||||||
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
|
|
||||||
sql.q_append(SPIDER_SQL_SQL_DELAYED_STR, SPIDER_SQL_SQL_DELAYED_LEN);
|
|
||||||
}
|
|
||||||
else if (insert_flg & SPIDER_DB_INSERT_HIGH_PRIORITY)
|
else if (insert_flg & SPIDER_DB_INSERT_HIGH_PRIORITY)
|
||||||
{
|
{
|
||||||
if (sql.reserve(SPIDER_SQL_HIGH_PRIORITY_LEN))
|
if (sql.reserve(SPIDER_SQL_HIGH_PRIORITY_LEN))
|
||||||
|
@ -784,7 +784,6 @@ typedef struct st_spider_wide_handler
|
|||||||
bool semi_trx_chk;
|
bool semi_trx_chk;
|
||||||
bool low_priority;
|
bool low_priority;
|
||||||
bool high_priority;
|
bool high_priority;
|
||||||
bool insert_delayed;
|
|
||||||
bool consistent_snapshot;
|
bool consistent_snapshot;
|
||||||
bool quick_mode;
|
bool quick_mode;
|
||||||
bool keyread;
|
bool keyread;
|
||||||
@ -1069,7 +1068,6 @@ typedef struct st_spider_share
|
|||||||
int selupd_lock_mode;
|
int selupd_lock_mode;
|
||||||
int query_cache;
|
int query_cache;
|
||||||
int query_cache_sync;
|
int query_cache_sync;
|
||||||
int internal_delayed;
|
|
||||||
int bulk_size;
|
int bulk_size;
|
||||||
int bulk_update_mode;
|
int bulk_update_mode;
|
||||||
int bulk_update_size;
|
int bulk_update_size;
|
||||||
|
@ -2104,7 +2104,6 @@ int spider_parse_connect_info(
|
|||||||
share->selupd_lock_mode = -1;
|
share->selupd_lock_mode = -1;
|
||||||
share->query_cache = -1;
|
share->query_cache = -1;
|
||||||
share->query_cache_sync = -1;
|
share->query_cache_sync = -1;
|
||||||
share->internal_delayed = -1;
|
|
||||||
share->bulk_size = -1;
|
share->bulk_size = -1;
|
||||||
share->bulk_update_mode = -1;
|
share->bulk_update_mode = -1;
|
||||||
share->bulk_update_size = -1;
|
share->bulk_update_size = -1;
|
||||||
@ -2330,7 +2329,6 @@ int spider_parse_connect_info(
|
|||||||
SPIDER_PARAM_STR_LIST("hws", hs_write_socks);
|
SPIDER_PARAM_STR_LIST("hws", hs_write_socks);
|
||||||
#endif
|
#endif
|
||||||
SPIDER_PARAM_INT("isa", init_sql_alloc_size, 0);
|
SPIDER_PARAM_INT("isa", init_sql_alloc_size, 0);
|
||||||
SPIDER_PARAM_INT_WITH_MAX("idl", internal_delayed, 0, 1);
|
|
||||||
SPIDER_PARAM_LONGLONG("ilm", internal_limit, 0);
|
SPIDER_PARAM_LONGLONG("ilm", internal_limit, 0);
|
||||||
SPIDER_PARAM_LONGLONG("ios", internal_offset, 0);
|
SPIDER_PARAM_LONGLONG("ios", internal_offset, 0);
|
||||||
SPIDER_PARAM_INT_WITH_MAX("iom", internal_optimize, 0, 1);
|
SPIDER_PARAM_INT_WITH_MAX("iom", internal_optimize, 0, 1);
|
||||||
@ -2559,8 +2557,6 @@ int spider_parse_connect_info(
|
|||||||
"multi_split_read", multi_split_read, 0, 2147483647);
|
"multi_split_read", multi_split_read, 0, 2147483647);
|
||||||
SPIDER_PARAM_INT_WITH_MAX(
|
SPIDER_PARAM_INT_WITH_MAX(
|
||||||
"selupd_lock_mode", selupd_lock_mode, 0, 2);
|
"selupd_lock_mode", selupd_lock_mode, 0, 2);
|
||||||
SPIDER_PARAM_INT_WITH_MAX(
|
|
||||||
"internal_delayed", internal_delayed, 0, 1);
|
|
||||||
SPIDER_PARAM_INT_WITH_MAX(
|
SPIDER_PARAM_INT_WITH_MAX(
|
||||||
"table_count_mode", table_count_mode, 0, 3);
|
"table_count_mode", table_count_mode, 0, 3);
|
||||||
SPIDER_PARAM_INT_WITH_MAX(
|
SPIDER_PARAM_INT_WITH_MAX(
|
||||||
@ -3988,8 +3984,6 @@ int spider_set_connect_info_default(
|
|||||||
share->query_cache = 0;
|
share->query_cache = 0;
|
||||||
if (share->query_cache_sync == -1)
|
if (share->query_cache_sync == -1)
|
||||||
share->query_cache_sync = 0;
|
share->query_cache_sync = 0;
|
||||||
if (share->internal_delayed == -1)
|
|
||||||
share->internal_delayed = 0;
|
|
||||||
if (share->bulk_size == -1)
|
if (share->bulk_size == -1)
|
||||||
share->bulk_size = 16000;
|
share->bulk_size = 16000;
|
||||||
if (share->bulk_update_mode == -1)
|
if (share->bulk_update_mode == -1)
|
||||||
|
@ -1123,5 +1123,12 @@ CREATE OR REPLACE TABLE t1 (pk INT AUTO_INCREMENT, a INT, KEY(pk)) ENGINE=myisam
|
|||||||
INSERT INTO t1 VALUES (1,1),(2,2);
|
INSERT INTO t1 VALUES (1,1),(2,2);
|
||||||
UPDATE t1 SET pk = 0;
|
UPDATE t1 SET pk = 0;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV-21027 Assertion `part_share->auto_inc_initialized || !can_use_for_auto_inc_init()'
|
||||||
|
# ha_partition::set_auto_increment_if_higher
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY) ENGINE='TokuDB' PARTITION BY HASH (a) PARTITIONS 3;
|
||||||
|
REPLACE INTO t1 PARTITION (p0) VALUES (3);
|
||||||
|
DROP TABLE t1;
|
||||||
##############################################################################
|
##############################################################################
|
||||||
SET GLOBAL tokudb_prelock_empty = @tokudb_prelock_empty_saved;
|
SET GLOBAL tokudb_prelock_empty = @tokudb_prelock_empty_saved;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user