Merge 10.4 into 10.5
This commit is contained in:
commit
4ae105a37d
@ -92,6 +92,8 @@ static my_bool non_blocking_api_enabled= 0;
|
||||
|
||||
#define CLOSED_CONNECTION "-closed_connection-"
|
||||
|
||||
#define dynstr_append DO_NO_USE
|
||||
|
||||
#ifndef HAVE_SETENV
|
||||
static int setenv(const char *name, const char *value, int overwrite);
|
||||
#endif
|
||||
@ -1865,7 +1867,7 @@ static int run_tool(const char *tool_path, DYNAMIC_STRING *ds_res, ...)
|
||||
if (strncmp(arg, "--", 2) == 0)
|
||||
dynstr_append_os_quoted(&ds_cmdline, arg, NullS);
|
||||
else
|
||||
dynstr_append(&ds_cmdline, arg);
|
||||
dynstr_append_mem(&ds_cmdline, arg, strlen(arg));
|
||||
dynstr_append_mem(&ds_cmdline, STRING_WITH_LEN(" "));
|
||||
}
|
||||
|
||||
@ -2022,11 +2024,11 @@ void show_diff(DYNAMIC_STRING* ds,
|
||||
dynstr_append_mem(&ds_tmp, message, sizeof(message));
|
||||
|
||||
dynstr_append_mem(&ds_tmp, STRING_WITH_LEN(" --- "));
|
||||
dynstr_append(&ds_tmp, filename1);
|
||||
dynstr_append_mem(&ds_tmp, filename1, strlen(filename1));
|
||||
dynstr_append_mem(&ds_tmp, STRING_WITH_LEN(" >>>\n"));
|
||||
cat_file(&ds_tmp, filename1);
|
||||
dynstr_append_mem(&ds_tmp, STRING_WITH_LEN("<<<\n --- "));
|
||||
dynstr_append(&ds_tmp, filename1);
|
||||
dynstr_append_mem(&ds_tmp, filename1, strlen(filename1));
|
||||
dynstr_append_mem(&ds_tmp, STRING_WITH_LEN(" >>>\n"));
|
||||
cat_file(&ds_tmp, filename2);
|
||||
dynstr_append_mem(&ds_tmp, STRING_WITH_LEN("<<<<\n"));
|
||||
@ -3277,13 +3279,15 @@ static int replace(DYNAMIC_STRING *ds_str,
|
||||
{
|
||||
DYNAMIC_STRING ds_tmp;
|
||||
const char *start= strstr(ds_str->str, search_str);
|
||||
size_t prefixlen= start - ds_str->str;
|
||||
if (!start)
|
||||
return 1;
|
||||
init_dynamic_string(&ds_tmp, "",
|
||||
ds_str->length + replace_len, 256);
|
||||
dynstr_append_mem(&ds_tmp, ds_str->str, start - ds_str->str);
|
||||
dynstr_append_mem(&ds_tmp, ds_str->str, prefixlen);
|
||||
dynstr_append_mem(&ds_tmp, replace_str, replace_len);
|
||||
dynstr_append(&ds_tmp, start + search_len);
|
||||
dynstr_append_mem(&ds_tmp, start + search_len,
|
||||
ds_str->length - prefixlen - search_len);
|
||||
dynstr_set(ds_str, ds_tmp.str);
|
||||
dynstr_free(&ds_tmp);
|
||||
return 0;
|
||||
@ -3738,7 +3742,7 @@ void do_remove_files_wildcard(struct st_command *command)
|
||||
wild_compare(file->name, ds_wild.str, 0))
|
||||
continue;
|
||||
ds_file_to_remove.length= directory_length;
|
||||
dynstr_append(&ds_file_to_remove, file->name);
|
||||
dynstr_append_mem(&ds_file_to_remove, file->name, strlen(file->name));
|
||||
DBUG_PRINT("info", ("removing file: %s", ds_file_to_remove.str));
|
||||
if ((error= (my_delete(ds_file_to_remove.str, MYF(MY_WME)) != 0)))
|
||||
sys_errno= my_errno;
|
||||
@ -7604,7 +7608,7 @@ void append_field(DYNAMIC_STRING *ds, uint col_idx, MYSQL_FIELD* field,
|
||||
}
|
||||
else
|
||||
{
|
||||
dynstr_append(ds, field->name);
|
||||
dynstr_append_mem(ds, field->name, strlen(field->name));
|
||||
dynstr_append_mem(ds, "\t", 1);
|
||||
replace_dynstr_append_mem(ds, val, len);
|
||||
dynstr_append_mem(ds, "\n", 1);
|
||||
@ -7776,12 +7780,12 @@ void append_info(DYNAMIC_STRING *ds, ulonglong affected_rows,
|
||||
const char *info)
|
||||
{
|
||||
char buf[40], buff2[21];
|
||||
sprintf(buf,"affected rows: %s\n", llstr(affected_rows, buff2));
|
||||
dynstr_append(ds, buf);
|
||||
size_t len= sprintf(buf,"affected rows: %s\n", llstr(affected_rows, buff2));
|
||||
dynstr_append_mem(ds, buf, len);
|
||||
if (info)
|
||||
{
|
||||
dynstr_append_mem(ds, STRING_WITH_LEN("info: "));
|
||||
dynstr_append(ds, info);
|
||||
dynstr_append_mem(ds, info, strlen(info));
|
||||
dynstr_append_mem(ds, STRING_WITH_LEN("\n"));
|
||||
}
|
||||
}
|
||||
@ -7831,7 +7835,8 @@ static void append_session_track_info(DYNAMIC_STRING *ds, MYSQL *mysql)
|
||||
dynstr_append_mem(ds, STRING_WITH_LEN("-- "));
|
||||
if (type <= SESSION_TRACK_END)
|
||||
{
|
||||
dynstr_append(ds, trking_info_desc[type]);
|
||||
dynstr_append_mem(ds, trking_info_desc[type],
|
||||
strlen(trking_info_desc[type]));
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -9661,7 +9666,7 @@ void mark_progress(struct st_command* command __attribute__((unused)),
|
||||
dynstr_append_mem(&ds_progress, "\t", 1);
|
||||
|
||||
/* Filename */
|
||||
dynstr_append(&ds_progress, cur_file->file_name);
|
||||
dynstr_append_mem(&ds_progress, cur_file->file_name, strlen(cur_file->file_name));
|
||||
dynstr_append_mem(&ds_progress, ":", 1);
|
||||
|
||||
/* Line in file */
|
||||
@ -11944,7 +11949,7 @@ void dynstr_append_sorted(DYNAMIC_STRING* ds, DYNAMIC_STRING *ds_input,
|
||||
for (i= 0; i < lines.elements ; i++)
|
||||
{
|
||||
const char **line= dynamic_element(&lines, i, const char**);
|
||||
dynstr_append(ds, *line);
|
||||
dynstr_append_mem(ds, *line, strlen(*line));
|
||||
dynstr_append_mem(ds, STRING_WITH_LEN("\n"));
|
||||
}
|
||||
|
||||
|
@ -1620,8 +1620,11 @@ struct my_option xb_server_options[] =
|
||||
"Path to InnoDB log files.", &srv_log_group_home_dir,
|
||||
&srv_log_group_home_dir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"innodb_max_dirty_pages_pct", OPT_INNODB_MAX_DIRTY_PAGES_PCT,
|
||||
"Percentage of dirty pages allowed in bufferpool.", (G_PTR*) &srv_max_buf_pool_modified_pct,
|
||||
(G_PTR*) &srv_max_buf_pool_modified_pct, 0, GET_ULONG, REQUIRED_ARG, 90, 0, 100, 0, 0, 0},
|
||||
"Percentage of dirty pages allowed in bufferpool.",
|
||||
(G_PTR*) &srv_max_buf_pool_modified_pct,
|
||||
(G_PTR*) &srv_max_buf_pool_modified_pct, 0, GET_DOUBLE, REQUIRED_ARG,
|
||||
(longlong)getopt_double2ulonglong(90), (longlong)getopt_double2ulonglong(0),
|
||||
getopt_double2ulonglong(100), 0, 0, 0},
|
||||
{"innodb_use_native_aio", OPT_INNODB_USE_NATIVE_AIO,
|
||||
"Use native AIO if supported on this platform.",
|
||||
(G_PTR*) &srv_use_native_aio,
|
||||
|
@ -205,6 +205,7 @@ int main(int argc, char **argv)
|
||||
if ((error= load_defaults(config_file, (const char **) load_default_groups,
|
||||
&count, &arguments)))
|
||||
{
|
||||
my_free(load_default_groups);
|
||||
my_end(0);
|
||||
if (error == 4)
|
||||
return 0;
|
||||
|
@ -833,4 +833,19 @@ SELECT * FROM t1 JOIN t2 WHERE (t1.a, t2.b) IN (SELECT * FROM v);
|
||||
a b
|
||||
DROP VIEW v;
|
||||
DROP TABLE t1, t2, t3;
|
||||
#
|
||||
# MDEV-31279 Crash when lateral derived is guaranteed to return no rows
|
||||
#
|
||||
CREATE TABLE t1 (a CHAR(1)) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES ('1'),('2');
|
||||
CREATE TABLE t2 (b INT, KEY(b)) ENGINE=MyISAM;
|
||||
ALTER TABLE t2 DISABLE KEYS;
|
||||
INSERT INTO t2 VALUES (1),(2),(3);
|
||||
ALTER TABLE t2 ENABLE KEYS;
|
||||
CREATE TABLE t3 (c INT) ENGINE=MyISAM;
|
||||
INSERT INTO t3 (c) SELECT seq FROM seq_1_to_101;
|
||||
SELECT * FROM t1 WHERE t1.a IN (SELECT b FROM
|
||||
(SELECT t2.b FROM t2 WHERE NOT EXISTS (SELECT 1 FROM t3) GROUP BY b) sq);
|
||||
a
|
||||
DROP TABLE t1, t2, t3;
|
||||
# End of 10.4 tests
|
||||
|
@ -485,4 +485,22 @@ SELECT * FROM t1 JOIN t2 WHERE (t1.a, t2.b) IN (SELECT * FROM v);
|
||||
DROP VIEW v;
|
||||
DROP TABLE t1, t2, t3;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-31279 Crash when lateral derived is guaranteed to return no rows
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (a CHAR(1)) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES ('1'),('2');
|
||||
CREATE TABLE t2 (b INT, KEY(b)) ENGINE=MyISAM;
|
||||
ALTER TABLE t2 DISABLE KEYS;
|
||||
INSERT INTO t2 VALUES (1),(2),(3);
|
||||
ALTER TABLE t2 ENABLE KEYS;
|
||||
CREATE TABLE t3 (c INT) ENGINE=MyISAM;
|
||||
INSERT INTO t3 (c) SELECT seq FROM seq_1_to_101;
|
||||
|
||||
SELECT * FROM t1 WHERE t1.a IN (SELECT b FROM
|
||||
(SELECT t2.b FROM t2 WHERE NOT EXISTS (SELECT 1 FROM t3) GROUP BY b) sq);
|
||||
|
||||
DROP TABLE t1, t2, t3;
|
||||
|
||||
--echo # End of 10.4 tests
|
||||
|
@ -1058,6 +1058,14 @@ test
|
||||
Phase 7/7: Running 'FLUSH PRIVILEGES'
|
||||
OK
|
||||
set global sql_safe_updates=@orig_sql_safe_updates;
|
||||
#
|
||||
# MDEV-32043 Remove plugins previously external that are now built in (unix_socket)
|
||||
#
|
||||
INSERT INTO mysql.plugin SELECT 'unix_socket', 'auth_socket.so'
|
||||
FROM dual WHERE convert(@@version_compile_os using latin1) not in ('Win32', 'Win64', 'Windows');
|
||||
# mariadb-upgrade --force --silent 2>&1
|
||||
SELECT * FROM mysql.plugin WHERE name='unix_socket';
|
||||
name dl
|
||||
# End of 10.4 tests
|
||||
#
|
||||
# Check that mysql_upgrade can be run on mysqldump
|
||||
|
@ -495,6 +495,17 @@ set global sql_safe_updates=ON;
|
||||
--remove_file $MYSQLD_DATADIR/mysql_upgrade_info
|
||||
set global sql_safe_updates=@orig_sql_safe_updates;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-32043 Remove plugins previously external that are now built in (unix_socket)
|
||||
--echo #
|
||||
|
||||
INSERT INTO mysql.plugin SELECT 'unix_socket', 'auth_socket.so'
|
||||
FROM dual WHERE convert(@@version_compile_os using latin1) not in ('Win32', 'Win64', 'Windows');
|
||||
--echo # mariadb-upgrade --force --silent 2>&1
|
||||
--exec $MYSQL_UPGRADE --force --silent 2>&1
|
||||
SELECT * FROM mysql.plugin WHERE name='unix_socket';
|
||||
--remove_file $MYSQLD_DATADIR/mysql_upgrade_info
|
||||
|
||||
--echo # End of 10.4 tests
|
||||
|
||||
#
|
||||
|
@ -5801,5 +5801,15 @@ END;
|
||||
$
|
||||
ERROR 42000: EXECUTE..USING does not support subqueries or stored functions
|
||||
#
|
||||
# MDEV-32965: Assertion `thd->active_stmt_arena_to_use()-> is_stmt_prepare_or_first_sp_execute() || thd->active_stmt_arena_to_use()-> is_conventional() || thd->active_stmt_arena_to_use()->state == Query_arena::STMT_SP_QUERY_ARGUMENTS' failed
|
||||
#
|
||||
CREATE TABLE t (f VARCHAR(8)) CHARACTER SET utf8;
|
||||
INSERT INTO t VALUES ('foo'),('bar');
|
||||
EXECUTE IMMEDIATE 'SELECT GROUP_CONCAT(@x) FROM t GROUP BY @x := f';
|
||||
GROUP_CONCAT(@x)
|
||||
0
|
||||
0
|
||||
DROP TABLE t;
|
||||
#
|
||||
# End of 10.4 tests
|
||||
#
|
||||
|
@ -5231,6 +5231,18 @@ $
|
||||
|
||||
delimiter ;$
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-32965: Assertion `thd->active_stmt_arena_to_use()-> is_stmt_prepare_or_first_sp_execute() || thd->active_stmt_arena_to_use()-> is_conventional() || thd->active_stmt_arena_to_use()->state == Query_arena::STMT_SP_QUERY_ARGUMENTS' failed
|
||||
--echo #
|
||||
CREATE TABLE t (f VARCHAR(8)) CHARACTER SET utf8;
|
||||
|
||||
INSERT INTO t VALUES ('foo'),('bar');
|
||||
EXECUTE IMMEDIATE 'SELECT GROUP_CONCAT(@x) FROM t GROUP BY @x := f';
|
||||
|
||||
# Cleanup
|
||||
|
||||
DROP TABLE t;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.4 tests
|
||||
--echo #
|
||||
|
BIN
mysql-test/std_data/mysql80/t2.cfg
Normal file
BIN
mysql-test/std_data/mysql80/t2.cfg
Normal file
Binary file not shown.
BIN
mysql-test/std_data/mysql80/t2.ibd
Normal file
BIN
mysql-test/std_data/mysql80/t2.ibd
Normal file
Binary file not shown.
@ -1,6 +1,8 @@
|
||||
SELECT variable_value into @old_encrypted FROM information_schema.global_status
|
||||
SELECT CAST(variable_value AS INT) INTO @old_encrypted
|
||||
FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_temp_blocks_encrypted';
|
||||
SELECT variable_value into @old_decrypted FROM information_schema.global_status
|
||||
SELECT CAST(variable_value AS INT) INTO @old_decrypted
|
||||
FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_temp_blocks_decrypted';
|
||||
CREATE TEMPORARY TABLE t1(f1 CHAR(200), f2 CHAR(200)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 (f1,f2) SELECT '', '' FROM seq_1_to_8192;
|
||||
@ -12,11 +14,13 @@ COUNT(*)
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
8192
|
||||
SELECT variable_value > @old_encrypted FROM information_schema.global_status
|
||||
SELECT CAST(variable_value AS INT) > @old_encrypted
|
||||
FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_temp_blocks_encrypted';
|
||||
variable_value > @old_encrypted
|
||||
CAST(variable_value AS INT) > @old_encrypted
|
||||
1
|
||||
SELECT variable_value > @old_decrypted FROM information_schema.global_status
|
||||
SELECT CAST(variable_value AS INT) > @old_decrypted
|
||||
FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_temp_blocks_decrypted';
|
||||
variable_value > @old_decrypted
|
||||
CAST(variable_value AS INT) > @old_decrypted
|
||||
1
|
||||
|
@ -13,11 +13,13 @@ set current_num = current_num + 1;
|
||||
end while;
|
||||
end//
|
||||
commit;
|
||||
set autocommit=0;
|
||||
call innodb_insert_proc(10000);
|
||||
begin;
|
||||
set statement unique_checks=0, foreign_key_checks=0 for
|
||||
call innodb_insert_proc(100);
|
||||
commit;
|
||||
set autocommit=1;
|
||||
DROP PROCEDURE innodb_insert_proc;
|
||||
# Wait max 10 min for key encryption threads to encrypt all spaces
|
||||
FLUSH TABLES t1, t2, t3 FOR EXPORT;
|
||||
# tablespaces should be now encrypted
|
||||
# t1 yes on expecting NOT FOUND
|
||||
NOT FOUND /foobar/ in t1.ibd
|
||||
@ -25,15 +27,16 @@ NOT FOUND /foobar/ in t1.ibd
|
||||
NOT FOUND /temp/ in t2.ibd
|
||||
# t3 ... on expecting NOT FOUND
|
||||
NOT FOUND /barfoo/ in t3.ibd
|
||||
# restart
|
||||
db.opt
|
||||
t1.cfg
|
||||
t1.frm
|
||||
t1.ibd
|
||||
t2.cfg
|
||||
t2.frm
|
||||
t2.ibd
|
||||
t3.cfg
|
||||
t3.frm
|
||||
t3.ibd
|
||||
FLUSH TABLES t1, t2, t3 FOR EXPORT;
|
||||
backup: t1
|
||||
backup: t2
|
||||
backup: t3
|
||||
@ -55,17 +58,18 @@ restore: t1 .ibd and .cfg files
|
||||
restore: t2 .ibd and .cfg files
|
||||
restore: t3 .ibd and .cfg files
|
||||
ALTER TABLE t1 IMPORT TABLESPACE;
|
||||
SELECT COUNT(1) FROM t1;
|
||||
COUNT(1)
|
||||
10000
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
100
|
||||
ALTER TABLE t2 IMPORT TABLESPACE;
|
||||
SELECT COUNT(1) FROM t2;
|
||||
COUNT(1)
|
||||
10000
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
100
|
||||
ALTER TABLE t3 IMPORT TABLESPACE;
|
||||
SELECT COUNT(1) FROM t3;
|
||||
COUNT(1)
|
||||
10000
|
||||
SELECT COUNT(*) FROM t3;
|
||||
COUNT(*)
|
||||
100
|
||||
FLUSH TABLES t1, t2, t3 FOR EXPORT;
|
||||
# tablespaces should remain encrypted after import
|
||||
# t1 yes on expecting NOT FOUND
|
||||
NOT FOUND /foobar/ in t1.ibd
|
||||
@ -73,8 +77,8 @@ NOT FOUND /foobar/ in t1.ibd
|
||||
NOT FOUND /temp/ in t2.ibd
|
||||
# t3 ... on expecting NOT FOUND
|
||||
NOT FOUND /barfoo/ in t3.ibd
|
||||
# restart
|
||||
ALTER TABLE t1 ENGINE InnoDB;
|
||||
UNLOCK TABLES;
|
||||
ALTER TABLE t1 FORCE;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
@ -82,7 +86,7 @@ t1 CREATE TABLE `t1` (
|
||||
`a` varchar(255) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci `encrypted`=yes
|
||||
ALTER TABLE t2 ENGINE InnoDB;
|
||||
ALTER TABLE t2 FORCE;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
@ -90,7 +94,7 @@ t2 CREATE TABLE `t2` (
|
||||
`a` varchar(255) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||
ALTER TABLE t3 ENGINE InnoDB;
|
||||
ALTER TABLE t3 FORCE;
|
||||
SHOW CREATE TABLE t3;
|
||||
Table Create Table
|
||||
t3 CREATE TABLE `t3` (
|
||||
@ -98,30 +102,17 @@ t3 CREATE TABLE `t3` (
|
||||
`a` varchar(255) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=COMPRESSED `encrypted`=yes
|
||||
# Restarting server
|
||||
# restart
|
||||
# Done restarting server
|
||||
# Verify that tables are still usable
|
||||
SELECT COUNT(1) FROM t1;
|
||||
COUNT(1)
|
||||
10000
|
||||
SELECT COUNT(1) FROM t2;
|
||||
COUNT(1)
|
||||
10000
|
||||
SELECT COUNT(1) FROM t3;
|
||||
COUNT(1)
|
||||
10000
|
||||
# Tablespaces should be encrypted after restart
|
||||
CHECK TABLE t1, t2, t3 EXTENDED;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
test.t2 check status OK
|
||||
test.t3 check status OK
|
||||
FLUSH TABLES t1, t2, t3 FOR EXPORT;
|
||||
# t1 yes on expecting NOT FOUND
|
||||
NOT FOUND /foobar/ in t1.ibd
|
||||
# t2 ... on expecting NOT FOUND
|
||||
NOT FOUND /temp/ in t2.ibd
|
||||
# t3 ... on expecting NOT FOUND
|
||||
NOT FOUND /barfoo/ in t3.ibd
|
||||
# restart
|
||||
# Wait max 10 min for key encryption threads to encrypt all spaces
|
||||
# Success!
|
||||
# Restart mysqld --innodb_encrypt_tables=0 --innodb_encryption_threads=0
|
||||
# restart: --innodb_encrypt_tables=0 --innodb_encryption_threads=0
|
||||
DROP PROCEDURE innodb_insert_proc;
|
||||
UNLOCK TABLES;
|
||||
DROP TABLE t1, t2, t3;
|
||||
|
@ -2,10 +2,12 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_file_key_management_plugin.inc
|
||||
|
||||
SELECT variable_value into @old_encrypted FROM information_schema.global_status
|
||||
SELECT CAST(variable_value AS INT) INTO @old_encrypted
|
||||
FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_temp_blocks_encrypted';
|
||||
|
||||
SELECT variable_value into @old_decrypted FROM information_schema.global_status
|
||||
SELECT CAST(variable_value AS INT) INTO @old_decrypted
|
||||
FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_temp_blocks_decrypted';
|
||||
|
||||
CREATE TEMPORARY TABLE t1(f1 CHAR(200), f2 CHAR(200)) ENGINE=InnoDB;
|
||||
@ -17,8 +19,10 @@ INSERT INTO t2 (f1,f2,f3) SELECT '', '', '' FROM seq_1_to_8192;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
|
||||
SELECT variable_value > @old_encrypted FROM information_schema.global_status
|
||||
SELECT CAST(variable_value AS INT) > @old_encrypted
|
||||
FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_temp_blocks_encrypted';
|
||||
|
||||
SELECT variable_value > @old_decrypted FROM information_schema.global_status
|
||||
SELECT CAST(variable_value AS INT) > @old_decrypted
|
||||
FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_temp_blocks_decrypted';
|
||||
|
@ -6,7 +6,6 @@
|
||||
let MYSQLD_DATADIR = `SELECT @@datadir`;
|
||||
|
||||
--let SEARCH_RANGE = 10000000
|
||||
--let $id = `SELECT RAND()`
|
||||
--let t1_IBD = $MYSQLD_DATADIR/test/t1.ibd
|
||||
--let t2_IBD = $MYSQLD_DATADIR/test/t2.ibd
|
||||
--let t3_IBD = $MYSQLD_DATADIR/test/t3.ibd
|
||||
@ -30,19 +29,18 @@ end//
|
||||
delimiter ;//
|
||||
commit;
|
||||
|
||||
set autocommit=0;
|
||||
call innodb_insert_proc(10000);
|
||||
begin;
|
||||
set statement unique_checks=0, foreign_key_checks=0 for
|
||||
call innodb_insert_proc(100);
|
||||
commit;
|
||||
set autocommit=1;
|
||||
DROP PROCEDURE innodb_insert_proc;
|
||||
|
||||
--echo # Wait max 10 min for key encryption threads to encrypt all spaces
|
||||
--let $wait_timeout= 600
|
||||
--let $wait_condition=SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND ROTATING_OR_FLUSHING <> 0
|
||||
--source include/wait_condition.inc
|
||||
|
||||
# shutdown so that grep is safe
|
||||
--source include/shutdown_mysqld.inc
|
||||
|
||||
FLUSH TABLES t1, t2, t3 FOR EXPORT;
|
||||
--echo # tablespaces should be now encrypted
|
||||
--let SEARCH_PATTERN=foobar
|
||||
--echo # t1 yes on expecting NOT FOUND
|
||||
@ -57,11 +55,8 @@ set autocommit=1;
|
||||
-- let SEARCH_FILE=$t3_IBD
|
||||
-- source include/search_pattern_in_file.inc
|
||||
|
||||
--source include/start_mysqld.inc
|
||||
let MYSQLD_DATADIR =`SELECT @@datadir`;
|
||||
|
||||
--list_files $MYSQLD_DATADIR/test
|
||||
FLUSH TABLES t1, t2, t3 FOR EXPORT;
|
||||
perl;
|
||||
do "$ENV{MTR_SUITE_DIR}/include/innodb-util.pl";
|
||||
ib_backup_tablespaces("test", "t1","t2","t3");
|
||||
@ -80,14 +75,13 @@ ib_restore_tablespaces("test", "t1","t2","t3");
|
||||
EOF
|
||||
|
||||
ALTER TABLE t1 IMPORT TABLESPACE;
|
||||
SELECT COUNT(1) FROM t1;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
ALTER TABLE t2 IMPORT TABLESPACE;
|
||||
SELECT COUNT(1) FROM t2;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
ALTER TABLE t3 IMPORT TABLESPACE;
|
||||
SELECT COUNT(1) FROM t3;
|
||||
SELECT COUNT(*) FROM t3;
|
||||
|
||||
# shutdown so that grep is safe
|
||||
--source include/shutdown_mysqld.inc
|
||||
FLUSH TABLES t1, t2, t3 FOR EXPORT;
|
||||
|
||||
--echo # tablespaces should remain encrypted after import
|
||||
--let SEARCH_PATTERN=foobar
|
||||
@ -103,28 +97,18 @@ SELECT COUNT(1) FROM t3;
|
||||
-- let SEARCH_FILE=$t3_IBD
|
||||
-- source include/search_pattern_in_file.inc
|
||||
|
||||
--source include/start_mysqld.inc
|
||||
|
||||
ALTER TABLE t1 ENGINE InnoDB;
|
||||
UNLOCK TABLES;
|
||||
ALTER TABLE t1 FORCE;
|
||||
SHOW CREATE TABLE t1;
|
||||
ALTER TABLE t2 ENGINE InnoDB;
|
||||
ALTER TABLE t2 FORCE;
|
||||
SHOW CREATE TABLE t2;
|
||||
ALTER TABLE t3 ENGINE InnoDB;
|
||||
ALTER TABLE t3 FORCE;
|
||||
SHOW CREATE TABLE t3;
|
||||
|
||||
--echo # Restarting server
|
||||
-- source include/restart_mysqld.inc
|
||||
--echo # Done restarting server
|
||||
|
||||
--echo # Verify that tables are still usable
|
||||
SELECT COUNT(1) FROM t1;
|
||||
SELECT COUNT(1) FROM t2;
|
||||
SELECT COUNT(1) FROM t3;
|
||||
CHECK TABLE t1, t2, t3 EXTENDED;
|
||||
FLUSH TABLES t1, t2, t3 FOR EXPORT;
|
||||
|
||||
# shutdown so that grep is safe
|
||||
--source include/shutdown_mysqld.inc
|
||||
|
||||
--echo # Tablespaces should be encrypted after restart
|
||||
--let SEARCH_PATTERN=foobar
|
||||
--echo # t1 yes on expecting NOT FOUND
|
||||
-- let SEARCH_FILE=$t1_IBD
|
||||
@ -136,19 +120,7 @@ SELECT COUNT(1) FROM t3;
|
||||
--echo # t3 ... on expecting NOT FOUND
|
||||
--let SEARCH_PATTERN=barfoo
|
||||
-- let SEARCH_FILE=$t3_IBD
|
||||
-- source include/search_pattern_in_file.inc
|
||||
|
||||
--source include/start_mysqld.inc
|
||||
UNLOCK TABLES;
|
||||
|
||||
--echo # Wait max 10 min for key encryption threads to encrypt all spaces
|
||||
--let $wait_timeout= 600
|
||||
--let $wait_condition=SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND ROTATING_OR_FLUSHING <> 0
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--echo # Success!
|
||||
--echo # Restart mysqld --innodb_encrypt_tables=0 --innodb_encryption_threads=0
|
||||
-- let $restart_parameters=--innodb_encrypt_tables=0 --innodb_encryption_threads=0
|
||||
-- source include/restart_mysqld.inc
|
||||
|
||||
DROP PROCEDURE innodb_insert_proc;
|
||||
DROP TABLE t1, t2, t3;
|
||||
|
52
mysql-test/suite/galera/r/MDEV-27806.result
Normal file
52
mysql-test/suite/galera/r/MDEV-27806.result
Normal file
@ -0,0 +1,52 @@
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY);
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
CREATE TABLE ts1 AS SELECT * FROM t1;
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
mysqld-bin.000002 # Gtid # # BEGIN GTID #-#-#
|
||||
mysqld-bin.000002 # Query # # use `test`; CREATE TABLE `ts1` (
|
||||
`f1` int(11) NOT NULL
|
||||
)
|
||||
mysqld-bin.000002 # Annotate_rows # # CREATE TABLE ts1 AS SELECT * FROM t1
|
||||
mysqld-bin.000002 # Table_map # # table_id: # (test.ts1)
|
||||
mysqld-bin.000002 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
mysqld-bin.000002 # Xid # # COMMIT /* XID */
|
||||
connection node_2;
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
mysqld-bin.000003 # Gtid # # BEGIN GTID #-#-#
|
||||
mysqld-bin.000003 # Query # # use `test`; CREATE TABLE `ts1` (
|
||||
`f1` int(11) NOT NULL
|
||||
)
|
||||
mysqld-bin.000003 # Annotate_rows # # CREATE TABLE ts1 AS SELECT * FROM t1
|
||||
mysqld-bin.000003 # Table_map # # table_id: # (test.ts1)
|
||||
mysqld-bin.000003 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
mysqld-bin.000003 # Xid # # COMMIT /* XID */
|
||||
BINLOG_POSITIONS_MATCH
|
||||
1
|
||||
DROP TABLE t1,ts1;
|
||||
connection node_1;
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY);
|
||||
CREATE TABLE ts1 AS SELECT * FROM t1;
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
mysqld-bin.000002 # Gtid # # BEGIN GTID #-#-#
|
||||
mysqld-bin.000002 # Query # # use `test`; CREATE TABLE `ts1` (
|
||||
`f1` int(11) NOT NULL
|
||||
)
|
||||
mysqld-bin.000002 # Xid # # COMMIT /* XID */
|
||||
connection node_2;
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
mysqld-bin.000003 # Gtid # # BEGIN GTID #-#-#
|
||||
mysqld-bin.000003 # Query # # use `test`; CREATE TABLE `ts1` (
|
||||
`f1` int(11) NOT NULL
|
||||
)
|
||||
mysqld-bin.000003 # Query # # COMMIT
|
||||
BINLOG_POSITIONS_MATCH
|
||||
1
|
||||
DROP TABLE t1,ts1;
|
||||
CALL mtr.add_suppression("Ignoring server id for non bootstrap node");
|
@ -52,6 +52,8 @@ DROP TABLE t1, t4;
|
||||
SET SQL_LOG_BIN=OFF;
|
||||
DROP TABLE t2, t3;
|
||||
connection node_3;
|
||||
BINLOG_POSITIONS_MATCH
|
||||
1
|
||||
STOP SLAVE;
|
||||
RESET SLAVE ALL;
|
||||
CALL mtr.add_suppression('You need to use --log-bin to make --binlog-format work');
|
||||
|
1
mysql-test/suite/galera/t/MDEV-27806.opt
Normal file
1
mysql-test/suite/galera/t/MDEV-27806.opt
Normal file
@ -0,0 +1 @@
|
||||
--log-bin --log-slave-updates --gtid-strict-mode --wsrep_gtid_mode=on
|
51
mysql-test/suite/galera/t/MDEV-27806.test
Normal file
51
mysql-test/suite/galera/t/MDEV-27806.test
Normal file
@ -0,0 +1,51 @@
|
||||
#
|
||||
# MDEV-27806 GTIDs diverge after CTAS
|
||||
#
|
||||
--source include/galera_cluster.inc
|
||||
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY);
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
CREATE TABLE ts1 AS SELECT * FROM t1;
|
||||
--let binlog_pos= `SELECT @@gtid_binlog_pos`
|
||||
|
||||
--let $MASTER_MYPORT=$NODE_MYPORT_1
|
||||
--let $binlog_file=LAST
|
||||
--let $binlog_limit=8,20
|
||||
--source include/show_binlog_events.inc
|
||||
|
||||
--connection node_2
|
||||
--let $binlog_limit=7,20
|
||||
--source include/show_binlog_events.inc
|
||||
|
||||
--disable_query_log
|
||||
--eval SELECT STRCMP(@@gtid_binlog_pos, "$binlog_pos") = 0 AS BINLOG_POSITIONS_MATCH;
|
||||
--enable_query_log
|
||||
|
||||
DROP TABLE t1,ts1;
|
||||
|
||||
|
||||
#
|
||||
# Same as above, with empty CREATE TABLE AS SELECT
|
||||
#
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY);
|
||||
CREATE TABLE ts1 AS SELECT * FROM t1;
|
||||
--let binlog_pos= `SELECT @@gtid_binlog_pos`
|
||||
|
||||
--let $MASTER_MYPORT=$NODE_MYPORT_1
|
||||
--let $binlog_file=LAST
|
||||
--let $binlog_limit=18,20
|
||||
--source include/show_binlog_events.inc
|
||||
|
||||
--connection node_2
|
||||
--let $binlog_limit=17,20
|
||||
--source include/show_binlog_events.inc
|
||||
|
||||
--disable_query_log
|
||||
--eval SELECT STRCMP(@@gtid_binlog_pos, "$binlog_pos") = 0 AS BINLOG_POSITIONS_MATCH;
|
||||
--enable_query_log
|
||||
|
||||
DROP TABLE t1,ts1;
|
||||
|
||||
CALL mtr.add_suppression("Ignoring server id for non bootstrap node");
|
@ -52,12 +52,18 @@ DROP TABLE t1, t4;
|
||||
SET SQL_LOG_BIN=OFF;
|
||||
DROP TABLE t2, t3;
|
||||
|
||||
--let binlog_pos=`SELECT @@gtid_binlog_pos;`
|
||||
|
||||
--connection node_3
|
||||
--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1';
|
||||
--source include/wait_condition.inc
|
||||
--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't4';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--disable_query_log
|
||||
--eval SELECT STRCMP(@@gtid_binlog_pos, "$binlog_pos") = 0 AS BINLOG_POSITIONS_MATCH;
|
||||
--enable_query_log
|
||||
|
||||
STOP SLAVE;
|
||||
RESET SLAVE ALL;
|
||||
|
||||
|
17
mysql-test/suite/galera_sr/r/MDEV-28971.result
Normal file
17
mysql-test/suite/galera_sr/r/MDEV-28971.result
Normal file
@ -0,0 +1,17 @@
|
||||
connection node_2;
|
||||
connection node_1;
|
||||
CREATE SEQUENCE SEQ NOCACHE ENGINE=InnoDB;
|
||||
SET SESSION wsrep_trx_fragment_size=1;
|
||||
SET collation_connection=utf16_thai_520_w2;
|
||||
SET autocommit=0;
|
||||
CREATE TABLE t1 (a BLOB UNIQUE);
|
||||
INSERT INTO t1 VALUES ('AAF');
|
||||
SELECT SETVAL (SEQ, 100);
|
||||
ERROR 42000: This version of MariaDB doesn't yet support 'SEQUENCEs with streaming replication in Galera cluster'
|
||||
ALTER TABLE t1 ADD CONSTRAINT constraint_1 UNIQUE (a);
|
||||
Warnings:
|
||||
Note 1831 Duplicate index `constraint_1`. This is deprecated and will be disallowed in a future release
|
||||
INSERT INTO t1 VALUES();
|
||||
ALTER TABLE t1 ADD KEY(b (50));
|
||||
ERROR 42000: Key column 'b' doesn't exist in table
|
||||
DROP TABLE t1,SEQ;
|
20
mysql-test/suite/galera_sr/t/MDEV-28971.test
Normal file
20
mysql-test/suite/galera_sr/t/MDEV-28971.test
Normal file
@ -0,0 +1,20 @@
|
||||
#
|
||||
# MDEV-28971 - Assertion `total_length + thd->wsrep_sr().log_position() == saved_pos'
|
||||
# failed in int wsrep_write_cache_inc(THD*, IO_CACHE*, size_t*)
|
||||
#
|
||||
|
||||
--source include/galera_cluster.inc
|
||||
|
||||
CREATE SEQUENCE SEQ NOCACHE ENGINE=InnoDB;
|
||||
SET SESSION wsrep_trx_fragment_size=1;
|
||||
SET collation_connection=utf16_thai_520_w2;
|
||||
SET autocommit=0;
|
||||
CREATE TABLE t1 (a BLOB UNIQUE);
|
||||
INSERT INTO t1 VALUES ('AAF');
|
||||
--error ER_NOT_SUPPORTED_YET
|
||||
SELECT SETVAL (SEQ, 100);
|
||||
ALTER TABLE t1 ADD CONSTRAINT constraint_1 UNIQUE (a);
|
||||
INSERT INTO t1 VALUES();
|
||||
--error ER_KEY_COLUMN_DOES_NOT_EXITS
|
||||
ALTER TABLE t1 ADD KEY(b (50));
|
||||
DROP TABLE t1,SEQ;
|
@ -11,4 +11,3 @@
|
||||
##############################################################################
|
||||
|
||||
create-index-debug : MDEV-13680 InnoDB may crash when btr_page_alloc() fails
|
||||
import_update_stats: MDEV-32725 fails in MSAN, uninit access
|
||||
|
@ -117,8 +117,19 @@ ERROR 42000: Incorrect column specifier for column 'c'
|
||||
CREATE TABLE t1 (c DATETIME AUTO_INCREMENT UNIQUE) ENGINE=InnoDB;
|
||||
ERROR 42000: Incorrect column specifier for column 'c'
|
||||
#
|
||||
# End of 10.4 tests
|
||||
# MDEV-31000 Assertion failed on ALTER TABLE...page_compressed=1
|
||||
#
|
||||
SET @save_file_per_table=@@GLOBAL.innodb_file_per_table;
|
||||
SET GLOBAL innodb_file_per_table=0;
|
||||
CREATE TABLE t (c INT PRIMARY KEY) ENGINE=INNODB;
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
ALTER TABLE t page_compressed=1;
|
||||
SET GLOBAL innodb_file_per_table=@save_file_per_table;
|
||||
SELECT space>0 FROM information_schema.innodb_sys_tables WHERE name='test/t';
|
||||
space>0
|
||||
1
|
||||
DROP TABLE t;
|
||||
# End of 10.4 tests
|
||||
#
|
||||
# MDEV-21748 ASAN use-after-poison in PageBulk::insertPage()
|
||||
#
|
||||
@ -136,3 +147,4 @@ CREATE TABLE t1 (id INT PRIMARY KEY, a YEAR, INDEX(id,a)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1,NULL),(2,NULL);
|
||||
UPDATE t1 SET a=0;
|
||||
DROP TABLE t1;
|
||||
# End of 10.5 tests
|
||||
|
@ -808,6 +808,18 @@ call mtr.add_suppression("InnoDB: unsupported MySQL tablespace");
|
||||
ALTER TABLE t1 IMPORT TABLESPACE;
|
||||
ERROR 42000: Table 't1' uses an extension that doesn't exist in this MariaDB version
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of 10.3 tests
|
||||
#
|
||||
# MDEV-29972 crash after "Unsupported meta-data version number"
|
||||
#
|
||||
call mtr.add_suppression("Index for table 't2' is corrupt");
|
||||
CREATE TABLE t2 (i INT PRIMARY KEY) ENGINE=InnoDB;
|
||||
ALTER TABLE t2 DISCARD TABLESPACE;
|
||||
ALTER TABLE t2 IMPORT TABLESPACE;
|
||||
ERROR 42000: This version of MariaDB doesn't yet support 'meta-data version'
|
||||
ALTER TABLE t2 IMPORT TABLESPACE;
|
||||
ERROR HY000: Index for table 't2' is corrupt; try to repair it
|
||||
SELECT * FROM t2;
|
||||
ERROR HY000: Tablespace has been discarded for table `t2`
|
||||
DROP TABLE t2;
|
||||
# End of 10.4 tests
|
||||
|
@ -3,17 +3,8 @@ col2 VARCHAR(25), col3 varchar(25)) ENGINE=InnoDB;
|
||||
CREATE INDEX idx1 ON tab5(col2(10));
|
||||
CREATE INDEX idx2 ON tab5(col3(10));
|
||||
SET GLOBAL innodb_buffer_pool_dump_pct=100;
|
||||
SELECT variable_value INTO @IBPDS
|
||||
FROM information_schema.global_status
|
||||
WHERE variable_name = 'INNODB_BUFFER_POOL_DUMP_STATUS';
|
||||
SET GLOBAL innodb_buffer_pool_dump_now=ON;
|
||||
SET GLOBAL innodb_buffer_pool_dump_pct=1;
|
||||
SELECT @@global.innodb_buffer_pool_dump_pct;
|
||||
@@global.innodb_buffer_pool_dump_pct
|
||||
1
|
||||
SELECT variable_value INTO @IBPDS
|
||||
FROM information_schema.global_status
|
||||
WHERE variable_name = 'INNODB_BUFFER_POOL_DUMP_STATUS';
|
||||
SET GLOBAL innodb_buffer_pool_dump_now=ON;
|
||||
SET GLOBAL innodb_buffer_pool_dump_pct=DEFAULT;
|
||||
DROP TABLE tab5;
|
||||
|
@ -90,3 +90,19 @@ worklog5743;
|
||||
col_1_text = REPEAT("a", 3500) col_2_text = REPEAT("o", 3500)
|
||||
1 1
|
||||
DROP TABLE worklog5743;
|
||||
#
|
||||
# MDEV-21245 InnoDB: Using a partial-field key prefix in search
|
||||
#
|
||||
CREATE TABLE t1 (a VARCHAR(255), KEY k(a)) DEFAULT CHARSET=utf8mb3
|
||||
ENGINE=InnoDB;
|
||||
INSERT INTO t1 set a='';
|
||||
alter table t1 change a a varchar(3000);
|
||||
affected rows: 0
|
||||
info: Records: 0 Duplicates: 0 Warnings: 1
|
||||
Warnings:
|
||||
Note 1071 Specified key was too long; max key length is 3072 bytes
|
||||
SELECT * FROM t1 WHERE a IN ('');
|
||||
a
|
||||
|
||||
DROP TABLE t1;
|
||||
# End of 10.4 tests
|
||||
|
@ -496,4 +496,28 @@ SET GLOBAL innodb_purge_rseg_truncate_frequency=@save_frequency;
|
||||
CREATE TABLE t1 (i int AS (0) STORED, j INT) ENGINE=InnoDB;
|
||||
ALTER TABLE t1 ADD COLUMN i INT GENERATED ALWAYS AS (1), DROP COLUMN i;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-18322 Assertion "wrong_page_type" on instant ALTER
|
||||
#
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE c TEXT
|
||||
DEFAULT(SELECT CONCAT('CREATE TABLE t1 (c',
|
||||
GROUP_CONCAT(seq SEPARATOR ' CHAR(200), c'),
|
||||
' CHAR(211)) ENGINE=InnoDB ROW_FORMAT=REDUNDANT')
|
||||
FROM seq_1_to_40);
|
||||
EXECUTE IMMEDIATE c;
|
||||
END;
|
||||
$$
|
||||
INSERT INTO t1 SET c1=NULL;
|
||||
ALTER TABLE t1 ADD c41 INT FIRST;
|
||||
ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8123. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
|
||||
ALTER TABLE t1 ADD c41 INT FIRST;
|
||||
ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8123. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
DROP TABLE t1;
|
||||
# End of 10.4 tests
|
||||
|
@ -121,9 +121,20 @@ CREATE TABLE t1 (c TIMESTAMP AUTO_INCREMENT UNIQUE) ENGINE=InnoDB;
|
||||
CREATE TABLE t1 (c DATETIME AUTO_INCREMENT UNIQUE) ENGINE=InnoDB;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.4 tests
|
||||
--echo # MDEV-31000 Assertion failed on ALTER TABLE...page_compressed=1
|
||||
--echo #
|
||||
|
||||
SET @save_file_per_table=@@GLOBAL.innodb_file_per_table;
|
||||
SET GLOBAL innodb_file_per_table=0;
|
||||
CREATE TABLE t (c INT PRIMARY KEY) ENGINE=INNODB;
|
||||
SET GLOBAL innodb_file_per_table=1;
|
||||
ALTER TABLE t page_compressed=1;
|
||||
SET GLOBAL innodb_file_per_table=@save_file_per_table;
|
||||
SELECT space>0 FROM information_schema.innodb_sys_tables WHERE name='test/t';
|
||||
DROP TABLE t;
|
||||
|
||||
--echo # End of 10.4 tests
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-21748 ASAN use-after-poison in PageBulk::insertPage()
|
||||
--echo #
|
||||
@ -141,3 +152,5 @@ CREATE TABLE t1 (id INT PRIMARY KEY, a YEAR, INDEX(id,a)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1,NULL),(2,NULL);
|
||||
UPDATE t1 SET a=0;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo # End of 10.5 tests
|
||||
|
@ -4,7 +4,6 @@
|
||||
|
||||
--source include/not_embedded.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/not_valgrind.inc # MDEV-32725 FIXME
|
||||
|
||||
let MYSQLD_DATADIR =`SELECT @@datadir`;
|
||||
SET @old_innodb_file_per_table = @@innodb_file_per_table;
|
||||
|
@ -960,6 +960,25 @@ ALTER TABLE t1 IMPORT TABLESPACE;
|
||||
DROP TABLE t1;
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/t1.ibd
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.3 tests
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-29972 crash after "Unsupported meta-data version number"
|
||||
--echo #
|
||||
|
||||
call mtr.add_suppression("Index for table 't2' is corrupt");
|
||||
|
||||
CREATE TABLE t2 (i INT PRIMARY KEY) ENGINE=InnoDB;
|
||||
ALTER TABLE t2 DISCARD TABLESPACE;
|
||||
--copy_file std_data/mysql80/t2.cfg $MYSQLD_DATADIR/test/t2.cfg
|
||||
--copy_file std_data/mysql80/t2.ibd $MYSQLD_DATADIR/test/t2.ibd
|
||||
--error ER_NOT_SUPPORTED_YET
|
||||
ALTER TABLE t2 IMPORT TABLESPACE;
|
||||
--remove_file $MYSQLD_DATADIR/test/t2.cfg
|
||||
--error ER_NOT_KEYFILE
|
||||
ALTER TABLE t2 IMPORT TABLESPACE;
|
||||
--error ER_TABLESPACE_DISCARDED
|
||||
SELECT * FROM t2;
|
||||
DROP TABLE t2;
|
||||
|
||||
--echo # End of 10.4 tests
|
||||
|
@ -35,49 +35,44 @@ SET GLOBAL innodb_buffer_pool_dump_pct=100;
|
||||
# - The granularity of the timestamp is one second.
|
||||
# - There could have been some dump caused by some previous test
|
||||
# just a few milliseconds before.
|
||||
# In order to avoid conflict with previous tests, read the current value
|
||||
# of INNODB_BUFFER_POOL_DUMP_STATUS
|
||||
# and confirm that the timestamp is different after the dump
|
||||
#***********************************************************
|
||||
|
||||
# Read the current value to compare with the new value.
|
||||
SELECT variable_value INTO @IBPDS
|
||||
FROM information_schema.global_status
|
||||
WHERE variable_name = 'INNODB_BUFFER_POOL_DUMP_STATUS';
|
||||
--error 0,1
|
||||
--remove_file $MYSQLD_DATADIR/ib_buffer_pool
|
||||
|
||||
SET GLOBAL innodb_buffer_pool_dump_now=ON;
|
||||
|
||||
# Sleep one second in order to ensure that the time stamp is
|
||||
# different at next dump
|
||||
--sleep 1
|
||||
|
||||
perl;
|
||||
my $f="$ENV{MYSQLD_DATADIR}/ib_buffer_pool";
|
||||
my $count=300;
|
||||
until (-e $f)
|
||||
{
|
||||
select(undef, undef, undef, .1);
|
||||
die "File $f was not created\n" if (0 > --$count);
|
||||
}
|
||||
EOF
|
||||
let $wait_condition = SELECT count(*) = 1
|
||||
FROM information_schema.global_status
|
||||
WHERE variable_name = 'INNODB_BUFFER_POOL_DUMP_STATUS'
|
||||
AND variable_value != @IBPDS
|
||||
AND variable_value like 'Buffer pool(s) dump completed at%';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--move_file $MYSQLD_DATADIR/ib_buffer_pool $MYSQLD_DATADIR/ib_buffer_pool100
|
||||
SET GLOBAL innodb_buffer_pool_dump_pct=1;
|
||||
SELECT @@global.innodb_buffer_pool_dump_pct;
|
||||
|
||||
# Read the current value to compare with the new value.
|
||||
--disable_warnings
|
||||
SELECT variable_value INTO @IBPDS
|
||||
FROM information_schema.global_status
|
||||
WHERE variable_name = 'INNODB_BUFFER_POOL_DUMP_STATUS';
|
||||
--enable_warnings
|
||||
|
||||
SET GLOBAL innodb_buffer_pool_dump_now=ON;
|
||||
|
||||
# Sleep one second in order to ensure that the time stamp is
|
||||
# different at next dump
|
||||
--sleep 1
|
||||
perl;
|
||||
my $f="$ENV{MYSQLD_DATADIR}/ib_buffer_pool";
|
||||
my $count=300;
|
||||
until (-e $f)
|
||||
{
|
||||
select(undef, undef, undef, .1);
|
||||
die "File $f was not created\n" if (0 > --$count);
|
||||
}
|
||||
EOF
|
||||
|
||||
let $wait_condition = SELECT count(*) = 1
|
||||
FROM information_schema.global_status
|
||||
WHERE variable_name = 'INNODB_BUFFER_POOL_DUMP_STATUS'
|
||||
AND variable_value != @IBPDS
|
||||
AND variable_value like 'Buffer pool(s) dump completed at%';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
|
@ -93,3 +93,17 @@ SELECT col_1_text = REPEAT("a", 3500) , col_2_text = REPEAT("o", 3500) FROM
|
||||
worklog5743;
|
||||
|
||||
DROP TABLE worklog5743;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-21245 InnoDB: Using a partial-field key prefix in search
|
||||
--echo #
|
||||
CREATE TABLE t1 (a VARCHAR(255), KEY k(a)) DEFAULT CHARSET=utf8mb3
|
||||
ENGINE=InnoDB;
|
||||
INSERT INTO t1 set a='';
|
||||
--enable_info
|
||||
alter table t1 change a a varchar(3000);
|
||||
--disable_info
|
||||
SELECT * FROM t1 WHERE a IN ('');
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo # End of 10.4 tests
|
||||
|
@ -1,4 +1,5 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_sequence.inc
|
||||
|
||||
SET @save_frequency= @@GLOBAL.innodb_purge_rseg_truncate_frequency;
|
||||
SET GLOBAL innodb_purge_rseg_truncate_frequency=1;
|
||||
@ -527,4 +528,28 @@ CREATE TABLE t1 (i int AS (0) STORED, j INT) ENGINE=InnoDB;
|
||||
ALTER TABLE t1 ADD COLUMN i INT GENERATED ALWAYS AS (1), DROP COLUMN i;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-18322 Assertion "wrong_page_type" on instant ALTER
|
||||
--echo #
|
||||
|
||||
DELIMITER $$;
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE c TEXT
|
||||
DEFAULT(SELECT CONCAT('CREATE TABLE t1 (c',
|
||||
GROUP_CONCAT(seq SEPARATOR ' CHAR(200), c'),
|
||||
' CHAR(211)) ENGINE=InnoDB ROW_FORMAT=REDUNDANT')
|
||||
FROM seq_1_to_40);
|
||||
EXECUTE IMMEDIATE c;
|
||||
END;
|
||||
$$
|
||||
DELIMITER ;$$
|
||||
INSERT INTO t1 SET c1=NULL;
|
||||
--error ER_TOO_BIG_ROWSIZE
|
||||
ALTER TABLE t1 ADD c41 INT FIRST;
|
||||
--error ER_TOO_BIG_ROWSIZE
|
||||
ALTER TABLE t1 ADD c41 INT FIRST;
|
||||
CHECK TABLE t1;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo # End of 10.4 tests
|
||||
|
66
mysql-test/suite/rpl/r/rpl_deadlock_show_slave_status.result
Normal file
66
mysql-test/suite/rpl/r/rpl_deadlock_show_slave_status.result
Normal file
@ -0,0 +1,66 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
#
|
||||
# Initialize test data
|
||||
connection master;
|
||||
create table t1 (a int) engine=innodb;
|
||||
insert into t1 values (1);
|
||||
include/save_master_gtid.inc
|
||||
connection slave;
|
||||
include/sync_with_master_gtid.inc
|
||||
include/stop_slave.inc
|
||||
call mtr.add_suppression("Connection was killed");
|
||||
call mtr.add_suppression("Commit failed due to failure of an earlier commit on which this one depends");
|
||||
set @save_parallel_threads= @@global.slave_parallel_threads;
|
||||
set @save_parallel_mode= @@global.slave_parallel_mode;
|
||||
set @save_transaction_retries= @@global.slave_transaction_retries;
|
||||
set @save_innodb_lock_wait_timeout= @@global.innodb_lock_wait_timeout;
|
||||
set @@global.slave_parallel_threads= 2;
|
||||
set @@global.slave_parallel_mode= CONSERVATIVE;
|
||||
set @@global.slave_transaction_retries= 0;
|
||||
set @@global.innodb_lock_wait_timeout= 10;
|
||||
# Grabbing lock on innodb row to force future replication transaction to wait (and eventually timeout)
|
||||
BEGIN;
|
||||
select * from t1 where a=1 for update;
|
||||
a
|
||||
1
|
||||
connection master;
|
||||
set @old_dbug= @@session.debug_dbug;
|
||||
set @@session.debug_dbug="+d,binlog_force_commit_id";
|
||||
SET @commit_id= 10000;
|
||||
update t1 set a=2 where a=1;
|
||||
SET @commit_id= 10001;
|
||||
insert into t1 values (3);
|
||||
set @@session.debug_dbug= @old_dbug;
|
||||
connection slave;
|
||||
start slave;
|
||||
# Waiting for first transaction to start (and be held at innodb row lock)..
|
||||
# Waiting for next transaction to start and hold at do_gco_wait()..
|
||||
connection slave1;
|
||||
set @@session.debug_dbug="+d,hold_sss_with_err_lock";
|
||||
show slave status;
|
||||
connection slave;
|
||||
set debug_sync="now wait_for sss_got_err_lock";
|
||||
kill <TID of worker in do_gco_wait>;
|
||||
set debug_sync="now signal sss_continue";
|
||||
connection slave1;
|
||||
# Waiting for SHOW SLAVE STATUS to complete..
|
||||
# ..done
|
||||
connection slave;
|
||||
ROLLBACK;
|
||||
include/wait_for_slave_sql_error.inc [errno=1927]
|
||||
#
|
||||
# Cleanup
|
||||
connection master;
|
||||
drop table t1;
|
||||
include/save_master_gtid.inc
|
||||
connection slave;
|
||||
set debug_sync= "RESET";
|
||||
set @@global.slave_parallel_threads= @save_parallel_threads;
|
||||
set @@global.slave_parallel_mode= @save_parallel_mode;
|
||||
set @@global.slave_transaction_retries= @save_transaction_retries;
|
||||
set @@global.innodb_lock_wait_timeout= @save_innodb_lock_wait_timeout;
|
||||
start slave sql_thread;
|
||||
include/sync_with_master_gtid.inc
|
||||
include/rpl_end.inc
|
||||
# End of rpl_deadlock_show_slave_status.test
|
78
mysql-test/suite/rpl/r/rpl_gtid_slave_filtering.result
Normal file
78
mysql-test/suite/rpl/r/rpl_gtid_slave_filtering.result
Normal file
@ -0,0 +1,78 @@
|
||||
include/rpl_init.inc [topology=1->2->3]
|
||||
*** Test GTID master switch in a topology with filtered events.
|
||||
*** With --gtid-ignore-duplicate and --gtid-strict-mode, should allow
|
||||
*** GTID connect at a GTID position that is filtered on the new master.
|
||||
connection server_1;
|
||||
ALTER TABLE mysql.gtid_slave_pos ENGINE=InnoDB;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1,1);
|
||||
CREATE TABLE t3 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
|
||||
INSERT INTO t3 VALUES (1,1);
|
||||
INSERT INTO t1 VALUES (2,1);
|
||||
INSERT INTO t3 VALUES (2,1);
|
||||
include/save_master_gtid.inc
|
||||
connection server_2;
|
||||
CREATE TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1,2);
|
||||
include/sync_with_master_gtid.inc
|
||||
include/save_master_gtid.inc
|
||||
connection server_3;
|
||||
include/sync_with_master_gtid.inc
|
||||
*** Promote 3 as new master, demote 2 as slave of 3.
|
||||
*** GTID position of 2 in domain 0 is filtered on 3.
|
||||
connection server_2;
|
||||
include/stop_slave.inc
|
||||
connection server_3;
|
||||
include/stop_slave.inc
|
||||
CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_1,
|
||||
MASTER_USE_GTID=SLAVE_POS;
|
||||
connection server_2;
|
||||
CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_3,
|
||||
MASTER_USE_GTID=SLAVE_POS;
|
||||
include/start_slave.inc
|
||||
connection server_3;
|
||||
include/start_slave.inc
|
||||
connection server_1;
|
||||
INSERT INTO t1 VALUES (3,1);
|
||||
INSERT INTO t3 VALUES (3,1);
|
||||
include/save_master_gtid.inc
|
||||
connection server_3;
|
||||
INSERT INTO t2 VALUES (2,2);
|
||||
include/sync_with_master_gtid.inc
|
||||
include/save_master_gtid.inc
|
||||
connection server_2;
|
||||
include/sync_with_master_gtid.inc
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 1
|
||||
2 1
|
||||
3 1
|
||||
SELECT * FROM t3 ORDER BY a;
|
||||
ERROR 42S02: Table 'test.t3' doesn't exist
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
1 2
|
||||
2 2
|
||||
*** Restore original topology.
|
||||
connection server_3;
|
||||
include/stop_slave.inc
|
||||
connection server_2;
|
||||
include/stop_slave.inc
|
||||
CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_1,
|
||||
MASTER_USE_GTID=SLAVE_POS;
|
||||
include/start_slave.inc
|
||||
connection server_3;
|
||||
CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_2,
|
||||
MASTER_USE_GTID=SLAVE_POS;
|
||||
include/start_slave.inc
|
||||
connection server_1;
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t3;
|
||||
include/save_master_gtid.inc
|
||||
connection server_2;
|
||||
DROP TABLE t2;
|
||||
include/sync_with_master_gtid.inc
|
||||
include/save_master_gtid.inc
|
||||
connection server_3;
|
||||
include/sync_with_master_gtid.inc
|
||||
include/rpl_end.inc
|
121
mysql-test/suite/rpl/t/rpl_deadlock_show_slave_status.test
Normal file
121
mysql-test/suite/rpl/t/rpl_deadlock_show_slave_status.test
Normal file
@ -0,0 +1,121 @@
|
||||
#
|
||||
# Verify that SHOW SLAVE STATUS will not cause deadlocks on the replica.
|
||||
# A deadlock has been seen in do_gco_wait if the thread is killed, as it will
|
||||
# hold the LOCK_parallel_entry, and during error reporting, try to grab the
|
||||
# err_lock. Prior to MDEV-10653, SHOW SLAVE STATUS would grab these locks in
|
||||
# the reverse order, as calling workers_idle() used to grab LOCK_parallel_entry
|
||||
# with the err_lock already grabbed (though the MDEV-10653 patch changed the
|
||||
# workles_idle() implementation to remove the need for locking the
|
||||
# parallel_entry).
|
||||
#
|
||||
# References:
|
||||
# MDEV-10653: SHOW SLAVE STATUS Can Deadlock an Errored Slave
|
||||
#
|
||||
|
||||
--source include/master-slave.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/have_binlog_format_row.inc
|
||||
|
||||
--echo #
|
||||
--echo # Initialize test data
|
||||
--connection master
|
||||
create table t1 (a int) engine=innodb;
|
||||
insert into t1 values (1);
|
||||
--source include/save_master_gtid.inc
|
||||
|
||||
--connection slave
|
||||
--source include/sync_with_master_gtid.inc
|
||||
--source include/stop_slave.inc
|
||||
|
||||
call mtr.add_suppression("Connection was killed");
|
||||
call mtr.add_suppression("Commit failed due to failure of an earlier commit on which this one depends");
|
||||
|
||||
set @save_parallel_threads= @@global.slave_parallel_threads;
|
||||
set @save_parallel_mode= @@global.slave_parallel_mode;
|
||||
set @save_transaction_retries= @@global.slave_transaction_retries;
|
||||
set @save_innodb_lock_wait_timeout= @@global.innodb_lock_wait_timeout;
|
||||
|
||||
set @@global.slave_parallel_threads= 2;
|
||||
set @@global.slave_parallel_mode= CONSERVATIVE;
|
||||
set @@global.slave_transaction_retries= 0;
|
||||
set @@global.innodb_lock_wait_timeout= 10;
|
||||
|
||||
--echo # Grabbing lock on innodb row to force future replication transaction to wait (and eventually timeout)
|
||||
BEGIN;
|
||||
select * from t1 where a=1 for update;
|
||||
|
||||
--connection master
|
||||
|
||||
set @old_dbug= @@session.debug_dbug;
|
||||
set @@session.debug_dbug="+d,binlog_force_commit_id";
|
||||
|
||||
|
||||
# GCO 1
|
||||
SET @commit_id= 10000;
|
||||
# T1
|
||||
update t1 set a=2 where a=1;
|
||||
|
||||
# GCO 2
|
||||
SET @commit_id= 10001;
|
||||
# T2
|
||||
insert into t1 values (3);
|
||||
|
||||
set @@session.debug_dbug= @old_dbug;
|
||||
|
||||
--connection slave
|
||||
start slave;
|
||||
|
||||
--echo # Waiting for first transaction to start (and be held at innodb row lock)..
|
||||
--let $wait_condition= SELECT count(*)=1 FROM information_schema.processlist WHERE state LIKE 'Update_rows_log_event::find_row(%)' and command LIKE 'Slave_worker';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--echo # Waiting for next transaction to start and hold at do_gco_wait()..
|
||||
--let $wait_condition= SELECT count(*)=1 FROM information_schema.processlist WHERE state LIKE 'Waiting for prior transaction to start commit%' and command LIKE 'Slave_worker';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--connection slave1
|
||||
set @@session.debug_dbug="+d,hold_sss_with_err_lock";
|
||||
--send show slave status
|
||||
|
||||
--connection slave
|
||||
set debug_sync="now wait_for sss_got_err_lock";
|
||||
|
||||
--let $t2_tid= `SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'Waiting for prior transaction to start commit%'`
|
||||
--replace_result $t2_tid "<TID of worker in do_gco_wait>"
|
||||
--eval kill $t2_tid
|
||||
--let $wait_condition= SELECT count(*)=1 FROM information_schema.processlist WHERE command LIKE 'Killed';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
set debug_sync="now signal sss_continue";
|
||||
|
||||
--connection slave1
|
||||
--echo # Waiting for SHOW SLAVE STATUS to complete..
|
||||
--disable_result_log
|
||||
--reap
|
||||
--enable_result_log
|
||||
--echo # ..done
|
||||
|
||||
--connection slave
|
||||
ROLLBACK;
|
||||
--let $slave_sql_errno= 1927
|
||||
--source include/wait_for_slave_sql_error.inc
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Cleanup
|
||||
--connection master
|
||||
drop table t1;
|
||||
--source include/save_master_gtid.inc
|
||||
|
||||
--connection slave
|
||||
set debug_sync= "RESET";
|
||||
set @@global.slave_parallel_threads= @save_parallel_threads;
|
||||
set @@global.slave_parallel_mode= @save_parallel_mode;
|
||||
set @@global.slave_transaction_retries= @save_transaction_retries;
|
||||
set @@global.innodb_lock_wait_timeout= @save_innodb_lock_wait_timeout;
|
||||
start slave sql_thread;
|
||||
--source include/sync_with_master_gtid.inc
|
||||
|
||||
--source include/rpl_end.inc
|
||||
--echo # End of rpl_deadlock_show_slave_status.test
|
28
mysql-test/suite/rpl/t/rpl_gtid_slave_filtering.cnf
Normal file
28
mysql-test/suite/rpl/t/rpl_gtid_slave_filtering.cnf
Normal file
@ -0,0 +1,28 @@
|
||||
!include ../my.cnf
|
||||
|
||||
[mysqld.1]
|
||||
log-slave-updates
|
||||
loose-innodb
|
||||
gtid-domain-id=1
|
||||
gtid-strict-mode=0
|
||||
gtid-ignore-duplicates=1
|
||||
|
||||
[mysqld.2]
|
||||
log-slave-updates
|
||||
loose-innodb
|
||||
gtid-domain-id=0
|
||||
replicate-ignore-table=test.t3
|
||||
gtid-strict-mode=0
|
||||
gtid-ignore-duplicates=1
|
||||
|
||||
[mysqld.3]
|
||||
log-slave-updates
|
||||
loose-innodb
|
||||
gtid-domain-id=0
|
||||
replicate-ignore-table=test.t3
|
||||
gtid-strict-mode=0
|
||||
gtid-ignore-duplicates=1
|
||||
|
||||
[ENV]
|
||||
SERVER_MYPORT_3= @mysqld.3.port
|
||||
SERVER_MYSOCK_3= @mysqld.3.socket
|
109
mysql-test/suite/rpl/t/rpl_gtid_slave_filtering.test
Normal file
109
mysql-test/suite/rpl/t/rpl_gtid_slave_filtering.test
Normal file
@ -0,0 +1,109 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_binlog_format_mixed.inc
|
||||
|
||||
--let $rpl_topology=1->2->3
|
||||
--source include/rpl_init.inc
|
||||
|
||||
--echo *** Test GTID master switch in a topology with filtered events.
|
||||
--echo *** With --gtid-ignore-duplicate and --gtid-strict-mode, should allow
|
||||
--echo *** GTID connect at a GTID position that is filtered on the new master.
|
||||
|
||||
--connection server_1
|
||||
|
||||
ALTER TABLE mysql.gtid_slave_pos ENGINE=InnoDB;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1,1);
|
||||
CREATE TABLE t3 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
|
||||
INSERT INTO t3 VALUES (1,1);
|
||||
INSERT INTO t1 VALUES (2,1);
|
||||
INSERT INTO t3 VALUES (2,1);
|
||||
--source include/save_master_gtid.inc
|
||||
|
||||
--connection server_2
|
||||
CREATE TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1,2);
|
||||
|
||||
--let $slave_timeout= 10
|
||||
--source include/sync_with_master_gtid.inc
|
||||
--source include/save_master_gtid.inc
|
||||
|
||||
--connection server_3
|
||||
--source include/sync_with_master_gtid.inc
|
||||
|
||||
--echo *** Promote 3 as new master, demote 2 as slave of 3.
|
||||
--echo *** GTID position of 2 in domain 0 is filtered on 3.
|
||||
|
||||
--connection server_2
|
||||
--source include/stop_slave.inc
|
||||
|
||||
--connection server_3
|
||||
--source include/stop_slave.inc
|
||||
--replace_result $SERVER_MYPORT_1 SERVER_MYPORT_1
|
||||
eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $SERVER_MYPORT_1,
|
||||
MASTER_USE_GTID=SLAVE_POS;
|
||||
|
||||
--connection server_2
|
||||
--replace_result $SERVER_MYPORT_3 SERVER_MYPORT_3
|
||||
eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $SERVER_MYPORT_3,
|
||||
MASTER_USE_GTID=SLAVE_POS;
|
||||
--source include/start_slave.inc
|
||||
|
||||
--connection server_3
|
||||
--source include/start_slave.inc
|
||||
|
||||
--connection server_1
|
||||
INSERT INTO t1 VALUES (3,1);
|
||||
INSERT INTO t3 VALUES (3,1);
|
||||
--source include/save_master_gtid.inc
|
||||
|
||||
--connection server_3
|
||||
INSERT INTO t2 VALUES (2,2);
|
||||
|
||||
--source include/sync_with_master_gtid.inc
|
||||
--source include/save_master_gtid.inc
|
||||
|
||||
--connection server_2
|
||||
--source include/sync_with_master_gtid.inc
|
||||
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
# Verify that table t3 is being filtered.
|
||||
--error 1146
|
||||
SELECT * FROM t3 ORDER BY a;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
|
||||
|
||||
--echo *** Restore original topology.
|
||||
|
||||
--connection server_3
|
||||
--source include/stop_slave.inc
|
||||
|
||||
--connection server_2
|
||||
--source include/stop_slave.inc
|
||||
--replace_result $SERVER_MYPORT_1 SERVER_MYPORT_1
|
||||
eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $SERVER_MYPORT_1,
|
||||
MASTER_USE_GTID=SLAVE_POS;
|
||||
--source include/start_slave.inc
|
||||
|
||||
--connection server_3
|
||||
--replace_result $SERVER_MYPORT_2 SERVER_MYPORT_2
|
||||
eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $SERVER_MYPORT_2,
|
||||
MASTER_USE_GTID=SLAVE_POS;
|
||||
--source include/start_slave.inc
|
||||
|
||||
|
||||
# Cleanup
|
||||
|
||||
--connection server_1
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t3;
|
||||
--source include/save_master_gtid.inc
|
||||
|
||||
--connection server_2
|
||||
DROP TABLE t2;
|
||||
--source include/sync_with_master_gtid.inc
|
||||
--source include/save_master_gtid.inc
|
||||
|
||||
--connection server_3
|
||||
--source include/sync_with_master_gtid.inc
|
||||
|
||||
--source include/rpl_end.inc
|
@ -210,8 +210,12 @@ create table t1 (a int);
|
||||
alter sequence t1 minvalue=100;
|
||||
ERROR 42S02: 'test.t1' is not a SEQUENCE
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-32795: ALTER SEQUENCE IF NOT EXISTS non_existing_seq Errors rather than note
|
||||
#
|
||||
alter sequence if exists t1 minvalue=100;
|
||||
ERROR 42S02: Unknown SEQUENCE: 't1'
|
||||
Warnings:
|
||||
Note 4091 Unknown SEQUENCE: 'test.t1'
|
||||
alter sequence t1 minvalue=100;
|
||||
ERROR 42S02: Unknown SEQUENCE: 't1'
|
||||
create sequence t1;
|
||||
|
@ -120,8 +120,12 @@ create table t1 (a int);
|
||||
alter sequence t1 minvalue=100;
|
||||
drop table t1;
|
||||
|
||||
--error ER_UNKNOWN_SEQUENCES
|
||||
--echo #
|
||||
--echo # MDEV-32795: ALTER SEQUENCE IF NOT EXISTS non_existing_seq Errors rather than note
|
||||
--echo #
|
||||
|
||||
alter sequence if exists t1 minvalue=100;
|
||||
|
||||
--error ER_UNKNOWN_SEQUENCES
|
||||
alter sequence t1 minvalue=100;
|
||||
|
||||
|
@ -7,6 +7,6 @@ DISKS CREATE TEMPORARY TABLE `DISKS` (
|
||||
`Used` bigint(32) NOT NULL,
|
||||
`Available` bigint(32) NOT NULL
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci
|
||||
select sum(Total) > sum(Available), sum(Total)>sum(Used) from information_schema.disks;
|
||||
sum(Total) > sum(Available) sum(Total)>sum(Used)
|
||||
select sum(Total) >= sum(Available), sum(Total)>=sum(Used) from information_schema.disks;
|
||||
sum(Total) >= sum(Available) sum(Total)>=sum(Used)
|
||||
1 1
|
||||
|
@ -1,3 +1,3 @@
|
||||
--replace_regex /varchar\([0-9]+\)/varchar(pathlen)/
|
||||
show create table information_schema.disks;
|
||||
select sum(Total) > sum(Available), sum(Total)>sum(Used) from information_schema.disks;
|
||||
select sum(Total) >= sum(Available), sum(Total)>=sum(Used) from information_schema.disks;
|
||||
|
@ -6,16 +6,16 @@ CREATE USER user1@localhost;
|
||||
GRANT SELECT ON *.* TO user1@localhost;
|
||||
connect con1,localhost,user1,,;
|
||||
connection con1;
|
||||
select sum(Total) > sum(Available), sum(Total)>sum(Used) from information_schema.disks;
|
||||
sum(Total) > sum(Available) sum(Total)>sum(Used)
|
||||
select sum(Total) >= sum(Available), sum(Total) >= sum(Used) from information_schema.disks;
|
||||
sum(Total) >= sum(Available) sum(Total) >= sum(Used)
|
||||
NULL NULL
|
||||
disconnect con1;
|
||||
connection default;
|
||||
GRANT FILE ON *.* TO user1@localhost;
|
||||
connect con1,localhost,user1,,;
|
||||
connection con1;
|
||||
select sum(Total) > sum(Available), sum(Total)>sum(Used) from information_schema.disks;
|
||||
sum(Total) > sum(Available) sum(Total)>sum(Used)
|
||||
select sum(Total) >= sum(Available), sum(Total) >= sum(Used) from information_schema.disks;
|
||||
sum(Total) >= sum(Available) sum(Total) >= sum(Used)
|
||||
1 1
|
||||
connection default;
|
||||
DROP USER user1@localhost;
|
||||
|
@ -10,7 +10,7 @@ GRANT SELECT ON *.* TO user1@localhost;
|
||||
|
||||
connect (con1,localhost,user1,,);
|
||||
connection con1;
|
||||
select sum(Total) > sum(Available), sum(Total)>sum(Used) from information_schema.disks;
|
||||
select sum(Total) >= sum(Available), sum(Total) >= sum(Used) from information_schema.disks;
|
||||
disconnect con1;
|
||||
|
||||
connection default;
|
||||
@ -18,7 +18,7 @@ GRANT FILE ON *.* TO user1@localhost;
|
||||
|
||||
connect (con1,localhost,user1,,);
|
||||
connection con1;
|
||||
select sum(Total) > sum(Available), sum(Total)>sum(Used) from information_schema.disks;
|
||||
select sum(Total) >= sum(Available), sum(Total) >= sum(Used) from information_schema.disks;
|
||||
connection default;
|
||||
DROP USER user1@localhost;
|
||||
|
||||
|
@ -180,6 +180,11 @@ UPDATE user
|
||||
SET plugin='unix_socket' WHERE plugin='auth_socket';
|
||||
DELETE FROM plugin
|
||||
WHERE name='auth_socket';
|
||||
# Delete plugins that are now inbuilt but might not have been before (MDEV-32043)
|
||||
DELETE plugin
|
||||
FROM information_schema.PLUGINS is_p
|
||||
JOIN plugin ON plugin.name = is_p.PLUGIN_NAME
|
||||
WHERE is_p.PLUGIN_LIBRARY IS NULL;
|
||||
|
||||
ALTER TABLE user
|
||||
MODIFY Password char(41) character set latin1 collate latin1_bin NOT NULL default '',
|
||||
|
@ -271,13 +271,26 @@ int ha_sequence::write_row(const uchar *buf)
|
||||
}
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
/* We need to start Galera transaction for select NEXT VALUE FOR
|
||||
sequence if it is not yet started. Note that ALTER is handled
|
||||
as TOI. */
|
||||
if (WSREP_ON && WSREP(thd) &&
|
||||
!thd->wsrep_trx().active() &&
|
||||
wsrep_thd_is_local(thd))
|
||||
wsrep_start_transaction(thd, thd->wsrep_next_trx_id());
|
||||
if (WSREP_ON && WSREP(thd) && wsrep_thd_is_local(thd))
|
||||
{
|
||||
if (sequence_locked &&
|
||||
(wsrep_thd_is_SR(thd) || wsrep_streaming_enabled(thd)))
|
||||
{
|
||||
my_error(ER_NOT_SUPPORTED_YET, MYF(0),
|
||||
"SEQUENCEs with streaming replication in Galera cluster");
|
||||
DBUG_RETURN(HA_ERR_UNSUPPORTED);
|
||||
}
|
||||
|
||||
/*
|
||||
We need to start Galera transaction for select NEXT VALUE FOR
|
||||
sequence if it is not yet started. Note that ALTER is handled
|
||||
as TOI.
|
||||
*/
|
||||
if (!thd->wsrep_trx().active())
|
||||
{
|
||||
wsrep_start_transaction(thd, thd->wsrep_next_trx_id());
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (likely(!(error= file->update_first_row(buf))))
|
||||
|
@ -4272,7 +4272,7 @@ Item_func_group_concat::fix_fields(THD *thd, Item **ref)
|
||||
String *new_separator;
|
||||
|
||||
DBUG_ASSERT(thd->active_stmt_arena_to_use()->
|
||||
is_stmt_prepare_or_first_sp_execute() ||
|
||||
is_stmt_prepare_or_first_stmt_execute() ||
|
||||
thd->active_stmt_arena_to_use()->
|
||||
is_conventional() ||
|
||||
thd->active_stmt_arena_to_use()->state ==
|
||||
|
@ -2565,23 +2565,10 @@ rpl_parallel::stop_during_until()
|
||||
|
||||
|
||||
bool
|
||||
rpl_parallel::workers_idle()
|
||||
rpl_parallel::workers_idle(Relay_log_info *rli)
|
||||
{
|
||||
struct rpl_parallel_entry *e;
|
||||
uint32 i, max_i;
|
||||
|
||||
max_i= domain_hash.records;
|
||||
for (i= 0; i < max_i; ++i)
|
||||
{
|
||||
bool active;
|
||||
e= (struct rpl_parallel_entry *)my_hash_element(&domain_hash, i);
|
||||
mysql_mutex_lock(&e->LOCK_parallel_entry);
|
||||
active= e->current_sub_id > e->last_committed_sub_id;
|
||||
mysql_mutex_unlock(&e->LOCK_parallel_entry);
|
||||
if (active)
|
||||
break;
|
||||
}
|
||||
return (i == max_i);
|
||||
return rli->last_inuse_relaylog->queued_count ==
|
||||
rli->last_inuse_relaylog->dequeued_count;
|
||||
}
|
||||
|
||||
|
||||
|
@ -370,9 +370,10 @@ struct rpl_parallel {
|
||||
rpl_parallel_entry *find(uint32 domain_id);
|
||||
void wait_for_done(THD *thd, Relay_log_info *rli);
|
||||
void stop_during_until();
|
||||
bool workers_idle();
|
||||
int wait_for_workers_idle(THD *thd);
|
||||
int do_event(rpl_group_info *serial_rgi, Log_event *ev, ulonglong event_size);
|
||||
|
||||
static bool workers_idle(Relay_log_info *rli);
|
||||
};
|
||||
|
||||
|
||||
|
@ -622,7 +622,7 @@ struct inuse_relaylog {
|
||||
rpl_gtid *relay_log_state;
|
||||
uint32 relay_log_state_count;
|
||||
/* Number of events in this relay log queued for worker threads. */
|
||||
int64 queued_count;
|
||||
Atomic_counter<int64> queued_count;
|
||||
/* Number of events completed by worker threads. */
|
||||
Atomic_counter<int64> dequeued_count;
|
||||
/* Set when all events have been read from a relaylog. */
|
||||
|
11
sql/slave.cc
11
sql/slave.cc
@ -3161,6 +3161,14 @@ static bool send_show_master_info_data(THD *thd, Master_info *mi, bool full,
|
||||
mysql_mutex_lock(&mi->err_lock);
|
||||
/* err_lock is to protect mi->rli.last_error() */
|
||||
mysql_mutex_lock(&mi->rli.err_lock);
|
||||
|
||||
DBUG_EXECUTE_IF("hold_sss_with_err_lock", {
|
||||
DBUG_ASSERT(!debug_sync_set_action(
|
||||
thd, STRING_WITH_LEN("now SIGNAL sss_got_err_lock "
|
||||
"WAIT_FOR sss_continue")));
|
||||
DBUG_SET("-d,hold_sss_with_err_lock");
|
||||
});
|
||||
|
||||
protocol->store(mi->host, &my_charset_bin);
|
||||
protocol->store(mi->user, &my_charset_bin);
|
||||
protocol->store((uint32) mi->port);
|
||||
@ -3235,7 +3243,8 @@ static bool send_show_master_info_data(THD *thd, Master_info *mi, bool full,
|
||||
while the slave is processing ignored events, such as those skipped
|
||||
due to slave_skip_counter.
|
||||
*/
|
||||
if (mi->using_parallel() && idle && !mi->rli.parallel.workers_idle())
|
||||
if (mi->using_parallel() && idle &&
|
||||
!rpl_parallel::workers_idle(&mi->rli))
|
||||
idle= false;
|
||||
}
|
||||
if (idle)
|
||||
|
@ -73,7 +73,9 @@ No_such_table_error_handler::handle_condition(THD *,
|
||||
Sql_condition ** cond_hdl)
|
||||
{
|
||||
*cond_hdl= NULL;
|
||||
if (sql_errno == ER_NO_SUCH_TABLE || sql_errno == ER_NO_SUCH_TABLE_IN_ENGINE)
|
||||
if (sql_errno == ER_NO_SUCH_TABLE
|
||||
|| sql_errno == ER_NO_SUCH_TABLE_IN_ENGINE
|
||||
|| sql_errno == ER_UNKNOWN_SEQUENCES)
|
||||
{
|
||||
m_handled_errors++;
|
||||
return TRUE;
|
||||
|
@ -1227,6 +1227,9 @@ bool mysql_derived_fill(THD *thd, LEX *lex, TABLE_LIST *derived)
|
||||
goto err;
|
||||
JOIN *join= unit->first_select()->join;
|
||||
join->first_record= false;
|
||||
if (join->zero_result_cause)
|
||||
goto err;
|
||||
|
||||
for (uint i= join->top_join_tab_count;
|
||||
i < join->top_join_tab_count + join->aggr_tables;
|
||||
i++)
|
||||
|
@ -1962,7 +1962,7 @@ static void plugin_load(MEM_ROOT *tmp_root)
|
||||
the mutex here to satisfy the assert
|
||||
*/
|
||||
mysql_mutex_lock(&LOCK_plugin);
|
||||
plugin_add(tmp_root, false, &name, &dl, MYF(ME_ERROR_LOG));
|
||||
plugin_add(tmp_root, true, &name, &dl, MYF(ME_ERROR_LOG));
|
||||
free_root(tmp_root, MYF(MY_MARK_BLOCKS_FREE));
|
||||
mysql_mutex_unlock(&LOCK_plugin);
|
||||
}
|
||||
|
@ -7471,11 +7471,7 @@ alter:
|
||||
| ALTER SEQUENCE_SYM opt_if_exists
|
||||
{
|
||||
LEX *lex= Lex;
|
||||
lex->name= null_clex_str;
|
||||
lex->table_type= TABLE_TYPE_UNKNOWN;
|
||||
lex->sql_command= SQLCOM_ALTER_SEQUENCE;
|
||||
lex->create_info.init();
|
||||
lex->no_write_to_binlog= 0;
|
||||
DBUG_ASSERT(!lex->m_sql_cmd);
|
||||
if (Lex->main_select_push())
|
||||
MYSQL_YYABORT;
|
||||
|
@ -204,6 +204,11 @@ int wsrep_apply_events(THD* thd,
|
||||
(thd->variables.option_bits & ~OPTION_SKIP_REPLICATION) |
|
||||
(ev->flags & LOG_EVENT_SKIP_REPLICATION_F ? OPTION_SKIP_REPLICATION : 0);
|
||||
|
||||
if (ev->get_type_code() == GTID_EVENT)
|
||||
{
|
||||
thd->variables.option_bits &= ~OPTION_GTID_BEGIN;
|
||||
}
|
||||
|
||||
ev->thd= thd;
|
||||
exec_res= ev->apply_event(thd->wsrep_rgi);
|
||||
DBUG_PRINT("info", ("exec_event result: %d", exec_res));
|
||||
|
@ -569,6 +569,7 @@ int Wsrep_applier_service::apply_write_set(const wsrep::ws_meta& ws_meta,
|
||||
THD* thd= m_thd;
|
||||
|
||||
thd->variables.option_bits |= OPTION_BEGIN;
|
||||
thd->variables.option_bits |= OPTION_GTID_BEGIN;
|
||||
thd->variables.option_bits |= OPTION_NOT_AUTOCOMMIT;
|
||||
DBUG_ASSERT(thd->wsrep_trx().active());
|
||||
DBUG_ASSERT(thd->wsrep_trx().state() == wsrep::transaction::s_executing);
|
||||
@ -600,6 +601,8 @@ int Wsrep_applier_service::apply_write_set(const wsrep::ws_meta& ws_meta,
|
||||
thd->wsrep_cs().fragment_applied(ws_meta.seqno());
|
||||
}
|
||||
thd_proc_info(thd, "wsrep applied write set");
|
||||
|
||||
thd->variables.option_bits &= ~OPTION_GTID_BEGIN;
|
||||
DBUG_RETURN(ret);
|
||||
}
|
||||
|
||||
|
@ -530,16 +530,9 @@ dict_stats_empty_index(
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
Write all zeros (or 1 where it makes sense) into a table and its indexes'
|
||||
statistics members. The resulting stats correspond to an empty table. */
|
||||
static
|
||||
void
|
||||
dict_stats_empty_table(
|
||||
/*===================*/
|
||||
dict_table_t* table, /*!< in/out: table */
|
||||
void dict_stats_empty_table(
|
||||
dict_table_t* table,
|
||||
bool empty_defrag_stats)
|
||||
/*!< in: whether to empty defrag stats */
|
||||
{
|
||||
mutex_enter(&dict_sys.mutex);
|
||||
|
||||
|
@ -14327,7 +14327,7 @@ ha_innobase::info_low(
|
||||
DBUG_ASSERT(ib_table->get_ref_count() > 0);
|
||||
|
||||
if (!ib_table->is_readable()) {
|
||||
ib_table->stat_initialized = true;
|
||||
dict_stats_empty_table(ib_table, true);
|
||||
}
|
||||
|
||||
if (flag & HA_STATUS_TIME) {
|
||||
@ -20919,6 +20919,10 @@ Compare_keys ha_innobase::compare_key_parts(
|
||||
if (old_part.length >= new_part.length)
|
||||
return Compare_keys::NotEqual;
|
||||
|
||||
if (old_part.length == old_field.key_length() &&
|
||||
new_part.length != new_field.length)
|
||||
return Compare_keys::NotEqual;
|
||||
|
||||
return Compare_keys::EqualButKeyPartLength;
|
||||
}
|
||||
|
||||
|
@ -2118,12 +2118,16 @@ innodb_instant_alter_column_allowed_reason:
|
||||
}
|
||||
}
|
||||
|
||||
bool need_rebuild = false;
|
||||
|
||||
switch (ha_alter_info->handler_flags & ~INNOBASE_INPLACE_IGNORE) {
|
||||
case ALTER_OPTIONS:
|
||||
if (alter_options_need_rebuild(ha_alter_info, table)) {
|
||||
if ((srv_file_per_table && !m_prebuilt->table->space_id)
|
||||
|| alter_options_need_rebuild(ha_alter_info, table)) {
|
||||
reason_rebuild = my_get_err_msg(
|
||||
ER_ALTER_OPERATION_TABLE_OPTIONS_NEED_REBUILD);
|
||||
ha_alter_info->unsupported_reason = reason_rebuild;
|
||||
need_rebuild= true;
|
||||
break;
|
||||
}
|
||||
/* fall through */
|
||||
@ -2235,7 +2239,7 @@ innodb_instant_alter_column_allowed_reason:
|
||||
|
||||
/* We should be able to do the operation in-place.
|
||||
See if we can do it online (LOCK=NONE) or without rebuild. */
|
||||
bool online = true, need_rebuild = false;
|
||||
bool online = true;
|
||||
const uint fulltext_indexes = innobase_fulltext_exist(altered_table);
|
||||
|
||||
/* Fix the key parts. */
|
||||
@ -6045,10 +6049,6 @@ empty_table:
|
||||
goto err_exit;
|
||||
}
|
||||
|
||||
btr_set_instant(root, *index, &mtr);
|
||||
mtr.commit();
|
||||
mtr.start();
|
||||
index->set_modified(mtr);
|
||||
err = row_ins_clust_index_entry_low(
|
||||
BTR_NO_LOCKING_FLAG, BTR_MODIFY_TREE, index,
|
||||
index->n_uniq, entry, 0, thr);
|
||||
|
@ -248,4 +248,13 @@ dict_stats_report_error(dict_table_t* table, bool defragment = false)
|
||||
void test_dict_stats_all();
|
||||
#endif /* UNIV_ENABLE_UNIT_TEST_DICT_STATS */
|
||||
|
||||
/** Write all zeros (or 1 where it makes sense) into a table
|
||||
and its indexes'statistics members. The resulting stats
|
||||
correspond to an empty table.
|
||||
@param table table stats to be emptied
|
||||
@param empty_defrag_stats empty the defrag stats */
|
||||
void
|
||||
dict_stats_empty_table(
|
||||
dict_table_t* table,
|
||||
bool empty_defrag_stats);
|
||||
#endif /* dict0stats_h */
|
||||
|
@ -120,7 +120,6 @@ struct row_import {
|
||||
row_import() UNIV_NOTHROW
|
||||
:
|
||||
m_table(NULL),
|
||||
m_version(0),
|
||||
m_hostname(NULL),
|
||||
m_table_name(NULL),
|
||||
m_autoinc(0),
|
||||
@ -199,8 +198,6 @@ struct row_import {
|
||||
|
||||
dict_table_t* m_table; /*!< Table instance */
|
||||
|
||||
ulint m_version; /*!< Version of config file */
|
||||
|
||||
byte* m_hostname; /*!< Hostname where the
|
||||
tablespace was exported */
|
||||
byte* m_table_name; /*!< Exporting instance table
|
||||
@ -3079,17 +3076,13 @@ row_import_read_meta_data(
|
||||
return(DB_IO_ERROR);
|
||||
}
|
||||
|
||||
cfg.m_version = mach_read_from_4(row);
|
||||
|
||||
/* Check the version number. */
|
||||
switch (cfg.m_version) {
|
||||
switch (mach_read_from_4(row)) {
|
||||
case IB_EXPORT_CFG_VERSION_V1:
|
||||
|
||||
return(row_import_read_v1(file, thd, &cfg));
|
||||
default:
|
||||
ib_errf(thd, IB_LOG_LEVEL_ERROR, ER_IO_READ_ERROR,
|
||||
"Unsupported meta-data version number (" ULINTPF "), "
|
||||
"file ignored", cfg.m_version);
|
||||
ib_senderrf(thd, IB_LOG_LEVEL_ERROR, ER_NOT_SUPPORTED_YET,
|
||||
"meta-data version");
|
||||
}
|
||||
|
||||
return(DB_ERROR);
|
||||
|
@ -2656,14 +2656,17 @@ row_ins_clust_index_entry_low(
|
||||
ut_ad(!dict_index_is_online_ddl(index));
|
||||
ut_ad(!index->table->persistent_autoinc);
|
||||
ut_ad(!index->is_instant());
|
||||
ut_ad(!entry->info_bits);
|
||||
mtr.set_log_mode(MTR_LOG_NO_REDO);
|
||||
} else {
|
||||
index->set_modified(mtr);
|
||||
|
||||
if (UNIV_UNLIKELY(entry->is_metadata())) {
|
||||
if (UNIV_UNLIKELY(entry->info_bits != 0)) {
|
||||
ut_ad(entry->is_metadata());
|
||||
ut_ad(index->is_instant());
|
||||
ut_ad(!dict_index_is_online_ddl(index));
|
||||
ut_ad(mode == BTR_MODIFY_TREE);
|
||||
ut_ad(flags == BTR_NO_LOCKING_FLAG);
|
||||
} else {
|
||||
if (mode == BTR_MODIFY_LEAF
|
||||
&& dict_index_is_online_ddl(index)) {
|
||||
@ -2715,11 +2718,6 @@ row_ins_clust_index_entry_low(
|
||||
#endif /* UNIV_DEBUG */
|
||||
|
||||
if (UNIV_UNLIKELY(entry->info_bits != 0)) {
|
||||
ut_ad(entry->is_metadata());
|
||||
ut_ad(flags == BTR_NO_LOCKING_FLAG);
|
||||
ut_ad(index->is_instant());
|
||||
ut_ad(!dict_index_is_online_ddl(index));
|
||||
|
||||
const rec_t* rec = btr_cur_get_rec(cursor);
|
||||
|
||||
if (rec_get_info_bits(rec, page_rec_is_comp(rec))
|
||||
@ -2828,7 +2826,17 @@ do_insert:
|
||||
}
|
||||
}
|
||||
|
||||
if (err == DB_SUCCESS && entry->info_bits) {
|
||||
if (buf_block_t* root
|
||||
= btr_root_block_get(index, RW_X_LATCH, &mtr)) {
|
||||
btr_set_instant(root, *index, &mtr);
|
||||
} else {
|
||||
ut_ad("cannot find root page" == 0);
|
||||
}
|
||||
}
|
||||
|
||||
if (big_rec != NULL) {
|
||||
ut_ad(err == DB_SUCCESS);
|
||||
mtr_commit(&mtr);
|
||||
|
||||
/* Online table rebuild could read (and
|
||||
|
22
storage/spider/mysql-test/spider/bugfix/r/mdev_28683.result
Normal file
22
storage/spider/mysql-test/spider/bugfix/r/mdev_28683.result
Normal file
@ -0,0 +1,22 @@
|
||||
#
|
||||
# MDEV-28683 Spider: SIGSEGV in spider_db_direct_delete, SIGSEGV in spider_db_connect, ASAN: heap-use-after-free in spider_db_direct_delete
|
||||
#
|
||||
for master_1
|
||||
for child2
|
||||
for child3
|
||||
CREATE TABLE t (c INT) ENGINE=Spider;
|
||||
SELECT * FROM t;
|
||||
ERROR HY000: Unable to connect to foreign data source: localhost
|
||||
INSERT INTO t (SELECT 1 FROM t);
|
||||
ERROR HY000: Unable to connect to foreign data source: localhost
|
||||
LOCK TABLES t WRITE CONCURRENT;
|
||||
DELETE FROM t;
|
||||
ERROR HY000: Unable to connect to foreign data source: localhost
|
||||
UNLOCK TABLES;
|
||||
DROP TABLE t;
|
||||
for master_1
|
||||
for child2
|
||||
for child3
|
||||
#
|
||||
# end of test mdev_28683
|
||||
#
|
@ -0,0 +1,20 @@
|
||||
#
|
||||
# MDEV-28739 Trying to lock uninitialized mutex or hang upon shutdown after using Spider with query_cache
|
||||
#
|
||||
for master_1
|
||||
for child2
|
||||
for child3
|
||||
set global query_cache_type= on;
|
||||
CREATE SERVER srv FOREIGN DATA WRAPPER mysql
|
||||
OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root');
|
||||
create table t2 (c int);
|
||||
create table t1 (c int) ENGINE=Spider
|
||||
COMMENT='WRAPPER "mysql", srv "srv",TABLE "t2"';
|
||||
SELECT * FROM t1;
|
||||
c
|
||||
# restart
|
||||
drop table t1, t2;
|
||||
drop server srv;
|
||||
for master_1
|
||||
for child2
|
||||
for child3
|
Loading…
x
Reference in New Issue
Block a user