diff options
author | Jan Lindström <jan.lindstrom@mariadb.com> | 2022-11-30 13:10:52 +0200 |
---|---|---|
committer | Jan Lindström <jan.lindstrom@mariadb.com> | 2022-11-30 13:10:52 +0200 |
commit | 4eb8e51c269eb9447d3765a6e4deba0dc68dfa37 (patch) | |
tree | 8efa892fbe6bebc98ca106cf4341d406b48cb7ea | |
parent | 11815641312fdbcab26e47e4b6655c155bc39bde (diff) | |
download | mariadb-git-4eb8e51c269eb9447d3765a6e4deba0dc68dfa37.tar.gz |
Merge 10.4 into 10.5
38 files changed, 636 insertions, 21 deletions
diff --git a/client/mysqlcheck.c b/client/mysqlcheck.c index bf70a097c09..147ebb81231 100644 --- a/client/mysqlcheck.c +++ b/client/mysqlcheck.c @@ -1110,7 +1110,10 @@ static int dbConnect(char *host, char *user, char *passwd) opt_ssl_capath, opt_ssl_cipher); mysql_options(&mysql_connection, MYSQL_OPT_SSL_CRL, opt_ssl_crl); mysql_options(&mysql_connection, MYSQL_OPT_SSL_CRLPATH, opt_ssl_crlpath); + mysql_options(&mysql_connection, MARIADB_OPT_TLS_VERSION, opt_tls_version); } + mysql_options(&mysql_connection, MYSQL_OPT_SSL_VERIFY_SERVER_CERT, + (char*)&opt_ssl_verify_server_cert); #endif if (opt_protocol) mysql_options(&mysql_connection,MYSQL_OPT_PROTOCOL,(char*)&opt_protocol); diff --git a/client/mysqlslap.c b/client/mysqlslap.c index 08569f2e1a4..f5253533921 100644 --- a/client/mysqlslap.c +++ b/client/mysqlslap.c @@ -303,7 +303,10 @@ void set_mysql_connect_options(MYSQL *mysql) opt_ssl_capath, opt_ssl_cipher); mysql_options(mysql, MYSQL_OPT_SSL_CRL, opt_ssl_crl); mysql_options(mysql, MYSQL_OPT_SSL_CRLPATH, opt_ssl_crlpath); + mysql_options(mysql, MARIADB_OPT_TLS_VERSION, opt_tls_version); } + mysql_options(mysql, MYSQL_OPT_SSL_VERIFY_SERVER_CERT, + (char*)&opt_ssl_verify_server_cert); #endif if (opt_protocol) mysql_options(mysql,MYSQL_OPT_PROTOCOL,(char*)&opt_protocol); diff --git a/client/mysqltest.cc b/client/mysqltest.cc index c7ddc0d0d6a..636ab06d745 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -9768,6 +9768,7 @@ int main(int argc, char **argv) opt_ssl_capath, opt_ssl_cipher); mysql_options(con->mysql, MYSQL_OPT_SSL_CRL, opt_ssl_crl); mysql_options(con->mysql, MYSQL_OPT_SSL_CRLPATH, opt_ssl_crlpath); + mysql_options(con->mysql, MARIADB_OPT_TLS_VERSION, opt_tls_version); #if MYSQL_VERSION_ID >= 50000 /* Turn on ssl_verify_server_cert only if host is "localhost" */ opt_ssl_verify_server_cert= opt_host && !strcmp(opt_host, "localhost"); diff --git a/include/sslopt-longopts.h b/include/sslopt-longopts.h index d0278a1645d..ee90d17fb64 100644 --- a/include/sslopt-longopts.h +++ b/include/sslopt-longopts.h @@ -39,10 +39,10 @@ {"ssl-key", OPT_SSL_KEY, "X509 key in PEM format (implies --ssl).", &opt_ssl_key, &opt_ssl_key, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, - {"ssl-crl", OPT_SSL_KEY, "Certificate revocation list (implies --ssl).", + {"ssl-crl", OPT_SSL_CRL, "Certificate revocation list (implies --ssl).", &opt_ssl_crl, &opt_ssl_crl, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, - {"ssl-crlpath", OPT_SSL_KEY, + {"ssl-crlpath", OPT_SSL_CRLPATH, "Certificate revocation list path (implies --ssl).", &opt_ssl_crlpath, &opt_ssl_crlpath, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, diff --git a/mysql-test/main/ctype_tis620.result b/mysql-test/main/ctype_tis620.result index f1d0f5bc20a..4530b3ca4a2 100644 --- a/mysql-test/main/ctype_tis620.result +++ b/mysql-test/main/ctype_tis620.result @@ -4432,3 +4432,28 @@ HEX(WEIGHT_STRING(_tis620 'a\0b' COLLATE tis620_thai_nopad_ci)) # # End of 10.2 tests # +# +# Start of 10.4 tests +# +# +# MDEV-27670 Assertion `(cs->state & 0x20000) == 0' failed in my_strnncollsp_nchars_generic_8bit +# +CREATE OR REPLACE TABLE t1 +( +a VARCHAR(250) COLLATE tis620_thai_nopad_ci, +UNIQUE KEY(a(100)) USING HASH +) ENGINE=MyISAM; +INSERT INTO t1 VALUES ('a'),('A'); +ERROR 23000: Duplicate entry 'A' for key 'a' +DROP TABLE t1; +CREATE OR REPLACE TABLE t1 +( +a CHAR(250) COLLATE tis620_thai_nopad_ci, +UNIQUE KEY(a(100)) USING HASH +) ENGINE=MyISAM; +INSERT INTO t1 VALUES ('a'),('A'); +ERROR 23000: Duplicate entry 'A' for key 'a' +DROP TABLE t1; +# +# End of 10.4 tests +# diff --git a/mysql-test/main/ctype_tis620.test b/mysql-test/main/ctype_tis620.test index f432b23d71c..39908b995b2 100644 --- a/mysql-test/main/ctype_tis620.test +++ b/mysql-test/main/ctype_tis620.test @@ -223,3 +223,34 @@ SELECT HEX(WEIGHT_STRING(_tis620 'a\0b' COLLATE tis620_thai_nopad_ci)); --echo # --echo # End of 10.2 tests --echo # + +--echo # +--echo # Start of 10.4 tests +--echo # + +--echo # +--echo # MDEV-27670 Assertion `(cs->state & 0x20000) == 0' failed in my_strnncollsp_nchars_generic_8bit +--echo # + +CREATE OR REPLACE TABLE t1 +( + a VARCHAR(250) COLLATE tis620_thai_nopad_ci, + UNIQUE KEY(a(100)) USING HASH +) ENGINE=MyISAM; +--error ER_DUP_ENTRY +INSERT INTO t1 VALUES ('a'),('A'); +DROP TABLE t1; + +CREATE OR REPLACE TABLE t1 + +( + a CHAR(250) COLLATE tis620_thai_nopad_ci, + UNIQUE KEY(a(100)) USING HASH +) ENGINE=MyISAM; +--error ER_DUP_ENTRY +INSERT INTO t1 VALUES ('a'),('A'); +DROP TABLE t1; + +--echo # +--echo # End of 10.4 tests +--echo # diff --git a/mysql-test/suite/galera/r/MDEV-25389.result b/mysql-test/suite/galera/r/MDEV-25389.result new file mode 100644 index 00000000000..f369fe4dbae --- /dev/null +++ b/mysql-test/suite/galera/r/MDEV-25389.result @@ -0,0 +1,17 @@ +connection node_2; +connection node_1; +connection node_1; +connection node_2; +connection node_2; +call mtr.add_suppression("WSREP: Failed to create/initialize system thread"); +SET GLOBAL debug_dbug='+d,wsrep_simulate_failed_connection_1'; +SET GLOBAL wsrep_slave_threads=2; +ERROR HY000: Incorrect arguments to SET +SELECT @@wsrep_slave_threads; +@@wsrep_slave_threads +1 +SET GLOBAL debug_dbug=''; +SET GLOBAL wsrep_slave_threads=1; +SELECT @@wsrep_slave_threads; +@@wsrep_slave_threads +1 diff --git a/mysql-test/suite/galera/r/MDEV-29512.result b/mysql-test/suite/galera/r/MDEV-29512.result new file mode 100644 index 00000000000..aaf24df920e --- /dev/null +++ b/mysql-test/suite/galera/r/MDEV-29512.result @@ -0,0 +1,40 @@ +connection node_2; +connection node_1; +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 int, f3 varchar(2000)); +INSERT INTO t1 VALUES (1, 0, REPEAT('1234567890', 200)); +INSERT INTO t1 VALUES (3, 3, REPEAT('1234567890', 200)); +SET SESSION wsrep_sync_wait=0; +SET GLOBAL DEBUG_DBUG = "d,sync.wsrep_apply_cb"; +connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1; +connection node_1a; +SET SESSION wsrep_sync_wait=0; +connection node_1; +begin; +select f1,f2 from t1; +f1 f2 +1 0 +3 3 +connection node_2; +UPDATE t1 SET f2=2 WHERE f1=3; +connection node_1a; +SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached"; +connection node_1; +UPDATE t1 SET f2=1 WHERE f1=3; +SET GLOBAL wsrep_provider_options = 'dbug=d,commit_monitor_master_enter_sync'; +COMMIT; +connection node_1a; +SET SESSION wsrep_on = 0; +SET SESSION wsrep_on = 1; +SET GLOBAL wsrep_provider_options = 'dbug='; +SET GLOBAL wsrep_provider_options = 'signal=commit_monitor_master_enter_sync'; +SET GLOBAL DEBUG_DBUG = ""; +SET DEBUG_SYNC = "now SIGNAL signal.wsrep_apply_cb"; +SET GLOBAL debug_dbug = NULL; +SET debug_sync='RESET'; +connection node_1; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +select f1,f2 from t1; +f1 f2 +1 0 +3 2 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_var_dirty_reads.result b/mysql-test/suite/galera/r/galera_var_dirty_reads.result index 240f1802385..2b164fecee6 100644 --- a/mysql-test/suite/galera/r/galera_var_dirty_reads.result +++ b/mysql-test/suite/galera/r/galera_var_dirty_reads.result @@ -19,9 +19,9 @@ SHOW STATUS LIKE 'wsrep_cluster_status'; Variable_name Value wsrep_cluster_status Disconnected SELECT * FROM t1; -Got one of the listed errors +ERROR 08S01: WSREP has not yet prepared node for application use SELECT 1 FROM t1; -Got one of the listed errors +ERROR 08S01: WSREP has not yet prepared node for application use SET @@session.wsrep_dirty_reads=ON; SELECT * FROM t1; i @@ -34,7 +34,7 @@ i variable_name variable_value 1 WSREP_DIRTY_READS ON SET @@session.wsrep_dirty_reads=OFF; SELECT i, variable_name, variable_value FROM t1, information_schema.session_variables WHERE variable_name LIKE "wsrep_dirty_reads" AND i = 1; -Got one of the listed errors +ERROR 08S01: WSREP has not yet prepared node for application use SELECT 1; 1 1 diff --git a/mysql-test/suite/galera/t/MDEV-25389.test b/mysql-test/suite/galera/t/MDEV-25389.test new file mode 100644 index 00000000000..fc523371918 --- /dev/null +++ b/mysql-test/suite/galera/t/MDEV-25389.test @@ -0,0 +1,24 @@ +--source include/galera_cluster.inc +--source include/have_debug.inc +--source include/have_debug_sync.inc + +--let $node_1=node_1 +--let $node_2=node_2 +--source ../galera/include/auto_increment_offset_save.inc + +--connection node_2 +call mtr.add_suppression("WSREP: Failed to create/initialize system thread"); +SET GLOBAL debug_dbug='+d,wsrep_simulate_failed_connection_1'; +--error ER_WRONG_ARGUMENTS +SET GLOBAL wsrep_slave_threads=2; +SELECT @@wsrep_slave_threads; +SET GLOBAL debug_dbug=''; +SET GLOBAL wsrep_slave_threads=1; +SELECT @@wsrep_slave_threads; + +# MDEV-29878: this test caused a subsequent test to fail +# during shutdown. Do a restart here, to make sure the +# issue is fixed. +--source include/restart_mysqld.inc + +--source ../galera/include/auto_increment_offset_restore.inc diff --git a/mysql-test/suite/galera/t/MDEV-29512.cnf b/mysql-test/suite/galera/t/MDEV-29512.cnf new file mode 100644 index 00000000000..bf8e0c37984 --- /dev/null +++ b/mysql-test/suite/galera/t/MDEV-29512.cnf @@ -0,0 +1,15 @@ +!include ../galera_2nodes.cnf + +[mysqld] +log-bin +log-slave-updates + +[mysqld.1] +log_bin +log_slave_updates +max-binlog-size=4096 +expire-logs-days=1 + + +[mysqld.2] + diff --git a/mysql-test/suite/galera/t/MDEV-29512.test b/mysql-test/suite/galera/t/MDEV-29512.test new file mode 100644 index 00000000000..ffcef792f85 --- /dev/null +++ b/mysql-test/suite/galera/t/MDEV-29512.test @@ -0,0 +1,91 @@ +# +# This test is for reproducing the issue in: +# https://jira.mariadb.org/browse/MDEV-29512 +# +# The hanging in MDEV-29512 happens when binlog purging is attempted, and there is +# one local BF aborted transaction waiting for commit monitor. +# +# The test will launch two node cluster and enable binlogging with expire log days, +# to force binlog purging to happen. +# A local transaction is executed so that will become BF abort victim, and has advanced +# to replication stage waiting for commit monitor for final cleanup (to mark position in innodb) +# after that, applier is released to complete the BF abort and due to binlog configuration, +# starting the binlog purging. This is where the hanging would occur, if code is buggy +# +--source include/galera_cluster.inc +--source include/have_innodb.inc +--source include/have_debug_sync.inc +--source include/galera_have_debug_sync.inc + +# +# binlog size is limited to 4096 bytes, we will create enough events to +# cause binlog rotation +# +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 int, f3 varchar(2000)); +INSERT INTO t1 VALUES (1, 0, REPEAT('1234567890', 200)); +INSERT INTO t1 VALUES (3, 3, REPEAT('1234567890', 200)); + +SET SESSION wsrep_sync_wait=0; + +# set sync point for replication applier +SET GLOBAL DEBUG_DBUG = "d,sync.wsrep_apply_cb"; + +# Control connection to manage sync points for appliers +--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1 +--connection node_1a +SET SESSION wsrep_sync_wait=0; + +# starting local transaction, only select so far, +# write will happen later and this will be ordered after the transaction in node_2 +--connection node_1 +begin; +select f1,f2 from t1; + +# send from node 2 an UPDATE transaction, which will BF abort the transaction in node_1 +--connection node_2 +--let $wait_condition=select count(*)=2 from t1 +--source include/wait_condition.inc + +UPDATE t1 SET f2=2 WHERE f1=3; + +--connection node_1a +# wait to see the UPDATE from node_2 in apply_cb sync point +SET SESSION DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached"; + +--connection node_1 +# now issuing conflicting update +UPDATE t1 SET f2=1 WHERE f1=3; + +# Block the local commit, send final COMMIT and wait until it gets blocked +--let $galera_sync_point = commit_monitor_master_enter_sync +--source include/galera_set_sync_point.inc +--send COMMIT + +--connection node_1a +# wait for the local commit to enter in commit monitor wait state +--let $galera_sync_point = commit_monitor_master_enter_sync +--source include/galera_wait_sync_point.inc +--source include/galera_clear_sync_point.inc + +# release the local transaction to continue with commit +--let $galera_sync_point = commit_monitor_master_enter_sync +--source include/galera_signal_sync_point.inc + +# and now release the applier, it should force local trx to abort +SET GLOBAL DEBUG_DBUG = ""; +SET DEBUG_SYNC = "now SIGNAL signal.wsrep_apply_cb"; +SET GLOBAL debug_dbug = NULL; +SET debug_sync='RESET'; + +--connection node_1 +--error ER_LOCK_DEADLOCK +--reap + +# wait until applying is complete +--let $wait_condition = SELECT COUNT(*)=1 FROM t1 WHERE f2=2 +--source include/wait_condition.inc + +# final read to verify what we got +select f1,f2 from t1; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_var_dirty_reads.test b/mysql-test/suite/galera/t/galera_var_dirty_reads.test index 85f72e633dc..e0c5b666c32 100644 --- a/mysql-test/suite/galera/t/galera_var_dirty_reads.test +++ b/mysql-test/suite/galera/t/galera_var_dirty_reads.test @@ -31,10 +31,10 @@ SHOW STATUS LIKE 'wsrep_ready'; # Must return 'Disconnected' SHOW STATUS LIKE 'wsrep_cluster_status'; ---error ER_UNKNOWN_COM_ERROR,1047 +--error ER_UNKNOWN_COM_ERROR SELECT * FROM t1; ---error ER_UNKNOWN_COM_ERROR,1047 +--error ER_UNKNOWN_COM_ERROR SELECT 1 FROM t1; SET @@session.wsrep_dirty_reads=ON; @@ -46,7 +46,7 @@ SELECT i, variable_name, variable_value FROM t1, information_schema.session_vari SET @@session.wsrep_dirty_reads=OFF; ---error ER_UNKNOWN_COM_ERROR,1047 +--error ER_UNKNOWN_COM_ERROR SELECT i, variable_name, variable_value FROM t1, information_schema.session_variables WHERE variable_name LIKE "wsrep_dirty_reads" AND i = 1; diff --git a/mysql-test/suite/galera_3nodes/r/galera_join_with_cc_A.result b/mysql-test/suite/galera_3nodes/r/galera_join_with_cc_A.result index a60e2bbb6cc..1813607517a 100644 --- a/mysql-test/suite/galera_3nodes/r/galera_join_with_cc_A.result +++ b/mysql-test/suite/galera_3nodes/r/galera_join_with_cc_A.result @@ -1,6 +1,9 @@ connection node_2; connection node_1; connection node_1; +connection node_2; +connection node_3; +connection node_1; CREATE TABLE t1 (pk INT PRIMARY KEY, node INT) ENGINE=innodb; INSERT INTO t1 VALUES (1, 1); connection node_2; diff --git a/mysql-test/suite/galera_3nodes/t/galera_join_with_cc_A.test b/mysql-test/suite/galera_3nodes/t/galera_join_with_cc_A.test index 2248ff5014a..aa264eb8047 100644 --- a/mysql-test/suite/galera_3nodes/t/galera_join_with_cc_A.test +++ b/mysql-test/suite/galera_3nodes/t/galera_join_with_cc_A.test @@ -15,6 +15,11 @@ --let $galera_server_number = 3 --source include/galera_connect.inc +--let $node_1=node_1 +--let $node_2=node_2 +--let $node_3=node_3 +--source ../galera/include/auto_increment_offset_save.inc + --connection node_1 --let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; --source include/wait_condition.inc @@ -260,3 +265,5 @@ call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State T --connection node_3 call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required."); + +--source ../galera/include/auto_increment_offset_restore.inc diff --git a/mysql-test/suite/galera_3nodes_sr/disabled.def b/mysql-test/suite/galera_3nodes_sr/disabled.def index 900b27860a5..f1ec92eee79 100644 --- a/mysql-test/suite/galera_3nodes_sr/disabled.def +++ b/mysql-test/suite/galera_3nodes_sr/disabled.def @@ -1,4 +1,3 @@ -GCF-336 : GCF-582 : GCF-810A : GCF-810B : diff --git a/mysql-test/suite/galera_3nodes_sr/r/GCF-336.result b/mysql-test/suite/galera_3nodes_sr/r/GCF-336.result index bb6c11edf36..eeccfa3b5a3 100644 --- a/mysql-test/suite/galera_3nodes_sr/r/GCF-336.result +++ b/mysql-test/suite/galera_3nodes_sr/r/GCF-336.result @@ -1,11 +1,17 @@ +connection node_2; +connection node_1; +connection node_2; CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; SET SESSION wsrep_trx_fragment_size = 1; SET AUTOCOMMIT=OFF; START TRANSACTION; INSERT INTO t1 VALUES (1); +connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2; +connection node_2a; SELECT COUNT(*) > 0 FROM mysql.wsrep_streaming_log; COUNT(*) > 0 1 +connection node_1; SELECT COUNT(*) > 0 FROM mysql.wsrep_streaming_log; COUNT(*) > 0 1 @@ -13,14 +19,19 @@ SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT COUNT(*) > 0 FROM t1; COUNT(*) > 0 1 +connection node_2a; SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1'; SET SESSION wsrep_sync_wait=0; +connection node_2; INSERT INTO t1 VALUES (2); ERROR 40001: Deadlock found when trying to get lock; try restarting transaction COMMIT; ERROR 08S01: WSREP has not yet prepared node for application use +connection node_2a; SET GLOBAL wsrep_provider_options = 'gmcast.isolate=0'; DROP TABLE t1; CALL mtr.add_suppression("replication aborted"); CALL mtr.add_suppression("WSREP: fragment replication failed: 3"); CALL mtr.add_suppression("WSREP: failed to send SR rollback for "); +connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3; +connection node_3; diff --git a/mysql-test/suite/innodb/r/innodb_ctype_tis620.result b/mysql-test/suite/innodb/r/innodb_ctype_tis620.result index bea188af08f..cf15d1232aa 100644 --- a/mysql-test/suite/innodb/r/innodb_ctype_tis620.result +++ b/mysql-test/suite/innodb/r/innodb_ctype_tis620.result @@ -26,3 +26,69 @@ DROP TABLE t1; # # End of 10.2 tests # +# +# Start of 10.4 tests +# +# +# MDEV-27670 Assertion `(cs->state & 0x20000) == 0' failed in my_strnncollsp_nchars_generic_8bit +# +CREATE TABLE t1 (id INT PRIMARY KEY, a CHAR(8), KEY(a)) ENGINE=InnoDB COLLATE tis620_thai_nopad_ci; +INSERT INTO t1 VALUES (1,'foo'),(2,'bar'); +DROP TABLE t1; +# +# MDEV-27768 MDEV-25440: Assertion `(cs->state & 0x20000) == 0' failed in my_strnncollsp_nchars_generic_8bit +# +CREATE TABLE t1 (a INT KEY,b INT,c CHAR,KEY(b),KEY(c)) ROW_FORMAT=REDUNDANT COLLATE=tis620_thai_nopad_ci ENGINE=InnoDB; +INSERT INTO t1 VALUES (3,4,4); +DROP TABLE t1; +CREATE TABLE t1 (C1 CHAR KEY,B1 BIT,B2 BIT,C2 CHAR DEFAULT'') ROW_FORMAT=DYNAMIC COLLATE=tis620_thai_nopad_ci ENGINE=InnoDB; +SELECT HEX(c1),HEX (c2) FROM t1 WHERE c1>=''AND c1<''AND c2=''LIMIT 2; +HEX(c1) HEX (c2) +DROP TABLE t1; +SET sql_mode=''; +CREATE TABLE t1 (a INT UNSIGNED,b INT,c CHAR(1),d BINARY (1),e VARCHAR(1),f VARBINARY(1),g BLOB,h BLOB,id INT,KEY(b),KEY(e)) ROW_FORMAT=REDUNDANT COLLATE=tis620_thai_nopad_ci ENGINE=InnoDB; +INSERT INTO t1 VALUES (4386060749083099108,157,0,0,0,0,0,0,12); +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +INSERT INTO t1 VALUES (104,15158706241929488558,0,0,0,0,0,0,13); +Warnings: +Warning 1264 Out of range value for column 'b' at row 1 +SELECT GROUP_CONCAT(DISTINCT a,b ORDER BY c,b) FROM t1; +GROUP_CONCAT(DISTINCT a,b ORDER BY c,b) +4294967295157,1042147483647 +DROP TABLE t1; +SET sql_mode=DEFAULT; +CREATE TABLE t1 (a CHAR(9),b CHAR(7)) COLLATE=tis620_thai_nopad_ci; +INSERT INTO t1 VALUES (0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0); +ALTER TABLE t1 ADD INDEX kb (b),ADD INDEX kab (a,b),ALGORITHM=INPLACE; +DROP TABLE t1; +SET sql_mode=''; +CREATE TABLE t1 (a INT UNSIGNED,b INT UNSIGNED,c CHAR(1),d CHAR(1),e VARCHAR(1),f VARCHAR(1),g BLOB,h BLOB,id INT,KEY(b),KEY(e)) ROW_FORMAT=REDUNDANT COLLATE=tis620_thai_nopad_ci; +INSERT INTO t1 VALUES (15842995496588415350,5339224446865937973,0,0,0,0,0,0,4); +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +Warning 1264 Out of range value for column 'b' at row 1 +INSERT INTO t1 VALUES (8118894032862615316,5299008984764990929,0,0,0,0,0,0,1); +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +Warning 1264 Out of range value for column 'b' at row 1 +SELECT GROUP_CONCAT(DISTINCT a,c ORDER BY a) FROM t1; +GROUP_CONCAT(DISTINCT a,c ORDER BY a) +42949672950 +DROP TABLE t1; +SET sql_mode=DEFAULT; +CREATE TABLE t1 (a CHAR,b CHAR,KEY(a,b)) ROW_FORMAT=DYNAMIC COLLATE=tis620_thai_nopad_ci ENGINE=InnoDB; +INSERT INTO t1 VALUES (0,0); +DROP TABLE t1; +CREATE TABLE t1 (a CHAR,b CHAR) COLLATE=tis620_thai_nopad_ci; +INSERT INTO t1 VALUES (0,0); +SELECT a,SUM(DISTINCT a),MIN(b) FROM t1 GROUP BY a; +a SUM(DISTINCT a) MIN(b) +0 0 0 +DROP TABLE t1; +CREATE TABLE t1 (a CHAR,KEY(a)) ENGINE=InnoDB COLLATE=tis620_thai_nopad_ci; +INSERT INTO t1 VALUES (0); +DROP TABLE t1; +# +# End of 10.4 tests +# diff --git a/mysql-test/suite/innodb/t/innodb_ctype_tis620.test b/mysql-test/suite/innodb/t/innodb_ctype_tis620.test index 4bab0fe9561..b0e9f42cc5a 100644 --- a/mysql-test/suite/innodb/t/innodb_ctype_tis620.test +++ b/mysql-test/suite/innodb/t/innodb_ctype_tis620.test @@ -27,3 +27,65 @@ DROP TABLE t1; --echo # --echo # End of 10.2 tests --echo # + +--echo # +--echo # Start of 10.4 tests +--echo # + +--echo # +--echo # MDEV-27670 Assertion `(cs->state & 0x20000) == 0' failed in my_strnncollsp_nchars_generic_8bit +--echo # + +CREATE TABLE t1 (id INT PRIMARY KEY, a CHAR(8), KEY(a)) ENGINE=InnoDB COLLATE tis620_thai_nopad_ci; +INSERT INTO t1 VALUES (1,'foo'),(2,'bar'); +DROP TABLE t1; + +--echo # +--echo # MDEV-27768 MDEV-25440: Assertion `(cs->state & 0x20000) == 0' failed in my_strnncollsp_nchars_generic_8bit +--echo # + +CREATE TABLE t1 (a INT KEY,b INT,c CHAR,KEY(b),KEY(c)) ROW_FORMAT=REDUNDANT COLLATE=tis620_thai_nopad_ci ENGINE=InnoDB; +INSERT INTO t1 VALUES (3,4,4); +DROP TABLE t1; + +CREATE TABLE t1 (C1 CHAR KEY,B1 BIT,B2 BIT,C2 CHAR DEFAULT'') ROW_FORMAT=DYNAMIC COLLATE=tis620_thai_nopad_ci ENGINE=InnoDB; +SELECT HEX(c1),HEX (c2) FROM t1 WHERE c1>=''AND c1<''AND c2=''LIMIT 2; +DROP TABLE t1; + +SET sql_mode=''; +CREATE TABLE t1 (a INT UNSIGNED,b INT,c CHAR(1),d BINARY (1),e VARCHAR(1),f VARBINARY(1),g BLOB,h BLOB,id INT,KEY(b),KEY(e)) ROW_FORMAT=REDUNDANT COLLATE=tis620_thai_nopad_ci ENGINE=InnoDB; +INSERT INTO t1 VALUES (4386060749083099108,157,0,0,0,0,0,0,12); +INSERT INTO t1 VALUES (104,15158706241929488558,0,0,0,0,0,0,13); +SELECT GROUP_CONCAT(DISTINCT a,b ORDER BY c,b) FROM t1; +DROP TABLE t1; +SET sql_mode=DEFAULT; + +CREATE TABLE t1 (a CHAR(9),b CHAR(7)) COLLATE=tis620_thai_nopad_ci; +INSERT INTO t1 VALUES (0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0),(0,0); +ALTER TABLE t1 ADD INDEX kb (b),ADD INDEX kab (a,b),ALGORITHM=INPLACE; +DROP TABLE t1; + +SET sql_mode=''; +CREATE TABLE t1 (a INT UNSIGNED,b INT UNSIGNED,c CHAR(1),d CHAR(1),e VARCHAR(1),f VARCHAR(1),g BLOB,h BLOB,id INT,KEY(b),KEY(e)) ROW_FORMAT=REDUNDANT COLLATE=tis620_thai_nopad_ci; +INSERT INTO t1 VALUES (15842995496588415350,5339224446865937973,0,0,0,0,0,0,4); +INSERT INTO t1 VALUES (8118894032862615316,5299008984764990929,0,0,0,0,0,0,1); +SELECT GROUP_CONCAT(DISTINCT a,c ORDER BY a) FROM t1; +DROP TABLE t1; +SET sql_mode=DEFAULT; + +CREATE TABLE t1 (a CHAR,b CHAR,KEY(a,b)) ROW_FORMAT=DYNAMIC COLLATE=tis620_thai_nopad_ci ENGINE=InnoDB; +INSERT INTO t1 VALUES (0,0); +DROP TABLE t1; + +CREATE TABLE t1 (a CHAR,b CHAR) COLLATE=tis620_thai_nopad_ci; +INSERT INTO t1 VALUES (0,0); +SELECT a,SUM(DISTINCT a),MIN(b) FROM t1 GROUP BY a; +DROP TABLE t1; + +CREATE TABLE t1 (a CHAR,KEY(a)) ENGINE=InnoDB COLLATE=tis620_thai_nopad_ci; +INSERT INTO t1 VALUES (0); +DROP TABLE t1; + +--echo # +--echo # End of 10.4 tests +--echo # diff --git a/mysql-test/suite/parts/r/part_ctype_tis620.result b/mysql-test/suite/parts/r/part_ctype_tis620.result new file mode 100644 index 00000000000..48a8a95f40e --- /dev/null +++ b/mysql-test/suite/parts/r/part_ctype_tis620.result @@ -0,0 +1,47 @@ +# +# MDEV-27768 MDEV-25440: Assertion `(cs->state & 0x20000) == 0' failed in my_strnncollsp_nchars_generic_8bit +# +CREATE TABLE t1 ( +a CHAR +) COLLATE=tis620_thai_nopad_ci +PARTITION BY RANGE COLUMNS (a) +( +PARTITION p0 VALUES LESS THAN (''), +PARTITION p VALUES LESS THAN ('') +); +ERROR HY000: VALUES LESS THAN value must be strictly increasing for each partition +CREATE TABLE t1 ( +a CHAR +) COLLATE=tis620_thai_nopad_ci +PARTITION BY RANGE COLUMNS (a) +( +PARTITION p0 VALUES LESS THAN (''), +PARTITION p VALUES LESS THAN (' ') +); +ERROR HY000: VALUES LESS THAN value must be strictly increasing for each partition +CREATE TABLE t1 ( +a CHAR +) COLLATE=tis620_thai_nopad_ci +PARTITION BY RANGE COLUMNS (a) +( +PARTITION p0 VALUES LESS THAN (' '), +PARTITION p VALUES LESS THAN ('') +); +ERROR HY000: VALUES LESS THAN value must be strictly increasing for each partition +CREATE TABLE t1 +( +id INT NOT NULL, +data VARCHAR(2), +KEY data_id (data(1),id) +) COLLATE tis620_thai_nopad_ci ENGINE=MyISAM +PARTITION BY RANGE (id) +( +PARTITION p10 VALUES LESS THAN (10), +PARTITION p20 VALUES LESS THAN (20) +); +INSERT INTO t1 VALUES (4, 'ab'), (14, 'ab'), (19,''),(9,'') ; +SELECT id FROM t1 WHERE data='' ORDER BY id; +id +9 +19 +DROP TABLE t1; diff --git a/mysql-test/suite/parts/t/part_ctype_tis620.test b/mysql-test/suite/parts/t/part_ctype_tis620.test new file mode 100644 index 00000000000..2e5bcd651b1 --- /dev/null +++ b/mysql-test/suite/parts/t/part_ctype_tis620.test @@ -0,0 +1,52 @@ +--source include/have_partition.inc +--source include/have_tis620.inc + +--echo # +--echo # MDEV-27768 MDEV-25440: Assertion `(cs->state & 0x20000) == 0' failed in my_strnncollsp_nchars_generic_8bit +--echo # + +--error ER_RANGE_NOT_INCREASING_ERROR +CREATE TABLE t1 ( + a CHAR +) COLLATE=tis620_thai_nopad_ci +PARTITION BY RANGE COLUMNS (a) +( + PARTITION p0 VALUES LESS THAN (''), + PARTITION p VALUES LESS THAN ('') +); + +--error ER_RANGE_NOT_INCREASING_ERROR +CREATE TABLE t1 ( + a CHAR +) COLLATE=tis620_thai_nopad_ci +PARTITION BY RANGE COLUMNS (a) +( + PARTITION p0 VALUES LESS THAN (''), + PARTITION p VALUES LESS THAN (' ') +); + +--error ER_RANGE_NOT_INCREASING_ERROR +CREATE TABLE t1 ( + a CHAR +) COLLATE=tis620_thai_nopad_ci +PARTITION BY RANGE COLUMNS (a) +( + PARTITION p0 VALUES LESS THAN (' '), + PARTITION p VALUES LESS THAN ('') +); + + +CREATE TABLE t1 +( + id INT NOT NULL, + data VARCHAR(2), + KEY data_id (data(1),id) +) COLLATE tis620_thai_nopad_ci ENGINE=MyISAM +PARTITION BY RANGE (id) +( + PARTITION p10 VALUES LESS THAN (10), + PARTITION p20 VALUES LESS THAN (20) +); +INSERT INTO t1 VALUES (4, 'ab'), (14, 'ab'), (19,''),(9,'') ; +SELECT id FROM t1 WHERE data='' ORDER BY id; +DROP TABLE t1; diff --git a/mysql-test/suite/period/r/create.result b/mysql-test/suite/period/r/create.result index dcae15c0772..e5fa2d1797d 100644 --- a/mysql-test/suite/period/r/create.result +++ b/mysql-test/suite/period/r/create.result @@ -100,3 +100,14 @@ show status like "Feature_application_time_periods"; Variable_name Value Feature_application_time_periods 6 drop table t; +# MDEV-29387: Period name with more than 32 symbols crashes the server +# +# test 34 symbols +create table t2 (s date, e date, +period for `abcd123456789012345678901234567890` (s,e)); +drop table t2; +# test 64 symbols +create table t2 (s date, e date, period for +`abcd123456789012345678901234567890123456789012345678901234567890` + (s,e)); +drop table t2; diff --git a/mysql-test/suite/period/r/delete.result b/mysql-test/suite/period/r/delete.result index 1954c0fdf81..55ddfac13fb 100644 --- a/mysql-test/suite/period/r/delete.result +++ b/mysql-test/suite/period/r/delete.result @@ -393,3 +393,27 @@ insert into t1 values (1,'2020-01-01','2020-02-20'); delete from t1 for portion of se from '2020-01-30' to '2020-01-31'; drop table t1; # End of 10.5 tests +# +# MDEV-19190 Assertion `part_share->auto_inc_initialized` failed in +# ha_partition::get_auto_increment +# +create table t1 (id int, s date, e date, period for app(s,e)) +partition by key(id); +insert into t1 (s,e) values ('2023-07-21','2024-06-07'); +alter table t1 modify id int auto_increment key; +delete from t1 for portion of app from '2023-07-20' to '2024-05-23'; +select * from t1; +id s e +2 2024-05-23 2024-06-07 +drop table t1; +create table t1 (id int, s date, e date, period for app(s,e)) +partition by key(id); +insert into t1 (s,e) values ('2023-07-21','2024-06-07'); +alter table t1 modify id int auto_increment key; +delete from t1 for portion of app from '2023-07-20' to '2024-05-23'; +select * from t1; +id s e +2 2024-05-23 2024-06-07 +drop table t1; +drop table log_tbl; +drop procedure log; diff --git a/mysql-test/suite/period/t/create.test b/mysql-test/suite/period/t/create.test index 49dcc6ad3c7..0bca5b6df56 100644 --- a/mysql-test/suite/period/t/create.test +++ b/mysql-test/suite/period/t/create.test @@ -85,3 +85,17 @@ insert t values (2, '2001-01-01', '2001-01-01'); show status like "Feature_application_time_periods"; drop table t; + +--echo # MDEV-29387: Period name with more than 32 symbols crashes the server +--echo # + +--echo # test 34 symbols +create table t2 (s date, e date, + period for `abcd123456789012345678901234567890` (s,e)); +drop table t2; + +--echo # test 64 symbols +create table t2 (s date, e date, period for + `abcd123456789012345678901234567890123456789012345678901234567890` + (s,e)); +drop table t2; diff --git a/mysql-test/suite/period/t/delete.test b/mysql-test/suite/period/t/delete.test index 91670469bab..6739487d9a4 100644 --- a/mysql-test/suite/period/t/delete.test +++ b/mysql-test/suite/period/t/delete.test @@ -1,5 +1,6 @@ source suite/period/engines.inc; source include/have_log_bin.inc; +source include/have_partition.inc; create table t (id int, s date, e date, period for apptime(s,e)); @@ -235,3 +236,30 @@ delete from t1 for portion of se from '2020-01-30' to '2020-01-31'; drop table t1; --echo # End of 10.5 tests +--echo # +--echo # MDEV-19190 Assertion `part_share->auto_inc_initialized` failed in +--echo # ha_partition::get_auto_increment +--echo # +create table t1 (id int, s date, e date, period for app(s,e)) + partition by key(id); +insert into t1 (s,e) values ('2023-07-21','2024-06-07'); +alter table t1 modify id int auto_increment key; +delete from t1 for portion of app from '2023-07-20' to '2024-05-23'; +select * from t1; +drop table t1; + +create table t1 (id int, s date, e date, period for app(s,e)) + partition by key(id); +insert into t1 (s,e) values ('2023-07-21','2024-06-07'); +alter table t1 modify id int auto_increment key; +--let $trig_table=t1 +--let $trig_cols=id, s, e +--disable_query_log +--source suite/period/create_triggers.inc +--enable_query_log + +delete from t1 for portion of app from '2023-07-20' to '2024-05-23'; +select * from t1; +drop table t1; +drop table log_tbl; +drop procedure log; diff --git a/sql/handler.cc b/sql/handler.cc index 5942eca6698..49f49002eff 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -4211,7 +4211,7 @@ void handler::print_error(int error, myf errflag) break; case HA_ERR_AUTOINC_ERANGE: textno= error; - my_error(textno, errflag, table->next_number_field->field_name.str, + my_error(textno, errflag, table->found_next_number_field->field_name.str, table->in_use->get_stmt_da()->current_row_for_warning()); DBUG_VOID_RETURN; break; diff --git a/sql/slave.cc b/sql/slave.cc index 33a382edc47..715fa8cd69e 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -7281,9 +7281,9 @@ static int connect_to_master(THD* thd, MYSQL* mysql, Master_info* mi, mi->ssl_ca[0]?mi->ssl_ca:0, mi->ssl_capath[0]?mi->ssl_capath:0, mi->ssl_cipher[0]?mi->ssl_cipher:0); - mysql_options(mysql, MYSQL_OPT_SSL_VERIFY_SERVER_CERT, - &mi->ssl_verify_server_cert); - mysql_options(mysql, MYSQL_OPT_SSL_CRLPATH, + mysql_options(mysql, MYSQL_OPT_SSL_CRL, + mi->ssl_crl[0] ? mi->ssl_crl : 0); + mysql_options(mysql, MYSQL_OPT_SSL_CRLPATH, mi->ssl_crlpath[0] ? mi->ssl_crlpath : 0); mysql_options(mysql, MYSQL_OPT_SSL_VERIFY_SERVER_CERT, &mi->ssl_verify_server_cert); diff --git a/sql/sql_const.h b/sql/sql_const.h index 3f053a1606d..b2548b4ef8c 100644 --- a/sql/sql_const.h +++ b/sql/sql_const.h @@ -29,7 +29,7 @@ /* extra 4+4 bytes for slave tmp tables */ #define MAX_DBKEY_LENGTH (NAME_LEN*2+1+1+4+4) #define MAX_ALIAS_NAME 256 -#define MAX_FIELD_NAME 34 /* Max colum name length +2 */ +#define MAX_FIELD_NAME (NAME_LEN+1) /* Max colum name length +1 */ #define MAX_SYS_VAR_LENGTH 32 #define MAX_KEY MAX_INDEXES /* Max used keys */ #define MAX_REF_PARTS 32 /* Max parts used as ref */ diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index 4c359955dbe..e628ce60d2d 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -693,6 +693,10 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, { table->use_all_columns(); table->rpl_write_set= table->write_set; + // Initialize autoinc. + // We don't set next_number_field here, as it is handled manually. + if (table->found_next_number_field) + table->file->info(HA_STATUS_AUTO); } else { diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index faaab33a589..64be8f937e5 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1158,7 +1158,7 @@ static bool wsrep_tables_accessible_when_detached(const TABLE_LIST *tables) if (get_table_category(&db, &tn) < TABLE_CATEGORY_INFORMATION) return false; } - return true; + return tables != NULL; } static bool wsrep_command_no_result(char command) @@ -3758,6 +3758,8 @@ mysql_execute_command(THD *thd) (sql_command_flags[lex->sql_command] & CF_CHANGES_DATA) == 0) && !wsrep_tables_accessible_when_detached(all_tables) && lex->sql_command != SQLCOM_SET_OPTION && + lex->sql_command != SQLCOM_CHANGE_DB && + !(lex->sql_command == SQLCOM_SELECT && !all_tables) && !wsrep_is_show_query(lex->sql_command)) { my_message(ER_UNKNOWN_COM_ERROR, diff --git a/sql/table.cc b/sql/table.cc index c99608c6cde..7da22a058ab 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -8913,6 +8913,7 @@ int TABLE::update_generated_fields() res= found_next_number_field->set_default(); if (likely(!res)) res= file->update_auto_increment(); + next_number_field= NULL; } if (likely(!res) && vfield) diff --git a/sql/wsrep_mysqld.cc b/sql/wsrep_mysqld.cc index 3e3b7ec5150..3205b2dfa21 100644 --- a/sql/wsrep_mysqld.cc +++ b/sql/wsrep_mysqld.cc @@ -127,6 +127,7 @@ ulong wsrep_trx_fragment_unit= WSREP_FRAG_BYTES; ulong wsrep_SR_store_type= WSREP_SR_STORE_TABLE; uint wsrep_ignore_apply_errors= 0; +std::atomic <bool> wsrep_thread_create_failed; /* * End configuration options @@ -3143,7 +3144,7 @@ int wsrep_create_trigger_query(THD *thd, uchar** buf, size_t* buf_len) void* start_wsrep_THD(void *arg) { - THD *thd; + THD *thd= NULL; Wsrep_thd_args* thd_args= (Wsrep_thd_args*) arg; @@ -3174,6 +3175,7 @@ void* start_wsrep_THD(void *arg) mysql_thread_set_psi_id(thd->thread_id); thd->thr_create_utime= microsecond_interval_timer(); + DBUG_EXECUTE_IF("wsrep_simulate_failed_connection_1", goto error; ); // </5.1.17> /* handle_one_connection() is normally the only way a thread would @@ -3280,6 +3282,18 @@ void* start_wsrep_THD(void *arg) error: WSREP_ERROR("Failed to create/initialize system thread"); + if (thd) + { + close_connection(thd, ER_OUT_OF_RESOURCES); + statistic_increment(aborted_connects, &LOCK_status); + server_threads.erase(thd); + delete thd; + my_thread_end(); + } + delete thd_args; + // This will signal error to wsrep_slave_threads_update + wsrep_thread_create_failed.store(true, std::memory_order_relaxed); + /* Abort if its the first applier/rollbacker thread. */ if (!mysqld_server_initialized) unireg_abort(1); diff --git a/sql/wsrep_mysqld.h b/sql/wsrep_mysqld.h index 2437a823df4..2061802afbd 100644 --- a/sql/wsrep_mysqld.h +++ b/sql/wsrep_mysqld.h @@ -90,6 +90,7 @@ extern bool wsrep_new_cluster; extern bool wsrep_gtid_mode; extern my_bool wsrep_strict_ddl; extern uint32 wsrep_gtid_domain_id; +extern std::atomic <bool > wsrep_thread_create_failed; enum enum_wsrep_reject_types { WSREP_REJECT_NONE, /* nothing rejected */ diff --git a/sql/wsrep_thd.cc b/sql/wsrep_thd.cc index 915c7bbb5a5..fbca4a76b66 100644 --- a/sql/wsrep_thd.cc +++ b/sql/wsrep_thd.cc @@ -23,8 +23,7 @@ #include "rpl_rli.h" #include "log_event.h" #include "sql_parse.h" -#include "mysqld.h" // start_wsrep_THD(); -#include "wsrep_applier.h" // start_wsrep_THD(); +#include "wsrep_mysqld.h" // start_wsrep_THD(); #include "mysql/service_wsrep.h" #include "debug_sync.h" #include "slave.h" diff --git a/sql/wsrep_var.cc b/sql/wsrep_var.cc index ff687975d0a..f6a7e25b945 100644 --- a/sql/wsrep_var.cc +++ b/sql/wsrep_var.cc @@ -801,18 +801,25 @@ bool wsrep_slave_threads_update (sys_var *self, THD* thd, enum_var_type type) if (wsrep_slave_count_change > 0) { WSREP_DEBUG("Creating %d applier threads, total %ld", wsrep_slave_count_change, wsrep_slave_threads); + wsrep_thread_create_failed.store(false, std::memory_order_relaxed); res= wsrep_create_appliers(wsrep_slave_count_change, true); mysql_mutex_unlock(&LOCK_global_system_variables); mysql_mutex_unlock(&LOCK_wsrep_slave_threads); // Thread creation and execution is asyncronous, therefore we need // wait them to be started or error produced - while (wsrep_running_applier_threads != (ulong)wsrep_slave_threads) + while (wsrep_running_applier_threads != (ulong)wsrep_slave_threads && + !wsrep_thread_create_failed.load(std::memory_order_relaxed)) { my_sleep(1000); } mysql_mutex_lock(&LOCK_global_system_variables); + if (wsrep_thread_create_failed.load(std::memory_order_relaxed)) { + wsrep_slave_threads= wsrep_running_applier_threads; + return true; + } + WSREP_DEBUG("Running %lu applier threads", wsrep_running_applier_threads); wsrep_slave_count_change = 0; } diff --git a/strings/ctype-tis620.c b/strings/ctype-tis620.c index b6ac880dc9f..e6f6ad24eec 100644 --- a/strings/ctype-tis620.c +++ b/strings/ctype-tis620.c @@ -587,6 +587,18 @@ ret: } +static int +my_strnncollsp_nchars_tis620(CHARSET_INFO * cs, + const uchar *a, size_t a_length, + const uchar *b, size_t b_length, + size_t nchars) +{ + set_if_smaller(a_length, nchars); + set_if_smaller(b_length, nchars); + return my_strnncollsp_tis620(cs, a, a_length, b, b_length); +} + + static int my_strnncollsp_tis620_nopad(CHARSET_INFO * cs __attribute__((unused)), const uchar *a0, size_t a_length, @@ -854,7 +866,7 @@ static MY_COLLATION_HANDLER my_collation_ci_handler = NULL, /* init */ my_strnncoll_tis620, my_strnncollsp_tis620, - my_strnncollsp_nchars_generic_8bit, + my_strnncollsp_nchars_tis620, my_strnxfrm_tis620, my_strnxfrmlen_simple, my_like_range_simple, @@ -870,7 +882,7 @@ static MY_COLLATION_HANDLER my_collation_nopad_ci_handler = NULL, /* init */ my_strnncoll_tis620, my_strnncollsp_tis620_nopad, - my_strnncollsp_nchars_generic_8bit, + my_strnncollsp_nchars_tis620, my_strnxfrm_tis620_nopad, my_strnxfrmlen_simple, my_like_range_simple, diff --git a/unittest/strings/strings-t.c b/unittest/strings/strings-t.c index 773e90bee78..e28e498b6bb 100644 --- a/unittest/strings/strings-t.c +++ b/unittest/strings/strings-t.c @@ -1215,6 +1215,7 @@ test_strnncollsp_char() #ifdef HAVE_CHARSET_tis620 failed+= strnncollsp_char_mbminlen1("tis620_thai_ci", NULL); + failed+= strnncollsp_char_mbminlen1("tis620_thai_nopad_ci", NULL); #endif #ifdef HAVE_CHARSET_big5 diff --git a/wsrep-lib b/wsrep-lib -Subproject 8bfce04189671eb1f06e0fa83dff8c880f31088 +Subproject f8ff2cfdd4c6424ffd96fc53bcc0f2e1d9ffe13 |