diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2021-08-31 11:00:41 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2021-08-31 11:00:41 +0300 |
commit | e94172c2a07f21118d26e4cde0c48a2fd536cf06 (patch) | |
tree | 81d6b9b67c696e93abb618df35ab5a27094f6e31 | |
parent | 7271cf48d62196abc0c578d00ab3ca09b56aae77 (diff) | |
parent | e62120cec7aa21b9cf77773ecb0935b4b48ed26c (diff) | |
download | mariadb-git-e94172c2a07f21118d26e4cde0c48a2fd536cf06.tar.gz |
Merge 10.5 into 10.6
22 files changed, 105 insertions, 375 deletions
diff --git a/cmake/cpack_rpm.cmake b/cmake/cpack_rpm.cmake index f577e343dc1..5f954c7a1fe 100644 --- a/cmake/cpack_rpm.cmake +++ b/cmake/cpack_rpm.cmake @@ -35,7 +35,7 @@ SET(CPACK_COMPONENTS_ALL Server ManPagesServer IniFiles Server_Scripts SET(CPACK_RPM_PACKAGE_NAME ${CPACK_PACKAGE_NAME}) SET(CPACK_RPM_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION}) IF(CMAKE_VERSION VERSION_LESS "3.6.0") - SET(CPACK_PACKAGE_FILE_NAME "${CPACK_RPM_PACKAGE_NAME}-${CPACK_RPM_PACKAGE_VERSION}-${RPM}-${CMAKE_SYSTEM_PROCESSOR}") + SET(CPACK_PACKAGE_FILE_NAME "${CPACK_RPM_PACKAGE_NAME}-${SERVER_VERSION}-${RPM}-${CMAKE_SYSTEM_PROCESSOR}") ELSE() SET(CPACK_RPM_FILE_NAME "RPM-DEFAULT") OPTION(CPACK_RPM_DEBUGINFO_PACKAGE "" ON) diff --git a/extra/mariabackup/xtrabackup.cc b/extra/mariabackup/xtrabackup.cc index e1875e5a265..ae415b08c3e 100644 --- a/extra/mariabackup/xtrabackup.cc +++ b/extra/mariabackup/xtrabackup.cc @@ -3320,7 +3320,7 @@ static void xb_load_single_table_tablespace(const char *dirname, delete file; if (err != DB_SUCCESS && xtrabackup_backup && !is_empty_file) { - die("Failed to not validate first page of the file %s, error %d",name, (int)err); + die("Failed to validate first page of the file %s, error %d",name, (int)err); } ut_free(name); diff --git a/include/mysql/psi/psi.h b/include/mysql/psi/psi.h index 958a086f05a..2d669070e54 100644 --- a/include/mysql/psi/psi.h +++ b/include/mysql/psi/psi.h @@ -1442,7 +1442,7 @@ typedef void (*register_socket_v1_t) @return an instrumented mutex */ typedef struct PSI_mutex* (*init_mutex_v1_t) - (PSI_mutex_key key, const void *identity); + (PSI_mutex_key key, void *identity); /** Mutex instrumentation destruction API. @@ -1457,7 +1457,7 @@ typedef void (*destroy_mutex_v1_t)(struct PSI_mutex *mutex); @return an instrumented rwlock */ typedef struct PSI_rwlock* (*init_rwlock_v1_t) - (PSI_rwlock_key key, const void *identity); + (PSI_rwlock_key key, void *identity); /** Rwlock instrumentation destruction API. @@ -1472,7 +1472,7 @@ typedef void (*destroy_rwlock_v1_t)(struct PSI_rwlock *rwlock); @return an instrumented cond */ typedef struct PSI_cond* (*init_cond_v1_t) - (PSI_cond_key key, const void *identity); + (PSI_cond_key key, void *identity); /** Cond instrumentation destruction API. diff --git a/include/mysql/psi/psi_abi_v1.h.pp b/include/mysql/psi/psi_abi_v1.h.pp index 60a6a8031a6..a1845ac62f6 100644 --- a/include/mysql/psi/psi_abi_v1.h.pp +++ b/include/mysql/psi/psi_abi_v1.h.pp @@ -409,13 +409,13 @@ typedef void (*register_statement_v1_t) typedef void (*register_socket_v1_t) (const char *category, struct PSI_socket_info_v1 *info, int count); typedef struct PSI_mutex* (*init_mutex_v1_t) - (PSI_mutex_key key, const void *identity); + (PSI_mutex_key key, void *identity); typedef void (*destroy_mutex_v1_t)(struct PSI_mutex *mutex); typedef struct PSI_rwlock* (*init_rwlock_v1_t) - (PSI_rwlock_key key, const void *identity); + (PSI_rwlock_key key, void *identity); typedef void (*destroy_rwlock_v1_t)(struct PSI_rwlock *rwlock); typedef struct PSI_cond* (*init_cond_v1_t) - (PSI_cond_key key, const void *identity); + (PSI_cond_key key, void *identity); typedef void (*destroy_cond_v1_t)(struct PSI_cond *cond); typedef struct PSI_socket* (*init_socket_v1_t) (PSI_socket_key key, const my_socket *fd, diff --git a/include/pfs_thread_provider.h b/include/pfs_thread_provider.h index c4118a8efbf..3c43f8e3d77 100644 --- a/include/pfs_thread_provider.h +++ b/include/pfs_thread_provider.h @@ -52,17 +52,17 @@ void pfs_register_thread_v1(const char *category, int count); PSI_mutex* -pfs_init_mutex_v1(PSI_mutex_key key, const void *identity); +pfs_init_mutex_v1(PSI_mutex_key key, void *identity); void pfs_destroy_mutex_v1(PSI_mutex* mutex); PSI_rwlock* -pfs_init_rwlock_v1(PSI_rwlock_key key, const void *identity); +pfs_init_rwlock_v1(PSI_rwlock_key key, void *identity); void pfs_destroy_rwlock_v1(PSI_rwlock* rwlock); PSI_cond* -pfs_init_cond_v1(PSI_cond_key key, const void *identity); +pfs_init_cond_v1(PSI_cond_key key, void *identity); void pfs_destroy_cond_v1(PSI_cond* cond); diff --git a/libmariadb b/libmariadb -Subproject 7cf38704c916996e7b44f62c9e644cc6d001ee9 +Subproject fc25d79083ab0b6eb14c71be0439836502d8226 diff --git a/mysql-test/lib/My/Options.pm b/mysql-test/lib/My/Options.pm index 6e0efe862e7..5827e0666a6 100644 --- a/mysql-test/lib/My/Options.pm +++ b/mysql-test/lib/My/Options.pm @@ -140,24 +140,16 @@ sub diff { } -sub is_set { - my ($opts, $set_opts)= @_; +sub is_subset { + my ($set, $subset)= @_; + my %cache = map { _split_option($_) } @$set; - foreach my $opt (@$opts){ - - my ($opt_name1, $value1)= _split_option($opt); - - foreach my $set_opt (@$set_opts){ - my ($opt_name2, $value2)= _split_option($set_opt); - - if ($opt_name1 eq $opt_name2 and $value1 eq $value2){ - # Option already set - return 1; - } - } + for (@$subset){ + my ($name, $value)= _split_option($_); + return 0 unless exists $cache{$name} and $cache{$name} eq $value; } - return 0; + return 1; } diff --git a/mysql-test/lib/mtr_cases.pm b/mysql-test/lib/mtr_cases.pm index dd003dea31d..adc911ba937 100644 --- a/mysql-test/lib/mtr_cases.pm +++ b/mysql-test/lib/mtr_cases.pm @@ -626,8 +626,10 @@ sub make_combinations($$@) { # Skip all other combinations if the values they change # are already fixed in master_opt or slave_opt - if (My::Options::is_set($test->{master_opt}, $comb->{comb_opt}) && - My::Options::is_set($test->{slave_opt}, $comb->{comb_opt}) ){ + # (empty combinations are not considered a subset of anything) + if (@{$comb->{comb_opt}} && + My::Options::is_subset($test->{master_opt}, $comb->{comb_opt}) && + My::Options::is_subset($test->{slave_opt}, $comb->{comb_opt}) ){ $test_combs->{$comb->{name}} = 2; diff --git a/mysql-test/suite/innodb/r/table_flags,32k,debug.rdiff b/mysql-test/suite/innodb/r/table_flags,32k,debug.rdiff deleted file mode 100644 index babcd88bd91..00000000000 --- a/mysql-test/suite/innodb/r/table_flags,32k,debug.rdiff +++ /dev/null @@ -1,110 +0,0 @@ ---- suite/innodb/r/table_flags.result -+++ suite/innodb/r/table_flags,32k,debug.reject -@@ -6,6 +6,8 @@ - SET innodb_strict_mode=OFF; - CREATE TABLE tz(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=COMPRESSED - KEY_BLOCK_SIZE=1; -+Warnings: -+Warning 1478 InnoDB: Cannot create a COMPRESSED table when innodb_page_size > 16k. Assuming ROW_FORMAT=DYNAMIC. - SET innodb_strict_mode=ON; - CREATE TABLE tp(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=DYNAMIC - PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=9; -@@ -11,71 +11,71 @@ - PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=9; - SYS_TABLES clustered index root page (8): - N_RECS=8; LEVEL=0; INDEX_ID=0x0000000000000001 --header=0x01000003008d (NAME=0x696e66696d756d00) --header=0x0000101500d5 (NAME='SYS_FOREIGN', -+header=0x0100000300de (NAME=0x696e66696d756d00) -+header=0x000018150126 (NAME='SYS_FOREIGN', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x000000000000000b, -+ ID=0x000000000000000c, - N_COLS=0x00000004, - TYPE=0x00000001, - MIX_ID=0x0000000000000000, - MIX_LEN=0x00000040, - CLUSTER_NAME=NULL(0 bytes), - SPACE=0x00000000) --header=0x000018150122 (NAME='SYS_FOREIGN_COLS', -+header=0x000020150173 (NAME='SYS_FOREIGN_COLS', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x000000000000000c, -+ ID=0x000000000000000d, - N_COLS=0x00000004, - TYPE=0x00000001, - MIX_ID=0x0000000000000000, - MIX_LEN=0x00000040, - CLUSTER_NAME=NULL(0 bytes), - SPACE=0x00000000) --header=0x0000201501ae (NAME='SYS_VIRTUAL', -+header=0x0000281501bb (NAME='SYS_VIRTUAL', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x000000000000000d, -+ ID=0x000000000000000e, - N_COLS=0x00000003, - TYPE=0x00000001, - MIX_ID=0x0000000000000000, - MIX_LEN=0x00000040, - CLUSTER_NAME=NULL(0 bytes), - SPACE=0x00000000) --header=0x0400301501f2 (NAME='test/tc', -+header=0x0400301501ff (NAME='test/tc', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x000000000000000f, -+ ID=0x0000000000000010, - N_COLS=0x80000001, - TYPE=0x00000001, - MIX_ID=0x0000000000000000, - MIX_LEN=0x00000050, - CLUSTER_NAME=NULL(0 bytes), - SPACE=0x00000002) --header=0x00003815027a (NAME='test/td', -+header=0x000038150287 (NAME='test/td', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x0000000000000010, -+ ID=0x0000000000000011, - N_COLS=0x80000001, - TYPE=0x00000021, - MIX_ID=0x0000000000000000, - MIX_LEN=0x00000050, - CLUSTER_NAME=NULL(0 bytes), - SPACE=0x00000003) --header=0x00004815016a (NAME='test/tp', -+header=0x00004815008d (NAME='test/tp', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x0000000000000012, -+ ID=0x0000000000000013, - N_COLS=0x80000001, - TYPE=0x000009a1, - MIX_ID=0x0000000000000000, - MIX_LEN=0x00000050, - CLUSTER_NAME=NULL(0 bytes), - SPACE=0x00000005) --header=0x000028150236 (NAME='test/tr', -+header=0x000010150243 (NAME='test/tr', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x000000000000000e, -+ ID=0x000000000000000f, - N_COLS=0x00000001, - TYPE=0x00000001, - MIX_ID=0x0000000000000000, -@@ -85,9 +85,9 @@ - header=0x000040150074 (NAME='test/tz', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x0000000000000011, -+ ID=0x0000000000000012, - N_COLS=0x80000001, -- TYPE=0x00000023, -+ TYPE=0x00000021, - MIX_ID=0x0000000000000000, - MIX_LEN=0x00000050, - CLUSTER_NAME=NULL(0 bytes), diff --git a/mysql-test/suite/innodb/r/table_flags,32k,release.rdiff b/mysql-test/suite/innodb/r/table_flags,32k.rdiff index ce1ff623d50..8079d58bc43 100644 --- a/mysql-test/suite/innodb/r/table_flags,32k,release.rdiff +++ b/mysql-test/suite/innodb/r/table_flags,32k.rdiff @@ -1,6 +1,6 @@ --- suite/innodb/r/table_flags.result -+++ suite/innodb/r/table_flags,32k.reject -@@ -5,6 +5,8 @@ ++++ suite/innodb/r/table_flags.reject +@@ -6,6 +6,8 @@ SET innodb_strict_mode=OFF; CREATE TABLE tz(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1; @@ -9,9 +9,9 @@ SET innodb_strict_mode=ON; CREATE TABLE tp(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=DYNAMIC PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=9; -@@ -103,7 +105,7 @@ +@@ -87,7 +89,7 @@ DB_ROLL_PTR=0x80000000000000, - ID=0x0000000000000013, + ID=0x0000000000000011, N_COLS=0x80000001, - TYPE=0x00000023, + TYPE=0x00000021, diff --git a/mysql-test/suite/innodb/r/table_flags,64k,debug.rdiff b/mysql-test/suite/innodb/r/table_flags,64k,debug.rdiff deleted file mode 100644 index c8763b4c093..00000000000 --- a/mysql-test/suite/innodb/r/table_flags,64k,debug.rdiff +++ /dev/null @@ -1,110 +0,0 @@ ---- suite/innodb/r/table_flags.result -+++ suite/innodb/r/table_flags,64k,debug.reject -@@ -6,6 +6,8 @@ - SET innodb_strict_mode=OFF; - CREATE TABLE tz(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=COMPRESSED - KEY_BLOCK_SIZE=1; -+Warnings: -+Warning 1478 InnoDB: Cannot create a COMPRESSED table when innodb_page_size > 16k. Assuming ROW_FORMAT=DYNAMIC. - SET innodb_strict_mode=ON; - CREATE TABLE tp(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=DYNAMIC - PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=9; -@@ -11,71 +11,71 @@ - PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=9; - SYS_TABLES clustered index root page (8): - N_RECS=8; LEVEL=0; INDEX_ID=0x0000000000000001 --header=0x01000003008d (NAME=0x696e66696d756d00) --header=0x0000101500d5 (NAME='SYS_FOREIGN', -+header=0x0100000300de (NAME=0x696e66696d756d00) -+header=0x000018150126 (NAME='SYS_FOREIGN', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x000000000000000b, -+ ID=0x000000000000000c, - N_COLS=0x00000004, - TYPE=0x00000001, - MIX_ID=0x0000000000000000, - MIX_LEN=0x00000040, - CLUSTER_NAME=NULL(0 bytes), - SPACE=0x00000000) --header=0x000018150122 (NAME='SYS_FOREIGN_COLS', -+header=0x000020150173 (NAME='SYS_FOREIGN_COLS', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x000000000000000c, -+ ID=0x000000000000000d, - N_COLS=0x00000004, - TYPE=0x00000001, - MIX_ID=0x0000000000000000, - MIX_LEN=0x00000040, - CLUSTER_NAME=NULL(0 bytes), - SPACE=0x00000000) --header=0x0000201501ae (NAME='SYS_VIRTUAL', -+header=0x0000281501bb (NAME='SYS_VIRTUAL', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x000000000000000d, -+ ID=0x000000000000000e, - N_COLS=0x00000003, - TYPE=0x00000001, - MIX_ID=0x0000000000000000, - MIX_LEN=0x00000040, - CLUSTER_NAME=NULL(0 bytes), - SPACE=0x00000000) --header=0x0400301501f2 (NAME='test/tc', -+header=0x0400301501ff (NAME='test/tc', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x000000000000000f, -+ ID=0x0000000000000010, - N_COLS=0x80000001, - TYPE=0x00000001, - MIX_ID=0x0000000000000000, - MIX_LEN=0x00000050, - CLUSTER_NAME=NULL(0 bytes), - SPACE=0x00000002) --header=0x00003815027a (NAME='test/td', -+header=0x000038150287 (NAME='test/td', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x0000000000000010, -+ ID=0x0000000000000011, - N_COLS=0x80000001, - TYPE=0x00000021, - MIX_ID=0x0000000000000000, - MIX_LEN=0x00000050, - CLUSTER_NAME=NULL(0 bytes), - SPACE=0x00000003) --header=0x00004815016a (NAME='test/tp', -+header=0x00004815008d (NAME='test/tp', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x0000000000000012, -+ ID=0x0000000000000013, - N_COLS=0x80000001, - TYPE=0x000009a1, - MIX_ID=0x0000000000000000, - MIX_LEN=0x00000050, - CLUSTER_NAME=NULL(0 bytes), - SPACE=0x00000005) --header=0x000028150236 (NAME='test/tr', -+header=0x000010150243 (NAME='test/tr', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x000000000000000e, -+ ID=0x000000000000000f, - N_COLS=0x00000001, - TYPE=0x00000001, - MIX_ID=0x0000000000000000, -@@ -85,9 +85,9 @@ - header=0x000040150074 (NAME='test/tz', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x0000000000000011, -+ ID=0x0000000000000012, - N_COLS=0x80000001, -- TYPE=0x00000023, -+ TYPE=0x00000021, - MIX_ID=0x0000000000000000, - MIX_LEN=0x00000050, - CLUSTER_NAME=NULL(0 bytes), diff --git a/mysql-test/suite/innodb/r/table_flags,64k,release.rdiff b/mysql-test/suite/innodb/r/table_flags,64k.rdiff index f2ba1280be3..8079d58bc43 100644 --- a/mysql-test/suite/innodb/r/table_flags,64k,release.rdiff +++ b/mysql-test/suite/innodb/r/table_flags,64k.rdiff @@ -1,6 +1,6 @@ --- suite/innodb/r/table_flags.result -+++ suite/innodb/r/table_flags,64k.reject -@@ -5,6 +5,8 @@ ++++ suite/innodb/r/table_flags.reject +@@ -6,6 +6,8 @@ SET innodb_strict_mode=OFF; CREATE TABLE tz(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1; @@ -9,9 +9,9 @@ SET innodb_strict_mode=ON; CREATE TABLE tp(a INT PRIMARY KEY)ENGINE=InnoDB ROW_FORMAT=DYNAMIC PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=9; -@@ -103,7 +105,7 @@ +@@ -87,7 +89,7 @@ DB_ROLL_PTR=0x80000000000000, - ID=0x0000000000000013, + ID=0x0000000000000011, N_COLS=0x80000001, - TYPE=0x00000023, + TYPE=0x00000021, diff --git a/mysql-test/suite/innodb/r/table_flags,debug.rdiff b/mysql-test/suite/innodb/r/table_flags,debug.rdiff deleted file mode 100644 index 50592d95ac4..00000000000 --- a/mysql-test/suite/innodb/r/table_flags,debug.rdiff +++ /dev/null @@ -1,98 +0,0 @@ ---- suite/innodb/r/table_flags.result -+++ suite/innodb/r/table_flags,debug.reject -@@ -11,71 +11,71 @@ - PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=9; - SYS_TABLES clustered index root page (8): - N_RECS=8; LEVEL=0; INDEX_ID=0x0000000000000001 --header=0x01000003008d (NAME=0x696e66696d756d00) --header=0x0000101500d5 (NAME='SYS_FOREIGN', -+header=0x0100000300de (NAME=0x696e66696d756d00) -+header=0x000018150126 (NAME='SYS_FOREIGN', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x000000000000000b, -+ ID=0x000000000000000c, - N_COLS=0x00000004, - TYPE=0x00000001, - MIX_ID=0x0000000000000000, - MIX_LEN=0x00000040, - CLUSTER_NAME=NULL(0 bytes), - SPACE=0x00000000) --header=0x000018150122 (NAME='SYS_FOREIGN_COLS', -+header=0x000020150173 (NAME='SYS_FOREIGN_COLS', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x000000000000000c, -+ ID=0x000000000000000d, - N_COLS=0x00000004, - TYPE=0x00000001, - MIX_ID=0x0000000000000000, - MIX_LEN=0x00000040, - CLUSTER_NAME=NULL(0 bytes), - SPACE=0x00000000) --header=0x0000201501ae (NAME='SYS_VIRTUAL', -+header=0x0000281501bb (NAME='SYS_VIRTUAL', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x000000000000000d, -+ ID=0x000000000000000e, - N_COLS=0x00000003, - TYPE=0x00000001, - MIX_ID=0x0000000000000000, - MIX_LEN=0x00000040, - CLUSTER_NAME=NULL(0 bytes), - SPACE=0x00000000) --header=0x0400301501f2 (NAME='test/tc', -+header=0x0400301501ff (NAME='test/tc', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x000000000000000f, -+ ID=0x0000000000000010, - N_COLS=0x80000001, - TYPE=0x00000001, - MIX_ID=0x0000000000000000, - MIX_LEN=0x00000050, - CLUSTER_NAME=NULL(0 bytes), - SPACE=0x00000002) --header=0x00003815027a (NAME='test/td', -+header=0x000038150287 (NAME='test/td', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x0000000000000010, -+ ID=0x0000000000000011, - N_COLS=0x80000001, - TYPE=0x00000021, - MIX_ID=0x0000000000000000, - MIX_LEN=0x00000050, - CLUSTER_NAME=NULL(0 bytes), - SPACE=0x00000003) --header=0x00004815016a (NAME='test/tp', -+header=0x00004815008d (NAME='test/tp', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x0000000000000012, -+ ID=0x0000000000000013, - N_COLS=0x80000001, - TYPE=0x000009a1, - MIX_ID=0x0000000000000000, - MIX_LEN=0x00000050, - CLUSTER_NAME=NULL(0 bytes), - SPACE=0x00000005) --header=0x000028150236 (NAME='test/tr', -+header=0x000010150243 (NAME='test/tr', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x000000000000000e, -+ ID=0x000000000000000f, - N_COLS=0x00000001, - TYPE=0x00000001, - MIX_ID=0x0000000000000000, -@@ -85,7 +85,7 @@ - header=0x000040150074 (NAME='test/tz', - DB_TRX_ID=0x000000000000, - DB_ROLL_PTR=0x80000000000000, -- ID=0x0000000000000011, -+ ID=0x0000000000000012, - N_COLS=0x80000001, - TYPE=0x00000023, - MIX_ID=0x0000000000000000, diff --git a/mysql-test/suite/sql_sequence/default.result b/mysql-test/suite/sql_sequence/default.result index 14abc656423..4969e832652 100644 --- a/mysql-test/suite/sql_sequence/default.result +++ b/mysql-test/suite/sql_sequence/default.result @@ -183,3 +183,13 @@ ALTER TABLE t1 add column d int default next value for s_not_exits; ERROR 42S02: Table 'test.s_not_exits' doesn't exist drop table t1; drop sequence s1; +# +# MDEV 22785 Crash with prepared statements and NEXTVAL() +# +CREATE SEQUENCE s; +CREATE TABLE t1 (id int NOT NULL DEFAULT NEXTVAL(s), PRIMARY KEY (id)); +PREPARE stmt FROM " INSERT INTO t1 () values ()"; +INSERT INTO t1 () values (); +EXECUTE stmt; +DROP TABLE t1; +DROP SEQUENCE s; diff --git a/mysql-test/suite/sql_sequence/default.test b/mysql-test/suite/sql_sequence/default.test index 017165c1a80..e7c13211013 100644 --- a/mysql-test/suite/sql_sequence/default.test +++ b/mysql-test/suite/sql_sequence/default.test @@ -123,3 +123,15 @@ ALTER TABLE t1 add column c int; ALTER TABLE t1 add column d int default next value for s_not_exits; drop table t1; drop sequence s1; + +--echo # +--echo # MDEV 22785 Crash with prepared statements and NEXTVAL() +--echo # +CREATE SEQUENCE s; +CREATE TABLE t1 (id int NOT NULL DEFAULT NEXTVAL(s), PRIMARY KEY (id)); +PREPARE stmt FROM " INSERT INTO t1 () values ()"; +INSERT INTO t1 () values (); +EXECUTE stmt; +# Cleanup +DROP TABLE t1; +DROP SEQUENCE s; diff --git a/mysys/psi_noop.c b/mysys/psi_noop.c index 09b839468ac..e81ad4893b7 100644 --- a/mysys/psi_noop.c +++ b/mysys/psi_noop.c @@ -86,7 +86,7 @@ static void register_socket_noop(const char *category NNN, } static PSI_mutex* -init_mutex_noop(PSI_mutex_key key NNN, const void *identity NNN) +init_mutex_noop(PSI_mutex_key key NNN, void *identity NNN) { return NULL; } @@ -97,7 +97,7 @@ static void destroy_mutex_noop(PSI_mutex* mutex NNN) } static PSI_rwlock* -init_rwlock_noop(PSI_rwlock_key key NNN, const void *identity NNN) +init_rwlock_noop(PSI_rwlock_key key NNN, void *identity NNN) { return NULL; } @@ -108,7 +108,7 @@ static void destroy_rwlock_noop(PSI_rwlock* rwlock NNN) } static PSI_cond* -init_cond_noop(PSI_cond_key key NNN, const void *identity NNN) +init_cond_noop(PSI_cond_key key NNN, void *identity NNN) { return NULL; } diff --git a/scripts/mysql_setpermission.sh b/scripts/mysql_setpermission.sh index 6f0ad72c1d9..b3c9c27ca88 100644 --- a/scripts/mysql_setpermission.sh +++ b/scripts/mysql_setpermission.sh @@ -310,7 +310,6 @@ sub addall { $sth = $dbh->do("REVOKE ALL ON $db.* FROM \'$user\'\@\'$host\'") || die $dbh->errstr; } } - $dbh->do("FLUSH PRIVILEGES") || print STDERR "Can't flush privileges\n"; print "Everything is inserted and mysql privileges have been reloaded.\n\n"; } diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 55c2b6db7e7..1e8c6321f85 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -4583,13 +4583,13 @@ bool table_already_fk_prelocked(TABLE_LIST *tl, LEX_CSTRING *db, } -static bool internal_table_exists(TABLE_LIST *global_list, - const char *table_name) +static TABLE_LIST *internal_table_exists(TABLE_LIST *global_list, + const char *table_name) { do { if (global_list->table_name.str == table_name) - return 1; + return global_list; } while ((global_list= global_list->next_global)); return 0; } @@ -4604,13 +4604,23 @@ add_internal_tables(THD *thd, Query_tables_list *prelocking_ctx, do { + TABLE_LIST *tmp __attribute__((unused)); DBUG_PRINT("info", ("table name: %s", tables->table_name.str)); /* Skip table if already in the list. Can happen with prepared statements */ - if (tables->next_local && - internal_table_exists(global_table_list, tables->table_name.str)) + if ((tmp= internal_table_exists(global_table_list, + tables->table_name.str))) + { + /* + Use the original value for the next local, used by the + original prepared statement. We cannot trust the original + next_local value as it may have been changed by a previous + statement using the same table. + */ + tables->next_local= tmp; continue; + } TABLE_LIST *tl= (TABLE_LIST *) thd->alloc(sizeof(TABLE_LIST)); if (!tl) diff --git a/sql/sql_class.h b/sql/sql_class.h index 01fdc819f4d..2fecf60c086 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -4663,11 +4663,8 @@ public: for any CTE references. */ if (!lex->with_cte_resolution) - { my_message(ER_NO_DB_ERROR, ER(ER_NO_DB_ERROR), MYF(0)); - return TRUE; - } - return FALSE; + return TRUE; } to->str= strmake(db.str, db.length); diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index fa3121b5f52..88cf5c0396a 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -1700,10 +1700,13 @@ static bool srv_task_execute() return false; } +static void purge_create_background_thds(int ); + std::mutex purge_thread_count_mtx; void srv_update_purge_thread_count(uint n) { std::lock_guard<std::mutex> lk(purge_thread_count_mtx); + purge_create_background_thds(n); srv_n_purge_threads = n; srv_purge_thread_count_changed = 1; } @@ -1797,15 +1800,25 @@ static std::list<THD*> purge_thds; static std::mutex purge_thd_mutex; extern void* thd_attach_thd(THD*); extern void thd_detach_thd(void *); +static int n_purge_thds; -static THD *acquire_thd(void **ctx) +/* Ensure that we have at least n background THDs for purge */ +static void purge_create_background_thds(int n) { + THD *thd= current_thd; std::unique_lock<std::mutex> lk(purge_thd_mutex); - if (purge_thds.empty()) { - THD* thd = current_thd; + while (n_purge_thds < n) + { purge_thds.push_back(innobase_create_background_thd("InnoDB purge worker")); - set_current_thd(thd); + n_purge_thds++; } + set_current_thd(thd); +} + +static THD *acquire_thd(void **ctx) +{ + std::unique_lock<std::mutex> lk(purge_thd_mutex); + ut_a(!purge_thds.empty()); THD* thd = purge_thds.front(); purge_thds.pop_front(); lk.unlock(); @@ -1903,6 +1916,7 @@ static void purge_coordinator_callback(void*) void srv_init_purge_tasks() { + purge_create_background_thds(srv_n_purge_threads); purge_coordinator_timer= srv_thread_pool->create_timer (purge_coordinator_timer_callback, nullptr); } @@ -1913,11 +1927,13 @@ static void srv_shutdown_purge_tasks() delete purge_coordinator_timer; purge_coordinator_timer= nullptr; purge_worker_task.wait(); + std::unique_lock<std::mutex> lk(purge_thd_mutex); while (!purge_thds.empty()) { innobase_destroy_background_thd(purge_thds.front()); purge_thds.pop_front(); } + n_purge_thds= 0; } /**********************************************************************//** @@ -1958,7 +1974,8 @@ ulint srv_get_task_queue_length() void srv_purge_shutdown() { if (purge_sys.enabled()) { - srv_update_purge_thread_count(innodb_purge_threads_MAX); + if (!srv_fast_shutdown) + srv_update_purge_thread_count(innodb_purge_threads_MAX); while(!srv_purge_should_exit()) { ut_a(!purge_sys.paused()); srv_wake_purge_thread_if_not_active(); diff --git a/storage/perfschema/pfs.cc b/storage/perfschema/pfs.cc index 3e9198a6b6c..d7cac927d30 100644 --- a/storage/perfschema/pfs.cc +++ b/storage/perfschema/pfs.cc @@ -1826,7 +1826,7 @@ void pfs_register_socket_v1(const char *category, @sa PSI_v1::init_mutex. */ PSI_mutex* -pfs_init_mutex_v1(PSI_mutex_key key, const void *identity) +pfs_init_mutex_v1(PSI_mutex_key key, void *identity) { INIT_BODY_V1(mutex, key, identity); } @@ -1849,7 +1849,7 @@ void pfs_destroy_mutex_v1(PSI_mutex* mutex) @sa PSI_v1::init_rwlock. */ PSI_rwlock* -pfs_init_rwlock_v1(PSI_rwlock_key key, const void *identity) +pfs_init_rwlock_v1(PSI_rwlock_key key, void *identity) { INIT_BODY_V1(rwlock, key, identity); } @@ -1872,7 +1872,7 @@ void pfs_destroy_rwlock_v1(PSI_rwlock* rwlock) @sa PSI_v1::init_cond. */ PSI_cond* -pfs_init_cond_v1(PSI_cond_key key, const void *identity) +pfs_init_cond_v1(PSI_cond_key key, void *identity) { INIT_BODY_V1(cond, key, identity); } diff --git a/storage/rocksdb/CMakeLists.txt b/storage/rocksdb/CMakeLists.txt index 26533fae648..9fd9a5d7808 100644 --- a/storage/rocksdb/CMakeLists.txt +++ b/storage/rocksdb/CMakeLists.txt @@ -47,6 +47,15 @@ IF(MSVC_ARM64) SKIP_ROCKSDB_PLUGIN("Windows ARM64 not supported") ENDIF() +# +# Also, disable on ARM64 when not Linux +# Requires submodule update to v6.16.3 +# containing commit https://github.com/facebook/rocksdb/commit/ee4bd4780b321ddb5f92a0f4eb956f2a2ebd60dc +# +IF(CMAKE_SYSTEM_PROCESSOR MATCHES "(arm64|aarch64)" AND NOT CMAKE_SYSTEM_NAME STREQUAL "Linux") + SKIP_ROCKSDB_PLUGIN("ARM64 disabled on all except Linux") +ENDIF() + # This plugin needs recent C++ compilers (it is using C++11 features) # Skip build for the old compilers SET(CXX11_FLAGS) |