diff options
328 files changed, 12629 insertions, 1090 deletions
diff --git a/mysql-test/std_data/galera-cert.pem b/mysql-test/std_data/galera-cert.pem new file mode 100644 index 00000000000..3b48002f47a --- /dev/null +++ b/mysql-test/std_data/galera-cert.pem @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDWTCCAkGgAwIBAgIJAIlW4JmZGnU4MA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNV +BAYTAkZJMRUwEwYDVQQHDAxEZWZhdWx0IENpdHkxHDAaBgNVBAoME0RlZmF1bHQg +Q29tcGFueSBMdGQwIBcNMTQxMDI0MDc1MTU1WhgPMzAxNDAyMjQwNzUxNTVaMEIx +CzAJBgNVBAYTAkZJMRUwEwYDVQQHDAxEZWZhdWx0IENpdHkxHDAaBgNVBAoME0Rl +ZmF1bHQgQ29tcGFueSBMdGQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQDDzU6xLZDD5rZENsOpTpTmqS8YisBaefU3ZeN7VJepZZ/7unM/1YLGJtuRh2Qa +MyTkvyjzf7bSFsDt9L5lfQwBBblVeWkrCvGnQmHDQQYB7JrSmFDPz9W9Mxf9Q2BW +B3lcoKXXJgMnWw0WGrt0lEdFp9gWbq8H9hwJdjpyyk4ZTIuucSOD4JUP3QFEhYU5 +kdcIbDRVw81J4eAZ6EdvbjDN05S7qWjW7rJTnCHAHEd18hcsMGwjpwhjEaSdhMrM +mhOeL8kuQV0fI8v2xfYBliIn9xBZGOVzySPzwFmQceORlW6F3V5w6mwFkmuXqXWX +Qo98swTu7mb89qVYmR71d3L3AgMBAAGjUDBOMB0GA1UdDgQWBBRdWet/kGNTyvXK +wuBdP/eSldOgWjAfBgNVHSMEGDAWgBRdWet/kGNTyvXKwuBdP/eSldOgWjAMBgNV +HRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQCcJpP+DR4AJxVelNTSZa+V38c+ +jgrMD2Ku2eU8NQlsjgMfNEU5Md/g7FpP8aCFzVf0kAAT7DxZmSE3uWXQbMXyVJmy +bF+qXinf71QzdWULm6sASoshC6wbHnXL9ZjWQ3gh1nqVgo3MmLQYrb3eJfKaaLoc +wpjhYxVxGFOx1ITN3jED64lUfoLHvR6NFbESYKAuAAzSNqX4HOQ3uGk2THM8JocZ +oH2+38d81Kd4HQ7DDDKS/isG0+rR60Ti1cMgu7OT7p1dZCwT/KQuI5eGjE9lubkc +yAJjaod4rVLdBri3XVvtySfS2+/75qUgv2TF7d/s7mxMq4DDt29yeKSUhZCs +-----END CERTIFICATE----- diff --git a/mysql-test/std_data/galera-key.pem b/mysql-test/std_data/galera-key.pem new file mode 100644 index 00000000000..c88c613cacf --- /dev/null +++ b/mysql-test/std_data/galera-key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDDzU6xLZDD5rZE +NsOpTpTmqS8YisBaefU3ZeN7VJepZZ/7unM/1YLGJtuRh2QaMyTkvyjzf7bSFsDt +9L5lfQwBBblVeWkrCvGnQmHDQQYB7JrSmFDPz9W9Mxf9Q2BWB3lcoKXXJgMnWw0W +Grt0lEdFp9gWbq8H9hwJdjpyyk4ZTIuucSOD4JUP3QFEhYU5kdcIbDRVw81J4eAZ +6EdvbjDN05S7qWjW7rJTnCHAHEd18hcsMGwjpwhjEaSdhMrMmhOeL8kuQV0fI8v2 +xfYBliIn9xBZGOVzySPzwFmQceORlW6F3V5w6mwFkmuXqXWXQo98swTu7mb89qVY +mR71d3L3AgMBAAECggEBAIMT0UdZSp1quL/nrYqNGa9kuSuDz4uCM3+3jNcGZVU4 +vCYHxpmINLi0UK8W5ROJA3zC4AZKjDgOlW93NXK5iKyyiUTIN3hiJi4jiVDuGbh2 +DZtH7mmAKAU1zCx2y2osLLmurfbe8qOJF7ShhrZfgWsHFujFhhUdU92dsTkhZ7EU +2NF8ScxCo4PbOJoHC3j0ApfwCMxUMAKZF5+08EeKYqK7OAXI79HeIvEbHn3cUDGm +bvg6ykwlz2UUO4sg+xdCmn1Bt36HF/4e973Y5fkE/vd9mryHIlu9t7GJgWyUiPr8 +BGEoAWDSpPOMd/b9ivtxh9Gd+LW/uitMuBIfrRPgz9kCgYEA+JqeeD2xqF2IzZyq +i1UqgKe3su2U2zhkgbu1h/1M/reNIZGylF0wFs3P+kNIB2NavmHjXcgSjdJzqRL9 +XEWfFJRmeARo9RTEQEVd8zp1Eo8ISeiksGgvbL4rrNIRR5V5MZytfISRiGCWN6jx +ulJ6EieQk5EcvknGlWpJY/bBsQ0CgYEAyaCLqrR38gVl2Z0t6YlhW/HWAwGt+lf4 +apN1AS4uykx7wRW2B0y9QUDfsrYeVlbbeRPP4UzPmJez+J2cweoIIeFFyo3KP2L7 +79E3EVYywjXhPg52F7OjFA4Bp970XclIC5Al7kDufSgwZmWdceSx4Jjc5ixyQEC8 +Ad0ThgP6yxMCgYAvC4OFmZcvF1Q2JLmZWGqMojB/KbqLqaZLbqwxqduSMEYC3kF/ +FgttpVEAOQ8+ZqzbbkbKjnwEXpkIm9FaTsqF6HdjquH5zw48Y2QeDSfudSbKZb4U +rAKdf3dgYvhmJYEjxFSIRcYMmsqSieQEsGrtWJNheYqI8AkmaVCuHBoXWQKBgQCj +daelNffD2wJuQNI28axfiRjSiSsNuQHpDTCfS1ydnxH5QGu5UUphO4HfdWv03SfC +6f/vDIGEmQBLvyOVxfDf3qzhAMCFUO8kxj1ZrcMq1dmMoNa2cmj0WkKXYNZFrmfd +D/jgRf3Ss6FBcoIJErnudp8nb8MUOibxb9RjIpjQxwKBgEliKaGN+/QkPTNJ4vXz +609CIilxpE+YVTzlv3YeZP5HqsJTJPS2ARIUr/Pjpbl3LHfYNeeGDCwgkJIK0JJH +iA1M51q6t3zG2y9gKmC15FF0jShoZkRgqBxqrSHAnrCo5t2C48ElxJ3FEU8T75sz +dlGTbkmR0Wm43Kh++dWICJ3g +-----END PRIVATE KEY----- diff --git a/mysql-test/std_data/wsrep_notify.sh b/mysql-test/std_data/wsrep_notify.sh new file mode 100755 index 00000000000..7036f603c84 --- /dev/null +++ b/mysql-test/std_data/wsrep_notify.sh @@ -0,0 +1,99 @@ +#!/bin/sh -eu + +# This is a simple example of wsrep notification script (wsrep_notify_cmd). +# It will create 'wsrep' schema and two tables in it: 'membeship' and 'status' +# and fill them on every membership or node status change. +# +# Edit parameters below to specify the address and login to server. + +USER=root +HOST=127.0.0.1 +PORT=$NODE_MYPORT_1 + +SCHEMA="mtr_wsrep_notify" +MEMB_TABLE="$SCHEMA.membership" +STATUS_TABLE="$SCHEMA.status" + +BEGIN=" +SET wsrep_on=0; +CREATE SCHEMA IF NOT EXISTS $SCHEMA; +CREATE TABLE IF NOT EXISTS $MEMB_TABLE ( + idx INT, + uuid CHAR(40), /* node UUID */ + name VARCHAR(32), /* node name */ + addr VARCHAR(256) /* node address */ +) ENGINE=MEMORY; +CREATE TABLE IF NOT EXISTS $STATUS_TABLE ( + size INT, /* component size */ + idx INT, /* this node index */ + status CHAR(16), /* this node status */ + uuid CHAR(40), /* cluster UUID */ + prim BOOLEAN /* if component is primary */ +) ENGINE=MEMORY; +BEGIN; +" +END="COMMIT;" + +configuration_change() +{ + echo "$BEGIN;" + + local idx=0 + + for NODE in $(echo $MEMBERS | sed s/,/\ /g) + do + echo "INSERT INTO $MEMB_TABLE VALUES ( $idx, " + # Don't forget to properly quote string values + echo "'$NODE'" | sed s/\\//\',\'/g + echo ");" + idx=$(( $idx + 1 )) + done + + echo "INSERT INTO $STATUS_TABLE VALUES($idx, $INDEX, '$STATUS', '$CLUSTER_UUID', $PRIMARY);" + + echo "$END" +} + +status_update() +{ + echo "SET wsrep_on=0; BEGIN; UPDATE $STATUS_TABLE SET status='$STATUS'; COMMIT;" +} + +COM=status_update # not a configuration change by default + +while [ $# -gt 0 ] +do + case $1 in + --status) + STATUS=$2 + shift + ;; + --uuid) + CLUSTER_UUID=$2 + shift + ;; + --primary) + [ "$2" = "yes" ] && PRIMARY="1" || PRIMARY="0" + COM=configuration_change + shift + ;; + --index) + INDEX=$2 + shift + ;; + --members) + MEMBERS=$2 + shift + ;; + esac + shift +done + +# Undefined means node is shutting down +if [ "$STATUS" != "Undefined" ] +then + $COM | mysql -B -u$USER -h$HOST -P$PORT +fi + +exit 0 +# diff --git a/mysql-test/suite/galera/disabled.def b/mysql-test/suite/galera/disabled.def new file mode 100644 index 00000000000..397bf8e75c5 --- /dev/null +++ b/mysql-test/suite/galera/disabled.def @@ -0,0 +1,18 @@ +galera_wsrep_provider_unset_set : lp1379204 'Unsupported protocol downgrade: incremental data collection disabled. Expect abort.' +galera_kill_nochanges : mysql-wsrep#24 Galera server does not restart properly if killed +galera_bf_abort_for_update : mysql-wsrep#26 SELECT FOR UPDATE sometimes allowed to proceed in the face of a concurrent update +galera_toi_ddl_fk_insert : qa#39 galera_toi_ddl_fk_insert fails sporadically +galera_binlog_row_image : MDEV-7471 - Enable binlog_row_image parameter in MariaDB +galera_binlog_rows_query_log_events : Unknown system variable 'binlog_rows_query_log_events' (see annotate_rows_log_event) + +galera_sbr : MDEV-7995 - DMLs not getting replicated with log-bin=OFF & binlog-format != ROW +galera_create_trigger : MDEV-7996 - CURRENT_USER definer does not replicate for triggers +galera_ist_mysqldump : Lost connection to MySQL server during query +galera_ist_xtrabackup-v2 : mysqltest failed but provided no output +galera_ist_innodb_flush_logs : mysqltest failed but provided no output +galera_sst_mysqldump : query 'show status' failed with wrong errno 1927 +galera_as_master_gtid : Needs to be re-worked +galera_as_master_gtid_change_master : Needs to be re-worked +galera_migrate : query 'let $success= `$wait_condition`' failed: 1146 +galera_var_notify_cmd : Result content mismatch + diff --git a/mysql-test/suite/galera/galera_2nodes.cnf b/mysql-test/suite/galera/galera_2nodes.cnf index 38a57758064..7e998e387dc 100644 --- a/mysql-test/suite/galera/galera_2nodes.cnf +++ b/mysql-test/suite/galera/galera_2nodes.cnf @@ -5,9 +5,8 @@ binlog-format=row innodb-autoinc-lock-mode=2 default-storage-engine=innodb - -wsrep-cluster-address=gcomm:// wsrep-provider=@ENV.WSREP_PROVIDER +wsrep_node_address=127.0.0.1 # enforce read-committed characteristics across the cluster wsrep-causal-reads=ON wsrep-sync-wait=7 @@ -16,9 +15,10 @@ wsrep-sync-wait=7 #galera_port=@OPT.port #ist_port=@OPT.port #sst_port=@OPT.port +wsrep-cluster-address=gcomm:// wsrep_provider_options='base_port=@mysqld.1.#galera_port;gcache.size=10M' +wsrep_node_incoming_address=127.0.0.1:@mysqld.1.port wsrep_sst_receive_address='127.0.0.1:@mysqld.1.#sst_port' -wsrep_node_incoming_address=127.0.0.1 [mysqld.2] #galera_port=@OPT.port @@ -26,8 +26,10 @@ wsrep_node_incoming_address=127.0.0.1 #sst_port=@OPT.port wsrep_cluster_address='gcomm://127.0.0.1:@mysqld.1.#galera_port' wsrep_provider_options='base_port=@mysqld.2.#galera_port;gcache.size=10M' +wsrep_node_incoming_address=127.0.0.1:@mysqld.2.port wsrep_sst_receive_address='127.0.0.1:@mysqld.2.#sst_port' + [ENV] NODE_MYPORT_1= @mysqld.1.port NODE_MYSOCK_1= @mysqld.1.socket diff --git a/mysql-test/suite/galera/galera_2nodes_as_master.cnf b/mysql-test/suite/galera/galera_2nodes_as_master.cnf new file mode 100644 index 00000000000..08d860e9ba4 --- /dev/null +++ b/mysql-test/suite/galera/galera_2nodes_as_master.cnf @@ -0,0 +1,69 @@ +# +# This file creates a setup with a 2-node Galera cluster (master) and one +# standalone MariaDB server, to be used as a slave. +# + +# Use default setting for mysqld processes +!include include/default_mysqld.cnf + +[mysqld] +binlog-format=row +innodb-autoinc-lock-mode=2 +default-storage-engine=innodb + +[mysqld.1] +#galera_port=@OPT.port +#ist_port=@OPT.port +#sst_port=@OPT.port + +server-id=1 +log-bin=mysqld-bin +log_slave_updates + +wsrep-provider=@ENV.WSREP_PROVIDER +wsrep_provider_options='base_port=@mysqld.1.#galera_port;gcache.size=10M' +wsrep_cluster_address=gcomm:// +wsrep_sst_receive_address='127.0.0.1:@mysqld.1.#sst_port' +wsrep_node_address=127.0.0.1 +wsrep_node_incoming_address=127.0.0.1:@mysqld.1.port +# enforce read-committed characteristics across the cluster +wsrep-causal-reads=ON +wsrep-sync-wait=7 + +[mysqld.2] +#galera_port=@OPT.port +#ist_port=@OPT.port +#sst_port=@OPT.port + +server-id=2 +log-bin=mysqld-bin +log_slave_updates + +wsrep_provider=@ENV.WSREP_PROVIDER +wsrep_provider_options='base_port=@mysqld.2.#galera_port;gcache.size=10M' +wsrep_cluster_address='gcomm://127.0.0.1:@mysqld.1.#galera_port' +wsrep_sst_receive_address='127.0.0.1:@mysqld.2.#sst_port' +wsrep_node_address=127.0.0.1 +wsrep_node_incoming_address=127.0.0.1:@mysqld.2.port +# enforce read-committed characteristics across the cluster +wsrep-causal-reads=ON +wsrep-sync-wait=7 + +[mysqld.3] +server-id=3 + +[ENV] +NODE_MYPORT_1= @mysqld.1.port +NODE_MYSOCK_1= @mysqld.1.socket + +NODE_MYPORT_2= @mysqld.2.port +NODE_MYSOCK_2= @mysqld.2.socket + +NODE_MYPORT_3= @mysqld.3.port +NODE_MYSOCK_3= @mysqld.3.socket + +NODE_GALERAPORT_1= @mysqld.1.#galera_port +NODE_GALERAPORT_2= @mysqld.2.#galera_port + +NODE_SSTPORT_1= @mysqld.1.#sst_port +NODE_SSTPORT_2= @mysqld.2.#sst_port diff --git a/mysql-test/suite/galera/galera_2nodes_as_slave.cnf b/mysql-test/suite/galera/galera_2nodes_as_slave.cnf new file mode 100644 index 00000000000..3822301fc6e --- /dev/null +++ b/mysql-test/suite/galera/galera_2nodes_as_slave.cnf @@ -0,0 +1,67 @@ +# +# This .cnf file creates a setup with 1 standard MariaDB server, followed by a 2-node Galera cluster +# + +# Use default setting for mysqld processes +!include include/default_mysqld.cnf + +[mysqld] +binlog-format=row + +[mysqld.1] +log-bin +server-id=1 + +[mysqld.2] +#galera_port=@OPT.port +#ist_port=@OPT.port +#sst_port=@OPT.port + +innodb-autoinc-lock-mode=2 +default-storage-engine=innodb +wsrep-provider=@ENV.WSREP_PROVIDER +wsrep_node_address=127.0.0.1 +wsrep-cluster-address=gcomm:// +wsrep_provider_options='base_port=@mysqld.2.#galera_port;gcache.size=10M' +wsrep_node_incoming_address=127.0.0.1:@mysqld.2.port +wsrep_sst_receive_address='127.0.0.1:@mysqld.2.#sst_port' + +# enforce read-committed characteristics across the cluster +wsrep-causal-reads=ON +wsrep-sync-wait=7 +server-id=2 + +[mysqld.3] +#galera_port=@OPT.port +#ist_port=@OPT.port +#sst_port=@OPT.port + +innodb-autoinc-lock-mode=2 +default-storage-engine=innodb +wsrep-provider=@ENV.WSREP_PROVIDER +wsrep_node_address=127.0.0.1 +wsrep_cluster_address='gcomm://127.0.0.1:@mysqld.2.#galera_port' +wsrep_provider_options='base_port=@mysqld.3.#galera_port;gcache.size=10M' +wsrep_node_incoming_address=127.0.0.1:@mysqld.3.port +wsrep_sst_receive_address='127.0.0.1:@mysqld.3.#sst_port' + +# enforce read-committed characteristics across the cluster +wsrep-causal-reads=ON +wsrep-sync-wait=7 +server-id=3 + +[ENV] +NODE_MYPORT_1= @mysqld.1.port +NODE_MYSOCK_1= @mysqld.1.socket + +NODE_MYPORT_2= @mysqld.2.port +NODE_MYSOCK_2= @mysqld.2.socket + +NODE_MYPORT_3= @mysqld.2.port +NODE_MYSOCK_3= @mysqld.2.socket + +NODE_GALERAPORT_2= @mysqld.2.#galera_port +NODE_GALERAPORT_3= @mysqld.3.#galera_port + +NODE_SSTPORT_2= @mysqld.2.#sst_port +NODE_SSTPORT_3= @mysqld.3.#sst_port diff --git a/mysql-test/suite/galera/galera_4nodes.cnf b/mysql-test/suite/galera/galera_4nodes.cnf new file mode 100644 index 00000000000..e54ff27759e --- /dev/null +++ b/mysql-test/suite/galera/galera_4nodes.cnf @@ -0,0 +1,73 @@ +# Use default setting for mysqld processes +!include include/default_mysqld.cnf + +[mysqld] +binlog-format=row +innodb-autoinc-lock-mode=2 +default-storage-engine=innodb +wsrep-provider=@ENV.WSREP_PROVIDER +wsrep_node_address=127.0.0.1 +# enforce read-committed characteristics across the cluster +wsrep-causal-reads=ON +wsrep-sync-wait=7 + +[mysqld.1] +#galera_port=@OPT.port +#ist_port=@OPT.port +#sst_port=@OPT.port +wsrep-cluster-address=gcomm:// +wsrep_provider_options='base_port=@mysqld.1.#galera_port;gcache.size=10M' +wsrep_node_incoming_address=127.0.0.1:@mysqld.1.port +wsrep_sst_receive_address='127.0.0.1:@mysqld.1.#sst_port' + +[mysqld.2] +#galera_port=@OPT.port +#ist_port=@OPT.port +#sst_port=@OPT.port +wsrep_cluster_address='gcomm://127.0.0.1:@mysqld.1.#galera_port' +wsrep_provider_options='base_port=@mysqld.2.#galera_port;gcache.size=10M' +wsrep_node_incoming_address=127.0.0.1:@mysqld.2.port +wsrep_sst_receive_address='127.0.0.1:@mysqld.2.#sst_port' + + +[mysqld.3] +#galera_port=@OPT.port +#ist_port=@OPT.port +#sst_port=@OPT.port +wsrep_cluster_address='gcomm://127.0.0.1:@mysqld.1.#galera_port' +wsrep_provider_options='base_port=@mysqld.3.#galera_port;gcache.size=10M' +wsrep_node_incoming_address=127.0.0.1:@mysqld.3.port +wsrep_sst_receive_address='127.0.0.1:@mysqld.3.#sst_port' + + +[mysqld.4] +#galera_port=@OPT.port +#ist_port=@OPT.port +#sst_port=@OPT.port +wsrep_cluster_address='gcomm://127.0.0.1:@mysqld.1.#galera_port' +wsrep_provider_options='base_port=@mysqld.4.#galera_port;gcache.size=10M' +wsrep_node_incoming_address=127.0.0.1:@mysqld.4.port +wsrep_sst_receive_address='127.0.0.1:@mysqld.4.#sst_port' + +[ENV] +NODE_MYPORT_1= @mysqld.1.port +NODE_MYSOCK_1= @mysqld.1.socket + +NODE_MYPORT_2= @mysqld.2.port +NODE_MYSOCK_2= @mysqld.2.socket + +NODE_MYPORT_3= @mysqld.3.port +NODE_MYSOCK_3= @mysqld.3.socket + +NODE_MYPORT_4= @mysqld.4.port +NODE_MYSOCK_4= @mysqld.4.socket + +NODE_GALERAPORT_1= @mysqld.1.#galera_port +NODE_GALERAPORT_2= @mysqld.2.#galera_port +NODE_GALERAPORT_3= @mysqld.3.#galera_port +NODE_GALERAPORT_4= @mysqld.4.#galera_port + +NODE_SSTPORT_1= @mysqld.1.#sst_port +NODE_SSTPORT_2= @mysqld.2.#sst_port +NODE_SSTPORT_3= @mysqld.3.#sst_port +NODE_SSTPORT_4= @mysqld.4.#sst_port diff --git a/mysql-test/suite/galera/include/galera_have_debug_sync.inc b/mysql-test/suite/galera/include/galera_have_debug_sync.inc new file mode 100644 index 00000000000..7c0156052d8 --- /dev/null +++ b/mysql-test/suite/galera/include/galera_have_debug_sync.inc @@ -0,0 +1,9 @@ +--disable_query_log + +--let $galera_have_debug_sync = `SELECT 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_debug_sync_waiters'` + +--if (!$galera_have_debug_sync) { + --skip "Test requires Galera debug library with debug_sync functionality" +} + +--enable_query_log diff --git a/mysql-test/suite/galera/include/galera_load_provider.inc b/mysql-test/suite/galera/include/galera_load_provider.inc new file mode 100644 index 00000000000..761a1a89fd3 --- /dev/null +++ b/mysql-test/suite/galera/include/galera_load_provider.inc @@ -0,0 +1,10 @@ +--echo Loading wsrep provider ... + +--disable_query_log +--eval SET GLOBAL wsrep_provider = '$wsrep_provider_orig'; +--eval SET GLOBAL wsrep_cluster_address = '$wsrep_cluster_address_orig'; +--enable_query_log + +--enable_reconnect +--source include/wait_until_connected_again.inc +--source include/wait_until_ready.inc diff --git a/mysql-test/suite/galera/include/galera_reset_cluster_address.inc b/mysql-test/suite/galera/include/galera_reset_cluster_address.inc new file mode 100644 index 00000000000..02937ec8ea3 --- /dev/null +++ b/mysql-test/suite/galera/include/galera_reset_cluster_address.inc @@ -0,0 +1,12 @@ +--echo Resetting wsrep_cluster_address + +--let $wsrep_cluster_size_orig = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'` + +SET GLOBAL wsrep_cluster_address = @@wsrep_cluster_address; + +--source include/wait_until_connected_again.inc + +# Wait for wsrep_cluster_size to go back to its original value + +--let $wait_condition = SELECT VARIABLE_VALUE = $wsrep_cluster_size_orig FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc diff --git a/mysql-test/suite/galera/include/galera_resume.inc b/mysql-test/suite/galera/include/galera_resume.inc new file mode 100644 index 00000000000..232cb46479e --- /dev/null +++ b/mysql-test/suite/galera/include/galera_resume.inc @@ -0,0 +1,9 @@ +--echo Resuming node ... +--perl + my $pid_filename = $ENV{'_SUSPEND_NODE_PIDFILE'}; + my $mysqld_pid = `cat $pid_filename`; + chomp($mysqld_pid); + system("kill -18 $mysqld_pid"); + exit(0); +EOF + diff --git a/mysql-test/suite/galera/include/galera_sst_restore.inc b/mysql-test/suite/galera/include/galera_sst_restore.inc new file mode 100644 index 00000000000..a08b148c31a --- /dev/null +++ b/mysql-test/suite/galera/include/galera_sst_restore.inc @@ -0,0 +1,29 @@ +# +# Restore the various options used for SST to their original values +# so that MTR's end-of-test checks are happy. +# + +--connection node_1 +CALL mtr.add_suppression("Slave SQL: Error 'The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement' on query"); + +--disable_query_log +--eval SET GLOBAL wsrep_sst_auth = '$wsrep_sst_auth_orig'; +--enable_query_log + +--error 0,ER_CANNOT_USER +DROP USER sst; + +--connection node_2 +CALL mtr.add_suppression("Slave SQL: Error 'The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement' on query"); +CALL mtr.add_suppression("InnoDB: Error: Table \"mysql\"\\.\"innodb_index_stats\" not found"); +CALL mtr.add_suppression("InnoDB: New log files created"); +CALL mtr.add_suppression("InnoDB: Creating foreign key constraint system tables"); +CALL mtr.add_suppression("Can't open and lock time zone table"); +CALL mtr.add_suppression("Can't open and lock privilege tables"); +CALL mtr.add_suppression("Info table is not ready to be used"); +CALL mtr.add_suppression("Native table .* has the wrong structure"); + +--disable_query_log +--eval SET GLOBAL wsrep_sst_method = '$wsrep_sst_method_orig'; +--eval SET GLOBAL wsrep_sst_receive_address = '$wsrep_sst_receive_address_orig'; +--enable_query_log diff --git a/mysql-test/suite/galera/include/galera_sst_set_mysqldump.inc b/mysql-test/suite/galera/include/galera_sst_set_mysqldump.inc new file mode 100644 index 00000000000..405c16ce4f1 --- /dev/null +++ b/mysql-test/suite/galera/include/galera_sst_set_mysqldump.inc @@ -0,0 +1,22 @@ +# +# Set all the variables required for the SST to be performed via mysqldump +# + +--echo Setting SST method to mysqldump ... + +--connection node_1 +# We need a user with a password to perform SST, otherwise we hit LP #1378253 +GRANT ALL PRIVILEGES ON *.* TO 'sst' IDENTIFIED BY 'sst'; + +--let $wsrep_sst_auth_orig = `SELECT @@wsrep_sst_auth` +SET GLOBAL wsrep_sst_auth = 'sst:sst'; + +--connection node_2 +--let $wsrep_sst_method_orig = `SELECT @@wsrep_sst_method` +--let $wsrep_sst_receive_address_orig = `SELECT @@wsrep_sst_receive_address` + +--disable_query_log +# Set wsrep_sst_receive_address to the SQL port +--eval SET GLOBAL wsrep_sst_receive_address = '127.0.0.2:$NODE_MYPORT_2'; +--enable_query_log +SET GLOBAL wsrep_sst_method = 'mysqldump'; diff --git a/mysql-test/suite/galera/include/galera_st_clean_slave.inc b/mysql-test/suite/galera/include/galera_st_clean_slave.inc new file mode 100644 index 00000000000..81ba54aa6f5 --- /dev/null +++ b/mysql-test/suite/galera/include/galera_st_clean_slave.inc @@ -0,0 +1,113 @@ +--echo Performing State Transfer on a server that starts from a clean var directory +--echo This is accomplished by shutting down node #2 and removing its var directory before restarting it + +--connection node_1 +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; + +--connection node_2 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; + +--echo Shutting down server ... +--source include/shutdown_mysqld.inc + +--connection node_1 +--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc + +--echo Cleaning var directory ... +--remove_files_wildcard $MYSQLTEST_VARDIR/mysqld.2/data/mtr +--remove_files_wildcard $MYSQLTEST_VARDIR/mysqld.2/data/performance_schema +--remove_files_wildcard $MYSQLTEST_VARDIR/mysqld.2/data/test +--remove_files_wildcard $MYSQLTEST_VARDIR/mysqld.2/data/mysql +--remove_files_wildcard $MYSQLTEST_VARDIR/mysqld.2/data + +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; + +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); + +--connect node_1a_galera_st_clean_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); + +--connection node_2 +--echo Starting server ... +--source include/start_mysqld.inc +--source include/wait_until_ready.inc + +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; + +--connection node_1 +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; + +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; + +--connection node_1a_galera_st_clean_slave +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; + +SELECT COUNT(*) = 35 FROM t1; +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COMMIT; +SET AUTOCOMMIT=ON; + +--connection node_1 +SELECT COUNT(*) = 35 FROM t1; +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; diff --git a/mysql-test/suite/galera/include/galera_st_disconnect_slave.inc b/mysql-test/suite/galera/include/galera_st_disconnect_slave.inc new file mode 100644 index 00000000000..c8869746bd1 --- /dev/null +++ b/mysql-test/suite/galera/include/galera_st_disconnect_slave.inc @@ -0,0 +1,105 @@ +--echo Performing State Transfer on a server that has been temporarily disconnected + +--connection node_1 +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; + +--connection node_2 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; + +--source suite/galera/include/galera_unload_provider.inc + +--connection node_1 +--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc + +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; + +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); + +--connect node_1a_galera_st_disconnect_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); + +--connection node_2 +--source suite/galera/include/galera_load_provider.inc + +--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc + +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; + +--connection node_1 +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; + +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; + +--connection node_1a_galera_st_disconnect_slave +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; + +SELECT COUNT(*) = 35 FROM t1; +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COMMIT; +SET AUTOCOMMIT=ON; + +--connection node_1 +SELECT COUNT(*) = 35 FROM t1; +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; diff --git a/mysql-test/suite/galera/include/galera_st_kill_slave.inc b/mysql-test/suite/galera/include/galera_st_kill_slave.inc new file mode 100644 index 00000000000..bae37755c65 --- /dev/null +++ b/mysql-test/suite/galera/include/galera_st_kill_slave.inc @@ -0,0 +1,108 @@ +--echo Performing State Transfer on a server that has been killed and restarted + +--connection node_1 +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; + +--connection node_2 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; + +--source include/kill_galera.inc + +--connection node_1 +--source include/wait_until_connected_again.inc +--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc + +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; + +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); + +--connect node_1a_galera_st_kill_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); + +--connection node_2 +--let $galera_wsrep_recover_server_id=2 +--source suite/galera/include/galera_wsrep_recover.inc + +--echo Starting server ... +--source include/start_mysqld.inc +--source include/wait_until_ready.inc + +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; + +--connection node_1 +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; + +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; + +--connection node_1a_galera_st_kill_slave +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; + +SELECT COUNT(*) = 35 FROM t1; +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COMMIT; +SET AUTOCOMMIT=ON; + +--connection node_1 +SELECT COUNT(*) = 35 FROM t1; +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; diff --git a/mysql-test/suite/galera/include/galera_st_kill_slave_ddl.inc b/mysql-test/suite/galera/include/galera_st_kill_slave_ddl.inc new file mode 100644 index 00000000000..b8dd0fda987 --- /dev/null +++ b/mysql-test/suite/galera/include/galera_st_kill_slave_ddl.inc @@ -0,0 +1,123 @@ +--echo Performing State Transfer on a server that has been killed and restarted +--echo while a DDL was in progress on it + +--connection node_1 +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); + +--connection node_2 +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; + +# Suspend the applier as it applies the ALTER TABLE +--let $debug_orig = `SELECT @@debug_dbug` +SET GLOBAL debug_dbug = 'd,sync.alter_opened_table'; + +--connection node_1 +ALTER TABLE t1 ADD COLUMN f2 INTEGER; + +--connection node_2 +SET wsrep_sync_wait = 0; +--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'debug sync point: now' +--source include/wait_condition.inc + +--source include/kill_galera.inc + +--connection node_1 +--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc + +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +COMMIT; + +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); + +--connect node_1a_galera_st_kill_slave_ddl, 127.0.0.1, root, , test, $NODE_MYPORT_1 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); + +--connection node_2 +--let $galera_wsrep_recover_server_id=2 +--source suite/galera/include/galera_wsrep_recover.inc + +--connection node_2 +--echo Starting server ... +--source include/start_mysqld.inc +--source include/wait_until_ready.inc + +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +COMMIT; + +--connection node_1 +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +COMMIT; + +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +COMMIT; + +--connection node_1a_galera_st_kill_slave_ddl +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; + +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +SELECT COUNT(*) = 35 FROM t1; +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COMMIT; +SET AUTOCOMMIT=ON; + +--connection node_1 +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +SELECT COUNT(*) = 35 FROM t1; +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; + +SET GLOBAL debug_dbug = $debug_orig; diff --git a/mysql-test/suite/galera/include/galera_st_shutdown_slave.inc b/mysql-test/suite/galera/include/galera_st_shutdown_slave.inc new file mode 100644 index 00000000000..1a65ef1bd94 --- /dev/null +++ b/mysql-test/suite/galera/include/galera_st_shutdown_slave.inc @@ -0,0 +1,105 @@ +--echo Performing State Transfer on a server that has been shut down cleanly and restarted + +--connection node_1 +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; + +--connection node_2 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; + +--echo Shutting down server ... +--source include/shutdown_mysqld.inc + +--connection node_1 +--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc + +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; + +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); + +--connect node_1a_galera_st_shutdown_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); + +--connection node_2 +--echo Starting server ... +--source include/start_mysqld.inc +--source include/wait_until_ready.inc + +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; + +--connection node_1 +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; + +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; + +--connection node_1a_galera_st_shutdown_slave +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; + +SELECT COUNT(*) = 35 FROM t1; +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COMMIT; +SET AUTOCOMMIT=ON; + +--connection node_1 +SELECT COUNT(*) = 35 FROM t1; +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; diff --git a/mysql-test/suite/galera/include/galera_unload_provider.inc b/mysql-test/suite/galera/include/galera_unload_provider.inc new file mode 100644 index 00000000000..edc7eb31e0e --- /dev/null +++ b/mysql-test/suite/galera/include/galera_unload_provider.inc @@ -0,0 +1,7 @@ +--echo Unloading wsrep provider ... + +--let $wsrep_cluster_address_orig = `SELECT @@wsrep_cluster_address` +--let $wsrep_provider_orig = `SELECT @@wsrep_provider` +--let $wsrep_provider_options_orig = `SELECT @@wsrep_provider_options` + +SET GLOBAL wsrep_provider = 'none'; diff --git a/mysql-test/suite/galera/include/galera_wsrep_recover.inc b/mysql-test/suite/galera/include/galera_wsrep_recover.inc new file mode 100644 index 00000000000..090ffe5f5df --- /dev/null +++ b/mysql-test/suite/galera/include/galera_wsrep_recover.inc @@ -0,0 +1,23 @@ +--echo Performing --wsrep-recover ... +--exec $MYSQLD --defaults-group-suffix=.$galera_wsrep_recover_server_id --defaults-file=$MYSQLTEST_VARDIR/my.cnf --innodb --wsrep-recover > $MYSQL_TMP_DIR/galera_wsrep_recover.log 2>&1 + +--perl + use strict; + my $wsrep_start_position_str = "grep 'WSREP: Recovered position:' $ENV{MYSQL_TMP_DIR}/galera_wsrep_recover.log | sed 's/.*WSREP\:\ Recovered\ position://' | sed 's/^[ \t]*//'"; + my $wsrep_start_position = `grep 'WSREP: Recovered position:' $ENV{MYSQL_TMP_DIR}/galera_wsrep_recover.log | sed 's/.*WSREP\:\ Recovered\ position://' | sed 's/^[ \t]*//'`; + chomp($wsrep_start_position); + + die if $wsrep_start_position eq ''; + + open(FILE, ">", "$ENV{MYSQL_TMP_DIR}/galera_wsrep_start_position.inc") or die; + print FILE "--let \$galera_wsrep_start_position = $wsrep_start_position\n"; + close FILE; +EOF + +--source $MYSQL_TMP_DIR/galera_wsrep_start_position.inc + +if ($galera_wsrep_start_position == '') { + --die "Could not obtain wsrep_start_position." +} + +--remove_file $MYSQL_TMP_DIR/galera_wsrep_start_position.inc diff --git a/mysql-test/suite/galera/include/kill_galera.inc b/mysql-test/suite/galera/include/kill_galera.inc new file mode 100644 index 00000000000..d7f665df6c7 --- /dev/null +++ b/mysql-test/suite/galera/include/kill_galera.inc @@ -0,0 +1,20 @@ +--echo Killing server ... + +# Write file to make mysql-test-run.pl expect the crash, but don't start it +--let $_server_id= `SELECT @@server_id` +--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.$_server_id.expect +--exec echo "wait" > $_expect_file_name + +# Kill the connected server +--disable_reconnect +--let KILL_NODE_PIDFILE = `SELECT @@pid_file` + +--perl + my $pid_filename = $ENV{'KILL_NODE_PIDFILE'}; + my $mysqld_pid = `cat $pid_filename`; + chomp($mysqld_pid); + system("kill -9 $mysqld_pid"); + exit(0); +EOF + +--source include/wait_until_disconnected.inc diff --git a/mysql-test/suite/galera/include/shutdown_mysqld.inc b/mysql-test/suite/galera/include/shutdown_mysqld.inc new file mode 100644 index 00000000000..54bba1318e7 --- /dev/null +++ b/mysql-test/suite/galera/include/shutdown_mysqld.inc @@ -0,0 +1,18 @@ +# This is the first half of include/restart_mysqld.inc. +if ($rpl_inited) +{ + if (!$allow_rpl_inited) + { + --die ERROR IN TEST: When using the replication test framework (master-slave.inc, rpl_init.inc etc), use rpl_restart_server.inc instead of restart_mysqld.inc. If you know what you are doing and you really have to use restart_mysqld.inc, set allow_rpl_inited=1 before you source restart_mysqld.inc + } +} + +# Write file to make mysql-test-run.pl expect the "crash", but don't start it +--let $_server_id= `SELECT @@server_id` +--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.$_server_id.expect +--exec echo "wait" > $_expect_file_name + +# Send shutdown to the connected server +--shutdown_server +--source include/wait_until_disconnected.inc + diff --git a/mysql-test/suite/galera/include/start_mysqld.inc b/mysql-test/suite/galera/include/start_mysqld.inc new file mode 100644 index 00000000000..4ee3d17810c --- /dev/null +++ b/mysql-test/suite/galera/include/start_mysqld.inc @@ -0,0 +1,22 @@ +# Include this script only after using shutdown_mysqld.inc +# where $_expect_file_name was initialized. +# Write file to make mysql-test-run.pl start up the server again + +if ($galera_wsrep_start_position != '') { + --echo Using --wsrep-start-position when starting mysqld ... + --exec echo "restart:$start_mysqld_params --wsrep-start-position=$galera_wsrep_start_position" > $_expect_file_name + --let $galera_wsrep_start_position = 0 +} + +if ($galera_wsrep_start_position == '') { + --exec echo "restart:$start_mysqld_params" > $_expect_file_name +} + +# Turn on reconnect +--enable_reconnect + +# Call script that will poll the server waiting for it to be back online again +--source include/wait_until_connected_again.inc + +# Turn off reconnect again +--disable_reconnect diff --git a/mysql-test/suite/galera/r/galera_account_management.result b/mysql-test/suite/galera/r/galera_account_management.result new file mode 100644 index 00000000000..9b3ae9ba46e --- /dev/null +++ b/mysql-test/suite/galera/r/galera_account_management.result @@ -0,0 +1,40 @@ +CREATE USER user1, user2 IDENTIFIED BY 'password'; +SELECT COUNT(*) = 2 FROM mysql.user WHERE user IN ('user1', 'user2'); +COUNT(*) = 2 +1 +RENAME USER user2 TO user3; +SELECT COUNT(*) = 0 FROM mysql.user WHERE user = 'user2'; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 1 FROM mysql.user WHERE user = 'user3'; +COUNT(*) = 1 +1 +SET PASSWORD FOR user3 = PASSWORD('foo'); +SELECT password != '' FROM mysql.user WHERE user = 'user3'; +password != '' +1 +DROP USER user1, user3; +SELECT COUNT(*) = 0 FROM mysql.user WHERE user IN ('user1', 'user2'); +COUNT(*) = 0 +1 +GRANT ALL ON *.* TO user4 IDENTIFIED BY 'password'; +SELECT COUNT(*) = 1 FROM mysql.user WHERE user = 'user4'; +COUNT(*) = 1 +1 +SELECT Select_priv = 'Y' FROM mysql.user WHERE user = 'user4'; +Select_priv = 'Y' +1 +CREATE USER user5; +GRANT PROXY ON user4 TO user5; +SELECT COUNT(*) = 1 FROM mysql.proxies_priv WHERE user = 'user5'; +COUNT(*) = 1 +1 +REVOKE ALL PRIVILEGES ON *.* FROM user4; +SELECT Select_priv = 'N' FROM mysql.user WHERE user = 'user4'; +Select_priv = 'N' +1 +REVOKE PROXY ON user4 FROM user5; +SELECT COUNT(*) = 0 FROM mysql.proxies_priv WHERE user = 'user5'; +COUNT(*) = 0 +1 +DROP USER user4, user5; diff --git a/mysql-test/suite/galera/r/galera_alter_engine_innodb.result b/mysql-test/suite/galera/r/galera_alter_engine_innodb.result new file mode 100644 index 00000000000..2b30ac5814d --- /dev/null +++ b/mysql-test/suite/galera/r/galera_alter_engine_innodb.result @@ -0,0 +1,10 @@ +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +ALTER TABLE t1 ENGINE=InnoDB; +SELECT ENGINE = 'InnoDB' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +ENGINE = 'InnoDB' +1 +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_alter_engine_myisam.result b/mysql-test/suite/galera/r/galera_alter_engine_myisam.result new file mode 100644 index 00000000000..280cb58208c --- /dev/null +++ b/mysql-test/suite/galera/r/galera_alter_engine_myisam.result @@ -0,0 +1,11 @@ +SET GLOBAL wsrep_replicate_myisam = TRUE; +CREATE TABLE t1 (f1 INTEGER) ENGINE=MyISAM; +INSERT INTO t1 VALUES (1); +ALTER TABLE t1 ENGINE=InnoDB; +SELECT ENGINE = 'InnoDB' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +ENGINE = 'InnoDB' +1 +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_alter_table_force.result b/mysql-test/suite/galera/r/galera_alter_table_force.result new file mode 100644 index 00000000000..401ab46d868 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_alter_table_force.result @@ -0,0 +1,10 @@ +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +ALTER TABLE t1 FORCE; +SELECT ENGINE = 'InnoDB' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +ENGINE = 'InnoDB' +1 +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_as_master.result b/mysql-test/suite/galera/r/galera_as_master.result new file mode 100644 index 00000000000..aba93573ecf --- /dev/null +++ b/mysql-test/suite/galera/r/galera_as_master.result @@ -0,0 +1,7 @@ +START SLAVE; +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES(1); +INSERT INTO t1 VALUES(2); +DROP TABLE t1; +STOP SLAVE; +RESET SLAVE ALL; diff --git a/mysql-test/suite/galera/r/galera_as_master_gtid.result b/mysql-test/suite/galera/r/galera_as_master_gtid.result new file mode 100644 index 00000000000..8dfe462d495 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_as_master_gtid.result @@ -0,0 +1,59 @@ +START SLAVE USER='root'; +Warnings: +Note 1759 Sending passwords in plain text without SSL/TLS is extremely insecure. +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES(1); +uuids_do_not_match +1 +SHOW BINLOG EVENTS IN 'mysqld-bin.000002' FROM 120; +Log_name Pos Event_type Server_id End_log_pos Info +mysqld-bin.000002 120 Previous_gtids 1 151 +mysqld-bin.000002 151 Gtid 1 199 SET @@SESSION.GTID_NEXT= '<effective_uuid>:1' +mysqld-bin.000002 199 Query 1 327 use `test`; CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB +mysqld-bin.000002 327 Gtid 1 375 SET @@SESSION.GTID_NEXT= '<effective_uuid>:2' +mysqld-bin.000002 375 Query 1 452 BEGIN +mysqld-bin.000002 452 Table_map 1 497 table_id: # (test.t1) +mysqld-bin.000002 497 Write_rows 1 537 table_id: # flags: STMT_END_F +mysqld-bin.000002 537 Xid 1 568 COMMIT /* xid=# */ +INSERT INTO t1 VALUES(2); +uuids_do_not_match +1 +uuids_match +1 +SHOW BINLOG EVENTS IN 'mysqld-bin.000003' FROM 120; +Log_name Pos Event_type Server_id End_log_pos Info +mysqld-bin.000003 120 Previous_gtids 2 151 +mysqld-bin.000003 151 Gtid 1 199 SET @@SESSION.GTID_NEXT= '<effective_uuid>:1' +mysqld-bin.000003 199 Query 1 327 use `test`; CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB +mysqld-bin.000003 327 Gtid 1 375 SET @@SESSION.GTID_NEXT= '<effective_uuid>:2' +mysqld-bin.000003 375 Query 1 443 BEGIN +mysqld-bin.000003 443 Table_map 1 488 table_id: # (test.t1) +mysqld-bin.000003 488 Write_rows 1 528 table_id: # flags: STMT_END_F +mysqld-bin.000003 528 Xid 1 559 COMMIT /* xid=# */ +mysqld-bin.000003 559 Gtid 2 607 SET @@SESSION.GTID_NEXT= '<effective_uuid>:3' +mysqld-bin.000003 607 Query 2 684 BEGIN +mysqld-bin.000003 684 Table_map 2 729 table_id: # (test.t1) +mysqld-bin.000003 729 Write_rows 2 769 table_id: # flags: STMT_END_F +mysqld-bin.000003 769 Xid 2 800 COMMIT /* xid=# */ +uuids_do_not_match +1 +uuids_match +1 +SHOW BINLOG EVENTS IN 'mysqld-bin.000001' FROM 120; +Log_name Pos Event_type Server_id End_log_pos Info +mysqld-bin.000001 120 Previous_gtids 3 151 +mysqld-bin.000001 151 Gtid 1 199 SET @@SESSION.GTID_NEXT= '<effective_uuid>:1' +mysqld-bin.000001 199 Query 1 327 use `test`; CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB +mysqld-bin.000001 327 Gtid 1 375 SET @@SESSION.GTID_NEXT= '<effective_uuid>:2' +mysqld-bin.000001 375 Query 1 443 BEGIN +mysqld-bin.000001 443 Table_map 1 488 table_id: # (test.t1) +mysqld-bin.000001 488 Write_rows 1 528 table_id: # flags: STMT_END_F +mysqld-bin.000001 528 Xid 1 559 COMMIT /* xid=# */ +mysqld-bin.000001 559 Gtid 2 607 SET @@SESSION.GTID_NEXT= '<effective_uuid>:3' +mysqld-bin.000001 607 Query 2 675 BEGIN +mysqld-bin.000001 675 Table_map 2 720 table_id: # (test.t1) +mysqld-bin.000001 720 Write_rows 2 760 table_id: # flags: STMT_END_F +mysqld-bin.000001 760 Xid 2 791 COMMIT /* xid=# */ +DROP TABLE t1; +STOP SLAVE; +RESET SLAVE ALL; diff --git a/mysql-test/suite/galera/r/galera_as_master_gtid_change_master.result b/mysql-test/suite/galera/r/galera_as_master_gtid_change_master.result new file mode 100644 index 00000000000..80fbccf58e2 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_as_master_gtid_change_master.result @@ -0,0 +1,15 @@ +START SLAVE USER='root'; +Warnings: +Note 1759 Sending passwords in plain text without SSL/TLS is extremely insecure. +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES(1); +INSERT INTO t1 VALUES(2); +STOP SLAVE; +START SLAVE USER='root'; +Warnings: +Note 1759 Sending passwords in plain text without SSL/TLS is extremely insecure. +INSERT INTO t1 VALUES(3); +INSERT INTO t1 VALUES(4); +DROP TABLE t1; +STOP SLAVE; +RESET SLAVE ALL; diff --git a/mysql-test/suite/galera/r/galera_as_slave.result b/mysql-test/suite/galera/r/galera_as_slave.result new file mode 100644 index 00000000000..1e86afa35b7 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_as_slave.result @@ -0,0 +1,14 @@ +START SLAVE; +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES(1); +INSERT INTO t1 VALUES (2); +SELECT COUNT(*) = 2 FROM t1; +COUNT(*) = 2 +1 +INSERT INTO t1 VALUES (3); +SELECT COUNT(*) = 3 FROM t1; +COUNT(*) = 3 +1 +DROP TABLE t1; +STOP SLAVE; +RESET SLAVE ALL; diff --git a/mysql-test/suite/galera/r/galera_as_slave_gtid.result b/mysql-test/suite/galera/r/galera_as_slave_gtid.result new file mode 100644 index 00000000000..fbac7b1b6b5 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_as_slave_gtid.result @@ -0,0 +1,16 @@ +START SLAVE; +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES(1); +SELECT LENGTH(@@global.gtid_binlog_state) > 1; +LENGTH(@@global.gtid_binlog_state) > 1 +1 +gtid_binlog_state_equal +1 +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +gtid_binlog_state_equal +1 +DROP TABLE t1; +STOP SLAVE; +RESET SLAVE ALL; diff --git a/mysql-test/suite/galera/r/galera_bf_abort.result b/mysql-test/suite/galera/r/galera_bf_abort.result new file mode 100644 index 00000000000..c55f1a4dfcb --- /dev/null +++ b/mysql-test/suite/galera/r/galera_bf_abort.result @@ -0,0 +1,10 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2); +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +wsrep_local_aborts_increment +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_bf_abort_for_update.result b/mysql-test/suite/galera/r/galera_bf_abort_for_update.result new file mode 100644 index 00000000000..3978a3df193 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_bf_abort_for_update.result @@ -0,0 +1,10 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (1); +SELECT * FROM t1 FOR UPDATE; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +wsrep_local_aborts_increment +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_bf_abort_ftwrl.result b/mysql-test/suite/galera/r/galera_bf_abort_ftwrl.result new file mode 100644 index 00000000000..e3819172510 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_bf_abort_ftwrl.result @@ -0,0 +1,8 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +FLUSH TABLES WITH READ LOCK;; +INSERT INTO t1 VALUES (1); +UNLOCK TABLES; +wsrep_local_aborts_increment +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_bf_abort_get_lock.result b/mysql-test/suite/galera/r/galera_bf_abort_get_lock.result new file mode 100644 index 00000000000..2e44a773b23 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_bf_abort_get_lock.result @@ -0,0 +1,12 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +SELECT GET_LOCK("foo", 1000); +GET_LOCK("foo", 1000) +1 +SET AUTOCOMMIT=OFF; +INSERT INTO t1 VALUES (1); +SELECT GET_LOCK("foo", 1000);; +INSERT INTO t1 VALUES (1); +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +wsrep_local_aborts_increment +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_bf_abort_lock_table.result b/mysql-test/suite/galera/r/galera_bf_abort_lock_table.result new file mode 100644 index 00000000000..e657e724a8b --- /dev/null +++ b/mysql-test/suite/galera/r/galera_bf_abort_lock_table.result @@ -0,0 +1,8 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +LOCK TABLE t1 WRITE; +INSERT INTO t1 VALUES (1);; +INSERT INTO t1 VALUES (2); +wsrep_local_aborts_increment +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_bf_abort_sleep.result b/mysql-test/suite/galera/r/galera_bf_abort_sleep.result new file mode 100644 index 00000000000..8e85a5feda2 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_bf_abort_sleep.result @@ -0,0 +1,9 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +INSERT INTO t1 VALUES (1); +SELECT SLEEP(1000);; +INSERT INTO t1 VALUES (1); +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +wsrep_local_aborts_increment +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_binlog_cache_size.result b/mysql-test/suite/galera/r/galera_binlog_cache_size.result new file mode 100644 index 00000000000..9726cf2a440 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_binlog_cache_size.result @@ -0,0 +1,12 @@ +CREATE TABLE t1 (f1 VARCHAR(767)) ENGINE=InnoDB; +CREATE TABLE ten (f1 INTEGER); +INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); +SET GLOBAL binlog_cache_size=4096; +SET GLOBAL max_binlog_cache_size=4096; +SET AUTOCOMMIT=ON; +START TRANSACTION; +INSERT INTO t1 SELECT REPEAT('a', 767) FROM ten; +INSERT INTO t1 SELECT REPEAT('a', 767) FROM ten; +ERROR HY000: Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again +DROP TABLE t1; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/r/galera_binlog_checksum.result b/mysql-test/suite/galera/r/galera_binlog_checksum.result new file mode 100644 index 00000000000..a6ab62350b1 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_binlog_checksum.result @@ -0,0 +1,10 @@ +CREATE TABLE t1 (f1 INT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +UPDATE t1 SET f1 = 2 WHERE f1 = 1; +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 2; +COUNT(*) = 1 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_binlog_event_max_size_max.result b/mysql-test/suite/galera/r/galera_binlog_event_max_size_max.result new file mode 100644 index 00000000000..4156c0c70a7 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_binlog_event_max_size_max.result @@ -0,0 +1,9 @@ +CREATE TABLE ten (f1 INTEGER); +INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); +CREATE TABLE t1 (f1 VARCHAR(1000)); +INSERT INTO t1 SELECT REPEAT('x', 1000) FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4; +SELECT COUNT(*) = 10000 FROM t1; +COUNT(*) = 10000 +1 +DROP TABLE t1; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/r/galera_binlog_event_max_size_min.result b/mysql-test/suite/galera/r/galera_binlog_event_max_size_min.result new file mode 100644 index 00000000000..984a943fcbe --- /dev/null +++ b/mysql-test/suite/galera/r/galera_binlog_event_max_size_min.result @@ -0,0 +1,6 @@ +CREATE TABLE t1 (f1 VARCHAR(1000)); +INSERT INTO t1 VALUES (REPEAT('x', 1000)); +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = REPEAT('x', 1000); +COUNT(*) = 1 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_binlog_row_image.result b/mysql-test/suite/galera/r/galera_binlog_row_image.result new file mode 100644 index 00000000000..a1f0fb455f3 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_binlog_row_image.result @@ -0,0 +1,79 @@ +SET SESSION binlog_row_image=minimal; +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +CREATE TABLE t2 (f1 INTEGER NOT NULL UNIQUE) ENGINE=InnoDB; +CREATE TABLE t3 (f1 VARCHAR(1)) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); +INSERT INTO t3 VALUES (1); +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 1; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM t2 WHERE f1 = 1; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM t3 WHERE f1 = 1; +COUNT(*) = 1 +1 +UPDATE t1 SET f1 = 2 WHERE f1 = 1; +UPDATE t2 SET f1 = 2 WHERE f1 = 1; +UPDATE t3 SET f1 = 2 WHERE f1 = 1; +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 2; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM t2 WHERE f1 = 2; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM t3 WHERE f1 = 2; +COUNT(*) = 1 +1 +DELETE FROM t1; +DELETE FROM t2; +DELETE FROM t3; +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 0 FROM t2; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 0 FROM t3; +COUNT(*) = 0 +1 +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; +SET SESSION binlog_row_image=noblob; +CREATE TABLE t1 (f1 BLOB, f2 INTEGER PRIMARY KEY) ENGINE=InnoDB; +CREATE TABLE t2 (f1 BLOB) ENGINE=InnoDB; +INSERT INTO t1 VALUES ('abc', 1); +INSERT INTO t2 VALUES ('abc'); +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 'abc'; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM t2 WHERE f1 = 'abc'; +COUNT(*) = 1 +1 +UPDATE t1 SET f1 = 'xyz'; +UPDATE t2 SET f1 = 'xyz'; +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 'xyz'; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM t2 WHERE f1 = 'xyz'; +COUNT(*) = 1 +1 +UPDATE t1 SET f2 = 2 WHERE f2 = 1; +SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 2; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 'xyz'; +COUNT(*) = 1 +1 +DELETE FROM t1; +DELETE FROM t2; +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 0 FROM t2; +COUNT(*) = 0 +1 +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/suite/galera/r/galera_binlog_rows_query_log_events.result b/mysql-test/suite/galera/r/galera_binlog_rows_query_log_events.result new file mode 100644 index 00000000000..80ae3d0de2c --- /dev/null +++ b/mysql-test/suite/galera/r/galera_binlog_rows_query_log_events.result @@ -0,0 +1,12 @@ +SET GLOBAL binlog_rows_query_log_events=TRUE; +CREATE TABLE t1 (f1 INT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +UPDATE t1 SET f1 = 2 WHERE f1 = 1; +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 2; +COUNT(*) = 1 +1 +SET GLOBAL binlog_rows_query_log_events = 0; +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_create_function.result b/mysql-test/suite/galera/r/galera_create_function.result new file mode 100644 index 00000000000..442e2cf0e10 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_create_function.result @@ -0,0 +1,55 @@ +CREATE USER 'user1'; +CREATE +DEFINER = 'user1' +FUNCTION f1 (param INTEGER) +RETURNS VARCHAR(200) +COMMENT 'f1_comment' +LANGUAGE SQL +NOT DETERMINISTIC +MODIFIES SQL DATA +SQL SECURITY DEFINER +RETURN 'abc'; +GRANT EXECUTE ON FUNCTION f1 TO user1; +CREATE +DEFINER = CURRENT_USER +FUNCTION f2 (param VARCHAR(100)) +RETURNS INTEGER +DETERMINISTIC +NO SQL +SQL SECURITY INVOKER +RETURN 123; +SHOW CREATE FUNCTION f1; +Function sql_mode Create Function character_set_client collation_connection Database Collation +f1 CREATE DEFINER=`user1`@`%` FUNCTION `f1`(param INTEGER) RETURNS varchar(200) CHARSET latin1 + MODIFIES SQL DATA + COMMENT 'f1_comment' +RETURN 'abc' latin1 latin1_swedish_ci latin1_swedish_ci +SHOW CREATE FUNCTION f1; +Function sql_mode Create Function character_set_client collation_connection Database Collation +f1 CREATE DEFINER=`user1`@`%` FUNCTION `f1`(param INTEGER) RETURNS varchar(200) CHARSET latin1 + MODIFIES SQL DATA + COMMENT 'f1_comment' +RETURN 'abc' latin1 latin1_swedish_ci latin1_swedish_ci +SHOW CREATE FUNCTION f2; +Function sql_mode Create Function character_set_client collation_connection Database Collation +f2 CREATE DEFINER=`root`@`localhost` FUNCTION `f2`(param VARCHAR(100)) RETURNS int(11) + NO SQL + DETERMINISTIC + SQL SECURITY INVOKER +RETURN 123 latin1 latin1_swedish_ci latin1_swedish_ci +SHOW CREATE FUNCTION f2; +Function sql_mode Create Function character_set_client collation_connection Database Collation +f2 CREATE DEFINER=`root`@`localhost` FUNCTION `f2`(param VARCHAR(100)) RETURNS int(11) + NO SQL + DETERMINISTIC + SQL SECURITY INVOKER +RETURN 123 latin1 latin1_swedish_ci latin1_swedish_ci +SELECT f1(1) = 'abc'; +f1(1) = 'abc' +1 +SELECT f2('abc') = 123; +f2('abc') = 123 +1 +DROP FUNCTION f1; +DROP FUNCTION f2; +DROP USER 'user1'; diff --git a/mysql-test/suite/galera/r/galera_create_procedure.result b/mysql-test/suite/galera/r/galera_create_procedure.result new file mode 100644 index 00000000000..0806749ebc8 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_create_procedure.result @@ -0,0 +1,53 @@ +CREATE USER 'user1'; +CREATE TABLE t1 (f1 INTEGER); +CREATE +DEFINER = 'user1' +PROCEDURE p1 (IN param1 INTEGER, OUT param2 INTEGER, INOUT param3 INTEGER) +COMMENT 'p1_comment' +LANGUAGE SQL +NOT DETERMINISTIC +MODIFIES SQL DATA +SQL SECURITY DEFINER +INSERT INTO t1 VALUES (1); +GRANT EXECUTE ON PROCEDURE p1 TO user1; +CREATE +DEFINER = CURRENT_USER +PROCEDURE p2 (param VARCHAR(100)) +DETERMINISTIC +NO SQL +SQL SECURITY INVOKER BEGIN END ; +SHOW CREATE PROCEDURE p1; +Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation +p1 CREATE DEFINER=`user1`@`%` PROCEDURE `p1`(IN param1 INTEGER, OUT param2 INTEGER, INOUT param3 INTEGER) + MODIFIES SQL DATA + COMMENT 'p1_comment' +INSERT INTO t1 VALUES (1) latin1 latin1_swedish_ci latin1_swedish_ci +SELECT 1 FROM DUAL; +1 +1 +SHOW CREATE PROCEDURE p1; +Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation +p1 CREATE DEFINER=`user1`@`%` PROCEDURE `p1`(IN param1 INTEGER, OUT param2 INTEGER, INOUT param3 INTEGER) + MODIFIES SQL DATA + COMMENT 'p1_comment' +INSERT INTO t1 VALUES (1) latin1 latin1_swedish_ci latin1_swedish_ci +SHOW CREATE PROCEDURE p2; +Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation +p2 CREATE DEFINER=`root`@`localhost` PROCEDURE `p2`(param VARCHAR(100)) + NO SQL + DETERMINISTIC + SQL SECURITY INVOKER +BEGIN END latin1 latin1_swedish_ci latin1_swedish_ci +SHOW CREATE PROCEDURE p2; +Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation +p2 CREATE DEFINER=`root`@`localhost` PROCEDURE `p2`(param VARCHAR(100)) + NO SQL + DETERMINISTIC + SQL SECURITY INVOKER +BEGIN END latin1 latin1_swedish_ci latin1_swedish_ci +CALL p1(@a, @b, @c); +CALL p2('abc'); +DROP PROCEDURE p1; +DROP PROCEDURE p2; +DROP USER 'user1'; +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_create_table_like.result b/mysql-test/suite/galera/r/galera_create_table_like.result new file mode 100644 index 00000000000..b335101fa62 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_create_table_like.result @@ -0,0 +1,47 @@ +CREATE SCHEMA schema1; +CREATE SCHEMA schema2; +USE schema1; +CREATE TABLE real_table (f1 INTEGER) ENGINE=InnoDB; +CREATE TEMPORARY TABLE temp_table (f1 INTEGER) ENGINE=InnoDB; +CREATE TABLE myisam_table (f1 INTEGER) ENGINE=MyISAM; +USE schema2; +CREATE TABLE real_table1 LIKE schema1.real_table; +CREATE TABLE real_table2 LIKE schema1.temp_table; +CREATE TABLE real_table3 LIKE schema1.myisam_table; +CREATE TEMPORARY TABLE temp_table1 LIKE schema1.real_table; +CREATE TEMPORARY TABLE temp_table2 LIKE schema1.temp_table; +CREATE TEMPORARY TABLE temp_table3 LIKE schema1.myisam_table; +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'real_table' AND TABLE_SCHEMA = 'schema1'; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'myisam_table' AND TABLE_SCHEMA = 'schema1'; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'temp_table' AND TABLE_SCHEMA = 'schema1'; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'real_table1' AND TABLE_SCHEMA = 'schema2'; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'real_table2' AND TABLE_SCHEMA = 'schema2'; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'real_table3' AND TABLE_SCHEMA = 'schema2'; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'temp_table1' AND TABLE_SCHEMA = 'schema2'; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'temp_table2' AND TABLE_SCHEMA = 'schema2'; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'temp_table3' AND TABLE_SCHEMA = 'schema2'; +COUNT(*) = 0 +1 +DROP TABLE schema1.real_table; +DROP TABLE schema1.myisam_table; +DROP TABLE schema2.real_table1; +DROP TABLE schema2.real_table2; +DROP TABLE schema2.real_table3; +DROP SCHEMA schema1; +DROP SCHEMA schema2; diff --git a/mysql-test/suite/galera/r/galera_defaults.result b/mysql-test/suite/galera/r/galera_defaults.result new file mode 100644 index 00000000000..4493a5df9ff --- /dev/null +++ b/mysql-test/suite/galera/r/galera_defaults.result @@ -0,0 +1,117 @@ +SELECT COUNT(*) = 39 FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME LIKE 'wsrep_%'; +COUNT(*) = 39 +1 +SELECT VARIABLE_NAME, VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME LIKE 'wsrep_%' +AND VARIABLE_NAME NOT IN ( +'WSREP_PROVIDER_OPTIONS', +'WSREP_SST_RECEIVE_ADDRESS', +'WSREP_NODE_ADDRESS', +'WSREP_NODE_NAME', +'WSREP_PROVIDER', +'WSREP_DATA_HOME_DIR', +'WSREP_NODE_INCOMING_ADDRESS', +'WSREP_START_POSITION' +) +ORDER BY VARIABLE_NAME; +VARIABLE_NAME VARIABLE_VALUE +WSREP_AUTO_INCREMENT_CONTROL ON +WSREP_CAUSAL_READS ON +WSREP_CERTIFY_NONPK ON +WSREP_CLUSTER_ADDRESS gcomm:// +WSREP_CLUSTER_NAME my_wsrep_cluster +WSREP_CONVERT_LOCK_TO_TRX OFF +WSREP_DBUG_OPTION +WSREP_DEBUG OFF +WSREP_DESYNC OFF +WSREP_DRUPAL_282555_WORKAROUND OFF +WSREP_FORCED_BINLOG_FORMAT NONE +WSREP_LOAD_DATA_SPLITTING ON +WSREP_LOG_CONFLICTS OFF +WSREP_MAX_WS_ROWS 131072 +WSREP_MAX_WS_SIZE 1073741824 +WSREP_MYSQL_REPLICATION_BUNDLE 0 +WSREP_NOTIFY_CMD +WSREP_ON ON +WSREP_OSU_METHOD TOI +WSREP_RECOVER OFF +WSREP_REPLICATE_MYISAM OFF +WSREP_RESTART_SLAVE OFF +WSREP_RETRY_AUTOCOMMIT 1 +WSREP_SLAVE_FK_CHECKS ON +WSREP_SLAVE_THREADS 1 +WSREP_SLAVE_UK_CHECKS OFF +WSREP_SST_AUTH +WSREP_SST_DONOR +WSREP_SST_DONOR_REJECTS_QUERIES OFF +WSREP_SST_METHOD rsync +WSREP_SYNC_WAIT 7 +<BASE_HOST>; <BASE_PORT>; cert.log_conflicts = no; debug = no; evs.auto_evict = 0; evs.causal_keepalive_period = PT1S; evs.debug_log_mask = 0x1; evs.delay_margin = PT1S; evs.delayed_keep_period = PT30S; evs.inactive_check_period = PT0.5S; evs.inactive_timeout = PT15S; evs.info_log_mask = 0; evs.install_timeout = PT7.5S; evs.join_retrans_period = PT1S; evs.keepalive_period = PT1S; evs.max_install_timeouts = 3; evs.send_window = 4; evs.stats_report_period = PT1M; evs.suspect_timeout = PT5S; evs.use_aggregate = true; evs.user_send_window = 2; evs.version = 0; evs.view_forget_timeout = P1D; <GCACHE_DIR>; gcache.keep_pages_size = 0; gcache.mem_size = 0; <GCACHE_NAME>; gcache.page_size = 128M; gcache.size = 10M; gcs.fc_debug = 0; gcs.fc_factor = 1.0; gcs.fc_limit = 16; gcs.fc_master_slave = no; gcs.max_packet_size = 64500; gcs.max_throttle = 0.25; gcs.recv_q_hard_limit = 9223372036854775807; gcs.recv_q_soft_limit = 0.25; gcs.sync_donor = no; <GMCAST_LISTEN_ADDR>; gmcast.mcast_addr = ; gmcast.mcast_ttl = 1; gmcast.peer_timeout = PT3S; gmcast.segment = 0; gmcast.time_wait = PT5S; gmcast.version = 0; <IST_RECV_ADDR>; pc.announce_timeout = PT3S; pc.checksum = false; pc.ignore_quorum = false; pc.ignore_sb = false; pc.linger = PT20S; pc.npvo = false; pc.recovery = true; pc.version = 0; pc.wait_prim = true; pc.wait_prim_timeout = P30S; pc.weight = 1; protonet.backend = asio; protonet.version = 0; repl.causal_read_timeout = PT30S; repl.commit_order = 3; repl.key_format = FLAT8; repl.max_ws_size = 2147483647; repl.proto_max = 7; socket.checksum = 2; +SELECT COUNT(*) FROM INFORMATION_SCHEMA.GLOBAL_STATUS +WHERE VARIABLE_NAME LIKE 'wsrep_%' +AND VARIABLE_NAME != 'wsrep_debug_sync_waiters'; +COUNT(*) +57 +SELECT VARIABLE_NAME FROM INFORMATION_SCHEMA.GLOBAL_STATUS +WHERE VARIABLE_NAME LIKE 'wsrep_%' +AND VARIABLE_NAME != 'wsrep_debug_sync_waiters' +ORDER BY VARIABLE_NAME; +VARIABLE_NAME +WSREP_APPLY_OOOE +WSREP_APPLY_OOOL +WSREP_APPLY_WINDOW +WSREP_CAUSAL_READS +WSREP_CERT_DEPS_DISTANCE +WSREP_CERT_INDEX_SIZE +WSREP_CERT_INTERVAL +WSREP_CLUSTER_CONF_ID +WSREP_CLUSTER_SIZE +WSREP_CLUSTER_STATE_UUID +WSREP_CLUSTER_STATUS +WSREP_COMMIT_OOOE +WSREP_COMMIT_OOOL +WSREP_COMMIT_WINDOW +WSREP_CONNECTED +WSREP_EVS_DELAYED +WSREP_EVS_EVICT_LIST +WSREP_EVS_REPL_LATENCY +WSREP_EVS_STATE +WSREP_FLOW_CONTROL_PAUSED +WSREP_FLOW_CONTROL_PAUSED_NS +WSREP_FLOW_CONTROL_RECV +WSREP_FLOW_CONTROL_SENT +WSREP_GCOMM_UUID +WSREP_INCOMING_ADDRESSES +WSREP_LAST_COMMITTED +WSREP_LOCAL_BF_ABORTS +WSREP_LOCAL_CACHED_DOWNTO +WSREP_LOCAL_CERT_FAILURES +WSREP_LOCAL_COMMITS +WSREP_LOCAL_INDEX +WSREP_LOCAL_RECV_QUEUE +WSREP_LOCAL_RECV_QUEUE_AVG +WSREP_LOCAL_RECV_QUEUE_MAX +WSREP_LOCAL_RECV_QUEUE_MIN +WSREP_LOCAL_REPLAYS +WSREP_LOCAL_SEND_QUEUE +WSREP_LOCAL_SEND_QUEUE_AVG +WSREP_LOCAL_SEND_QUEUE_MAX +WSREP_LOCAL_SEND_QUEUE_MIN +WSREP_LOCAL_STATE +WSREP_LOCAL_STATE_COMMENT +WSREP_LOCAL_STATE_UUID +WSREP_PROTOCOL_VERSION +WSREP_PROVIDER_NAME +WSREP_PROVIDER_VENDOR +WSREP_PROVIDER_VERSION +WSREP_READY +WSREP_RECEIVED +WSREP_RECEIVED_BYTES +WSREP_REPLICATED +WSREP_REPLICATED_BYTES +WSREP_REPL_DATA_BYTES +WSREP_REPL_KEYS +WSREP_REPL_KEYS_BYTES +WSREP_REPL_OTHER_BYTES +WSREP_THREAD_COUNT diff --git a/mysql-test/suite/galera/r/galera_delete_limit.result b/mysql-test/suite/galera/r/galera_delete_limit.result new file mode 100644 index 00000000000..72bee18eab6 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_delete_limit.result @@ -0,0 +1,19 @@ +CREATE TABLE ten (f1 INTEGER) Engine=InnoDB; +INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) Engine=InnoDB; +INSERT INTO t1 SELECT f1 FROM ten ORDER BY RAND(); +DELETE FROM t1 ORDER BY RAND() LIMIT 5; +sum_matches +1 +max_matches +1 +DROP TABLE t1; +CREATE TABLE t2 (f1 INTEGER) Engine=InnoDB; +INSERT INTO t2 SELECT f1 FROM ten ORDER BY RAND(); +DELETE FROM t2 ORDER BY RAND() LIMIT 5; +sum_matches +1 +max_matches +1 +DROP TABLE t2; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/r/galera_enum.result b/mysql-test/suite/galera/r/galera_enum.result new file mode 100644 index 00000000000..e853c5c9943 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_enum.result @@ -0,0 +1,37 @@ +CREATE TABLE t1 (f1 ENUM('', 'one', 'two'), KEY (f1)) ENGINE=InnoDB; +INSERT INTO t1 VALUES (''); +INSERT INTO t1 VALUES ('one'), ('two'); +INSERT INTO t1 VALUES (0), (1), (2); +Warnings: +Warning 1265 Data truncated for column 'f1' at row 1 +SELECT COUNT(*) = 6 FROM t1; +COUNT(*) = 6 +1 +SELECT COUNT(*) = 2 FROM t1 where f1 = ''; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 2 FROM t1 where f1 = 'one'; +COUNT(*) = 2 +1 +DROP TABLE t1; +CREATE TABLE t1 (f1 ENUM('', 'one', 'two', 'three', 'four') PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (''), ('one'), ('two'); +SELECT COUNT(*) = 3 FROM t1; +COUNT(*) = 3 +1 +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = ''; +COUNT(*) = 1 +1 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1 SET f1 = 'three' where f1 = ''; +SET AUTOCOMMIt=OFF; +START TRANSACTION; +UPDATE t1 SET f1 = 'four' where f1 = ''; +COMMIT; +COMMIT; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 'three'; +COUNT(*) = 1 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_events.result b/mysql-test/suite/galera/r/galera_events.result new file mode 100644 index 00000000000..09d8406d5d0 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_events.result @@ -0,0 +1,18 @@ +CREATE EVENT event1 ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO SELECT 1; +SELECT DEFINER= 'root@localhost', ORIGINATOR = 1, STATUS = 'SLAVESIDE_DISABLED', EVENT_TYPE = 'ONE TIME', ON_COMPLETION = 'NOT PRESERVE' FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME = 'event1'; +DEFINER= 'root@localhost' ORIGINATOR = 1 STATUS = 'SLAVESIDE_DISABLED' EVENT_TYPE = 'ONE TIME' ON_COMPLETION = 'NOT PRESERVE' +1 1 1 1 1 +ALTER EVENT event1 DISABLE; +SELECT DEFINER= 'root@localhost', ORIGINATOR = 1, STATUS = 'SLAVESIDE_DISABLED', EVENT_TYPE = 'ONE TIME', ON_COMPLETION = 'NOT PRESERVE' FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME = 'event1'; +DEFINER= 'root@localhost' ORIGINATOR = 1 STATUS = 'SLAVESIDE_DISABLED' EVENT_TYPE = 'ONE TIME' ON_COMPLETION = 'NOT PRESERVE' +1 1 1 1 1 +SET GLOBAL event_scheduler = ON; +CREATE EVENT event2 ON SCHEDULE AT CURRENT_TIMESTAMP ON COMPLETION NOT PRESERVE DO SELECT 1; +SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME = 'event2'; +COUNT(*) = 0 +1 +DROP EVENT event1; +SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME = 'event1'; +COUNT(*) = 0 +1 +SET GLOBAL event_scheduler = OFF;; diff --git a/mysql-test/suite/galera/r/galera_fk_multicolumn.result b/mysql-test/suite/galera/r/galera_fk_multicolumn.result index 62ec9f85cd4..a86b87a83ef 100644 --- a/mysql-test/suite/galera/r/galera_fk_multicolumn.result +++ b/mysql-test/suite/galera/r/galera_fk_multicolumn.result @@ -1,19 +1,19 @@ CREATE TABLE t0 ( f1 INT PRIMARY KEY, f2 INT UNIQUE -) ENGINE=INNODB; +); CREATE TABLE t1 ( f1 INT PRIMARY KEY, FOREIGN KEY (f1) REFERENCES t0(f1) ON UPDATE CASCADE -) ENGINE=INNODB; +); CREATE TABLE t2 ( f2 INT PRIMARY KEY, FOREIGN KEY (f2) REFERENCES t0(f2) ON UPDATE CASCADE -) ENGINE=INNODB; +); INSERT INTO t0 VALUES (0, 0); INSERT INTO t1 VALUES (0); INSERT INTO t2 VALUES (0); diff --git a/mysql-test/suite/galera/r/galera_fk_multitable.result b/mysql-test/suite/galera/r/galera_fk_multitable.result index 410565eb0ed..e77128d3b04 100644 --- a/mysql-test/suite/galera/r/galera_fk_multitable.result +++ b/mysql-test/suite/galera/r/galera_fk_multitable.result @@ -1,13 +1,13 @@ CREATE TABLE t0 ( f0 INT PRIMARY KEY -) ENGINE=INNODB; +); CREATE TABLE t1 ( f1 INT PRIMARY KEY, f0 INTEGER, FOREIGN KEY (f0) REFERENCES t0(f0) ON DELETE CASCADE -) ENGINE=INNODB; +); INSERT INTO t0 VALUES (0), (1); INSERT INTO t1 VALUES (0, 0); INSERT INTO t1 VALUES (1, 0); diff --git a/mysql-test/suite/galera/r/galera_flush.result b/mysql-test/suite/galera/r/galera_flush.result index 7636a30fced..68266439414 100644 --- a/mysql-test/suite/galera/r/galera_flush.result +++ b/mysql-test/suite/galera/r/galera_flush.result @@ -5,7 +5,7 @@ FLUSH HOSTS; wsrep_last_committed_diff 1 SET GLOBAL wsrep_replicate_myisam = TRUE; -INSERT INTO mysql.user VALUES('localhost','user1',PASSWORD('pass1'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','','N'); +INSERT INTO mysql.user VALUES('localhost','user1',PASSWORD('pass1'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','','N','N'); FLUSH PRIVILEGES; DELETE FROM mysql.user WHERE user = 'user1'; SET GLOBAL wsrep_replicate_myisam = FALSE; diff --git a/mysql-test/suite/galera/r/galera_ftwrl.result b/mysql-test/suite/galera/r/galera_ftwrl.result new file mode 100644 index 00000000000..c216b52650b --- /dev/null +++ b/mysql-test/suite/galera/r/galera_ftwrl.result @@ -0,0 +1,16 @@ +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB; +SET GLOBAL wsrep_provider_options = "repl.causal_read_timeout=PT1S"; +FLUSH TABLES WITH READ LOCK; +INSERT INTO t1 VALUES (1); +SHOW TABLES; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +SELECT * FROM t1; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +UNLOCK TABLES; +SHOW TABLES; +Tables_in_test +t1 +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_fulltext.result b/mysql-test/suite/galera/r/galera_fulltext.result new file mode 100644 index 00000000000..72577695202 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_fulltext.result @@ -0,0 +1,26 @@ +CREATE TABLE ten (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); +CREATE TABLE t1 (f1 INT PRIMARY KEY AUTO_INCREMENT, f2 VARCHAR(100), FULLTEXT (f2)) ENGINE=InnoDB; +SELECT COUNT(*) = 13 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE name LIKE 'test/%'; +COUNT(*) = 13 +1 +INSERT INTO t1 (f2) SELECT 'foobarbaz' FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4; +SELECT COUNT(f2) = 10000 FROM t1 WHERE MATCH(f2) AGAINST ('foobarbaz'); +COUNT(f2) = 10000 +1 +UPDATE t1 SET f2 = 'abcdefjhk'; +SELECT COUNT(f2) = 10000 FROM t1 WHERE MATCH(f2) AGAINST ('abcdefjhk'); +COUNT(f2) = 10000 +1 +DROP TABLE t1; +CREATE TABLE t1 (f1 VARCHAR(100), FULLTEXT (f1)) ENGINE=InnoDB; +INSERT INTO t1 (f1) SELECT 'foobarbaz' FROM ten AS a1, ten AS a2, ten AS a3; +SELECT COUNT(f1) = 1000 FROM t1 WHERE MATCH(f1) AGAINST ('foobarbaz'); +COUNT(f1) = 1000 +1 +UPDATE t1 SET f1 = 'abcdefjhk'; +SELECT COUNT(f1) = 1000 FROM t1 WHERE MATCH(f1) AGAINST ('abcdefjhk'); +COUNT(f1) = 1000 +1 +DROP TABLE t1; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/r/galera_gcs_fc_limit.result b/mysql-test/suite/galera/r/galera_gcs_fc_limit.result new file mode 100644 index 00000000000..99c710f25a5 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_gcs_fc_limit.result @@ -0,0 +1,17 @@ +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +SET GLOBAL wsrep_provider_options = 'gcs.fc_limit=1'; +FLUSH TABLES WITH READ LOCK; +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (3); +INSERT INTO t1 VALUES (4); +INSERT INTO t1 VALUES (5); +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'query end' AND INFO = 'INSERT INTO t1 VALUES (5)'; +COUNT(*) = 1 +1 +UNLOCK TABLES; +INSERT INTO t1 VALUES (6); +SELECT COUNT(*) = 6 FROM t1; +COUNT(*) = 6 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_gcs_max_packet_size.result b/mysql-test/suite/galera/r/galera_gcs_max_packet_size.result new file mode 100644 index 00000000000..606cb549def --- /dev/null +++ b/mysql-test/suite/galera/r/galera_gcs_max_packet_size.result @@ -0,0 +1,15 @@ +CREATE TABLE ten (f1 INTEGER); +INSERT INTO ten VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10); +CREATE TABLE t1 (f1 INT PRIMARY KEY AUTO_INCREMENT, f2 INTEGER) ENGINE=InnoDB; +CREATE TABLE t2 (f1 VARCHAR(512) UNIQUE) ENGINE=InnoDB; +INSERT INTO t1 (f2) SELECT 1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4; +INSERT INTO t2 VALUES (REPEAT('x', 512)); +SELECT COUNT(*) = 10000 FROM t1; +COUNT(*) = 10000 +1 +SELECT LENGTH(f1) = 512 FROM t2 WHERE f1 = REPEAT('x', 512); +LENGTH(f1) = 512 +1 +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/r/galera_gtid.result b/mysql-test/suite/galera/r/galera_gtid.result new file mode 100644 index 00000000000..546c29cb49a --- /dev/null +++ b/mysql-test/suite/galera/r/galera_gtid.result @@ -0,0 +1,12 @@ +CREATE TABLE t1 (f1 INT PRIMARY KEY); +INSERT INTO t1 VALUES (1); +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +UPDATE t1 SET f1 = 2; +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 2; +COUNT(*) = 1 +1 +gtid_binlog_state_equal +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_insert_ignore.result b/mysql-test/suite/galera/r/galera_insert_ignore.result new file mode 100644 index 00000000000..b53b5795416 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_insert_ignore.result @@ -0,0 +1,52 @@ +SET GLOBAL wsrep_sync_wait = 7; +SET GLOBAL wsrep_sync_wait = 7; +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +INSERT IGNORE INTO t1 VALUES (1), (2); +Warnings: +Warning 1062 Duplicate entry '1' for key 'PRIMARY' +SELECT * FROM t1; +f1 +1 +2 +SELECT * FROM t1; +f1 +1 +2 +CREATE TABLE t2 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t2 VALUES (0), (2), (3); +INSERT IGNORE INTO t1 SELECT f1 FROM t2; +Warnings: +Warning 1062 Duplicate entry '2' for key 'PRIMARY' +SELECT * FROM t1; +f1 +0 +1 +2 +3 +SELECT * FROM t1; +f1 +0 +1 +2 +3 +CREATE TABLE t3 (f1 INTEGER UNIQUE) Engine=InnoDB; +INSERT INTO t3 VALUES (NULL); +INSERT IGNORE INTO t3 VALUES (1), (NULL), (2); +SELECT * FROM t3; +f1 +NULL +NULL +1 +2 +SELECT * FROM t3; +f1 +NULL +NULL +1 +2 +SET GLOBAL wsrep_sync_wait = (SELECT @@wsrep_sync_wait); +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; +SET GLOBAL wsrep_sync_wait = (SELECT @@wsrep_sync_wait); diff --git a/mysql-test/suite/galera/r/galera_insert_multi.result b/mysql-test/suite/galera/r/galera_insert_multi.result new file mode 100644 index 00000000000..33717781f2c --- /dev/null +++ b/mysql-test/suite/galera/r/galera_insert_multi.result @@ -0,0 +1,58 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1),(2); +INSERT INTO t1 VALUES (3),(4); +SELECT COUNT(*) = 4 FROM t1; +COUNT(*) = 4 +1 +SELECT COUNT(*) = 4 FROM t1; +COUNT(*) = 4 +1 +DROP TABLE t1; +CREATE TABLE t1 (f1 INTEGER, KEY (f1)) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1),(1); +INSERT INTO t1 VALUES (2),(2); +SELECT COUNT(*) = 4 FROM t1; +COUNT(*) = 4 +1 +SELECT COUNT(*) = 4 FROM t1; +COUNT(*) = 4 +1 +DROP TABLE t1; +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (1); +ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +DROP TABLE t1; +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +SET AUTOCOMMIT = OFF; +START TRANSACTION; +INSERT INTO t1 VALUES (1), (2); +SET AUTOCOMMIT = OFF; +START TRANSACTION; +INSERT INTO t1 VALUES (2), (1); +COMMIT; +COMMIT; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +ROLLBACK; +INSERT INTO t1 VALUES (1), (2); +ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +DROP TABLE t1; +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +START TRANSACTION; +INSERT INTO t1 VALUES (1), (2); +START TRANSACTION; +INSERT INTO t1 VALUES (2), (1); +ROLLBACK; +COMMIT; +SELECT COUNT(*) = 2 FROM t1; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 2 FROM t1; +COUNT(*) = 2 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_ist_innodb_flush_logs.result b/mysql-test/suite/galera/r/galera_ist_innodb_flush_logs.result new file mode 100644 index 00000000000..5421b234ee1 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_ist_innodb_flush_logs.result @@ -0,0 +1,184 @@ +Performing State Transfer on a server that has been killed and restarted +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +Killing server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +Performing --wsrep-recover ... +Starting server ... +Using --wsrep-start-position when starting mysqld ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +Performing State Transfer on a server that has been killed and restarted +while a DDL was in progress on it +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +SET GLOBAL debug = 'd,sync.alter_opened_table'; +ALTER TABLE t1 ADD COLUMN f2 INTEGER; +SET wsrep_sync_wait = 0; +Killing server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +Performing --wsrep-recover ... +Starting server ... +Using --wsrep-start-position when starting mysqld ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; diff --git a/mysql-test/suite/galera/r/galera_ist_mysqldump.result b/mysql-test/suite/galera/r/galera_ist_mysqldump.result new file mode 100644 index 00000000000..4b5a8fe948a --- /dev/null +++ b/mysql-test/suite/galera/r/galera_ist_mysqldump.result @@ -0,0 +1,284 @@ +Setting SST method to mysqldump ... +GRANT ALL PRIVILEGES ON *.* TO 'sst' IDENTIFIED BY 'sst'; +SET GLOBAL wsrep_sst_auth = 'sst:sst'; +SET GLOBAL wsrep_sst_method = 'mysqldump'; +Performing State Transfer on a server that has been shut down cleanly and restarted +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +Shutting down server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +Starting server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +Performing State Transfer on a server that has been killed and restarted +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +Killing server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +Performing --wsrep-recover ... +Starting server ... +Using --wsrep-start-position when starting mysqld ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +Performing State Transfer on a server that has been killed and restarted +while a DDL was in progress on it +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +SET GLOBAL debug = 'd,sync.alter_opened_table'; +ALTER TABLE t1 ADD COLUMN f2 INTEGER; +SET wsrep_sync_wait = 0; +Killing server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +Performing --wsrep-recover ... +Starting server ... +Using --wsrep-start-position when starting mysqld ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +CALL mtr.add_suppression("Slave SQL: Error 'The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement' on query"); +DROP USER sst; +CALL mtr.add_suppression("Slave SQL: Error 'The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement' on query"); +CALL mtr.add_suppression("InnoDB: Error: Table \"mysql\"\\.\"innodb_index_stats\" not found"); +CALL mtr.add_suppression("InnoDB: New log files created"); +CALL mtr.add_suppression("InnoDB: Creating foreign key constraint system tables"); +CALL mtr.add_suppression("Can't open and lock time zone table"); +CALL mtr.add_suppression("Can't open and lock privilege tables"); +CALL mtr.add_suppression("Info table is not ready to be used"); +CALL mtr.add_suppression("Native table .* has the wrong structure"); diff --git a/mysql-test/suite/galera/r/galera_ist_restart_joiner.result b/mysql-test/suite/galera/r/galera_ist_restart_joiner.result new file mode 100644 index 00000000000..f7a1386e7f8 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_ist_restart_joiner.result @@ -0,0 +1,43 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 CHAR(1)); +INSERT INTO t1 VALUES (1, 'a'), (2, 'a'), (3, 'a'), (4, 'a'), (5, 'a'),(6, 'a'); +Unloading wsrep provider ... +SET GLOBAL wsrep_provider = 'none'; +UPDATE t1 SET f2 = 'b' WHERE f1 > 1; +UPDATE t1 SET f2 = 'c' WHERE f1 > 2; +SET GLOBAL wsrep_provider_options = 'dbug=d,recv_IST_after_apply_trx'; +SET SESSION wsrep_sync_wait = 0; +Loading wsrep_provider ... +SHOW STATUS LIKE 'wsrep_debug_sync_waiters'; +Variable_name Value +wsrep_debug_sync_waiters recv_IST_after_apply_trx +UPDATE t1 SET f2 = 'd' WHERE f1 > 3; +CREATE TABLE t2 (f1 INTEGER); +UPDATE t1 SET f2 = 'e' WHERE f1 > 4; +CREATE TABLE t3 (f1 INTEGER); +Performing --wsrep-recover ... +Starting server ... +Using --wsrep-start-position when starting mysqld ... +UPDATE t1 SET f2 = 'f' WHERE f1 > 5; +SELECT * FROM t1; +f1 f2 +1 a +2 b +3 c +4 d +5 e +6 f +SELECT * FROM t1; +f1 f2 +1 a +2 b +3 c +4 d +5 e +6 f +SELECT COUNT(*) = 0 FROM t2; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 0 FROM t3; +COUNT(*) = 0 +1 +DROP TABLE t1, t2, t3; diff --git a/mysql-test/suite/galera/r/galera_ist_rsync.result b/mysql-test/suite/galera/r/galera_ist_rsync.result new file mode 100644 index 00000000000..175e7443a4d --- /dev/null +++ b/mysql-test/suite/galera/r/galera_ist_rsync.result @@ -0,0 +1,357 @@ +Performing State Transfer on a server that has been temporarily disconnected +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +Unloading wsrep provider ... +SET GLOBAL wsrep_provider = 'none'; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +Loading wsrep provider ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +Performing State Transfer on a server that has been shut down cleanly and restarted +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +Shutting down server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +Starting server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +Performing State Transfer on a server that has been killed and restarted +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +Killing server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +Performing --wsrep-recover ... +Starting server ... +Using --wsrep-start-position when starting mysqld ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +Performing State Transfer on a server that has been killed and restarted +while a DDL was in progress on it +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +SET GLOBAL debug = 'd,sync.alter_opened_table'; +ALTER TABLE t1 ADD COLUMN f2 INTEGER; +SET wsrep_sync_wait = 0; +Killing server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +Performing --wsrep-recover ... +Starting server ... +Using --wsrep-start-position when starting mysqld ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; diff --git a/mysql-test/suite/galera/r/galera_ist_xtrabackup-v2.result b/mysql-test/suite/galera/r/galera_ist_xtrabackup-v2.result new file mode 100644 index 00000000000..175e7443a4d --- /dev/null +++ b/mysql-test/suite/galera/r/galera_ist_xtrabackup-v2.result @@ -0,0 +1,357 @@ +Performing State Transfer on a server that has been temporarily disconnected +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +Unloading wsrep provider ... +SET GLOBAL wsrep_provider = 'none'; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +Loading wsrep provider ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +Performing State Transfer on a server that has been shut down cleanly and restarted +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +Shutting down server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +Starting server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +Performing State Transfer on a server that has been killed and restarted +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +Killing server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +Performing --wsrep-recover ... +Starting server ... +Using --wsrep-start-position when starting mysqld ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +Performing State Transfer on a server that has been killed and restarted +while a DDL was in progress on it +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +SET GLOBAL debug = 'd,sync.alter_opened_table'; +ALTER TABLE t1 ADD COLUMN f2 INTEGER; +SET wsrep_sync_wait = 0; +Killing server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +Performing --wsrep-recover ... +Starting server ... +Using --wsrep-start-position when starting mysqld ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; diff --git a/mysql-test/suite/galera/r/galera_kill_ddl.result b/mysql-test/suite/galera/r/galera_kill_ddl.result new file mode 100644 index 00000000000..8dd36497dfb --- /dev/null +++ b/mysql-test/suite/galera/r/galera_kill_ddl.result @@ -0,0 +1,11 @@ +SET GLOBAL wsrep_provider_options = 'pc.ignore_sb=true'; +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +Killing server ... +ALTER TABLE t1 ADD COLUMN f2 INTEGER; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='t1'; +COUNT(*) = 2 +1 +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 2 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_kill_largechanges.result b/mysql-test/suite/galera/r/galera_kill_largechanges.result new file mode 100644 index 00000000000..a37056ad9b0 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_kill_largechanges.result @@ -0,0 +1,14 @@ +SET GLOBAL wsrep_provider_options = 'pc.ignore_sb=true'; +CREATE TABLE ten (f1 INTEGER); +INSERT INTO ten VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10); +CREATE TABLE t1 (f1 VARCHAR(128)) ENGINE=InnoDB; +Killing server ... +INSERT INTO t1 SELECT REPEAT('a', 128) FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5, ten AS a6; +SELECT COUNT(*) = 1000000 FROM t1; +COUNT(*) = 1000000 +1 +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 2 +1 +DROP TABLE t1; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/r/galera_kill_nochanges.result b/mysql-test/suite/galera/r/galera_kill_nochanges.result new file mode 100644 index 00000000000..db3c75e2886 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_kill_nochanges.result @@ -0,0 +1,10 @@ +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +Killing server ... +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 2 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_kill_smallchanges.result b/mysql-test/suite/galera/r/galera_kill_smallchanges.result new file mode 100644 index 00000000000..8409740a035 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_kill_smallchanges.result @@ -0,0 +1,11 @@ +SET GLOBAL wsrep_provider_options = 'pc.ignore_sb=true'; +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +Killing server ... +INSERT INTO t1 VALUES (1); +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 2 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_lock_table.result b/mysql-test/suite/galera/r/galera_lock_table.result new file mode 100644 index 00000000000..16e9037a4de --- /dev/null +++ b/mysql-test/suite/galera/r/galera_lock_table.result @@ -0,0 +1,21 @@ +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB; +CREATE TABLE t2 (id INT PRIMARY KEY) ENGINE=InnoDB; +LOCK TABLE t1 READ; +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); +SET SESSION wsrep_sync_wait=0; +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 0 FROM t2; +COUNT(*) = 0 +1 +UNLOCK TABLES; +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM t2; +COUNT(*) = 1 +1 +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/suite/galera/r/galera_log_bin.result b/mysql-test/suite/galera/r/galera_log_bin.result new file mode 100644 index 00000000000..845326e6912 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_log_bin.result @@ -0,0 +1,58 @@ +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +CREATE TABLE t2 (id INT) ENGINE=InnoDB; +INSERT INTO t2 VALUES (1); +INSERT INTO t2 VALUES (1); +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 2 FROM t2; +COUNT(*) = 2 +1 +ALTER TABLE t1 ADD COLUMN f2 INTEGER; +FLUSH LOGS; +SHOW BINLOG EVENTS IN 'mysqld-bin.000002' LIMIT 4,18; +Log_name Pos Event_type Server_id End_log_pos Info +mysqld-bin.000002 353 Gtid 1 391 GTID 0-1-1 +mysqld-bin.000002 391 Query 1 504 use `test`; CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB +mysqld-bin.000002 504 Gtid 1 542 BEGIN GTID 0-1-2 +mysqld-bin.000002 542 Table_map 1 583 table_id: 100 (test.t1) +mysqld-bin.000002 583 Write_rows_v1 1 617 table_id: 100 flags: STMT_END_F +mysqld-bin.000002 617 Xid 1 644 COMMIT /* xid=2 */ +mysqld-bin.000002 644 Gtid 1 682 GTID 0-1-3 +mysqld-bin.000002 682 Query 1 783 use `test`; CREATE TABLE t2 (id INT) ENGINE=InnoDB +mysqld-bin.000002 783 Gtid 1 821 BEGIN GTID 0-1-4 +mysqld-bin.000002 821 Table_map 1 862 table_id: 101 (test.t2) +mysqld-bin.000002 862 Write_rows_v1 1 896 table_id: 101 flags: STMT_END_F +mysqld-bin.000002 896 Xid 1 923 COMMIT /* xid=4 */ +mysqld-bin.000002 923 Gtid 1 961 BEGIN GTID 0-1-5 +mysqld-bin.000002 961 Table_map 1 1002 table_id: 101 (test.t2) +mysqld-bin.000002 1002 Write_rows_v1 1 1036 table_id: 101 flags: STMT_END_F +mysqld-bin.000002 1036 Xid 1 1063 COMMIT /* xid=5 */ +mysqld-bin.000002 1063 Gtid 1 1101 GTID 0-1-6 +mysqld-bin.000002 1101 Query 1 1200 use `test`; ALTER TABLE t1 ADD COLUMN f2 INTEGER +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +COUNT(*) = 2 +1 +SHOW BINLOG EVENTS IN 'mysqld-bin.000003' LIMIT 3,19; +Log_name Pos Event_type Server_id End_log_pos Info +mysqld-bin.000003 313 Gtid 1 351 GTID 0-1-1 +mysqld-bin.000003 351 Query 1 464 use `test`; CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB +mysqld-bin.000003 464 Gtid 1 502 BEGIN GTID 0-1-2 +mysqld-bin.000003 502 Table_map 1 543 table_id: 82 (test.t1) +mysqld-bin.000003 543 Write_rows_v1 1 577 table_id: 82 flags: STMT_END_F +mysqld-bin.000003 577 Xid 1 604 COMMIT /* xid=2 */ +mysqld-bin.000003 604 Gtid 1 642 GTID 0-1-3 +mysqld-bin.000003 642 Query 1 743 use `test`; CREATE TABLE t2 (id INT) ENGINE=InnoDB +mysqld-bin.000003 743 Gtid 1 781 BEGIN GTID 0-1-4 +mysqld-bin.000003 781 Table_map 1 822 table_id: 83 (test.t2) +mysqld-bin.000003 822 Write_rows_v1 1 856 table_id: 83 flags: STMT_END_F +mysqld-bin.000003 856 Xid 1 883 COMMIT /* xid=4 */ +mysqld-bin.000003 883 Gtid 1 921 BEGIN GTID 0-1-5 +mysqld-bin.000003 921 Table_map 1 962 table_id: 83 (test.t2) +mysqld-bin.000003 962 Write_rows_v1 1 996 table_id: 83 flags: STMT_END_F +mysqld-bin.000003 996 Xid 1 1023 COMMIT /* xid=5 */ +mysqld-bin.000003 1023 Gtid 1 1061 GTID 0-1-6 +mysqld-bin.000003 1061 Query 1 1160 use `test`; ALTER TABLE t1 ADD COLUMN f2 INTEGER +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/suite/galera/r/galera_log_output_csv.result b/mysql-test/suite/galera/r/galera_log_output_csv.result new file mode 100644 index 00000000000..07a78469578 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_log_output_csv.result @@ -0,0 +1,21 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +SELECT COUNT(*) > 0 FROM mysql.general_log; +COUNT(*) > 0 +1 +SELECT 1 = 1 FROM t1; +1 = 1 +1 +SELECT COUNT(*) = 1 FROM mysql.slow_log WHERE sql_text = 'SELECT 1 = 1 FROM t1'; +COUNT(*) = 1 +1 +SELECT COUNT(*) > 0 FROM mysql.general_log WHERE argument = 'CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB'; +COUNT(*) > 0 +1 +SELECT 2 = 2 FROM t1; +2 = 2 +1 +SELECT COUNT(*) = 1 FROM mysql.slow_log WHERE sql_text = 'SELECT 2 = 2 FROM t1'; +COUNT(*) = 1 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_many_columns.result b/mysql-test/suite/galera/r/galera_many_columns.result index ba7b9116e7c..6fa574e47c2 100644 --- a/mysql-test/suite/galera/r/galera_many_columns.result +++ b/mysql-test/suite/galera/r/galera_many_columns.result @@ -1,1021 +1,3 @@ -CREATE TABLE t1 (f1017 VARCHAR(3) DEFAULT 'ABC') ENGINE=InnoDB; -ALTER TABLE t1 ADD COLUMN f1016 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f1015 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f1014 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f1013 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f1012 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f1011 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f1010 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f1009 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f1008 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f1007 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f1006 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f1005 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f1004 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f1003 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f1002 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f1001 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f1000 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f999 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f998 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f997 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f996 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f995 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f994 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f993 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f992 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f991 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f990 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f989 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f988 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f987 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f986 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f985 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f984 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f983 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f982 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f981 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f980 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f979 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f978 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f977 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f976 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f975 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f974 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f973 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f972 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f971 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f970 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f969 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f968 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f967 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f966 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f965 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f964 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f963 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f962 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f961 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f960 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f959 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f958 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f957 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f956 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f955 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f954 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f953 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f952 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f951 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f950 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f949 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f948 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f947 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f946 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f945 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f944 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f943 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f942 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f941 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f940 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f939 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f938 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f937 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f936 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f935 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f934 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f933 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f932 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f931 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f930 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f929 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f928 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f927 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f926 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f925 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f924 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f923 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f922 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f921 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f920 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f919 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f918 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f917 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f916 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f915 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f914 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f913 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f912 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f911 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f910 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f909 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f908 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f907 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f906 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f905 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f904 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f903 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f902 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f901 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f900 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f899 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f898 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f897 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f896 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f895 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f894 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f893 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f892 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f891 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f890 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f889 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f888 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f887 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f886 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f885 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f884 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f883 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f882 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f881 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f880 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f879 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f878 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f877 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f876 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f875 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f874 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f873 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f872 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f871 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f870 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f869 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f868 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f867 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f866 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f865 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f864 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f863 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f862 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f861 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f860 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f859 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f858 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f857 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f856 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f855 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f854 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f853 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f852 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f851 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f850 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f849 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f848 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f847 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f846 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f845 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f844 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f843 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f842 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f841 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f840 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f839 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f838 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f837 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f836 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f835 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f834 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f833 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f832 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f831 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f830 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f829 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f828 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f827 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f826 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f825 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f824 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f823 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f822 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f821 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f820 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f819 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f818 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f817 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f816 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f815 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f814 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f813 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f812 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f811 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f810 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f809 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f808 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f807 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f806 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f805 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f804 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f803 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f802 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f801 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f800 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f799 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f798 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f797 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f796 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f795 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f794 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f793 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f792 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f791 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f790 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f789 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f788 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f787 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f786 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f785 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f784 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f783 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f782 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f781 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f780 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f779 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f778 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f777 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f776 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f775 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f774 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f773 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f772 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f771 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f770 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f769 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f768 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f767 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f766 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f765 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f764 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f763 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f762 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f761 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f760 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f759 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f758 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f757 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f756 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f755 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f754 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f753 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f752 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f751 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f750 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f749 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f748 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f747 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f746 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f745 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f744 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f743 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f742 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f741 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f740 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f739 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f738 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f737 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f736 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f735 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f734 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f733 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f732 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f731 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f730 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f729 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f728 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f727 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f726 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f725 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f724 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f723 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f722 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f721 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f720 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f719 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f718 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f717 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f716 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f715 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f714 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f713 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f712 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f711 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f710 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f709 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f708 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f707 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f706 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f705 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f704 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f703 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f702 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f701 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f700 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f699 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f698 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f697 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f696 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f695 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f694 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f693 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f692 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f691 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f690 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f689 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f688 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f687 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f686 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f685 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f684 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f683 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f682 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f681 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f680 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f679 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f678 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f677 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f676 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f675 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f674 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f673 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f672 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f671 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f670 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f669 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f668 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f667 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f666 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f665 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f664 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f663 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f662 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f661 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f660 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f659 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f658 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f657 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f656 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f655 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f654 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f653 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f652 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f651 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f650 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f649 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f648 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f647 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f646 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f645 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f644 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f643 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f642 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f641 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f640 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f639 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f638 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f637 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f636 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f635 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f634 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f633 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f632 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f631 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f630 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f629 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f628 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f627 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f626 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f625 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f624 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f623 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f622 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f621 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f620 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f619 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f618 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f617 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f616 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f615 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f614 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f613 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f612 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f611 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f610 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f609 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f608 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f607 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f606 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f605 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f604 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f603 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f602 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f601 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f600 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f599 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f598 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f597 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f596 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f595 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f594 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f593 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f592 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f591 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f590 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f589 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f588 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f587 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f586 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f585 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f584 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f583 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f582 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f581 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f580 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f579 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f578 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f577 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f576 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f575 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f574 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f573 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f572 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f571 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f570 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f569 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f568 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f567 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f566 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f565 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f564 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f563 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f562 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f561 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f560 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f559 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f558 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f557 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f556 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f555 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f554 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f553 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f552 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f551 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f550 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f549 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f548 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f547 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f546 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f545 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f544 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f543 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f542 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f541 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f540 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f539 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f538 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f537 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f536 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f535 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f534 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f533 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f532 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f531 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f530 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f529 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f528 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f527 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f526 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f525 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f524 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f523 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f522 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f521 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f520 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f519 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f518 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f517 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f516 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f515 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f514 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f513 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f512 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f511 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f510 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f509 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f508 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f507 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f506 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f505 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f504 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f503 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f502 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f501 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f500 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f499 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f498 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f497 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f496 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f495 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f494 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f493 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f492 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f491 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f490 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f489 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f488 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f487 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f486 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f485 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f484 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f483 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f482 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f481 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f480 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f479 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f478 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f477 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f476 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f475 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f474 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f473 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f472 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f471 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f470 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f469 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f468 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f467 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f466 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f465 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f464 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f463 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f462 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f461 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f460 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f459 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f458 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f457 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f456 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f455 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f454 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f453 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f452 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f451 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f450 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f449 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f448 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f447 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f446 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f445 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f444 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f443 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f442 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f441 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f440 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f439 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f438 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f437 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f436 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f435 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f434 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f433 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f432 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f431 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f430 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f429 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f428 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f427 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f426 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f425 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f424 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f423 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f422 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f421 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f420 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f419 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f418 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f417 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f416 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f415 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f414 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f413 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f412 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f411 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f410 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f409 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f408 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f407 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f406 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f405 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f404 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f403 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f402 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f401 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f400 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f399 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f398 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f397 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f396 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f395 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f394 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f393 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f392 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f391 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f390 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f389 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f388 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f387 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f386 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f385 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f384 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f383 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f382 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f381 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f380 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f379 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f378 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f377 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f376 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f375 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f374 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f373 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f372 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f371 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f370 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f369 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f368 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f367 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f366 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f365 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f364 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f363 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f362 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f361 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f360 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f359 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f358 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f357 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f356 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f355 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f354 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f353 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f352 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f351 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f350 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f349 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f348 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f347 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f346 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f345 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f344 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f343 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f342 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f341 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f340 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f339 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f338 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f337 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f336 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f335 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f334 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f333 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f332 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f331 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f330 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f329 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f328 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f327 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f326 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f325 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f324 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f323 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f322 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f321 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f320 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f319 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f318 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f317 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f316 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f315 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f314 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f313 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f312 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f311 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f310 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f309 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f308 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f307 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f306 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f305 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f304 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f303 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f302 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f301 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f300 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f299 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f298 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f297 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f296 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f295 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f294 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f293 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f292 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f291 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f290 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f289 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f288 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f287 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f286 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f285 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f284 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f283 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f282 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f281 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f280 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f279 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f278 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f277 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f276 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f275 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f274 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f273 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f272 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f271 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f270 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f269 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f268 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f267 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f266 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f265 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f264 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f263 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f262 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f261 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f260 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f259 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f258 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f257 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f256 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f255 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f254 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f253 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f252 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f251 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f250 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f249 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f248 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f247 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f246 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f245 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f244 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f243 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f242 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f241 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f240 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f239 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f238 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f237 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f236 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f235 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f234 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f233 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f232 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f231 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f230 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f229 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f228 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f227 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f226 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f225 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f224 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f223 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f222 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f221 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f220 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f219 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f218 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f217 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f216 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f215 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f214 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f213 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f212 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f211 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f210 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f209 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f208 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f207 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f206 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f205 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f204 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f203 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f202 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f201 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f200 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f199 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f198 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f197 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f196 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f195 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f194 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f193 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f192 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f191 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f190 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f189 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f188 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f187 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f186 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f185 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f184 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f183 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f182 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f181 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f180 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f179 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f178 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f177 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f176 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f175 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f174 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f173 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f172 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f171 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f170 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f169 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f168 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f167 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f166 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f165 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f164 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f163 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f162 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f161 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f160 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f159 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f158 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f157 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f156 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f155 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f154 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f153 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f152 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f151 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f150 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f149 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f148 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f147 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f146 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f145 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f144 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f143 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f142 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f141 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f140 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f139 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f138 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f137 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f136 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f135 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f134 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f133 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f132 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f131 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f130 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f129 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f128 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f127 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f126 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f125 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f124 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f123 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f122 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f121 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f120 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f119 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f118 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f117 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f116 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f115 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f114 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f113 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f112 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f111 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f110 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f109 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f108 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f107 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f106 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f105 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f104 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f103 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f102 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f101 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f100 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f99 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f98 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f97 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f96 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f95 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f94 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f93 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f92 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f91 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f90 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f89 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f88 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f87 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f86 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f85 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f84 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f83 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f82 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f81 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f80 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f79 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f78 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f77 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f76 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f75 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f74 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f73 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f72 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f71 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f70 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f69 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f68 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f67 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f66 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f65 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f64 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f63 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f62 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f61 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f60 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f59 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f58 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f57 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f56 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f55 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f54 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f53 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f52 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f51 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f50 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f49 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f48 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f47 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f46 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f45 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f44 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f43 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f42 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f41 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f40 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f39 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f38 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f37 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f36 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f35 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f34 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f33 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f32 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f31 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f30 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f29 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f28 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f27 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f26 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f25 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f24 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f23 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f22 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f21 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f20 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f19 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f18 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f17 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f16 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f15 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f14 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f13 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f12 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f11 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f10 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f9 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f8 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f7 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f6 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f5 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f4 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f3 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f2 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD COLUMN f1 VARCHAR(3) DEFAULT 'ABC'; -ALTER TABLE t1 ADD PRIMARY KEY (f1, f1017); INSERT INTO t1 (f1) VALUES (DEFAULT); SELECT f1 = 'ABC', f1017 = 'ABC' FROM t1; f1 = 'ABC' f1017 = 'ABC' diff --git a/mysql-test/suite/galera/r/galera_many_rows.result b/mysql-test/suite/galera/r/galera_many_rows.result index fdcec573030..6ec0add8ba8 100644 --- a/mysql-test/suite/galera/r/galera_many_rows.result +++ b/mysql-test/suite/galera/r/galera_many_rows.result @@ -1,4 +1,4 @@ -CREATE TABLE ten (f1 INTEGER) ENGINE=INNODB; +CREATE TABLE ten (f1 INTEGER); INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); CREATE TABLE t1 (f1 INTEGER AUTO_INCREMENT PRIMARY KEY, f2 INTEGER) Engine=InnoDB; INSERT INTO t1 (f2) SELECT a1.f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5; diff --git a/mysql-test/suite/galera/r/galera_many_tables_nopk.result b/mysql-test/suite/galera/r/galera_many_tables_nopk.result new file mode 100644 index 00000000000..7a4f364730c --- /dev/null +++ b/mysql-test/suite/galera/r/galera_many_tables_nopk.result @@ -0,0 +1,17 @@ +SET AUTOCOMMIT=OFF; +START TRANSACTION; +COMMIT; +CREATE TABLE sum_table (f1 INTEGER); +SELECT SUM(f1) = 1000 FROM sum_table; +SUM(f1) = 1000 +1 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1000 SET f1 = 3; +COMMIT; +COMMIT; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +DROP SCHEMA test; +CREATE SCHEMA test; diff --git a/mysql-test/suite/galera/r/galera_many_tables_pk.result b/mysql-test/suite/galera/r/galera_many_tables_pk.result new file mode 100644 index 00000000000..6b6899d979d --- /dev/null +++ b/mysql-test/suite/galera/r/galera_many_tables_pk.result @@ -0,0 +1,20 @@ +SELECT COUNT(*) = 1000 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME LIKE 't%'; +COUNT(*) = 1000 +1 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +COMMIT; +CREATE TABLE sum_table (f1 INTEGER); +SELECT SUM(f1) = 1000 FROM sum_table; +SUM(f1) = 1000 +1 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1000 SET f1 = 3; +COMMIT; +COMMIT; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +DROP SCHEMA test; +CREATE SCHEMA test; diff --git a/mysql-test/suite/galera/r/galera_migrate.result b/mysql-test/suite/galera/r/galera_migrate.result new file mode 100644 index 00000000000..7c92d66ff97 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_migrate.result @@ -0,0 +1,79 @@ +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +START SLAVE USER='root'; +Warnings: +Note 1759 Sending passwords in plain text without SSL/TLS is extremely insecure. +INSERT INTO t1 VALUES (2); +START SLAVE USER='root'; +Warnings: +Note 1759 Sending passwords in plain text without SSL/TLS is extremely insecure. +INSERT INTO t1 VALUES (3); +INSERT INTO t1 VALUES (4); +SET GLOBAL wsrep_cluster_address='gcomm://'; +INSERT INTO t1 VALUES (5); +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +VARIABLE_VALUE = 'Synced' +1 +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +VARIABLE_VALUE = 'Primary' +1 +SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 1 +1 +INSERT INTO t1 VALUES (6); +GRANT ALL PRIVILEGES ON *.* TO 'sst' IDENTIFIED BY 'sst'; +SET GLOBAL wsrep_sst_auth = 'sst:sst'; +GRANT ALL PRIVILEGES ON *.* TO 'sst' IDENTIFIED BY 'sst'; +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +VARIABLE_VALUE = 'Synced' +1 +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +VARIABLE_VALUE = 'Primary' +1 +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 2 +1 +STOP SLAVE; +RESET SLAVE ALL; +STOP SLAVE; +RESET SLAVE ALL; +INSERT INTO t1 VALUES (7); +INSERT INTO t1 VALUES (8); +SELECT COUNT(*) = 8 FROM t1; +COUNT(*) = 8 +1 +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +VARIABLE_VALUE = 'Synced' +1 +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +VARIABLE_VALUE = 'Primary' +1 +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 2 +1 +SELECT COUNT(*) = 8 FROM t1; +COUNT(*) = 8 +1 +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +VARIABLE_VALUE = 'Synced' +1 +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +VARIABLE_VALUE = 'Primary' +1 +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 2 +1 +DROP TABLE t1; +DROP TABLE t1; +SET GLOBAL wsrep_provider = 'none'; +SET GLOBAL wsrep_sst_auth = ''; +SET GLOBAL wsrep_provider_options = ''; +DROP TABLE t1; +DROP USER sst; +SET GLOBAL wsrep_provider = 'none'; +SET GLOBAL wsrep_sst_method = 'rsync'; +SET GLOBAL wsrep_provider_options = ''; +SET GLOBAL wsrep_sst_receive_address = 'AUTO'; +DROP TABLE t1; +DROP USER sst; +CALL mtr.add_suppression("InnoDB: Error: Table \"mysql\"\\.\"innodb_index_stats\" not found"); diff --git a/mysql-test/suite/galera/r/galera_multi_database.result b/mysql-test/suite/galera/r/galera_multi_database.result new file mode 100644 index 00000000000..a04eb484caf --- /dev/null +++ b/mysql-test/suite/galera/r/galera_multi_database.result @@ -0,0 +1,28 @@ +CREATE DATABASE d1; +CREATE TABLE d1.t1(f1 INTEGER) ENGINE=InnoDB; +CREATE DATABASE d2; +CREATE TABLE d2.t1(f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO d1.t1 VALUES (1); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO d2.t1 VALUES (1); +COMMIT; +COMMIT; +SELECT COUNT(*) = 1 FROM d1.t1; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM d2.t1; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM d1.t1; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM d2.t1; +COUNT(*) = 1 +1 +DROP TABLE d1.t1; +DROP TABLE d2.t1; +DROP DATABASE d1; +DROP DATABASE d2; diff --git a/mysql-test/suite/galera/r/galera_myisam_autocommit.result b/mysql-test/suite/galera/r/galera_myisam_autocommit.result new file mode 100644 index 00000000000..3f8d93bae76 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_myisam_autocommit.result @@ -0,0 +1,24 @@ +CREATE TABLE t1 (f1 INTEGER) ENGINE=MyISAM; +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2), (3); +INSERT INTO t1 SELECT 4 FROM DUAL UNION ALL SELECT 5 FROM DUAL; +CREATE TABLE t2 (f1 INTEGER PRIMARY KEY) ENGINE=MyISAM; +INSERT INTO t2 VALUES (1); +INSERT INTO t2 VALUES (2), (3); +INSERT INTO t2 SELECT 4 FROM DUAL UNION ALL SELECT 5 FROM DUAL; +INSERT INTO t2 VALUES (6), (1); +ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +UPDATE t1 SET f1 = 9; +UPDATE t2 SET f1 = 9 WHERE f1 = 1; +DELETE FROM t1 WHERE f1 = 9; +DELETE FROM t2 WHERE f1 = 9; +TRUNCATE TABLE t1; +TRUNCATE TABLE t1; +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 0 FROM t2; +COUNT(*) = 0 +1 +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/suite/galera/r/galera_myisam_transactions.result b/mysql-test/suite/galera/r/galera_myisam_transactions.result new file mode 100644 index 00000000000..284f92b414c --- /dev/null +++ b/mysql-test/suite/galera/r/galera_myisam_transactions.result @@ -0,0 +1,34 @@ +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +CREATE TABLE t2 (f1 INTEGER) ENGINE=MyISAM; +CREATE TABLE t3 (f1 INTEGER) ENGINE=MyISAM; +CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW INSERT INTO t3 VALUES (NEW.f1); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); +COMMIT; +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 0 FROM t2; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 0 FROM t2; +COUNT(*) = 0 +1 +START TRANSACTION; +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); +ROLLBACK; +Warnings: +Warning 1196 Some non-transactional changed tables couldn't be rolled back +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 0 FROM t2; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 0 FROM t2; +COUNT(*) = 0 +1 +DROP TABLE t1, t2, t3; diff --git a/mysql-test/suite/galera/r/galera_nopk_unicode.result b/mysql-test/suite/galera/r/galera_nopk_unicode.result new file mode 100644 index 00000000000..68d049a2146 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_nopk_unicode.result @@ -0,0 +1,24 @@ +CREATE TABLE t1 ( +f1 VARCHAR(255), +KEY (f1) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +INSERT INTO t1 VALUES ('текст'); +SELECT f1 = 'текст' FROM t1; +f1 = 'текст' +1 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1 SET f1 = 'текст2'; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1 SET f1 = 'текст3'; +COMMIT; +COMMIT; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +SELECT f1 = 'текст2' FROM t1; +f1 = 'текст2' +1 +SELECT f1 = 'текст2' FROM t1 WHERE f1 = 'текст2'; +f1 = 'текст2' +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_parallel_apply_lock_table.result b/mysql-test/suite/galera/r/galera_parallel_apply_lock_table.result new file mode 100644 index 00000000000..b9718026828 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_parallel_apply_lock_table.result @@ -0,0 +1,33 @@ +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB; +CREATE TABLE t2 (id INT PRIMARY KEY) ENGINE=InnoDB; +SET GLOBAL wsrep_slave_threads = 2; +LOCK TABLE t1 READ; +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); +SET SESSION wsrep_sync_wait=0; +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE '%applied write set%'; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE '%Waiting for table level lock%'; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 0 FROM t2; +COUNT(*) = 0 +1 +UNLOCK TABLES; +SET SESSION wsrep_sync_wait = 7;; +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM t2; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'closing tables'; +COUNT(*) = 2 +1 +SET GLOBAL wsrep_slave_threads = 1;; +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/suite/galera/r/galera_parallel_autoinc_largetrx.result b/mysql-test/suite/galera/r/galera_parallel_autoinc_largetrx.result new file mode 100644 index 00000000000..1f163f4366c --- /dev/null +++ b/mysql-test/suite/galera/r/galera_parallel_autoinc_largetrx.result @@ -0,0 +1,18 @@ +CREATE TABLE ten (f1 INTEGER); +INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); +CREATE TABLE t1 (f1 INTEGER AUTO_INCREMENT PRIMARY KEY, f2 INTEGER) Engine=InnoDB; +SET GLOBAL wsrep_slave_threads = 4; +INSERT INTO t1 (f2) SELECT 1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4;; +INSERT INTO t1 (f2) SELECT 1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4;; +INSERT INTO t1 (f2) SELECT 1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4;; +SELECT COUNT(*) = 30000 FROM t1; +COUNT(*) = 30000 +1 +SELECT COUNT(DISTINCT f1) = 30000 FROM t1; +COUNT(DISTINCT f1) = 30000 +1 +SELECT COUNT(*) = 5 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user'; +COUNT(*) = 5 +1 +DROP TABLE t1; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/r/galera_parallel_autoinc_manytrx.result b/mysql-test/suite/galera/r/galera_parallel_autoinc_manytrx.result new file mode 100644 index 00000000000..d7ee754f695 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_parallel_autoinc_manytrx.result @@ -0,0 +1,15 @@ +CREATE TABLE ten (f1 INTEGER); +INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); +CREATE TABLE t1 (f1 INTEGER AUTO_INCREMENT PRIMARY KEY, f2 INTEGER) Engine=InnoDB; +SET GLOBAL wsrep_slave_threads = 4; +SELECT COUNT(*) = 20000 FROM t1; +COUNT(*) = 20000 +1 +SELECT COUNT(DISTINCT f1) = 20000 FROM t1; +COUNT(DISTINCT f1) = 20000 +1 +SELECT COUNT(*) = 4 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND STATE LIKE 'closing tables'; +COUNT(*) = 4 +1 +DROP TABLE t1; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/r/galera_parallel_simple.result b/mysql-test/suite/galera/r/galera_parallel_simple.result new file mode 100644 index 00000000000..880d4e8ae3d --- /dev/null +++ b/mysql-test/suite/galera/r/galera_parallel_simple.result @@ -0,0 +1,27 @@ +CREATE TABLE t1 (id INT) ENGINE=InnoDB; +CREATE TABLE t2 (id INT) ENGINE=InnoDB; +SET GLOBAL wsrep_slave_threads = 2; +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); +SELECT COUNT(*) = 6 FROM t1; +COUNT(*) = 6 +1 +SELECT COUNT(*) = 6 FROM t2; +COUNT(*) = 6 +1 +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'closing tables'; +COUNT(*) = 2 +1 +SET GLOBAL wsrep_slave_threads = 1;; +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/suite/galera/r/galera_pc_ignore_sb.result b/mysql-test/suite/galera/r/galera_pc_ignore_sb.result new file mode 100644 index 00000000000..5fcccfe2d59 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_pc_ignore_sb.result @@ -0,0 +1,12 @@ +SET GLOBAL wsrep_provider_options = 'pc.ignore_sb=true'; +Killing server ... +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +DROP TABLE t1; +SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 1 +1 +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +VARIABLE_VALUE = 'ON' +1 +SET GLOBAL wsrep_cluster_address = ''; diff --git a/mysql-test/suite/galera/r/galera_pk_bigint_signed.result b/mysql-test/suite/galera/r/galera_pk_bigint_signed.result new file mode 100644 index 00000000000..a3075994657 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_pk_bigint_signed.result @@ -0,0 +1,26 @@ +CREATE TABLE t1 (f1 BIGINT SIGNED PRIMARY KEY, f2 VARCHAR(5)) ENGINE=InnoDB; +INSERT INTO t1 VALUES +(-9223372036854775808, 'min'), +(9223372036854775807, 'max') +; +SELECT * FROM t1; +f1 f2 +-9223372036854775808 min +9223372036854775807 max +UPDATE t1 SET f2 = CONCAT(f2, '_'); +SELECT * FROM t1; +f1 f2 +-9223372036854775808 min_ +9223372036854775807 max_ +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1 SET f2 = 'foo' WHERE f1 = -9223372036854775808; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1 SET f2 = 'bar' WHERE f1 = -9223372036854775808; +COMMIT; +SET AUTOCOMMIT=ON; +COMMIT; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +SET AUTOCOMMIT=ON; +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_pk_bigint_unsigned.result b/mysql-test/suite/galera/r/galera_pk_bigint_unsigned.result new file mode 100644 index 00000000000..441926e949c --- /dev/null +++ b/mysql-test/suite/galera/r/galera_pk_bigint_unsigned.result @@ -0,0 +1,23 @@ +CREATE TABLE t1 (f1 BIGINT UNSIGNED PRIMARY KEY, f2 VARCHAR(5)) ENGINE=InnoDB; +INSERT INTO t1 VALUES +(18446744073709551615, 'max') +; +SELECT f1 = 18446744073709551615 FROM t1; +f1 = 18446744073709551615 +1 +UPDATE t1 SET f2 = CONCAT(f2, '_'); +SELECT f1 = 18446744073709551615 FROM t1; +f1 = 18446744073709551615 +1 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1 SET f2 = 'foo' WHERE f1 = 18446744073709551615; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1 SET f2 = 'bar' WHERE f1 = 18446744073709551615; +COMMIT; +SET AUTOCOMMIT=ON; +COMMIT; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +SET AUTOCOMMIT=ON; +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_query_cache.result b/mysql-test/suite/galera/r/galera_query_cache.result new file mode 100644 index 00000000000..502d8a58e9c --- /dev/null +++ b/mysql-test/suite/galera/r/galera_query_cache.result @@ -0,0 +1,57 @@ +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +RESET QUERY CACHE; +FLUSH STATUS; +SELECT COUNT(*) FROM t1; +COUNT(*) +1 +SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Qcache_queries_in_cache'; +VARIABLE_VALUE = 1 +1 +SELECT COUNT(*) FROM t1; +COUNT(*) +1 +SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'Qcache_hits'; +VARIABLE_VALUE = 1 +1 +INSERT INTO t1 VALUES (2); +FLUSH STATUS; +SELECT VARIABLE_VALUE = 0 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Qcache_queries_in_cache'; +VARIABLE_VALUE = 0 +1 +SELECT COUNT(*) FROM t1; +COUNT(*) +2 +SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Qcache_queries_in_cache'; +VARIABLE_VALUE = 1 +1 +SELECT VARIABLE_VALUE = 0 FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'Qcache_hits'; +VARIABLE_VALUE = 0 +1 +SELECT COUNT(*) FROM t1; +COUNT(*) +2 +SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'Qcache_hits'; +VARIABLE_VALUE = 1 +1 +ALTER TABLE t1 ADD COLUMN f2 INTEGER; +FLUSH STATUS; +SELECT VARIABLE_VALUE = 0 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Qcache_queries_in_cache'; +VARIABLE_VALUE = 0 +1 +SELECT COUNT(*) FROM t1; +COUNT(*) +2 +SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Qcache_queries_in_cache'; +VARIABLE_VALUE = 1 +1 +SELECT VARIABLE_VALUE = 0 FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'Qcache_hits'; +VARIABLE_VALUE = 0 +1 +SELECT COUNT(*) FROM t1; +COUNT(*) +2 +SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'Qcache_hits'; +VARIABLE_VALUE = 1 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_read_only.result b/mysql-test/suite/galera/r/galera_read_only.result new file mode 100644 index 00000000000..d2af3867fe7 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_read_only.result @@ -0,0 +1,8 @@ +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB; +SET GLOBAL read_only=TRUE; +INSERT INTO t1 VALUES (1); +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +SET GLOBAL read_only=FALSE; +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_repl_key_format_flat16.result b/mysql-test/suite/galera/r/galera_repl_key_format_flat16.result new file mode 100644 index 00000000000..4acf0143f8b --- /dev/null +++ b/mysql-test/suite/galera/r/galera_repl_key_format_flat16.result @@ -0,0 +1,18 @@ +SET GLOBAL wsrep_provider_options = 'repl.key_format=FLAT16'; +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (123); +CREATE TABLE t2 (f1 VARCHAR(256)) ENGINE=InnoDB; +INSERT INTO t2 VALUES (REPEAT('a', 256)); +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +UPDATE t1 SET f1 = 234; +UPDATE t2 SET f1 = REPEAT('b', 256); +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 234; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM t2 WHERE f1 = REPEAT('b', 256); +COUNT(*) = 1 +1 +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/suite/galera/r/galera_repl_max_ws_size.result b/mysql-test/suite/galera/r/galera_repl_max_ws_size.result new file mode 100644 index 00000000000..6cfd10bdedd --- /dev/null +++ b/mysql-test/suite/galera/r/galera_repl_max_ws_size.result @@ -0,0 +1,8 @@ +CREATE TABLE t1 (f1 VARCHAR(512)) ENGINE=InnoDB; +SET GLOBAL wsrep_provider_options = 'repl.max_ws_size=512'; +INSERT INTO t1 VALUES (REPEAT('a', 512)); +ERROR HY000: Got error 5 "Input/output error" during COMMIT +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_restart_nochanges.result b/mysql-test/suite/galera/r/galera_restart_nochanges.result new file mode 100644 index 00000000000..accace97826 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_restart_nochanges.result @@ -0,0 +1,9 @@ +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 2 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_rsu_add_pk.result b/mysql-test/suite/galera/r/galera_rsu_add_pk.result new file mode 100644 index 00000000000..3fd24af9ad7 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_rsu_add_pk.result @@ -0,0 +1,26 @@ +CREATE TABLE ten (f1 INTEGER); +INSERT INTO ten VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +CREATE TABLE t1 (f1 INTEGER) Engine=InnoDB; +INSERT INTO t1 (f1) SELECT 000000 + (10000 * a1.f1) + (1000 * a2.f1) + (100 * a3.f1) + (10 * a4.f1) + a5.f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5; +INSERT INTO t1 (f1) SELECT 100000 + (10000 * a1.f1) + (1000 * a2.f1) + (100 * a3.f1) + (10 * a4.f1) + a5.f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5;; +SET SESSION wsrep_OSU_method = "RSU"; +ALTER TABLE t1 ADD PRIMARY KEY (f1); +SET SESSION wsrep_OSU_method = "TOI"; +INSERT INTO t1 (f1) SELECT 200000 + (10000 * a1.f1) + (1000 * a2.f1) + (100 * a3.f1) + (10 * a4.f1) + a5.f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5; +SELECT COUNT(*) = 300000 FROM t1; +COUNT(*) = 300000 +1 +SELECT MAX(f1) = 299999 FROM t1; +MAX(f1) = 299999 +1 +SELECT COUNT(*) = 300000 FROM t1; +COUNT(*) = 300000 +1 +SELECT MAX(f1) = 299999 FROM t1; +MAX(f1) = 299999 +1 +SET SESSION wsrep_OSU_method = "RSU"; +ALTER TABLE t1 ADD PRIMARY KEY (f1); +SET SESSION wsrep_OSU_method = "TOI"; +DROP TABLE t1; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/r/galera_rsu_drop_pk.result b/mysql-test/suite/galera/r/galera_rsu_drop_pk.result new file mode 100644 index 00000000000..039fb68d244 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_rsu_drop_pk.result @@ -0,0 +1,42 @@ +CREATE TABLE ten (f1 INTEGER); +INSERT INTO ten VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) Engine=InnoDB; +INSERT INTO t1 (f1) SELECT 000000 + (10000 * a1.f1) + (1000 * a2.f1) + (100 * a3.f1) + (10 * a4.f1) + a5.f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5; +INSERT INTO t1 (f1) SELECT 100000 + (10000 * a1.f1) + (1000 * a2.f1) + (100 * a3.f1) + (10 * a4.f1) + a5.f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5;; +SET SESSION wsrep_OSU_method = "RSU"; +ALTER TABLE t1 DROP PRIMARY KEY; +SET SESSION wsrep_OSU_method = "TOI"; +INSERT INTO t1 (f1) SELECT 200000 + (10000 * a1.f1) + (1000 * a2.f1) + (100 * a3.f1) + (10 * a4.f1) + a5.f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5; +SELECT COUNT(*) = 300000 FROM t1; +COUNT(*) = 300000 +1 +SELECT MAX(f1) = 299999 FROM t1; +MAX(f1) = 299999 +1 +SELECT COUNT(*) = 300000 FROM t1; +COUNT(*) = 300000 +1 +SELECT MAX(f1) = 299999 FROM t1; +MAX(f1) = 299999 +1 +SET SESSION wsrep_OSU_method = "RSU"; +ALTER TABLE t1 DROP PRIMARY KEY; +SET SESSION wsrep_OSU_method = "TOI"; +INSERT INTO t1 (f1) VALUES (1); +INSERT INTO t1 (f1) VALUES (10); +SELECT COUNT(*) = 2 FROM t1 WHERE f1 = 1; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 2 FROM t1 WHERE f1 = 10; +COUNT(*) = 2 +1 +INSERT INTO t1 (f1) VALUES (100); +INSERT INTO t1 (f1) VALUES (1000); +SELECT COUNT(*) = 2 FROM t1 WHERE f1 = 100; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 2 FROM t1 WHERE f1 = 1000; +COUNT(*) = 2 +1 +DROP TABLE t1; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/r/galera_rsu_error.result b/mysql-test/suite/galera/r/galera_rsu_error.result new file mode 100644 index 00000000000..bfe41390d1d --- /dev/null +++ b/mysql-test/suite/galera/r/galera_rsu_error.result @@ -0,0 +1,21 @@ +CREATE TABLE t1 (f1 INTEGER) Engine=InnoDB; +INSERT INTO t1 VALUES (1), (1); +SET SESSION wsrep_OSU_method = "RSU"; +ALTER TABLE t1 ADD PRIMARY KEY (f1); +ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +SET SESSION wsrep_OSU_method = "TOI"; +SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 't1'; +COUNT(*) = 0 +1 +INSERT INTO t1 VALUES (1); +SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 't1'; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 3 FROM t1; +COUNT(*) = 3 +1 +INSERT INTO t1 VALUES (1); +SELECT COUNT(3) = 4 FROM t1; +COUNT(3) = 4 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_rsu_simple.result b/mysql-test/suite/galera/r/galera_rsu_simple.result new file mode 100644 index 00000000000..4c2780a2933 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_rsu_simple.result @@ -0,0 +1,21 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) Engine=InnoDB; +SET SESSION wsrep_OSU_method = "RSU"; +ALTER TABLE t1 ADD COLUMN f2 INTEGER; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +COUNT(*) = 1 +1 +INSERT INTO t1 VALUES (1); +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +INSERT INTO t1 (f1) VALUES (2); +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 2 FROM t1; +COUNT(*) = 2 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_sbr.result b/mysql-test/suite/galera/r/galera_sbr.result new file mode 100644 index 00000000000..0bf6cc7c9d3 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_sbr.result @@ -0,0 +1,14 @@ +SET SESSION binlog_format = 'STATEMENT'; +Warnings: +Warning 1105 MariaDB Galera does not support binlog format: STATEMENT +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +SET SESSION binlog_format = 'MIXED'; +Warnings: +Warning 1105 MariaDB Galera does not support binlog format: MIXED +INSERT INTO t1 VALUES (2); +SELECT COUNT(*) = 2 FROM t1; +COUNT(*) = 2 +1 +DROP TABLE t1; +SET GLOBAL binlog_format = 'ROW'; diff --git a/mysql-test/suite/galera/r/galera_sbr_binlog.result b/mysql-test/suite/galera/r/galera_sbr_binlog.result new file mode 100644 index 00000000000..0bf6cc7c9d3 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_sbr_binlog.result @@ -0,0 +1,14 @@ +SET SESSION binlog_format = 'STATEMENT'; +Warnings: +Warning 1105 MariaDB Galera does not support binlog format: STATEMENT +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +SET SESSION binlog_format = 'MIXED'; +Warnings: +Warning 1105 MariaDB Galera does not support binlog format: MIXED +INSERT INTO t1 VALUES (2); +SELECT COUNT(*) = 2 FROM t1; +COUNT(*) = 2 +1 +DROP TABLE t1; +SET GLOBAL binlog_format = 'ROW'; diff --git a/mysql-test/suite/galera/r/galera_split_brain.result b/mysql-test/suite/galera/r/galera_split_brain.result new file mode 100644 index 00000000000..615615040fe --- /dev/null +++ b/mysql-test/suite/galera/r/galera_split_brain.result @@ -0,0 +1,5 @@ +call mtr.add_suppression("WSREP: TO isolation failed for: "); +Killing server ... +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +SET GLOBAL wsrep_cluster_address = ''; diff --git a/mysql-test/suite/galera/r/galera_sql_log_bin_zero.result b/mysql-test/suite/galera/r/galera_sql_log_bin_zero.result new file mode 100644 index 00000000000..89ab8d5e55b --- /dev/null +++ b/mysql-test/suite/galera/r/galera_sql_log_bin_zero.result @@ -0,0 +1,12 @@ +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +SET SESSION sql_log_bin = 0; +INSERT INTO t1 VALUES (1); +SET SESSION sql_log_bin = 1; +INSERT INTO t1 VALUES (2); +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 0 FROM t1 WHERE f1 = 1; +COUNT(*) = 0 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_ssl.result b/mysql-test/suite/galera/r/galera_ssl.result new file mode 100644 index 00000000000..569c3c607d5 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_ssl.result @@ -0,0 +1,18 @@ +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +VARIABLE_VALUE = 'Synced' +1 +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 2 +1 +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) Engine=InnoDB; +INSERT INTO t1 VALUES (1); +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +VARIABLE_VALUE = 'Synced' +1 +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 2 +1 +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_sst_mysqldump.result b/mysql-test/suite/galera/r/galera_sst_mysqldump.result new file mode 100644 index 00000000000..1be2002001b --- /dev/null +++ b/mysql-test/suite/galera/r/galera_sst_mysqldump.result @@ -0,0 +1,459 @@ +Setting SST method to mysqldump ... +GRANT ALL PRIVILEGES ON *.* TO 'sst' IDENTIFIED BY 'sst'; +SET GLOBAL wsrep_sst_auth = 'sst:sst'; +SET GLOBAL wsrep_sst_method = 'mysqldump'; +Performing State Transfer on a server that has been temporarily disconnected +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +Unloading wsrep provider ... +SET GLOBAL wsrep_provider = 'none'; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +Loading wsrep provider ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +Performing State Transfer on a server that has been shut down cleanly and restarted +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +Shutting down server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +Starting server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +Performing State Transfer on a server that starts from a clean var directory +This is accomplished by shutting down node #2 and removing its var directory before restarting it +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +Shutting down server ... +Cleaning var directory ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +Starting server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +Performing State Transfer on a server that has been killed and restarted +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +Killing server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +Performing --wsrep-recover ... +Starting server ... +Using --wsrep-start-position when starting mysqld ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +Performing State Transfer on a server that has been killed and restarted +while a DDL was in progress on it +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +SET GLOBAL debug = 'd,sync.alter_opened_table'; +ALTER TABLE t1 ADD COLUMN f2 INTEGER; +SET wsrep_sync_wait = 0; +Killing server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +Performing --wsrep-recover ... +Starting server ... +Using --wsrep-start-position when starting mysqld ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +CALL mtr.add_suppression("Slave SQL: Error 'The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement' on query"); +DROP USER sst; +CALL mtr.add_suppression("Slave SQL: Error 'The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement' on query"); +CALL mtr.add_suppression("InnoDB: Error: Table \"mysql\"\\.\"innodb_index_stats\" not found"); +CALL mtr.add_suppression("InnoDB: New log files created"); +CALL mtr.add_suppression("InnoDB: Creating foreign key constraint system tables"); +CALL mtr.add_suppression("Can't open and lock time zone table"); +CALL mtr.add_suppression("Can't open and lock privilege tables"); +CALL mtr.add_suppression("Info table is not ready to be used"); +CALL mtr.add_suppression("Native table .* has the wrong structure"); diff --git a/mysql-test/suite/galera/r/galera_sst_rsync.result b/mysql-test/suite/galera/r/galera_sst_rsync.result new file mode 100644 index 00000000000..df2d9190a4b --- /dev/null +++ b/mysql-test/suite/galera/r/galera_sst_rsync.result @@ -0,0 +1,359 @@ +Performing State Transfer on a server that has been shut down cleanly and restarted +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +Shutting down server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +Starting server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +Performing State Transfer on a server that starts from a clean var directory +This is accomplished by shutting down node #2 and removing its var directory before restarting it +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +Shutting down server ... +Cleaning var directory ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +Starting server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +Performing State Transfer on a server that has been killed and restarted +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +Killing server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +Performing --wsrep-recover ... +Starting server ... +Using --wsrep-start-position when starting mysqld ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +Performing State Transfer on a server that has been killed and restarted +while a DDL was in progress on it +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +SET GLOBAL debug_dbug = 'd,sync.alter_opened_table'; +ALTER TABLE t1 ADD COLUMN f2 INTEGER; +SET wsrep_sync_wait = 0; +Killing server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +Performing --wsrep-recover ... +Starting server ... +Using --wsrep-start-position when starting mysqld ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +SET GLOBAL debug_dbug = $debug_orig; diff --git a/mysql-test/suite/galera/r/galera_sst_xtrabackup-v2.result b/mysql-test/suite/galera/r/galera_sst_xtrabackup-v2.result new file mode 100644 index 00000000000..750d73b615f --- /dev/null +++ b/mysql-test/suite/galera/r/galera_sst_xtrabackup-v2.result @@ -0,0 +1,358 @@ +Performing State Transfer on a server that has been shut down cleanly and restarted +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +Shutting down server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +Starting server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +Performing State Transfer on a server that starts from a clean var directory +This is accomplished by shutting down node #2 and removing its var directory before restarting it +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +Shutting down server ... +Cleaning var directory ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +Starting server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +Performing State Transfer on a server that has been killed and restarted +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +Killing server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +Performing --wsrep-recover ... +Starting server ... +Using --wsrep-start-position when starting mysqld ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +Performing State Transfer on a server that has been killed and restarted +while a DDL was in progress on it +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +SET GLOBAL debug = 'd,sync.alter_opened_table'; +ALTER TABLE t1 ADD COLUMN f2 INTEGER; +SET wsrep_sync_wait = 0; +Killing server ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +Performing --wsrep-recover ... +Starting server ... +Using --wsrep-start-position when starting mysqld ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; diff --git a/mysql-test/suite/galera/r/galera_status_cluster.result b/mysql-test/suite/galera/r/galera_status_cluster.result new file mode 100644 index 00000000000..d7cf671cb10 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_status_cluster.result @@ -0,0 +1,12 @@ +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 2 +1 +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +VARIABLE_VALUE = 'Primary' +1 +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 2 +1 +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +VARIABLE_VALUE = 'Primary' +1 diff --git a/mysql-test/suite/galera/r/galera_status_local_state.result b/mysql-test/suite/galera/r/galera_status_local_state.result new file mode 100644 index 00000000000..65713f1975c --- /dev/null +++ b/mysql-test/suite/galera/r/galera_status_local_state.result @@ -0,0 +1,14 @@ +SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state'; +VARIABLE_VALUE = 4 +1 +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +VARIABLE_VALUE = 'Synced' +1 +SET GLOBAL wsrep_desync = 1; +SELECT VARIABLE_VALUE = 'Donor/Desynced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +VARIABLE_VALUE = 'Donor/Desynced' +1 +SET GLOBAL wsrep_desync = 0; +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +VARIABLE_VALUE = 'Synced' +1 diff --git a/mysql-test/suite/galera/r/galera_suspend_slave.result b/mysql-test/suite/galera/r/galera_suspend_slave.result new file mode 100644 index 00000000000..02904812dd5 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_suspend_slave.result @@ -0,0 +1,10 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +Suspending node_2 ... +INSERT INTO t1 VALUES (1); +Got one of the listed errors +Resuming node_2 ... +INSERT INTO t1 VALUES (1); +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_toi_alter_auto_increment.result b/mysql-test/suite/galera/r/galera_toi_alter_auto_increment.result new file mode 100644 index 00000000000..f91415323ec --- /dev/null +++ b/mysql-test/suite/galera/r/galera_toi_alter_auto_increment.result @@ -0,0 +1,42 @@ +CREATE TABLE ten (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); +CREATE TABLE t1 (f1 INTEGER AUTO_INCREMENT PRIMARY KEY, f2 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 (f2) SELECT 1 FROM ten; +INSERT INTO t1 (f2) SELECT 1 FROM ten; +ALTER TABLE t1 AUTO_INCREMENT = 1000; +INSERT INTO t1 (f2) SELECT 1 FROM ten; +INSERT INTO t1 (f2) SELECT 1 FROM ten; +SELECT MIN(f1) >= 1000, COUNT(*) = 20, COUNT(DISTINCT f1) = 20 FROM t1 WHERE f1 >= 1000; +MIN(f1) >= 1000 COUNT(*) = 20 COUNT(DISTINCT f1) = 20 +1 1 1 +SELECT MIN(f1) >= 1000, COUNT(*) = 20, COUNT(DISTINCT f1) = 20 FROM t1 WHERE f1 >= 1000; +MIN(f1) >= 1000 COUNT(*) = 20 COUNT(DISTINCT f1) = 20 +1 1 1 +ALTER TABLE t1 AUTO_INCREMENT = 5; +INSERT INTO t1 (f2) SELECT 1 FROM ten; +INSERT INTO t1 (f2) SELECT 1 FROM ten; +SELECT MIN(f1) >= 1000, COUNT(*) = 40, COUNT(DISTINCT f1) = 40 FROM t1 WHERE f1 >= 1000; +MIN(f1) >= 1000 COUNT(*) = 40 COUNT(DISTINCT f1) = 40 +1 1 1 +SELECT MIN(f1) >= 1000, COUNT(*) = 40, COUNT(DISTINCT f1) = 40 FROM t1 WHERE f1 >= 1000; +MIN(f1) >= 1000 COUNT(*) = 40 COUNT(DISTINCT f1) = 40 +1 1 1 +DROP TABLE t1; +SET GLOBAL wsrep_auto_increment_control = OFF; +SET GLOBAL auto_increment_increment = 1; +SET GLOBAL auto_increment_offset = 1; +SET GLOBAL wsrep_auto_increment_control = OFF; +SET GLOBAL auto_increment_increment = 1; +SET GLOBAL auto_increment_offset = 1; +CREATE TABLE t1 (f1 INTEGER AUTO_INCREMENT PRIMARY KEY, f2 INTEGER) ENGINE=InnoDB; +ALTER TABLE t1 AUTO_INCREMENT=100; +INSERT INTO t1 (f2) SELECT 1 FROM ten; +INSERT INTO t1 (f2) SELECT 1 FROM ten; +SELECT MIN(f1) = 100, MAX(f1) = 119, COUNT(f1) = 20, COUNT(DISTINCT f1) = 20 FROM t1; +MIN(f1) = 100 MAX(f1) = 119 COUNT(f1) = 20 COUNT(DISTINCT f1) = 20 +1 1 1 1 +SELECT MIN(f1) = 100, MAX(f1) = 119, COUNT(f1) = 20, COUNT(DISTINCT f1) = 20 FROM t1; +MIN(f1) = 100 MAX(f1) = 119 COUNT(f1) = 20 COUNT(DISTINCT f1) = 20 +1 1 1 1 +DROP TABLE t1; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/r/galera_toi_ddl_error.result b/mysql-test/suite/galera/r/galera_toi_ddl_error.result new file mode 100644 index 00000000000..656e20bcc46 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_toi_ddl_error.result @@ -0,0 +1,19 @@ +CREATE TABLE ten (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 (f1) SELECT (10000 * a1.f1) + (1000 * a2.f1) + (100 * a3.f1) + (10 * a4.f1) + a5.f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5; +INSERT INTO t1 (f1) SELECT MAX(f1) FROM t1; +ALTER TABLE t1 ADD PRIMARY KEY (f1); +ERROR 23000: Duplicate entry '111110' for key 'PRIMARY' +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f1` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +DROP TABLE t1; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/r/galera_toi_ddl_fk_insert.result b/mysql-test/suite/galera/r/galera_toi_ddl_fk_insert.result new file mode 100644 index 00000000000..81781fbeae7 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_toi_ddl_fk_insert.result @@ -0,0 +1,31 @@ +CREATE TABLE ten (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); +CREATE TABLE parent ( +id INT PRIMARY KEY AUTO_INCREMENT, +f2 INTEGER, +KEY (id) +) ENGINE=InnoDB; +CREATE TABLE child ( +id INT PRIMARY KEY AUTO_INCREMENT, +parent_id INT +) ENGINE=InnoDB; +INSERT INTO parent VALUES (DEFAULT, 0); +INSERT INTO child (parent_id) SELECT 1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4;; +INSERT INTO parent (f2) SELECT 1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4;; +INSERT INTO parent (f2) SELECT 2 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4;; +ALTER TABLE child ADD FOREIGN KEY (parent_id) REFERENCES parent(id);; +SELECT COUNT(*) = 20001 FROM parent; +COUNT(*) = 20001 +1 +SELECT COUNT(*) = 10000 FROM child; +COUNT(*) = 10000 +1 +SELECT COUNT(*) = 20001 FROM parent; +COUNT(*) = 20001 +1 +SELECT COUNT(*) = 10000 FROM child; +COUNT(*) = 10000 +1 +DROP TABLE child; +DROP TABLE parent; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/r/galera_toi_ddl_locking.result b/mysql-test/suite/galera/r/galera_toi_ddl_locking.result new file mode 100644 index 00000000000..d72a80b5a23 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_toi_ddl_locking.result @@ -0,0 +1,41 @@ +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +CREATE TABLE t2 (f1 INTEGER) ENGINE=InnoDB; +SET DEBUG_SYNC = 'alter_table_before_open_tables WAIT_FOR continue'; +ALTER TABLE t1 ADD COLUMN f2 INTEGER;; +SET SESSION wsrep_sync_wait = 0; +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 0 FROM t2; +COUNT(*) = 0 +1 +INSERT INTO t1 VALUES (1); +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t2 VALUES (1); +COMMIT;; +SET SESSION wsrep_sync_wait = 0; +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO = 'Commit'; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 0 FROM t2; +COUNT(*) = 0 +1 +SET DEBUG_SYNC= 'now SIGNAL continue'; +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 1 FROM t2; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 1 FROM t2; +COUNT(*) = 1 +1 +SET DEBUG_SYNC= 'RESET'; +SET DEBUG_SYNC= 'RESET'; +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/suite/galera/r/galera_toi_ddl_nonconflicting.result b/mysql-test/suite/galera/r/galera_toi_ddl_nonconflicting.result new file mode 100644 index 00000000000..41e693c2b19 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_toi_ddl_nonconflicting.result @@ -0,0 +1,23 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY AUTO_INCREMENT, f2 INTEGER); +ALTER TABLE t1 ADD COLUMN f3 INTEGER; INSERT INTO t1 (f1, f2) VALUES (DEFAULT, 123);; +CREATE UNIQUE INDEX i1 ON t1(f2);; +INSERT INTO t1 (f1, f2) VALUES (DEFAULT, 234); +SELECT COUNT(*) = 3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +COUNT(*) = 3 +1 +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_NAME = 't1'; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 2 FROM t1; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +COUNT(*) = 3 +1 +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_NAME = 't1'; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 2 FROM t1; +COUNT(*) = 2 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_toi_ddl_sequential.result b/mysql-test/suite/galera/r/galera_toi_ddl_sequential.result new file mode 100644 index 00000000000..9dfa433d49f --- /dev/null +++ b/mysql-test/suite/galera/r/galera_toi_ddl_sequential.result @@ -0,0 +1,35 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +ALTER TABLE t1 ADD COLUMN f2 INTEGER; +INSERT INTO t1 VALUES (2, 3); +ALTER TABLE t1 DROP COLUMN f2; +INSERT INTO t1 VALUES (4); +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f1` int(11) NOT NULL, + PRIMARY KEY (`f1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT COUNT(*) = 3 FROM t1; +COUNT(*) = 3 +1 +SELECT * FROM t1 ORDER BY f1; +f1 +1 +2 +4 +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `f1` int(11) NOT NULL, + PRIMARY KEY (`f1`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +SELECT COUNT(*) = 3 FROM t1; +COUNT(*) = 3 +1 +SELECT * FROM t1 ORDER BY f1; +f1 +1 +2 +4 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_toi_ftwrl.result b/mysql-test/suite/galera/r/galera_toi_ftwrl.result new file mode 100644 index 00000000000..594717c96ff --- /dev/null +++ b/mysql-test/suite/galera/r/galera_toi_ftwrl.result @@ -0,0 +1,12 @@ +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB; +FLUSH TABLES WITH READ LOCK; +ALTER TABLE t1 ADD COLUMN f2 INTEGER; +UNLOCK TABLES; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `id` int(11) NOT NULL, + `f2` int(11) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_toi_lock_exclusive.result b/mysql-test/suite/galera/r/galera_toi_lock_exclusive.result new file mode 100644 index 00000000000..eac50e8853c --- /dev/null +++ b/mysql-test/suite/galera/r/galera_toi_lock_exclusive.result @@ -0,0 +1,17 @@ +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES (2); +ALTER TABLE t1 ADD COLUMN f2 INTEGER, LOCK=EXCLUSIVE; +COMMIT; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +INSERT INTO t1 VALUES (2, 2); +SELECT COUNT(*) = 2 FROM t1; +COUNT(*) = 2 +1 +INSERT INTO t1 VALUES (3, 3); +SELECT COUNT(*) = 3 FROM t1; +COUNT(*) = 3 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_toi_lock_shared.result b/mysql-test/suite/galera/r/galera_toi_lock_shared.result new file mode 100644 index 00000000000..36c38860688 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_toi_lock_shared.result @@ -0,0 +1,12 @@ +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +ALTER TABLE t1 ADD COLUMN f2 INTEGER, LOCK=SHARED; +INSERT INTO t1 VALUES (2, 2); +SELECT COUNT(*) = 2 FROM t1; +COUNT(*) = 2 +1 +INSERT INTO t1 VALUES (3, 3); +SELECT COUNT(*) = 3 FROM t1; +COUNT(*) = 3 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_transaction_read_only.result b/mysql-test/suite/galera/r/galera_transaction_read_only.result new file mode 100644 index 00000000000..3cd1076a285 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_transaction_read_only.result @@ -0,0 +1,21 @@ +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +COMMIT; +wsrep_last_committed_diff +1 +START TRANSACTION READ ONLY; +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +COMMIT; +wsrep_last_committed_diff +1 +START TRANSACTION; +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +COMMIT; +wsrep_last_committed_diff +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_transaction_replay.result b/mysql-test/suite/galera/r/galera_transaction_replay.result new file mode 100644 index 00000000000..23ed87ffe22 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_transaction_replay.result @@ -0,0 +1,30 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 CHAR(1)); +INSERT INTO t1 VALUES (1, 'a'); +INSERT INTO t1 VALUES (2, 'a'); +SET AUTOCOMMIT=ON; +START TRANSACTION; +UPDATE t1 SET f2 = 'b' WHERE f1 = 1; +SELECT * FROM t1 WHERE f1 = 2 FOR UPDATE; +f1 f2 +2 a +SET GLOBAL wsrep_provider_options = 'dbug=d,apply_monitor_enter_sync'; +COMMIT;; +SET SESSION wsrep_sync_wait = 0; +UPDATE t1 SET f2 = 'c' WHERE f1 = 2; +SET GLOBAL wsrep_provider_options = 'dbug='; +SET GLOBAL wsrep_provider_options = 'signal=apply_monitor_enter_sync'; +SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'b'; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'c'; +COUNT(*) = 1 +1 +wsrep_local_replays +1 +SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'b'; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'c'; +COUNT(*) = 1 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_truncate.result b/mysql-test/suite/galera/r/galera_truncate.result new file mode 100644 index 00000000000..eeeb6721d12 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_truncate.result @@ -0,0 +1,29 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) Engine=InnoDB; +INSERT INTO t1 VALUES (1); +TRUNCATE TABLE t1; +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +CREATE TABLE t2 (f1 VARCHAR(255)) Engine=InnoDB; +INSERT INTO t2 VALUES ('abc'); +TRUNCATE TABLE t2; +SELECT COUNT(*) = 0 FROM t2; +COUNT(*) = 0 +1 +CREATE TABLE t3 (f1 INTEGER AUTO_INCREMENT PRIMARY KEY) Engine=InnoDB; +INSERT INTO t3 VALUES (DEFAULT),(DEFAULT),(DEFAULT),(DEFAULT),(DEFAULT); +CREATE TABLE t4 (f1 INTEGER AUTO_INCREMENT PRIMARY KEY) Engine=InnoDB AUTO_INCREMENT=1234; +INSERT INTO t4 VALUES (DEFAULT),(DEFAULT),(DEFAULT),(DEFAULT),(DEFAULT); +TRUNCATE TABLE t3; +TRUNCATE TABLE t4; +SELECT AUTO_INCREMENT = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME IN ('t3', 't4'); +AUTO_INCREMENT = 1 +1 +1 +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; +DROP TABLE t4; diff --git a/mysql-test/suite/galera/r/galera_truncate_temporary.result b/mysql-test/suite/galera/r/galera_truncate_temporary.result new file mode 100644 index 00000000000..0bdc4e3632a --- /dev/null +++ b/mysql-test/suite/galera/r/galera_truncate_temporary.result @@ -0,0 +1,63 @@ +CREATE TEMPORARY TABLE t1 (f1 INTEGER PRIMARY KEY) Engine=InnoDB; +INSERT INTO t1 VALUES (1); +TRUNCATE TABLE t1; +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +SELECT * FROM t1; +ERROR 42S02: Table 'test.t1' doesn't exist +DROP TABLE t1; +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +CREATE TEMPORARY TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (2); +SELECT f1 = 2 FROM t1; +f1 = 2 +1 +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +TRUNCATE TABLE t1; +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +SELECT f1 = 1 FROM t1; +f1 = 1 +1 +DROP TABLE t1; +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +SELECT f1 = 1 FROM t1; +f1 = 1 +1 +TRUNCATE TABLE t1; +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +DROP TABLE t1; +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +CREATE TEMPORARY TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (2); +TRUNCATE TABLE t1; +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +SELECT f1 = 2 FROM t1; +f1 = 2 +1 +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +DROP TABLE t1; +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_unicode_identifiers.result b/mysql-test/suite/galera/r/galera_unicode_identifiers.result index cb348f8509f..212c6c65b67 100644 --- a/mysql-test/suite/galera/r/galera_unicode_identifiers.result +++ b/mysql-test/suite/galera/r/galera_unicode_identifiers.result @@ -6,7 +6,7 @@ CREATE TABLE `table with space` ( `column with space` INTEGER AUTO_INCREMENT PRIMARY KEY, `second column with space` INTEGER, UNIQUE `index name with space` (`second column with space`) -) ENGINE=INNODB; +); INSERT INTO `table with space` VALUES (DEFAULT, 1); CREATE DATABASE `база`; USE `база`; @@ -14,7 +14,7 @@ CREATE TABLE `таблица` ( `първа_колона` INTEGER PRIMARY KEY, `втора_колона` INTEGER, UNIQUE `индекс` (`втора_колона`) -) ENGINE=INNODB; +); INSERT INTO `таблица` VALUES (1, 1); CREATE DATABASE `втора база`; USE `втора база`; @@ -22,20 +22,20 @@ CREATE TABLE `втора таблица` ( `първа колона` INTEGER, `втора колона` INTEGER, KEY `първи индекс` (`първа колона`) -) ENGINE=INNODB; +); INSERT INTO `втора таблица` VALUES (1, 1); USE `database with space`; -SELECT * FROM `table with space`; -column with space second column with space -1 1 +SELECT `second column with space` FROM `table with space`; +second column with space +1 USE `база`; SELECT * FROM `таблица`; първа_колона втора_колона 1 1 USE `втора база`; -SELECT * FROM `втора таблица`; -първа колона втора колона -1 1 +SELECT `втора колона` FROM `втора таблица`; +втора колона +1 SET GLOBAL wsrep_sync_wait = (SELECT @@wsrep_sync_wait); DROP TABLE `database with space`.`table with space`; DROP TABLE `база`.`таблица`; diff --git a/mysql-test/suite/galera/r/galera_unicode_pk.result b/mysql-test/suite/galera/r/galera_unicode_pk.result new file mode 100644 index 00000000000..d59615b2542 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_unicode_pk.result @@ -0,0 +1,31 @@ +CREATE TABLE t1 ( +f1 VARCHAR(255) PRIMARY KEY +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +INSERT INTO t1 VALUES ('текст'); +SELECT f1 = 'текст' FROM t1; +f1 = 'текст' +1 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1 SET f1 = 'текст2'; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1 SET f1 = 'текст3'; +COMMIT; +COMMIT; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +SELECT f1 = 'текст2' FROM t1; +f1 = 'текст2' +1 +SELECT f1 = 'текст2' FROM t1 WHERE f1 = 'текст2'; +f1 = 'текст2' +1 +START TRANSACTION; +INSERT INTO t1 VALUES ('текст4'); +START TRANSACTION; +INSERT INTO t1 VALUES ('текст4'); +COMMIT; +COMMIT; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +COMMIT; +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_update_limit.result b/mysql-test/suite/galera/r/galera_update_limit.result new file mode 100644 index 00000000000..c26eb1c29f6 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_update_limit.result @@ -0,0 +1,17 @@ +CREATE TABLE ten (f1 INTEGER) Engine=InnoDB; +INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) Engine=InnoDB; +INSERT INTO t1 SELECT f1 FROM ten ORDER BY RAND(); +UPDATE IGNORE t1 SET f1 = FLOOR(1 + (RAND() * 10)) ORDER BY RAND() LIMIT 5; +sum_matches +1 +max_matches +1 +DROP TABLE t1; +CREATE TABLE t2 (f1 INTEGER) Engine=InnoDB; +INSERT INTO t2 SELECT f1 FROM ten ORDER BY RAND(); +UPDATE IGNORE t2 SET f1 = FLOOR(1 + (RAND() * 10)) ORDER BY RAND() LIMIT 5; +sum_matches +1 +DROP TABLE t2; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/r/galera_v1_row_events.result b/mysql-test/suite/galera/r/galera_v1_row_events.result new file mode 100644 index 00000000000..a6ab62350b1 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_v1_row_events.result @@ -0,0 +1,10 @@ +CREATE TABLE t1 (f1 INT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +UPDATE t1 SET f1 = 2 WHERE f1 = 1; +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 2; +COUNT(*) = 1 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_var_OSU_method.result b/mysql-test/suite/galera/r/galera_var_OSU_method.result index 8e47443184e..9a07873e1b9 100644 --- a/mysql-test/suite/galera/r/galera_var_OSU_method.result +++ b/mysql-test/suite/galera/r/galera_var_OSU_method.result @@ -11,4 +11,6 @@ SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; COUNT(*) = 1 1 SET SESSION wsrep_OSU_method = "TOI"; +SET DEBUG_SYNC= 'RESET'; +SET DEBUG_SYNC= 'RESET'; DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_var_OSU_method2.result b/mysql-test/suite/galera/r/galera_var_OSU_method2.result index 67fc63ade74..08f2e6aa0d8 100644 --- a/mysql-test/suite/galera/r/galera_var_OSU_method2.result +++ b/mysql-test/suite/galera/r/galera_var_OSU_method2.result @@ -15,3 +15,5 @@ COUNT(*) = 2 INSERT INTO t1 VALUES (3,4); SET GLOBAL wsrep_OSU_method = "TOI"; DROP TABLE t1; +SET DEBUG_SYNC= 'RESET'; +SET DEBUG_SYNC= 'RESET'; diff --git a/mysql-test/suite/galera/r/galera_var_auto_inc_control_off.result b/mysql-test/suite/galera/r/galera_var_auto_inc_control_off.result index 87d6020d47c..92b69fbbaa7 100644 --- a/mysql-test/suite/galera/r/galera_var_auto_inc_control_off.result +++ b/mysql-test/suite/galera/r/galera_var_auto_inc_control_off.result @@ -58,10 +58,4 @@ f1 node SELECT * FROM t1; f1 node 1 node1 -SET GLOBAL wsrep_auto_increment_control = 1; -SET GLOBAL auto_increment_increment = 2; -SET GLOBAL auto_increment_offset = 1; -SET GLOBAL wsrep_auto_increment_control = 1; -SET GLOBAL auto_increment_increment = 2; -SET GLOBAL auto_increment_offset = 2; DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_var_auto_inc_control_on.result b/mysql-test/suite/galera/r/galera_var_auto_inc_control_on.result index 953ae9f4d81..8859209cc0c 100644 --- a/mysql-test/suite/galera/r/galera_var_auto_inc_control_on.result +++ b/mysql-test/suite/galera/r/galera_var_auto_inc_control_on.result @@ -1,31 +1,17 @@ CREATE TABLE t1 (f1 INTEGER AUTO_INCREMENT PRIMARY KEY, node VARCHAR(10)) ENGINE=InnoDB; -SHOW CREATE TABLE t1; -Table Create Table -t1 CREATE TABLE `t1` ( - `f1` int(11) NOT NULL AUTO_INCREMENT, - `node` varchar(10) DEFAULT NULL, - PRIMARY KEY (`f1`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 SELECT @@auto_increment_increment = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'); @@auto_increment_increment = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size') 1 -SELECT @@auto_increment_offset = 1; -@@auto_increment_offset = 1 +SELECT @@auto_increment_offset = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_index') + 1; +@@auto_increment_offset = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_index') + 1 1 INSERT INTO t1 VALUES (DEFAULT, 'node1');; INSERT INTO t1 VALUES (DEFAULT, 'node2');; -SHOW CREATE TABLE t1; -Table Create Table -t1 CREATE TABLE `t1` ( - `f1` int(11) NOT NULL AUTO_INCREMENT, - `node` varchar(10) DEFAULT NULL, - PRIMARY KEY (`f1`) -) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 SELECT @@auto_increment_increment = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'); @@auto_increment_increment = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size') 1 -SELECT @@auto_increment_offset = 2; -@@auto_increment_offset = 2 +SELECT @@auto_increment_offset = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_index') + 1; +@@auto_increment_offset = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_index') + 1 1 INSERT INTO t1 VALUES (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2');; INSERT INTO t1 VALUES (DEFAULT, 'node1'), (DEFAULT, 'node1'), (DEFAULT, 'node1'), (DEFAULT, 'node1'), (DEFAULT, 'node1'), (DEFAULT, 'node1'), (DEFAULT, 'node1'), (DEFAULT, 'node1'), (DEFAULT, 'node1'), (DEFAULT, 'node1');; diff --git a/mysql-test/suite/galera/r/galera_var_cluster_address.result b/mysql-test/suite/galera/r/galera_var_cluster_address.result new file mode 100644 index 00000000000..0d4795fb259 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_var_cluster_address.result @@ -0,0 +1,60 @@ +SET GLOBAL wsrep_cluster_address = 'foo://'; +SET SESSION wsrep_sync_wait=0; +SELECT * FROM INFORMATION_SCHEMA.GLOBAL_STATUS; +ERROR 08S01: WSREP has not yet prepared node for application use +SHOW STATUS LIKE 'wsrep_ready'; +Variable_name Value +wsrep_ready OFF +SHOW STATUS LIKE 'wsrep_cluster_status'; +Variable_name Value +wsrep_cluster_status non-Primary +SHOW STATUS LIKE 'wsrep_local_state'; +Variable_name Value +wsrep_local_state 0 +SHOW STATUS LIKE 'wsrep_local_state_comment'; +Variable_name Value +wsrep_local_state_comment Initialized +SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 1 +1 +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +VARIABLE_VALUE = 'Primary' +1 +SET GLOBAL wsrep_cluster_address = @@wsrep_cluster_address; +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +VARIABLE_VALUE = 'Primary' +1 +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 2 +1 +SET GLOBAL wsrep_cluster_address = 'gcomm://192.0.2.1'; +SELECT * FROM INFORMATION_SCHEMA.GLOBAL_STATUS; +ERROR 08S01: WSREP has not yet prepared node for application use +SHOW STATUS LIKE 'wsrep_ready'; +Variable_name Value +wsrep_ready OFF +SHOW STATUS LIKE 'wsrep_cluster_status'; +Variable_name Value +wsrep_cluster_status non-Primary +SHOW STATUS LIKE 'wsrep_local_state'; +Variable_name Value +wsrep_local_state 0 +SHOW STATUS LIKE 'wsrep_local_state_comment'; +Variable_name Value +wsrep_local_state_comment Initialized +SET GLOBAL wsrep_cluster_address = @@wsrep_cluster_address; +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +VARIABLE_VALUE = 'Primary' +1 +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 2 +1 +CALL mtr.add_suppression("WSREP: .*Backend not supported: foo.*"); +CALL mtr.add_suppression("WSREP: .*Failed to initialize backend using 'foo.*"); +CALL mtr.add_suppression("WSREP: .*Failed to open channel 'my_wsrep_cluster' at 'foo*"); +CALL mtr.add_suppression("WSREP: gcs connect failed: Socket type not supported"); +CALL mtr.add_suppression("WSREP: failed to open gcomm backend connection: 110: failed to reach primary view: 110 \\(Connection timed out\\)"); +CALL mtr.add_suppression("WSREP: .*Failed to open backend connection: -110 \\(Connection timed out\\)"); +CALL mtr.add_suppression("WSREP: .*Failed to open channel 'my_wsrep_cluster' at 'gcomm://192\\.0\\.2\\.1': -110 \\(Connection timed out\\)"); +CALL mtr.add_suppression("WSREP: gcs connect failed: Connection timed out"); +CALL mtr.add_suppression("WSREP: wsrep::connect\\(\\) failed: 7"); diff --git a/mysql-test/suite/galera/r/galera_var_desync_on.result b/mysql-test/suite/galera/r/galera_var_desync_on.result new file mode 100644 index 00000000000..0b5f34688b7 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_var_desync_on.result @@ -0,0 +1,29 @@ +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +SET GLOBAL wsrep_provider_options = 'gcs.fc_limit=1'; +SET GLOBAL wsrep_desync = TRUE; +FLUSH TABLES WITH READ LOCK; +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (3); +INSERT INTO t1 VALUES (4); +INSERT INTO t1 VALUES (5); +INSERT INTO t1 VALUES (6); +INSERT INTO t1 VALUES (7); +INSERT INTO t1 VALUES (8); +INSERT INTO t1 VALUES (9); +INSERT INTO t1 VALUES (10); +SET SESSION wsrep_sync_wait = 0; +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +SET GLOBAL wsrep_desync = FALSE; +UNLOCK TABLES; +SET SESSION wsrep_sync_wait = 1; +SELECT COUNT(*) = 10 FROM t1; +COUNT(*) = 10 +1 +INSERT INTO t1 VALUES (11); +SELECT COUNT(*) = 11 FROM t1; +COUNT(*) = 11 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_var_innodb_disallow_writes.result b/mysql-test/suite/galera/r/galera_var_innodb_disallow_writes.result new file mode 100644 index 00000000000..912e45a14b1 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_var_innodb_disallow_writes.result @@ -0,0 +1,12 @@ +SET SESSION wsrep_sync_wait = 0; +CREATE TABLE t1 (f1 INTEGER) Engine=InnoDB; +SET GLOBAL innodb_disallow_writes=ON; +INSERT INTO t1 VALUES (1);; +SET GLOBAL innodb_disallow_writes=OFF; +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_var_load_data_splitting.result b/mysql-test/suite/galera/r/galera_var_load_data_splitting.result new file mode 100644 index 00000000000..db145fd1561 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_var_load_data_splitting.result @@ -0,0 +1,9 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +SET GLOBAL wsrep_load_data_splitting = TRUE; +SELECT COUNT(*) = 95000 FROM t1; +COUNT(*) = 95000 +1 +wsrep_last_committed_diff +1 +SET GLOBAL wsrep_load_data_splitting = 1;; +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_var_max_ws_size.result b/mysql-test/suite/galera/r/galera_var_max_ws_size.result new file mode 100644 index 00000000000..81cc26916d3 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_var_max_ws_size.result @@ -0,0 +1,12 @@ +call mtr.add_suppression('WSREP: transaction size limit.*'); +call mtr.add_suppression('WSREP: rbr write fail.*'); +call mtr.add_suppression('WSREP: Maximum writeset size exceeded by.*'); +call mtr.add_suppression('WSREP: transaction size exceeded.*'); +CREATE TABLE t1 (f1 INTEGER AUTO_INCREMENT PRIMARY KEY, f2 VARCHAR(1024)) Engine=InnoDB; +SET GLOBAL wsrep_max_ws_size = 1024; +INSERT INTO t1 VALUES (DEFAULT, REPEAT('X', 1024)); +ERROR HY000: Got error 5 "Input/output error" during COMMIT +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_var_notify_cmd.result b/mysql-test/suite/galera/r/galera_var_notify_cmd.result new file mode 100644 index 00000000000..e9e4605e1bc --- /dev/null +++ b/mysql-test/suite/galera/r/galera_var_notify_cmd.result @@ -0,0 +1,10 @@ +SELECT COUNT(DISTINCT uuid) = 2 FROM mtr_wsrep_notify.membership; +COUNT(DISTINCT uuid) = 2 +1 +SELECT MAX(size) = 2 FROM mtr_wsrep_notify.status; +MAX(size) = 2 +1 +SELECT COUNT(DISTINCT idx) = 2 FROM mtr_wsrep_notify.status; +COUNT(DISTINCT idx) = 2 +1 +DROP SCHEMA mtr_wsrep_notify; diff --git a/mysql-test/suite/galera/r/galera_var_replicate_myisam_on.result b/mysql-test/suite/galera/r/galera_var_replicate_myisam_on.result index abaec56a2ad..73a0576048b 100644 --- a/mysql-test/suite/galera/r/galera_var_replicate_myisam_on.result +++ b/mysql-test/suite/galera/r/galera_var_replicate_myisam_on.result @@ -1,8 +1,78 @@ SET GLOBAL wsrep_replicate_myisam = TRUE; +SET GLOBAL wsrep_replicate_myisam = TRUE; CREATE TABLE t1 (f1 INT PRIMARY KEY) Engine=MyISAM; INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2), (3); +INSERT INTO t1 SELECT 4 FROM DUAL UNION ALL SELECT 5 FROM DUAL; +SELECT COUNT(*) = 5 FROM t1; +COUNT(*) = 5 +1 +DROP TABLE t1; +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 VARCHAR(100)) ENGINE=MyISAM; +INSERT INTO t1 VALUES (1, 'abc'),(2,'abc'), (3, 'xxx'); +REPLACE INTO t1 VALUES (1, 'klm'), (2,'xyz'); +REPLACE INTO t1 SELECT 3, 'yyy' FROM DUAL; +SELECT COUNT(*) = 3 FROM t1; +COUNT(*) = 3 +1 +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 1 AND f2 = 'klm'; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 2 AND f2 = 'xyz'; +COUNT(*) = 1 +1 +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 3 AND f2 = 'yyy'; +COUNT(*) = 1 +1 +UPDATE t1 SET f2 = 'zzz' WHERE f2 = 'yyy'; +SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'zzz'; +COUNT(*) = 1 +1 +DELETE FROM t1 WHERE f2 = 'zzz'; +SELECT COUNT(*) = 0 FROM t1 WHERE f2 = 'zzz'; +COUNT(*) = 0 +1 +TRUNCATE TABLE t1; +SELECT COUNT(*) = 0 FROM t1; +COUNT(*) = 0 +1 +DROP TABLE t1; +CREATE TABLE t1 (f1 INTEGER) ENGINE=MyISAM; +CREATE TABLE t2 (f1 INTEGER) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); +COMMIT; SELECT COUNT(*) = 1 FROM t1; COUNT(*) = 1 1 -SET GLOBAL wsrep_replicate_myisam = 0; +SELECT COUNT(*) = 1 FROM t2; +COUNT(*) = 1 +1 +START TRANSACTION; +INSERT INTO t1 VALUES (2); +INSERT INTO t2 VALUES (2); +ROLLBACK; +Warnings: +Warning 1196 Some non-transactional changed tables couldn't be rolled back +SELECT COUNT(*) = 2 FROM t1; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 1 FROM t2; +COUNT(*) = 1 +1 +DROP TABLE t1; +DROP TABLE t2; +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=MyISAM; +CREATE TABLE t2 (f2 INTEGER PRIMARY KEY) ENGINE=InnoDB; +START TRANSACTION; +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); +INSERT INTO t1 VALUES (1); +ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +COMMIT; DROP TABLE t1; +DROP TABLE t2; +SET GLOBAL wsrep_replicate_myisam = 0; +SET GLOBAL wsrep_replicate_myisam = 0; diff --git a/mysql-test/suite/galera/r/galera_var_slave_threads.result b/mysql-test/suite/galera/r/galera_var_slave_threads.result new file mode 100644 index 00000000000..6b84f03737b --- /dev/null +++ b/mysql-test/suite/galera/r/galera_var_slave_threads.result @@ -0,0 +1,106 @@ +CREATE TABLE t1 (f1 INT PRIMARY KEY) Engine=InnoDB; +CREATE TABLE t2 (f1 INT AUTO_INCREMENT PRIMARY KEY) Engine=InnoDB; +SET GLOBAL wsrep_slave_threads = 0; +Warnings: +Warning 1292 Truncated incorrect wsrep_slave_threads value: '0' +SHOW WARNINGS; +Level Code Message +Warning 1292 Truncated incorrect wsrep_slave_threads value: '0' +SELECT @@wsrep_slave_threads = 1; +@@wsrep_slave_threads = 1 +1 +SET GLOBAL wsrep_slave_threads = 1; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user'; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND STATE LIKE '%wsrep aborter%'; +COUNT(*) = 1 +1 +SET GLOBAL wsrep_slave_threads = 64; +INSERT INTO t1 VALUES (1); +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +SELECT COUNT(*) = @@wsrep_slave_threads + 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user'; +COUNT(*) = @@wsrep_slave_threads + 1 +1 +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND STATE LIKE '%wsrep aborter%'; +COUNT(*) = 1 +1 +SET GLOBAL wsrep_slave_threads = 1; +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +INSERT INTO t2 VALUES (DEFAULT); +SELECT COUNT(*) = 64 FROM t2; +COUNT(*) = 64 +1 +SELECT COUNT(*) = @@wsrep_slave_threads + 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user'; +COUNT(*) = @@wsrep_slave_threads + 1 +1 +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND STATE LIKE '%wsrep aborter%'; +COUNT(*) = 1 +1 +SET GLOBAL wsrep_slave_threads = 1; +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/suite/galera/r/galera_var_wsrep_on_off.result b/mysql-test/suite/galera/r/galera_var_wsrep_on_off.result new file mode 100644 index 00000000000..8b1c4ebf83b --- /dev/null +++ b/mysql-test/suite/galera/r/galera_var_wsrep_on_off.result @@ -0,0 +1,19 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +SET SESSION wsrep_on = FALSE; +INSERT INTO t1 VALUES (2); +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +SET GLOBAL wsrep_on = TRUE; +INSERT INTO t1 VALUES (3); +SELECT COUNT(*) = 2 FROM t1; +COUNT(*) = 2 +1 +SELECT COUNT(*) = 0 FROM t1 WHERE f1 = 2; +COUNT(*) = 0 +1 +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 3; +COUNT(*) = 1 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_wan.result b/mysql-test/suite/galera/r/galera_wan.result new file mode 100644 index 00000000000..6be32b291e5 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_wan.result @@ -0,0 +1,14 @@ +SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 4 +1 +CREATE TABLE t1 (f1 INTEGER); +INSERT INTO t1 VALUES (1); +CALL mtr.add_suppression("There are no nodes in the same segment that will ever be able to become donors, yet there is a suitable donor outside"); +SELECT VARIABLE_VALUE LIKE '%gmcast.segment = 3%' FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME = 'wsrep_provider_options'; +VARIABLE_VALUE LIKE '%gmcast.segment = 3%' +1 +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +DROP TABLE t1; +CALL mtr.add_suppression("There are no nodes in the same segment that will ever be able to become donors, yet there is a suitable donor outside"); diff --git a/mysql-test/suite/galera/r/galera_wsrep_desync_wsrep_on.result b/mysql-test/suite/galera/r/galera_wsrep_desync_wsrep_on.result new file mode 100644 index 00000000000..06fc27ae7ed --- /dev/null +++ b/mysql-test/suite/galera/r/galera_wsrep_desync_wsrep_on.result @@ -0,0 +1,33 @@ +CREATE TABLE ten (f1 INTEGER); +INSERT INTO ten VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +CREATE TABLE t1 (f1 INTEGER) Engine=InnoDB; +INSERT INTO t1 (f1) SELECT 000000 + (10000 * a1.f1) + (1000 * a2.f1) + (100 * a3.f1) + (10 * a4.f1) + a5.f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5; +SET GLOBAL wsrep_desync = TRUE; +SET SESSION wsrep_on = FALSE; +ALTER TABLE t1 ADD PRIMARY KEY (f1); +SET SESSION wsrep_on = TRUE; +SET GLOBAL wsrep_desync = FALSE; +INSERT INTO t1 (f1) SELECT 100000 + (10000 * a1.f1) + (1000 * a2.f1) + (100 * a3.f1) + (10 * a4.f1) + a5.f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5; +SELECT COUNT(*) = 200000 FROM t1; +COUNT(*) = 200000 +1 +SELECT MAX(f1) = 199999 FROM t1; +MAX(f1) = 199999 +1 +SELECT COUNT(*) = 200000 FROM t1; +COUNT(*) = 200000 +1 +SELECT MAX(f1) = 199999 FROM t1; +MAX(f1) = 199999 +1 +SET GLOBAL wsrep_desync = TRUE; +SET SESSION wsrep_on = FALSE; +ALTER TABLE t1 ADD PRIMARY KEY (f1); +SET SESSION wsrep_on = TRUE; +SET GLOBAL wsrep_desync = FALSE; +INSERT INTO t1 (f1) VALUES (1); +ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +INSERT INTO t1 (f1) VALUES (100); +ERROR 23000: Duplicate entry '100' for key 'PRIMARY' +DROP TABLE t1; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/r/galera_wsrep_new_cluster.result b/mysql-test/suite/galera/r/galera_wsrep_new_cluster.result new file mode 100644 index 00000000000..e3f2fa4046f --- /dev/null +++ b/mysql-test/suite/galera/r/galera_wsrep_new_cluster.result @@ -0,0 +1,36 @@ +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +VARIABLE_VALUE = 'Primary' +1 +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_connected'; +VARIABLE_VALUE = 'ON' +1 +SELECT VARIABLE_VALUE = 0 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_index'; +VARIABLE_VALUE = 0 +1 +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +VARIABLE_VALUE = 'ON' +1 +SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state'; +VARIABLE_VALUE = 4 +1 +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +VARIABLE_VALUE = 'Synced' +1 +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +VARIABLE_VALUE = 'Primary' +1 +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_connected'; +VARIABLE_VALUE = 'ON' +1 +SELECT VARIABLE_VALUE = 0 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_index'; +VARIABLE_VALUE = 0 +1 +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +VARIABLE_VALUE = 'ON' +1 +SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state'; +VARIABLE_VALUE = 4 +1 +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +VARIABLE_VALUE = 'Synced' +1 diff --git a/mysql-test/suite/galera/r/galera_wsrep_provider_unset_set.result b/mysql-test/suite/galera/r/galera_wsrep_provider_unset_set.result new file mode 100644 index 00000000000..681e4606b38 --- /dev/null +++ b/mysql-test/suite/galera/r/galera_wsrep_provider_unset_set.result @@ -0,0 +1,13 @@ +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +SET GLOBAL wsrep_provider='none'; +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (3); +INSERT INTO t1 VALUES (4); +SELECT COUNT(*) = 4 FROM t1; +COUNT(*) = 4 +1 +SELECT COUNT(*) = 3 FROM t1; +COUNT(*) = 3 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/galera_zero_length_column.result b/mysql-test/suite/galera/r/galera_zero_length_column.result new file mode 100644 index 00000000000..2e6119bd1ba --- /dev/null +++ b/mysql-test/suite/galera/r/galera_zero_length_column.result @@ -0,0 +1,38 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY , f2 VARCHAR(0)) ENGINE=InnoDB; +CREATE TABLE t2 (f1 VARCHAR(0)) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1, NULL); +INSERT INTO t1 VALUES (2, ''); +INSERT INTO t2 VALUES (NULL); +INSERT INTO t2 VALUES (''); +SELECT COUNT(*) = 2 FROM t1; +COUNT(*) = 2 +1 +SELECT f2 IS NULL FROM t1 WHERE f1 = 1; +f2 IS NULL +1 +SELECT f2 = '' FROM t1 WHERE f1 = 2; +f2 = '' +1 +SELECT COUNT(*) = 2 FROM t2; +COUNT(*) = 2 +1 +SELECT f1 IS NULL FROM t2 WHERE f1 IS NULL; +f1 IS NULL +1 +SELECT f1 = '' FROM t2 WHERE f1 IS NOT NULL; +f1 = '' +1 +UPDATE t1 SET f2 = '' WHERE f1 = 1; +UPDATE t1 SET f2 = NULL WHERE f1 = 2; +UPDATE t2 SET f1 = '' WHERE f1 IS NULL; +SELECT f2 = '' FROM t1 WHERE f1 = 1; +f2 = '' +1 +SELECT f2 IS NULL FROM t1 WHERE f1 = 2; +f2 IS NULL +1 +SELECT COUNT(*) = 2 FROM t2 WHERE f1 = ''; +COUNT(*) = 2 +1 +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/suite/galera/r/lp1276424.result b/mysql-test/suite/galera/r/lp1276424.result new file mode 100644 index 00000000000..5f09ec9ea8b --- /dev/null +++ b/mysql-test/suite/galera/r/lp1276424.result @@ -0,0 +1,11 @@ +CREATE TABLE t1 (f1 INT DEFAULT NULL, UNIQUE KEY i1 (f1)) ENGINE=InnoDB; +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (NULL); +SELECT COUNT(*) = 2 FROM t1; +COUNT(*) = 2 +1 +SELECT f1 IS NULL FROM t1; +f1 IS NULL +1 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/lp1347768.result b/mysql-test/suite/galera/r/lp1347768.result new file mode 100644 index 00000000000..c085059e014 --- /dev/null +++ b/mysql-test/suite/galera/r/lp1347768.result @@ -0,0 +1,17 @@ +CREATE TABLE `r8kmb_redirect_links` ( +`id` int(10) unsigned NOT NULL AUTO_INCREMENT, +`old_url` varchar(255) DEFAULT NULL, +`new_url` varchar(255) NOT NULL, +`referer` varchar(150) NOT NULL, +`comment` varchar(255) NOT NULL, +`published` tinyint(4) NOT NULL, +`created_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', +`modified_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', +PRIMARY KEY (`id`), +UNIQUE KEY `idx_link_old` (`old_url`), +KEY `idx_link_modifed` (`modified_date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +INSERT INTO r8kmb_redirect_links VALUES (550,'http://mysite.com/images/download/ßуñûічýøù_ôþóþòір_þфõÑ.doc','','','',0,'2013-07-15 14:29:42','0000-00-00 00:00:00'); +Warnings: +Warning 1265 Data truncated for column 'old_url' at row 1 +DROP TABLE r8kmb_redirect_links; diff --git a/mysql-test/suite/galera/r/lp959512.result b/mysql-test/suite/galera/r/lp959512.result new file mode 100644 index 00000000000..55adfa360b0 --- /dev/null +++ b/mysql-test/suite/galera/r/lp959512.result @@ -0,0 +1,24 @@ +DROP TABLE IF EXISTS variable; +Warnings: +Note 1051 Unknown table 'test.variable' +DROP TABLE IF EXISTS foo; +Warnings: +Note 1051 Unknown table 'test.foo' +CREATE TABLE variable ( +name varchar(128) NOT NULL DEFAULT '' COMMENT 'The name of the variable.', +value longblob NOT NULL COMMENT 'The value of the variable.', +PRIMARY KEY (name) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Named variable/value pairs created by Drupal core or any...'; +CREATE TABLE foo (a int); +INSERT INTO variable (name, value) VALUES ('menu_expanded', 'a:0:{}'); +START TRANSACTION; +SELECT 1 AS expression FROM variable variable +WHERE ( (name = 'menu_expanded') ) FOR UPDATE; +expression +1 +UPDATE variable SET value='a:0:{}' WHERE ( (name = 'menu_expanded') ); +COMMIT; +INSERT INTO foo VALUES (1); +UPDATE foo SET a = 2 WHERE a = 1; +DROP TABLE foo; +DROP TABLE variable; diff --git a/mysql-test/suite/galera/r/mysql-wsrep#33.result b/mysql-test/suite/galera/r/mysql-wsrep#33.result new file mode 100644 index 00000000000..153d8084bec --- /dev/null +++ b/mysql-test/suite/galera/r/mysql-wsrep#33.result @@ -0,0 +1,103 @@ +Setting SST method to mysqldump ... +GRANT ALL PRIVILEGES ON *.* TO 'sst' IDENTIFIED BY 'sst'; +SET GLOBAL wsrep_sst_auth = 'sst:sst'; +SET GLOBAL wsrep_sst_method = 'mysqldump'; +Performing State Transfer on a server that has been temporarily disconnected +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before'); +COMMIT; +Unloading wsrep provider ... +SET GLOBAL wsrep_provider = 'none'; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +INSERT INTO t1 VALUES ('node1_committed_during'); +COMMIT; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +Loading wsrep provider ... +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +INSERT INTO t1 VALUES ('node2_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +INSERT INTO t1 VALUES ('node1_to_be_committed_after'); +COMMIT; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +INSERT INTO t1 VALUES ('node1_committed_after'); +COMMIT; +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after'); +ROLLBACK; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +COMMIT; +SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 35 FROM t1; +COUNT(*) = 35 +1 +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +COUNT(*) = 0 +1 +DROP TABLE t1; +COMMIT; +SET AUTOCOMMIT=ON; +CALL mtr.add_suppression("Slave SQL: Error 'The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement' on query"); +DROP USER sst; +CALL mtr.add_suppression("Slave SQL: Error 'The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement' on query"); +CALL mtr.add_suppression("InnoDB: Error: Table \"mysql\"\\.\"innodb_index_stats\" not found"); +CALL mtr.add_suppression("InnoDB: New log files created"); +CALL mtr.add_suppression("InnoDB: Creating foreign key constraint system tables"); +CALL mtr.add_suppression("Can't open and lock time zone table"); +CALL mtr.add_suppression("Can't open and lock privilege tables"); +CALL mtr.add_suppression("Info table is not ready to be used"); +CALL mtr.add_suppression("Native table .* has the wrong structure"); +SET GLOBAL general_log = ON; +SET GLOBAL slow_query_log = ON; diff --git a/mysql-test/suite/galera/suite.pm b/mysql-test/suite/galera/suite.pm index 03bb2e85e81..47dd41c7601 100644 --- a/mysql-test/suite/galera/suite.pm +++ b/mysql-test/suite/galera/suite.pm @@ -34,6 +34,20 @@ push @::global_suppressions, qr(WSREP: SQL statement was ineffective), qr(WSREP: Releasing seqno [0-9]* before [0-9]* was assigned.), qr|WSREP: access file\(gvwstate.dat\) failed\(No such file or directory\)|, + qr(WSREP: Quorum: No node with complete state), + qr(WSREP: Initial position was provided by configuration or SST, avoiding override), + qr|WSREP: discarding established \(time wait\) .*|, + qr(WSREP: There are no nodes in the same segment that will ever be able to become donors, yet there is a suitable donor outside. Will use that one.), + qr(WSREP: evs::proto.*), + qr|WSREP: Ignoring possible split-brain \(allowed by configuration\) from view:.*|, + qr(WSREP: no nodes coming from prim view, prim not possible), + qr(WSREP: Member .* requested state transfer from .* but it is impossible to select State Transfer donor: Resource temporarily unavailable), + qr(WSREP: user message in state LEAVING), + qr(WSREP: .* sending install message failed: Transport endpoint is not connected), + qr(WSREP: Maximum writeset size exceeded by .*), + qr(WSREP: transaction size exceeded), + qr(WSREP: RBR event .*), + qr(WSREP: Ignoring error for TO isolated action: .*), ); diff --git a/mysql-test/suite/galera/t/galera_account_management.test b/mysql-test/suite/galera/t/galera_account_management.test new file mode 100644 index 00000000000..357319ad106 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_account_management.test @@ -0,0 +1,101 @@ +# +# Test the account management statements - GRANT, REVOKE, etc. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# CREATE USER +# +--connection node_1 +CREATE USER user1, user2 IDENTIFIED BY 'password'; + +--connection node_2 +SELECT COUNT(*) = 2 FROM mysql.user WHERE user IN ('user1', 'user2'); + +# +# ALTER USER +# + +# LP bug 1376269 +# +#--connection node_1 +#ALTER USER user1 PASSWORD EXPIRE; +#SELECT password_expired = 'Y' FROM mysql.user WHERE user = 'user1'; +# +#--connection node_2 +#SELECT password_expired = 'Y' FROM mysql.user WHERE user = 'user1'; + +# +# RENAME USER +# + +--connection node_1 +RENAME USER user2 TO user3; + +--connection node_2 +SELECT COUNT(*) = 0 FROM mysql.user WHERE user = 'user2'; +SELECT COUNT(*) = 1 FROM mysql.user WHERE user = 'user3'; + +# +# SET PASSWORD +# + +--connection node_1 +SET PASSWORD FOR user3 = PASSWORD('foo'); + +--connection node_1 +SELECT password != '' FROM mysql.user WHERE user = 'user3'; + +# +# DROP USER +# +--connection node_1 +DROP USER user1, user3; + +--connection node_2 +SELECT COUNT(*) = 0 FROM mysql.user WHERE user IN ('user1', 'user2'); + +# +# GRANT +# + +--connection node_1 +GRANT ALL ON *.* TO user4 IDENTIFIED BY 'password'; + +--connection node_2 +SELECT COUNT(*) = 1 FROM mysql.user WHERE user = 'user4'; +SELECT Select_priv = 'Y' FROM mysql.user WHERE user = 'user4'; + +# +# GRANT PROXY ON +# +--connection node_1 +CREATE USER user5; +GRANT PROXY ON user4 TO user5; + +--connection node_2 +SELECT COUNT(*) = 1 FROM mysql.proxies_priv WHERE user = 'user5'; + +# +# REVOKE +# + +--connection node_1 +REVOKE ALL PRIVILEGES ON *.* FROM user4; + +--connection node_2 +SELECT Select_priv = 'N' FROM mysql.user WHERE user = 'user4'; + +# +# REVOKE PROXY +# + +--connection node_1 +REVOKE PROXY ON user4 FROM user5; + +--connection node_2 +SELECT COUNT(*) = 0 FROM mysql.proxies_priv WHERE user = 'user5'; + +DROP USER user4, user5; diff --git a/mysql-test/suite/galera/t/galera_alter_engine_innodb.test b/mysql-test/suite/galera/t/galera_alter_engine_innodb.test new file mode 100644 index 00000000000..bc914a38776 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_alter_engine_innodb.test @@ -0,0 +1,17 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# Test ALTER ENGINE from InnoDB to InnoDB +# + +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 ENGINE=InnoDB; + +--connection node_2 +SELECT ENGINE = 'InnoDB' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +SELECT COUNT(*) = 1 FROM t1; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_alter_engine_myisam.test b/mysql-test/suite/galera/t/galera_alter_engine_myisam.test new file mode 100644 index 00000000000..6d41d276a17 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_alter_engine_myisam.test @@ -0,0 +1,25 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# Test ALTER ENGINE from MyISAM to InnoDB under wsrep_replicate_myisam +# + +--let $wsrep_replicate_myisam_orig = `SELECT @@wsrep_replicate_myisam` +SET GLOBAL wsrep_replicate_myisam = TRUE; + +CREATE TABLE t1 (f1 INTEGER) ENGINE=MyISAM; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 ENGINE=InnoDB; + +--connection node_2 +SELECT ENGINE = 'InnoDB' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +SELECT COUNT(*) = 1 FROM t1; + +--connection node_1 +--disable_query_log +--eval SET GLOBAL wsrep_replicate_myisam = $wsrep_replicate_myisam_orig +--enable_query_log + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_alter_table_force.test b/mysql-test/suite/galera/t/galera_alter_table_force.test new file mode 100644 index 00000000000..1fcc9d4bda5 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_alter_table_force.test @@ -0,0 +1,17 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# Test ALTER TABLE FORCE, a 5.6.3 feature that simply rebuilds the table +# + +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +ALTER TABLE t1 FORCE; + +--connection node_2 +SELECT ENGINE = 'InnoDB' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +SELECT COUNT(*) = 1 FROM t1; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_as_master.cnf b/mysql-test/suite/galera/t/galera_as_master.cnf new file mode 100644 index 00000000000..52fd3093931 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_as_master.cnf @@ -0,0 +1 @@ +!include ../galera_2nodes_as_master.cnf diff --git a/mysql-test/suite/galera/t/galera_as_master.test b/mysql-test/suite/galera/t/galera_as_master.test new file mode 100644 index 00000000000..c42dbbf9683 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_as_master.test @@ -0,0 +1,38 @@ +# +# Test Galera as a master to a MySQL slave +# +# The galera/galera_2node_master.cnf describes the setup of the nodes +# + +--source include/have_innodb.inc +--source include/galera_cluster.inc + +--connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3 +--disable_query_log +--eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_USER='root', MASTER_PORT=$NODE_MYPORT_1; +--enable_query_log +START SLAVE; + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES(1); + +--connection node_2 +INSERT INTO t1 VALUES(2); + +--connection node_3 +--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +--source include/wait_condition.inc + +--let $wait_condition = SELECT COUNT(*) = 2 FROM t1; +--source include/wait_condition.inc + +--connection node_1 +DROP TABLE t1; + +--connection node_3 +--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +--source include/wait_condition.inc + +STOP SLAVE; +RESET SLAVE ALL; diff --git a/mysql-test/suite/galera/t/galera_as_master_gtid.cnf b/mysql-test/suite/galera/t/galera_as_master_gtid.cnf new file mode 100644 index 00000000000..19517556331 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_as_master_gtid.cnf @@ -0,0 +1,8 @@ +!include ../galera_2nodes_as_master.cnf + +[mysqld] +gtid-mode=ON +log-bin=mysqld-bin +log-slave-updates +enforce-gtid-consistency +binlog-format=ROW diff --git a/mysql-test/suite/galera/t/galera_as_master_gtid.test b/mysql-test/suite/galera/t/galera_as_master_gtid.test new file mode 100644 index 00000000000..9db104b7cab --- /dev/null +++ b/mysql-test/suite/galera/t/galera_as_master_gtid.test @@ -0,0 +1,70 @@ +# +# Test Galera as a master to a MySQL slave with GTID +# +# The galera/galera_2node_master.cnf describes the setup of the nodes +# +# We check that all transactions originating from within Galera use a UUID that is +# different from the server_uuid of either node +# +# + +--source include/have_innodb.inc +--source include/have_log_bin.inc +--source include/galera_cluster.inc + +--connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3 +--disable_query_log +--eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=$NODE_MYPORT_1; +--enable_query_log +START SLAVE USER='root'; + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES(1); + +--let $effective_uuid = `SELECT LEFT(@@global.gtid_executed, 36)` +--disable_query_log +--eval SELECT '$effective_uuid' != @@global.server_uuid AS uuids_do_not_match; +--enable_query_log + +--replace_result $effective_uuid <effective_uuid> +--replace_regex /table_id: [0-9]+/table_id: #/ /xid=[0-9]+/xid=#/ +SHOW BINLOG EVENTS IN 'mysqld-bin.000002' FROM 120; + +--connection node_2 +INSERT INTO t1 VALUES(2); + +--disable_query_log +--eval SELECT '$effective_uuid' != @@global.server_uuid AS uuids_do_not_match; +--eval SELECT '$effective_uuid' = LEFT(@@global.gtid_executed, 36) AS uuids_match; +--enable_query_log + +--replace_result $effective_uuid <effective_uuid> +--replace_regex /table_id: [0-9]+/table_id: #/ /xid=[0-9]+/xid=#/ +SHOW BINLOG EVENTS IN 'mysqld-bin.000003' FROM 120; + +--connection node_3 +--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +--source include/wait_condition.inc + +--let $wait_condition = SELECT COUNT(*) = 2 FROM t1; +--source include/wait_condition.inc + +--disable_query_log +--eval SELECT '$effective_uuid' != @@global.server_uuid AS uuids_do_not_match; +--eval SELECT '$effective_uuid' = LEFT(@@global.gtid_executed, 36) AS uuids_match; +--enable_query_log + +--replace_result $effective_uuid <effective_uuid> +--replace_regex /table_id: [0-9]+/table_id: #/ /xid=[0-9]+/xid=#/ +SHOW BINLOG EVENTS IN 'mysqld-bin.000001' FROM 120; + +--connection node_1 +DROP TABLE t1; + +--connection node_3 +--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +--source include/wait_condition.inc + +STOP SLAVE; +RESET SLAVE ALL; diff --git a/mysql-test/suite/galera/t/galera_as_master_gtid_change_master.cnf b/mysql-test/suite/galera/t/galera_as_master_gtid_change_master.cnf new file mode 100644 index 00000000000..19517556331 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_as_master_gtid_change_master.cnf @@ -0,0 +1,8 @@ +!include ../galera_2nodes_as_master.cnf + +[mysqld] +gtid-mode=ON +log-bin=mysqld-bin +log-slave-updates +enforce-gtid-consistency +binlog-format=ROW diff --git a/mysql-test/suite/galera/t/galera_as_master_gtid_change_master.test b/mysql-test/suite/galera/t/galera_as_master_gtid_change_master.test new file mode 100644 index 00000000000..23606d7ac4c --- /dev/null +++ b/mysql-test/suite/galera/t/galera_as_master_gtid_change_master.test @@ -0,0 +1,54 @@ +# +# Test that a MySQL slave can use CHANGE MASTER MASTER_AUTO_POSITION to begin replicating +# from another Galera node +# +# The galera/galera_2node_master.cnf describes the setup of the nodes +# +# + +--source include/have_innodb.inc +--source include/have_log_bin.inc +--source include/galera_cluster.inc + +--connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3 +--disable_query_log +--eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=$NODE_MYPORT_1; +--enable_query_log +START SLAVE USER='root'; + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES(1); + +--connection node_2 +INSERT INTO t1 VALUES(2); + +--connection node_3 +STOP SLAVE; +--disable_query_log +--eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=$NODE_MYPORT_2, MASTER_AUTO_POSITION=1; +--enable_query_log +START SLAVE USER='root'; + +--connection node_1 +INSERT INTO t1 VALUES(3); + +--connection node_2 +INSERT INTO t1 VALUES(4); + +--connection node_3 +--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +--source include/wait_condition.inc + +--let $wait_condition = SELECT COUNT(*) = 4 FROM t1; +--source include/wait_condition.inc + +--connection node_1 +DROP TABLE t1; + +--connection node_3 +--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +--source include/wait_condition.inc + +STOP SLAVE; +RESET SLAVE ALL; diff --git a/mysql-test/suite/galera/t/galera_as_slave.cnf b/mysql-test/suite/galera/t/galera_as_slave.cnf new file mode 100644 index 00000000000..9449ec9cf40 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_as_slave.cnf @@ -0,0 +1 @@ +!include ../galera_2nodes_as_slave.cnf diff --git a/mysql-test/suite/galera/t/galera_as_slave.test b/mysql-test/suite/galera/t/galera_as_slave.test new file mode 100644 index 00000000000..79b9e5071a3 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_as_slave.test @@ -0,0 +1,47 @@ +# +# Test Galera as a slave to a MySQL master +# +# The galera/galera_2node_slave.cnf describes the setup of the nodes +# + +--source include/have_innodb.inc + +# As node #1 is not a Galera node, we connect to node #2 in order to run include/galera_cluster.inc +--connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2 +--source include/galera_cluster.inc + +--connection node_2 +--disable_query_log +--eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_USER='root', MASTER_PORT=$NODE_MYPORT_1; +--enable_query_log +START SLAVE; + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES(1); + +--connection node_2 +--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +--source include/wait_condition.inc + +--let $wait_condition = SELECT COUNT(*) = 1 FROM t1; +--source include/wait_condition.inc + +INSERT INTO t1 VALUES (2); + +--connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3 +SELECT COUNT(*) = 2 FROM t1; +INSERT INTO t1 VALUES (3); + +--connection node_2 +SELECT COUNT(*) = 3 FROM t1; + +--connection node_1 +DROP TABLE t1; + +--connection node_2 +--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +--source include/wait_condition.inc + +STOP SLAVE; +RESET SLAVE ALL; diff --git a/mysql-test/suite/galera/t/galera_as_slave_gtid.cnf b/mysql-test/suite/galera/t/galera_as_slave_gtid.cnf new file mode 100644 index 00000000000..01d2eb12630 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_as_slave_gtid.cnf @@ -0,0 +1,6 @@ +!include ../galera_2nodes_as_slave.cnf + +[mysqld] +log-bin=mysqld-bin +log-slave-updates +binlog-format=ROW diff --git a/mysql-test/suite/galera/t/galera_as_slave_gtid.test b/mysql-test/suite/galera/t/galera_as_slave_gtid.test new file mode 100644 index 00000000000..c2331a2ae05 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_as_slave_gtid.test @@ -0,0 +1,67 @@ +# +# Test Galera as a slave to a MariaDB master using GTIDs +# +# suite/galera/galera_2nodes_as_slave.cnf describes the setup of the nodes +# suite/galera/t/galera_as_slave_gtid.cnf has the GTID options +# +# In addition to performing DDL and DML, we check that the gtid of the master is preserved inside the cluster +# + +--source include/have_innodb.inc + +# As node #1 is not a Galera node, we connect to node #2 in order to run include/galera_cluster.inc +--connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2 +--source include/galera_cluster.inc + +--connection node_2 +--disable_query_log +--eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_USER='root', MASTER_PORT=$NODE_MYPORT_1; +--enable_query_log +START SLAVE; + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES(1); + +SELECT LENGTH(@@global.gtid_binlog_state) > 1; +--let $gtid_binlog_state_node1 = `SELECT @@global.gtid_binlog_state;` + +--connection node_2 +--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +--source include/wait_condition.inc + +--let $wait_condition = SELECT COUNT(*) = 1 FROM t1; +--source include/wait_condition.inc + +--disable_query_log +--eval SELECT '$gtid_binlog_state_node1' = @@global.gtid_binlog_state AS gtid_binlog_state_equal; +--enable_query_log + +--connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3 +SELECT COUNT(*) = 1 FROM t1; + +--disable_query_log +--eval SELECT '$gtid_binlog_state_node1' = @@global.gtid_binlog_state AS gtid_binlog_state_equal; +--enable_query_log + +--connection node_1 +DROP TABLE t1; + +# +# Unfortunately without the sleep below the following statement fails with "query returned no rows", which +# is difficult to understand given that it is an aggregate query. A "query execution was interrupted" +# warning is also reported by MTR, which is also weird. +# + +--sleep 1 + +--connection node_3 +--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +--source include/wait_condition.inc + +--connection node_2 +--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +--source include/wait_condition.inc + +STOP SLAVE; +RESET SLAVE ALL; diff --git a/mysql-test/suite/galera/t/galera_bf_abort.test b/mysql-test/suite/galera/t/galera_bf_abort.test new file mode 100644 index 00000000000..69825ea4919 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_bf_abort.test @@ -0,0 +1,29 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# Test a local transaction being aborted by a slave one +# + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; + +--connection node_2 +--let $wsrep_local_bf_aborts_before = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'` +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES (1); + +--connection node_1 +INSERT INTO t1 VALUES (1); + +--connection node_2 +--error ER_LOCK_DEADLOCK +INSERT INTO t1 VALUES (2); + +--let $wsrep_local_bf_aborts_after = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'` + +--disable_query_log +--eval SELECT $wsrep_local_bf_aborts_after - $wsrep_local_bf_aborts_before = 1 AS wsrep_local_aborts_increment; +--enable_query_log + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_bf_abort_for_update.test b/mysql-test/suite/galera/t/galera_bf_abort_for_update.test new file mode 100644 index 00000000000..24c29778e5d --- /dev/null +++ b/mysql-test/suite/galera/t/galera_bf_abort_for_update.test @@ -0,0 +1,29 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# Test a local transaction being aborted by a slave one while it is running a SELECT FOR UPDATE +# + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; + +--connection node_2 +--let $wsrep_local_bf_aborts_before = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'` +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES (1); + +--connection node_1 +INSERT INTO t1 VALUES (1); + +--connection node_2 +--error ER_LOCK_DEADLOCK +SELECT * FROM t1 FOR UPDATE; + +--let $wsrep_local_bf_aborts_after = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'` + +--disable_query_log +--eval SELECT $wsrep_local_bf_aborts_after - $wsrep_local_bf_aborts_before = 1 AS wsrep_local_aborts_increment; +--enable_query_log + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_bf_abort_ftwrl.test b/mysql-test/suite/galera/t/galera_bf_abort_ftwrl.test new file mode 100644 index 00000000000..44398e717d1 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_bf_abort_ftwrl.test @@ -0,0 +1,30 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# A local transaction running FLUSH TABLES WITH READ LOCK will not be aborted by a slave transaction +# + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; + +--connection node_2 +SET AUTOCOMMIT=OFF; +--let $wsrep_local_bf_aborts_before = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'` +--send FLUSH TABLES WITH READ LOCK; + +--connection node_1 +INSERT INTO t1 VALUES (1); + +--connection node_2 +--reap + +UNLOCK TABLES; + +--let $wsrep_local_bf_aborts_after = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'` + +# No aborts should be registered on the counter +--disable_query_log +--eval SELECT $wsrep_local_bf_aborts_after - $wsrep_local_bf_aborts_before = 0 AS wsrep_local_aborts_increment; +--enable_query_log + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_bf_abort_get_lock.test b/mysql-test/suite/galera/t/galera_bf_abort_get_lock.test new file mode 100644 index 00000000000..72fc1c5b583 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_bf_abort_get_lock.test @@ -0,0 +1,36 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# Test a local transaction being aborted by a slave one while it is running a GET_LOCK() +# + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; + +--let $galera_connection_name = node_2a +--let $galera_server_number = 2 +--source include/galera_connect.inc +--connection node_2a +SELECT GET_LOCK("foo", 1000); + +--connection node_2 +SET AUTOCOMMIT=OFF; +--let $wsrep_local_bf_aborts_before = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'` +INSERT INTO t1 VALUES (1); +--send SELECT GET_LOCK("foo", 1000); + +--connection node_1 +INSERT INTO t1 VALUES (1); + +--connection node_2 +--error ER_LOCK_DEADLOCK +--reap + +--let $wsrep_local_bf_aborts_after = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'` + +# Check that wsrep_local_bf_aborts has been incremented by exactly 1 +--disable_query_log +--eval SELECT $wsrep_local_bf_aborts_after - $wsrep_local_bf_aborts_before = 1 AS wsrep_local_aborts_increment; +--enable_query_log + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_bf_abort_lock_table.test b/mysql-test/suite/galera/t/galera_bf_abort_lock_table.test new file mode 100644 index 00000000000..788427103a5 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_bf_abort_lock_table.test @@ -0,0 +1,33 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# Test that a local LOCK TABLE will be broken by an incoming remote transaction against that table +# + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; + +--connection node_2 +SET AUTOCOMMIT=OFF; +--let $wsrep_local_bf_aborts_before = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'` +LOCK TABLE t1 WRITE; + +# Issue a concurrent INSERT against the lock table that will block +--connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2 +--send INSERT INTO t1 VALUES (1); + +--connection node_1 +INSERT INTO t1 VALUES (2); + +# The concurent insert is allowed to complete because the LOCK TABLE is now broken +--connection node_2a +--error 0 +--reap + +--let $wsrep_local_bf_aborts_after = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'` + +--disable_query_log +--eval SELECT $wsrep_local_bf_aborts_after - $wsrep_local_bf_aborts_before = 1 AS wsrep_local_aborts_increment; +--enable_query_log + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_bf_abort_sleep.test b/mysql-test/suite/galera/t/galera_bf_abort_sleep.test new file mode 100644 index 00000000000..8d135dc7d42 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_bf_abort_sleep.test @@ -0,0 +1,30 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# Test a local transaction being aborted by a slave one while it is running a SLEEP() +# + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; + +--connection node_2 +SET AUTOCOMMIT=OFF; +--let $wsrep_local_bf_aborts_before = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'` +INSERT INTO t1 VALUES (1); +--send SELECT SLEEP(1000); + +--connection node_1 +INSERT INTO t1 VALUES (1); + +--connection node_2 +--error ER_LOCK_DEADLOCK +--reap + +--let $wsrep_local_bf_aborts_after = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'` + +# Check that wsrep_local_bf_aborts has been incremented by exactly 1 +--disable_query_log +--eval SELECT $wsrep_local_bf_aborts_after - $wsrep_local_bf_aborts_before = 1 AS wsrep_local_aborts_increment; +--enable_query_log + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_binlog_cache_size.test b/mysql-test/suite/galera/t/galera_binlog_cache_size.test new file mode 100644 index 00000000000..6ce9072d412 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_binlog_cache_size.test @@ -0,0 +1,35 @@ +# +# Test that Galera, like the stock MySQL, returns an error on transactions +# larger than max_binlog_cache_size +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE t1 (f1 VARCHAR(767)) ENGINE=InnoDB; +CREATE TABLE ten (f1 INTEGER); +INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); + +--let $max_binlog_cache_size_orig = `SELECT @@max_binlog_cache_size` +--let $binlog_cache_size_orig = `SELECT @@binlog_cache_size` + +SET GLOBAL binlog_cache_size=4096; +SET GLOBAL max_binlog_cache_size=4096; + +--let $galera_connection_name = node_1a +--let $galera_server_number = 1 +--source include/galera_connect.inc +--connection node_1a +SET AUTOCOMMIT=ON; +START TRANSACTION; +INSERT INTO t1 SELECT REPEAT('a', 767) FROM ten; +--error ER_TRANS_CACHE_FULL +INSERT INTO t1 SELECT REPEAT('a', 767) FROM ten; + +--disable_query_log +--eval SET GLOBAL max_binlog_cache_size = $max_binlog_cache_size_orig +--eval SET GLOBAL binlog_cache_size = $binlog_cache_size_orig +--enable_query_log + +DROP TABLE t1; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/t/galera_binlog_checksum-master.opt b/mysql-test/suite/galera/t/galera_binlog_checksum-master.opt new file mode 100644 index 00000000000..c8e53f07fc2 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_binlog_checksum-master.opt @@ -0,0 +1 @@ +--binlog-checksum=CRC32 --master-verify-checksum=1 --slave-sql-verify-checksum=1 diff --git a/mysql-test/suite/galera/t/galera_binlog_checksum.test b/mysql-test/suite/galera/t/galera_binlog_checksum.test new file mode 100644 index 00000000000..48669305242 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_binlog_checksum.test @@ -0,0 +1,22 @@ +# +# Test that Galera works with binary log checksums. +# The galera_binlog_checksum-master.opt file is used to enable checksums. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE t1 (f1 INT PRIMARY KEY) ENGINE=InnoDB; + +INSERT INTO t1 VALUES (1); + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1; + +--connection node_1 +UPDATE t1 SET f1 = 2 WHERE f1 = 1; + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 2; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_binlog_event_max_size_max-master.opt b/mysql-test/suite/galera/t/galera_binlog_event_max_size_max-master.opt new file mode 100644 index 00000000000..a36d21315a6 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_binlog_event_max_size_max-master.opt @@ -0,0 +1 @@ +--binlog-row-event-max-size=4294967295 diff --git a/mysql-test/suite/galera/t/galera_binlog_event_max_size_max.test b/mysql-test/suite/galera/t/galera_binlog_event_max_size_max.test new file mode 100644 index 00000000000..600432ce0ca --- /dev/null +++ b/mysql-test/suite/galera/t/galera_binlog_event_max_size_max.test @@ -0,0 +1,20 @@ +# +# Test that replication works event with the maximum value of binlog-row-event-max-size - 4294967295 (on 32-bit platforms) +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE ten (f1 INTEGER); +INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); + +CREATE TABLE t1 (f1 VARCHAR(1000)); + +# Insert 10K records, 1K bytes each +INSERT INTO t1 SELECT REPEAT('x', 1000) FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4; + +--connection node_2 +SELECT COUNT(*) = 10000 FROM t1; + +DROP TABLE t1; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/t/galera_binlog_event_max_size_min-master.opt b/mysql-test/suite/galera/t/galera_binlog_event_max_size_min-master.opt new file mode 100644 index 00000000000..22174756652 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_binlog_event_max_size_min-master.opt @@ -0,0 +1 @@ +--binlog-row-event-max-size=256 diff --git a/mysql-test/suite/galera/t/galera_binlog_event_max_size_min.test b/mysql-test/suite/galera/t/galera_binlog_event_max_size_min.test new file mode 100644 index 00000000000..00b55339770 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_binlog_event_max_size_min.test @@ -0,0 +1,15 @@ +# +# Test that replication works event with the minimum value of binlog-row-event-max-size - 256 +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE t1 (f1 VARCHAR(1000)); +INSERT INTO t1 VALUES (REPEAT('x', 1000)); + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = REPEAT('x', 1000); + +DROP TABLE t1; + diff --git a/mysql-test/suite/galera/t/galera_binlog_row_image.test b/mysql-test/suite/galera/t/galera_binlog_row_image.test new file mode 100644 index 00000000000..70262ec44ca --- /dev/null +++ b/mysql-test/suite/galera/t/galera_binlog_row_image.test @@ -0,0 +1,100 @@ +# +# Test the operation on the different values of the binlog_row_image option +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# binlog_row_image = minimal +# + +--connection node_1 +SET SESSION binlog_row_image=minimal; + +# Create a table with a PK, with a unique key and with no key +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +CREATE TABLE t2 (f1 INTEGER NOT NULL UNIQUE) ENGINE=InnoDB; +CREATE TABLE t3 (f1 VARCHAR(1)) ENGINE=InnoDB; + +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); +INSERT INTO t3 VALUES (1); + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 1; +SELECT COUNT(*) = 1 FROM t2 WHERE f1 = 1; +SELECT COUNT(*) = 1 FROM t3 WHERE f1 = 1; + +--connection node_1 +UPDATE t1 SET f1 = 2 WHERE f1 = 1; +UPDATE t2 SET f1 = 2 WHERE f1 = 1; +UPDATE t3 SET f1 = 2 WHERE f1 = 1; + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 2; +SELECT COUNT(*) = 1 FROM t2 WHERE f1 = 2; +SELECT COUNT(*) = 1 FROM t3 WHERE f1 = 2; + +--connection node_1 +DELETE FROM t1; +DELETE FROM t2; +DELETE FROM t3; + +--connection node_2 +SELECT COUNT(*) = 0 FROM t1; +SELECT COUNT(*) = 0 FROM t2; +SELECT COUNT(*) = 0 FROM t3; + +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; + +# +# binlog_row_image = noblob +# + +# A table with only a blob, and a table with a PK and a blob + +--connection node_1 +SET SESSION binlog_row_image=noblob; + +CREATE TABLE t1 (f1 BLOB, f2 INTEGER PRIMARY KEY) ENGINE=InnoDB; +CREATE TABLE t2 (f1 BLOB) ENGINE=InnoDB; + +INSERT INTO t1 VALUES ('abc', 1); +INSERT INTO t2 VALUES ('abc'); + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 'abc'; +SELECT COUNT(*) = 1 FROM t2 WHERE f1 = 'abc'; + +--connection node_1 +UPDATE t1 SET f1 = 'xyz'; +UPDATE t2 SET f1 = 'xyz'; + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 'xyz'; +SELECT COUNT(*) = 1 FROM t2 WHERE f1 = 'xyz'; + +--connection node_1 +UPDATE t1 SET f2 = 2 WHERE f2 = 1; + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 2; +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 'xyz'; + +--connection node_1 +DELETE FROM t1; +DELETE FROM t2; + +--connection node_2 +SELECT COUNT(*) = 0 FROM t1; +SELECT COUNT(*) = 0 FROM t2; + +DROP TABLE t1; +DROP TABLE t2; + + + + diff --git a/mysql-test/suite/galera/t/galera_binlog_rows_query_log_events.test b/mysql-test/suite/galera/t/galera_binlog_rows_query_log_events.test new file mode 100644 index 00000000000..95bc85c4cab --- /dev/null +++ b/mysql-test/suite/galera/t/galera_binlog_rows_query_log_events.test @@ -0,0 +1,28 @@ +# +# Test that Galera continues to run even with binlog-rows-query-log-events=TRUE +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--let $binlog_rows_query_log_events_orig = `SELECT @@binlog_rows_query_log_events` + +SET GLOBAL binlog_rows_query_log_events=TRUE; + +CREATE TABLE t1 (f1 INT PRIMARY KEY) ENGINE=InnoDB; + +INSERT INTO t1 VALUES (1); + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1; + +--connection node_1 +UPDATE t1 SET f1 = 2 WHERE f1 = 1; + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 2; + +--connection node_1 +--eval SET GLOBAL binlog_rows_query_log_events = $binlog_rows_query_log_events_orig + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_create_function.test b/mysql-test/suite/galera/t/galera_create_function.test new file mode 100644 index 00000000000..fd4903a7b83 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_create_function.test @@ -0,0 +1,57 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# Test CREATE FUNCTION +# + +--connection node_1 +CREATE USER 'user1'; + +CREATE +DEFINER = 'user1' +FUNCTION f1 (param INTEGER) +RETURNS VARCHAR(200) +COMMENT 'f1_comment' +LANGUAGE SQL +NOT DETERMINISTIC +MODIFIES SQL DATA +SQL SECURITY DEFINER +RETURN 'abc'; +GRANT EXECUTE ON FUNCTION f1 TO user1; + +CREATE +DEFINER = CURRENT_USER +FUNCTION f2 (param VARCHAR(100)) +RETURNS INTEGER +DETERMINISTIC +NO SQL +SQL SECURITY INVOKER +RETURN 123; + +--connection node_1 +SHOW CREATE FUNCTION f1; + +--connection node_2 +SHOW CREATE FUNCTION f1; + +--connection node_1 +SHOW CREATE FUNCTION f2; + +--connection node_2 +SHOW CREATE FUNCTION f2; + +SELECT f1(1) = 'abc'; +SELECT f2('abc') = 123; + +--connection node_1 +DROP FUNCTION f1; +DROP FUNCTION f2; + +DROP USER 'user1'; + + + + + + diff --git a/mysql-test/suite/galera/t/galera_create_procedure.test b/mysql-test/suite/galera/t/galera_create_procedure.test new file mode 100644 index 00000000000..30bc85fcea0 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_create_procedure.test @@ -0,0 +1,52 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# Test CREATE PROCEDURE +# + +--connection node_1 +CREATE USER 'user1'; +CREATE TABLE t1 (f1 INTEGER); + +CREATE +DEFINER = 'user1' +PROCEDURE p1 (IN param1 INTEGER, OUT param2 INTEGER, INOUT param3 INTEGER) +COMMENT 'p1_comment' +LANGUAGE SQL +NOT DETERMINISTIC +MODIFIES SQL DATA +SQL SECURITY DEFINER +INSERT INTO t1 VALUES (1); +GRANT EXECUTE ON PROCEDURE p1 TO user1; + +CREATE +DEFINER = CURRENT_USER +PROCEDURE p2 (param VARCHAR(100)) +DETERMINISTIC +NO SQL +SQL SECURITY INVOKER BEGIN END ; + +--connection node_1 +SHOW CREATE PROCEDURE p1; + +--connection node_2 +# Perform causal wait +SELECT 1 FROM DUAL; +SHOW CREATE PROCEDURE p1; + +--connection node_1 +SHOW CREATE PROCEDURE p2; + +--connection node_2 +SHOW CREATE PROCEDURE p2; + +CALL p1(@a, @b, @c); +CALL p2('abc'); + +--connection node_1 +DROP PROCEDURE p1; +DROP PROCEDURE p2; + +DROP USER 'user1'; +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_create_table_like.test b/mysql-test/suite/galera/t/galera_create_table_like.test new file mode 100644 index 00000000000..0e0e8b0ffcf --- /dev/null +++ b/mysql-test/suite/galera/t/galera_create_table_like.test @@ -0,0 +1,50 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# Test the various forms of CREATE TABLE LIKE ... , since Galera has special handling +# for them, especially when one of the tables is a temporary one. +# + +CREATE SCHEMA schema1; +CREATE SCHEMA schema2; + +USE schema1; +CREATE TABLE real_table (f1 INTEGER) ENGINE=InnoDB; +CREATE TEMPORARY TABLE temp_table (f1 INTEGER) ENGINE=InnoDB; +CREATE TABLE myisam_table (f1 INTEGER) ENGINE=MyISAM; + +USE schema2; +CREATE TABLE real_table1 LIKE schema1.real_table; +CREATE TABLE real_table2 LIKE schema1.temp_table; +CREATE TABLE real_table3 LIKE schema1.myisam_table; + +CREATE TEMPORARY TABLE temp_table1 LIKE schema1.real_table; +CREATE TEMPORARY TABLE temp_table2 LIKE schema1.temp_table; +CREATE TEMPORARY TABLE temp_table3 LIKE schema1.myisam_table; + +--connection node_2 +# Only the non-temporary tables are replicated, regardless of the type of table they are based on + +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'real_table' AND TABLE_SCHEMA = 'schema1'; +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'myisam_table' AND TABLE_SCHEMA = 'schema1'; +SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'temp_table' AND TABLE_SCHEMA = 'schema1'; + +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'real_table1' AND TABLE_SCHEMA = 'schema2'; +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'real_table2' AND TABLE_SCHEMA = 'schema2'; +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'real_table3' AND TABLE_SCHEMA = 'schema2'; + +SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'temp_table1' AND TABLE_SCHEMA = 'schema2'; +SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'temp_table2' AND TABLE_SCHEMA = 'schema2'; +SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'temp_table3' AND TABLE_SCHEMA = 'schema2'; + +--connection node_1 +DROP TABLE schema1.real_table; +DROP TABLE schema1.myisam_table; + +DROP TABLE schema2.real_table1; +DROP TABLE schema2.real_table2; +DROP TABLE schema2.real_table3; + +DROP SCHEMA schema1; +DROP SCHEMA schema2; diff --git a/mysql-test/suite/galera/t/galera_defaults.test b/mysql-test/suite/galera/t/galera_defaults.test new file mode 100644 index 00000000000..995e0b4c451 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_defaults.test @@ -0,0 +1,69 @@ +# +# The purpose of this test is to preserve the current state of the following: +# * SHOW VARIABLES LIKE 'wsrep%' +# * wsrep_provider_options +# * The names of the Galera status variables +# +# This way, if there is any change, inadvertent or not, the test will fail and the +# developer and QA will be alerted. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# Make sure that the test is operating on the right version of galera library. +--disable_query_log +--let $galera_version=3.9 +source ../wsrep/include/check_galera_version.inc; +--enable_query_log + +# Global Variables + +SELECT COUNT(*) = 39 FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME LIKE 'wsrep_%'; + +SELECT VARIABLE_NAME, VARIABLE_VALUE +FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES +WHERE VARIABLE_NAME LIKE 'wsrep_%' +AND VARIABLE_NAME NOT IN ( + 'WSREP_PROVIDER_OPTIONS', + 'WSREP_SST_RECEIVE_ADDRESS', + 'WSREP_NODE_ADDRESS', + 'WSREP_NODE_NAME', + 'WSREP_PROVIDER', + 'WSREP_DATA_HOME_DIR', + 'WSREP_NODE_INCOMING_ADDRESS', + 'WSREP_START_POSITION' +) +ORDER BY VARIABLE_NAME; + +# wsrep_provider_options +# +# We replace the ones that vary from run to run with placeholders + +--let _WSREP_PROVIDER_OPTIONS = `SELECT @@wsrep_provider_options` +--perl + use strict; + my $wsrep_provider_options = $ENV{'_WSREP_PROVIDER_OPTIONS'}; + $wsrep_provider_options =~ s/base_dir = .*?;/<BASE_DIR>;/sgio; + $wsrep_provider_options =~ s/base_host = .*?;/<BASE_HOST>;/sgio; + $wsrep_provider_options =~ s/base_port = .*?;/<BASE_PORT>;/sgio; + $wsrep_provider_options =~ s/gcache\.dir = .*?;/<GCACHE_DIR>;/sgio; + $wsrep_provider_options =~ s/gcache\.name = .*?;/<GCACHE_NAME>;/sgio; + $wsrep_provider_options =~ s/gmcast\.listen_addr = .*?;/<GMCAST_LISTEN_ADDR>;/sgio; + $wsrep_provider_options =~ s/ist\.recv_addr = .*?;/<IST_RECV_ADDR>;/sgio; + $wsrep_provider_options =~ s/evs\.evict = .*?;/<EVS_EVICT>;/sgio; + $wsrep_provider_options =~ s/signal = .*?;\s*//sgio; + $wsrep_provider_options =~ s/dbug = .*?;\s*//sgio; + print $wsrep_provider_options."\n"; +EOF + +# Global Status + +SELECT COUNT(*) FROM INFORMATION_SCHEMA.GLOBAL_STATUS +WHERE VARIABLE_NAME LIKE 'wsrep_%' +AND VARIABLE_NAME != 'wsrep_debug_sync_waiters'; + +SELECT VARIABLE_NAME FROM INFORMATION_SCHEMA.GLOBAL_STATUS +WHERE VARIABLE_NAME LIKE 'wsrep_%' +AND VARIABLE_NAME != 'wsrep_debug_sync_waiters' +ORDER BY VARIABLE_NAME; diff --git a/mysql-test/suite/galera/t/galera_delete_limit.test b/mysql-test/suite/galera/t/galera_delete_limit.test new file mode 100644 index 00000000000..4cbadbd3ba0 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_delete_limit.test @@ -0,0 +1,52 @@ +# +# DELETE LIMIT should not cause any issues with row-based Galera replication +# regardless of the order in which the rows were deleted +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# With a PK +# + +--connection node_1 +CREATE TABLE ten (f1 INTEGER) Engine=InnoDB; +INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) Engine=InnoDB; +INSERT INTO t1 SELECT f1 FROM ten ORDER BY RAND(); + +--connection node_2 +DELETE FROM t1 ORDER BY RAND() LIMIT 5; +--let $sum_remaining = `SELECT SUM(f1) FROM t1` +--let $max_remaining = `SELECT MAX(f1) FROM t1` + +--connection node_1 +--disable_query_log +--eval SELECT (SELECT SUM(f1) FROM t1) = $sum_remaining AS sum_matches; +--eval SELECT f1 = $max_remaining AS max_matches FROM t1 WHERE f1 = $max_remaining; +--enable_query_log + +DROP TABLE t1; + +# +# Without a PK +# + +CREATE TABLE t2 (f1 INTEGER) Engine=InnoDB; +INSERT INTO t2 SELECT f1 FROM ten ORDER BY RAND(); + +--connection node_2 +DELETE FROM t2 ORDER BY RAND() LIMIT 5; +--let $sum_remaining = `SELECT SUM(f1) FROM t2` +--let $max_remaining = `SELECT MAX(f1) FROM t2` + +--connection node_1 +--disable_query_log +--eval SELECT (SELECT SUM(f1) FROM t2) = $sum_remaining AS sum_matches; +--eval SELECT f1 = $max_remaining AS max_matches FROM t2 WHERE f1 = $max_remaining; +--enable_query_log + +DROP TABLE t2; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/t/galera_enum.test b/mysql-test/suite/galera/t/galera_enum.test new file mode 100644 index 00000000000..ff5332486aa --- /dev/null +++ b/mysql-test/suite/galera/t/galera_enum.test @@ -0,0 +1,62 @@ +# +# Test the ENUM column type, as it is frequently an unwanted child +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# ENUM as key +# + +--connection node_1 +CREATE TABLE t1 (f1 ENUM('', 'one', 'two'), KEY (f1)) ENGINE=InnoDB; + +INSERT INTO t1 VALUES (''); +INSERT INTO t1 VALUES ('one'), ('two'); +INSERT INTO t1 VALUES (0), (1), (2); + +--connection node_2 +SELECT COUNT(*) = 6 FROM t1; +SELECT COUNT(*) = 2 FROM t1 where f1 = ''; +SELECT COUNT(*) = 2 FROM t1 where f1 = 'one'; + +DROP TABLE t1; + +# +# ENUM as PK +# + +--connection node_1 +CREATE TABLE t1 (f1 ENUM('', 'one', 'two', 'three', 'four') PRIMARY KEY) ENGINE=InnoDB; + +INSERT INTO t1 VALUES (''), ('one'), ('two'); + +--connection node_2 +SELECT COUNT(*) = 3 FROM t1; +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = ''; + +# Conflict + +--connection node_1 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1 SET f1 = 'three' where f1 = ''; + +--connection node_2 +SET AUTOCOMMIt=OFF; +START TRANSACTION; +UPDATE t1 SET f1 = 'four' where f1 = ''; + +--connection node_1 +COMMIT; + +--connection node_2 +--error ER_LOCK_DEADLOCK +COMMIT; + +--connection node_1 + +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 'three'; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_events.test b/mysql-test/suite/galera/t/galera_events.test new file mode 100644 index 00000000000..ae9940fc694 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_events.test @@ -0,0 +1,53 @@ +# +# Test that the replication of MySQL events conforms to the behavior of stock MySQL replication as described here +# http://dev.mysql.com/doc/refman/5.6/en/replication-features-invoked.html +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--let $event_scheduler_orig = `SELECT @@event_scheduler;` + +# +# Events arrive on slave as SLAVESIDE_DISABLED +# + +--connection node_1 +CREATE EVENT event1 ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO SELECT 1; + +--connection node_2 +SELECT DEFINER= 'root@localhost', ORIGINATOR = 1, STATUS = 'SLAVESIDE_DISABLED', EVENT_TYPE = 'ONE TIME', ON_COMPLETION = 'NOT PRESERVE' FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME = 'event1'; + +--connection node_1 +ALTER EVENT event1 DISABLE; + +--connection node_2 +# The definition on node 2 should still say SLAVESIDE_DISABLED +SELECT DEFINER= 'root@localhost', ORIGINATOR = 1, STATUS = 'SLAVESIDE_DISABLED', EVENT_TYPE = 'ONE TIME', ON_COMPLETION = 'NOT PRESERVE' FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME = 'event1'; + +# +# Expired event should be dropped from the slave +# + +--connection node_2 +SET GLOBAL event_scheduler = ON; +CREATE EVENT event2 ON SCHEDULE AT CURRENT_TIMESTAMP ON COMPLETION NOT PRESERVE DO SELECT 1; +--sleep 1 + +--connection node_1 +SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME = 'event2'; + +# +# DROP EVENT causes event to be dropped everywhere +# + +--connection node_1 +DROP EVENT event1; + +--connection node_2 +SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME = 'event1'; + +# Cleanup + +--connection node_2 +--eval SET GLOBAL event_scheduler = $event_scheduler_orig; diff --git a/mysql-test/suite/galera/t/galera_fk_multicolumn.test b/mysql-test/suite/galera/t/galera_fk_multicolumn.test index fc00eadcf5f..ad42f65924d 100644 --- a/mysql-test/suite/galera/t/galera_fk_multicolumn.test +++ b/mysql-test/suite/galera/t/galera_fk_multicolumn.test @@ -8,21 +8,21 @@ CREATE TABLE t0 ( f1 INT PRIMARY KEY, f2 INT UNIQUE -) ENGINE=INNODB; +); CREATE TABLE t1 ( f1 INT PRIMARY KEY, FOREIGN KEY (f1) REFERENCES t0(f1) ON UPDATE CASCADE -) ENGINE=INNODB; +); CREATE TABLE t2 ( f2 INT PRIMARY KEY, FOREIGN KEY (f2) REFERENCES t0(f2) ON UPDATE CASCADE -) ENGINE=INNODB; +); INSERT INTO t0 VALUES (0, 0); INSERT INTO t1 VALUES (0); diff --git a/mysql-test/suite/galera/t/galera_fk_multitable.test b/mysql-test/suite/galera/t/galera_fk_multitable.test index e53757b051b..6adfb8195ec 100644 --- a/mysql-test/suite/galera/t/galera_fk_multitable.test +++ b/mysql-test/suite/galera/t/galera_fk_multitable.test @@ -7,7 +7,7 @@ CREATE TABLE t0 ( f0 INT PRIMARY KEY -) ENGINE=INNODB; +); CREATE TABLE t1 ( f1 INT PRIMARY KEY, @@ -15,7 +15,7 @@ CREATE TABLE t1 ( FOREIGN KEY (f0) REFERENCES t0(f0) ON DELETE CASCADE -) ENGINE=INNODB; +); INSERT INTO t0 VALUES (0), (1); INSERT INTO t1 VALUES (0, 0); diff --git a/mysql-test/suite/galera/t/galera_flush.test b/mysql-test/suite/galera/t/galera_flush.test index 21647a8328c..cd6b40b5b4e 100644 --- a/mysql-test/suite/galera/t/galera_flush.test +++ b/mysql-test/suite/galera/t/galera_flush.test @@ -34,7 +34,7 @@ FLUSH HOSTS; --connection node_1 SET GLOBAL wsrep_replicate_myisam = TRUE; -INSERT INTO mysql.user VALUES('localhost','user1',PASSWORD('pass1'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','','N'); +INSERT INTO mysql.user VALUES('localhost','user1',PASSWORD('pass1'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','','N','N'); FLUSH PRIVILEGES; --connect node_2a, 127.0.0.1, user1, pass1, test, $NODE_MYPORT_2 --connection node_1 diff --git a/mysql-test/suite/galera/t/galera_ftwrl.test b/mysql-test/suite/galera/t/galera_ftwrl.test new file mode 100644 index 00000000000..db9bd132566 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_ftwrl.test @@ -0,0 +1,39 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# At this time, issing a FLUSH TABLES WITH READ LOCK causes SELECT and SHOW to hang if +# casuality can not be ensured because another node issued a statement in the meantime +# which could not be applied because FTWRL blocks the applier as well +# +# See LP bug 1271177 +# + +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB; + +--connection node_2 +--let $wsrep_provider_options_orig = `SELECT @@wsrep_provider_options;` +SET GLOBAL wsrep_provider_options = "repl.causal_read_timeout=PT1S"; +FLUSH TABLES WITH READ LOCK; + +--connection node_1 +INSERT INTO t1 VALUES (1); + +--connection node_2 +--error ER_LOCK_WAIT_TIMEOUT +SHOW TABLES; + +--error ER_LOCK_WAIT_TIMEOUT +SELECT * FROM t1; + +UNLOCK TABLES; + +SHOW TABLES; +SELECT COUNT(*) = 1 FROM t1; + +--disable_query_log +--eval SET GLOBAL wsrep_provider_options = "$wsrep_provider_options_orig"; +--enable_query_log + +DROP TABLE t1; + diff --git a/mysql-test/suite/galera/t/galera_fulltext.test b/mysql-test/suite/galera/t/galera_fulltext.test new file mode 100644 index 00000000000..aa93a336f92 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_fulltext.test @@ -0,0 +1,62 @@ +--source include/big_test.inc +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# InnoDB FULLTEXT indexes +# + +CREATE TABLE ten (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); + +# +# Fulltext index creation causes the creation of multiple system tables +# + +--connection node_1 +CREATE TABLE t1 (f1 INT PRIMARY KEY AUTO_INCREMENT, f2 VARCHAR(100), FULLTEXT (f2)) ENGINE=InnoDB; + +--connection node_2 +SELECT COUNT(*) = 13 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE name LIKE 'test/%'; + +# +# Fulltext insertion causes a flurry of updates on those system tables +# + +--connection node_1 +# Insert 10K rows +INSERT INTO t1 (f2) SELECT 'foobarbaz' FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4; + +--connection node_2 +SELECT COUNT(f2) = 10000 FROM t1 WHERE MATCH(f2) AGAINST ('foobarbaz'); + +UPDATE t1 SET f2 = 'abcdefjhk'; + +--connection node_1 +SELECT COUNT(f2) = 10000 FROM t1 WHERE MATCH(f2) AGAINST ('abcdefjhk'); + +--connection node_2 + +DROP TABLE t1; + +# +# Same on a table with no PK +# + +--connection node_1 +CREATE TABLE t1 (f1 VARCHAR(100), FULLTEXT (f1)) ENGINE=InnoDB; + +--connection node_2 +# We insert only 1K rows here, because updates without a PK are very slow +INSERT INTO t1 (f1) SELECT 'foobarbaz' FROM ten AS a1, ten AS a2, ten AS a3; + +--connection node_1 +SELECT COUNT(f1) = 1000 FROM t1 WHERE MATCH(f1) AGAINST ('foobarbaz'); + +UPDATE t1 SET f1 = 'abcdefjhk'; + +--connection node_2 +SELECT COUNT(f1) = 1000 FROM t1 WHERE MATCH(f1) AGAINST ('abcdefjhk'); + +DROP TABLE t1; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/t/galera_gcs_fc_limit.test b/mysql-test/suite/galera/t/galera_gcs_fc_limit.test new file mode 100644 index 00000000000..e15da0e35ad --- /dev/null +++ b/mysql-test/suite/galera/t/galera_gcs_fc_limit.test @@ -0,0 +1,52 @@ +# +# Test that under gcs.fc_limit=1 on the slave, transactions on the master can not commit. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +--connection node_2 +--let $wsrep_provider_options_orig = `SELECT @@wsrep_provider_options` +SET GLOBAL wsrep_provider_options = 'gcs.fc_limit=1'; + +# Block the slave applier thread +FLUSH TABLES WITH READ LOCK; + +--connection node_1 + +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (3); +INSERT INTO t1 VALUES (4); + +# This query will hang because flow control will kick in +--send +INSERT INTO t1 VALUES (5); +--sleep 1 + +--let $galera_connection_name = node_1a +--let $galera_server_number = 1 +--source include/galera_connect.inc +--connection node_1a +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'query end' AND INFO = 'INSERT INTO t1 VALUES (5)'; + +--connection node_2 +# Unblock the slave applier thread +UNLOCK TABLES; + +--connection node_1 +--reap + +INSERT INTO t1 VALUES (6); + +--connection node_2 +# Replication catches up and continues normally +SELECT COUNT(*) = 6 FROM t1; + +--disable_query_log +--eval SET GLOBAL wsrep_provider_options = '$wsrep_provider_options_orig'; +--enable_query_log + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_gcs_max_packet_size.cnf b/mysql-test/suite/galera/t/galera_gcs_max_packet_size.cnf new file mode 100644 index 00000000000..aae3fee5904 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_gcs_max_packet_size.cnf @@ -0,0 +1,5 @@ +!include ../galera_2nodes.cnf +[mysqld.1] +wsrep_provider_options='base_port=@mysqld.1.#galera_port;gcs.max_packet_size=64' +[mysqld.2] +wsrep_provider_options='base_port=@mysqld.2.#galera_port;gcs.max_packet_size=64' diff --git a/mysql-test/suite/galera/t/galera_gcs_max_packet_size.test b/mysql-test/suite/galera/t/galera_gcs_max_packet_size.test new file mode 100644 index 00000000000..cafd8acfdd9 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_gcs_max_packet_size.test @@ -0,0 +1,25 @@ +# +# Test fragmentation by setting gcs.max_packet_size to a low value +# The actual setting is performed in galera_gcs_max_packet_size.cnf +# as gcs.max_packet_size is not a dynamic variable +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE ten (f1 INTEGER); +INSERT INTO ten VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10); + +CREATE TABLE t1 (f1 INT PRIMARY KEY AUTO_INCREMENT, f2 INTEGER) ENGINE=InnoDB; +CREATE TABLE t2 (f1 VARCHAR(512) UNIQUE) ENGINE=InnoDB; + +INSERT INTO t1 (f2) SELECT 1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4; +INSERT INTO t2 VALUES (REPEAT('x', 512)); + +--connection node_2 +SELECT COUNT(*) = 10000 FROM t1; +SELECT LENGTH(f1) = 512 FROM t2 WHERE f1 = REPEAT('x', 512); + +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/t/galera_gtid-master.opt b/mysql-test/suite/galera/t/galera_gtid-master.opt new file mode 100644 index 00000000000..8a755e98b00 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_gtid-master.opt @@ -0,0 +1 @@ +--log-bin --log-slave-updates diff --git a/mysql-test/suite/galera/t/galera_gtid.test b/mysql-test/suite/galera/t/galera_gtid.test new file mode 100644 index 00000000000..e8369be62e6 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_gtid.test @@ -0,0 +1,27 @@ +# +# Test GTID for basic Galera operations +# + +--source include/have_log_bin.inc +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE t1 (f1 INT PRIMARY KEY); + +INSERT INTO t1 VALUES (1); + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1; + +UPDATE t1 SET f1 = 2; + +--let $gtid_binlog_state_node2 = `SELECT @@global.gtid_binlog_state;` + +--connection node_1 +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 2; + +--disable_query_log +--eval SELECT '$gtid_binlog_state_node2' = @@global.gtid_binlog_state AS gtid_binlog_state_equal; +--enable_query_log + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_insert_ignore.test b/mysql-test/suite/galera/t/galera_insert_ignore.test new file mode 100644 index 00000000000..4b4b0a6e9fb --- /dev/null +++ b/mysql-test/suite/galera/t/galera_insert_ignore.test @@ -0,0 +1,60 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--let $wsrep_sync_wait_orig = (SELECT @@wsrep_sync_wait) +SET GLOBAL wsrep_sync_wait = 7; + +--connection node_2 +SET GLOBAL wsrep_sync_wait = 7; + + +# +# INSERT IGNORE with PRIMARY KEY +# + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +INSERT IGNORE INTO t1 VALUES (1), (2); +SELECT * FROM t1; + +--connection node_2 +SELECT * FROM t1; + +# +# INSERT IGNORE ... SELECT +# + +--connection node_2 +CREATE TABLE t2 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t2 VALUES (0), (2), (3); +INSERT IGNORE INTO t1 SELECT f1 FROM t2; + +SELECT * FROM t1; +--connection node_1 +SELECT * FROM t1; + +# +# INSERT IGNORE with UNIQUE + NULLs +# + +--connection node_2 +CREATE TABLE t3 (f1 INTEGER UNIQUE) Engine=InnoDB; +INSERT INTO t3 VALUES (NULL); + +--connection node_1 +INSERT IGNORE INTO t3 VALUES (1), (NULL), (2); +SELECT * FROM t3; + +--connection node_2 +SELECT * FROM t3; + +--eval SET GLOBAL wsrep_sync_wait = $wsrep_sync_wait_orig + +--connection node_1 +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; +--eval SET GLOBAL wsrep_sync_wait = $wsrep_sync_wait_orig + diff --git a/mysql-test/suite/galera/t/galera_insert_multi.test b/mysql-test/suite/galera/t/galera_insert_multi.test new file mode 100644 index 00000000000..d62283aff69 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_insert_multi.test @@ -0,0 +1,122 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# Multi-row INSERT with a PK +# + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1),(2); + +--connection node_2 +INSERT INTO t1 VALUES (3),(4); + +--connection node_1 +SELECT COUNT(*) = 4 FROM t1; + +--connection node_2 +SELECT COUNT(*) = 4 FROM t1; + +DROP TABLE t1; + +# +# Multi-row INSERT without a PK +# + +--connection node_2 +CREATE TABLE t1 (f1 INTEGER, KEY (f1)) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1),(1); + +--connection node_1 +INSERT INTO t1 VALUES (2),(2); + +--connection node_2 +SELECT COUNT(*) = 4 FROM t1; + +--connection node_1 +SELECT COUNT(*) = 4 FROM t1; + +DROP TABLE t1; + +# +# Error in the middle of a multi-row INSERT +# + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; + +--error ER_DUP_ENTRY +INSERT INTO t1 VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (1); + +SELECT COUNT(*) = 0 FROM t1; + +--connection node_2 +SELECT COUNT(*) = 0 FROM t1; + +DROP TABLE t1; + +# +# Deadlock +# + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; + +SET AUTOCOMMIT = OFF; +START TRANSACTION; +INSERT INTO t1 VALUES (1), (2); + +--connection node_2 +SET AUTOCOMMIT = OFF; +START TRANSACTION; +INSERT INTO t1 VALUES (2), (1); + +--connection node_1 +COMMIT; + +--connection node_2 +--error ER_LOCK_DEADLOCK +COMMIT; + +# Workaround for mysql-wsrep#39 Transaction receives deadlock error twice in row +--error 0,ER_LOCK_DEADLOCK +ROLLBACK; + +--error ER_DUP_ENTRY +INSERT INTO t1 VALUES (1), (2); + +DROP TABLE t1; + +# +# Rollback +# + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; + +START TRANSACTION; +INSERT INTO t1 VALUES (1), (2); + +--connection node_2 +START TRANSACTION; +INSERT INTO t1 VALUES (2), (1); + +--connection node_1 +ROLLBACK; + +--connection node_2 +COMMIT; +SELECT COUNT(*) = 2 FROM t1; + +--connection node_1 +SELECT COUNT(*) = 2 FROM t1; + +DROP TABLE t1; + + + + + + + diff --git a/mysql-test/suite/galera/t/galera_ist_innodb_flush_logs.cnf b/mysql-test/suite/galera/t/galera_ist_innodb_flush_logs.cnf new file mode 100644 index 00000000000..85245ff464a --- /dev/null +++ b/mysql-test/suite/galera/t/galera_ist_innodb_flush_logs.cnf @@ -0,0 +1,12 @@ +!include ../galera_2nodes.cnf + +[mysqld] +wsrep_sst_method=xtrabackup-v2 +innodb_flush_log_at_trx_commit=0 + +[mysqld.1] +wsrep_provider_options='base_port=@mysqld.1.#galera_port;pc.ignore_sb=true' + +[mysqld.2] +wsrep_provider_options='base_port=@mysqld.2.#galera_port;pc.ignore_sb=true' + diff --git a/mysql-test/suite/galera/t/galera_ist_innodb_flush_logs.test b/mysql-test/suite/galera/t/galera_ist_innodb_flush_logs.test new file mode 100644 index 00000000000..07838702deb --- /dev/null +++ b/mysql-test/suite/galera/t/galera_ist_innodb_flush_logs.test @@ -0,0 +1,12 @@ +# +# This test performs server kill and IST while innodb_flush_logs_on_trx_commit = 0 +# This confirms that IST can properly catch up even in the face of relaxed single-node durability +# +# + +--source include/big_test.inc +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--source suite/galera/include/galera_st_kill_slave.inc +--source suite/galera/include/galera_st_kill_slave_ddl.inc diff --git a/mysql-test/suite/galera/t/galera_ist_mysqldump.cnf b/mysql-test/suite/galera/t/galera_ist_mysqldump.cnf new file mode 100644 index 00000000000..db6b7d5e129 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_ist_mysqldump.cnf @@ -0,0 +1,11 @@ +!include ../galera_2nodes.cnf + +# We do not set mysqldump-related SST options here because doing so on startup +# causes the first MTR connection to be forefully dropped by Galera, which in turn confuses MTR + +[mysqld.1] +wsrep_provider_options='base_port=@mysqld.1.#galera_port;pc.ignore_sb=true' + +[mysqld.2] +wsrep_provider_options='base_port=@mysqld.2.#galera_port;pc.ignore_sb=true' + diff --git a/mysql-test/suite/galera/t/galera_ist_mysqldump.test b/mysql-test/suite/galera/t/galera_ist_mysqldump.test new file mode 100644 index 00000000000..a9ff8c41f06 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_ist_mysqldump.test @@ -0,0 +1,17 @@ +--source include/big_test.inc +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--source suite/galera/include/galera_sst_set_mysqldump.inc + +# mysql-wsrep#33 - nnoDB: Failing assertion: xid_seqno > trx_sys_cur_xid_seqno in trx_sys_update_wsrep_checkpoint with mysqldump IST +# --source suite/galera/include/galera_st_disconnect_slave.inc + +# We set the required mysqldump SST options here so that they are used every time the server is restarted during the test +--let $start_mysqld_params = --wsrep_sst_auth=sst:sst --wsrep_sst_method=mysqldump --wsrep-sst-receive-address=127.0.0.1:$NODE_MYPORT_2 --skip-grant-tables + +--source suite/galera/include/galera_st_shutdown_slave.inc +--source suite/galera/include/galera_st_kill_slave.inc +--source suite/galera/include/galera_st_kill_slave_ddl.inc + +--source suite/galera/include/galera_sst_restore.inc diff --git a/mysql-test/suite/galera/t/galera_ist_restart_joiner.cnf b/mysql-test/suite/galera/t/galera_ist_restart_joiner.cnf new file mode 100644 index 00000000000..10958aad9a8 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_ist_restart_joiner.cnf @@ -0,0 +1,4 @@ +!include ../galera_2nodes.cnf + +[mysqld.1] +wsrep_provider_options='base_port=@mysqld.1.#galera_port;pc.ignore_sb=true' diff --git a/mysql-test/suite/galera/t/galera_ist_restart_joiner.test b/mysql-test/suite/galera/t/galera_ist_restart_joiner.test new file mode 100644 index 00000000000..69446f0f86a --- /dev/null +++ b/mysql-test/suite/galera/t/galera_ist_restart_joiner.test @@ -0,0 +1,106 @@ +# +# Test that a joiner performing IST can be killed and restarted with no adverse consequences. +# This is achieved by using the recv_IST_after_apply_trx Galera dbug sync point to block IST after +# one transaction has been applied. When IST blocks, we kill and restart the joiner +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc +--source include/have_debug_sync.inc +--source suite/galera/include/galera_have_debug_sync.inc + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 CHAR(1)); +INSERT INTO t1 VALUES (1, 'a'), (2, 'a'), (3, 'a'), (4, 'a'), (5, 'a'),(6, 'a'); + +# Disconnect node #2 +--connection node_2 +--source suite/galera/include/galera_unload_provider.inc + +--connection node_1 +UPDATE t1 SET f2 = 'b' WHERE f1 > 1; + +# Wait until node #1 has left +--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc + +UPDATE t1 SET f2 = 'c' WHERE f1 > 2; + +--connection node_2 +# Make sure IST will block ... +SET GLOBAL wsrep_provider_options = 'dbug=d,recv_IST_after_apply_trx'; +SET SESSION wsrep_sync_wait = 0; + + +# Write file to make mysql-test-run.pl expect the crash, but don't start it +--let $_server_id= `SELECT @@server_id` +--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.$_server_id.expect +--exec echo "wait" > $_expect_file_name + +--let KILL_NODE_PIDFILE = `SELECT @@pid_file` + +# ... and restart provider to force IST +--echo Loading wsrep_provider ... +--disable_query_log +--eval SET GLOBAL wsrep_provider = '$wsrep_provider_orig'; +--eval SET GLOBAL wsrep_cluster_address = '$wsrep_cluster_address_orig'; +--enable_query_log + +# We can not use a wait_condition on SELECT * FROM INFORMATION_SCHEMA.GLOBAL_STATUS as such queries are blocked during IST +# so we perform a simple sleep and SHOW instead + +--sleep 5 +SHOW STATUS LIKE 'wsrep_debug_sync_waiters'; + +--connection node_1 +# Perform DML and DDL while IST is in progress +--connection node_1 +UPDATE t1 SET f2 = 'd' WHERE f1 > 3; +CREATE TABLE t2 (f1 INTEGER); + +# Kill node #2 while IST is in progress +--connection node_2 + +# Kill the connected server +--disable_reconnect + +--perl + my $pid_filename = $ENV{'KILL_NODE_PIDFILE'}; + my $mysqld_pid = `cat $pid_filename`; + chomp($mysqld_pid); + system("kill -9 $mysqld_pid"); + exit(0); +EOF + +--source include/wait_until_disconnected.inc + +--connection node_1 +--source include/wait_until_connected_again.inc +--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc + +# Perform DML and DDL while node #2 is down +UPDATE t1 SET f2 = 'e' WHERE f1 > 4; +CREATE TABLE t3 (f1 INTEGER); + +--connection node_2 + +--let $galera_wsrep_recover_server_id=2 +--source suite/galera/include/galera_wsrep_recover.inc + +--echo Starting server ... +--source include/start_mysqld.inc + +--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc + +--connection node_1 +UPDATE t1 SET f2 = 'f' WHERE f1 > 5; +SELECT * FROM t1; + +--connection node_2 +SELECT * FROM t1; +SELECT COUNT(*) = 0 FROM t2; +SELECT COUNT(*) = 0 FROM t3; + +--connection node_1 +DROP TABLE t1, t2, t3; diff --git a/mysql-test/suite/galera/t/galera_ist_rsync.cnf b/mysql-test/suite/galera/t/galera_ist_rsync.cnf new file mode 100644 index 00000000000..bbe0f6047fb --- /dev/null +++ b/mysql-test/suite/galera/t/galera_ist_rsync.cnf @@ -0,0 +1,11 @@ +!include ../galera_2nodes.cnf + +[mysqld] +wsrep_sst_method=rsync + +[mysqld.1] +wsrep_provider_options='base_port=@mysqld.1.#galera_port;pc.ignore_sb=true' + +[mysqld.2] +wsrep_provider_options='base_port=@mysqld.2.#galera_port;pc.ignore_sb=true' + diff --git a/mysql-test/suite/galera/t/galera_ist_rsync.test b/mysql-test/suite/galera/t/galera_ist_rsync.test new file mode 100644 index 00000000000..41d1a0c1fc2 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_ist_rsync.test @@ -0,0 +1,8 @@ +--source include/big_test.inc +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--source suite/galera/include/galera_st_disconnect_slave.inc +--source suite/galera/include/galera_st_shutdown_slave.inc +--source suite/galera/include/galera_st_kill_slave.inc +--source suite/galera/include/galera_st_kill_slave_ddl.inc diff --git a/mysql-test/suite/galera/t/galera_ist_xtrabackup-v2.cnf b/mysql-test/suite/galera/t/galera_ist_xtrabackup-v2.cnf new file mode 100644 index 00000000000..21e597445a8 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_ist_xtrabackup-v2.cnf @@ -0,0 +1,11 @@ +!include ../galera_2nodes.cnf + +[mysqld] +wsrep_sst_method=xtrabackup-v2 + +[mysqld.1] +wsrep_provider_options='base_port=@mysqld.1.#galera_port;pc.ignore_sb=true' + +[mysqld.2] +wsrep_provider_options='base_port=@mysqld.2.#galera_port;pc.ignore_sb=true' + diff --git a/mysql-test/suite/galera/t/galera_ist_xtrabackup-v2.test b/mysql-test/suite/galera/t/galera_ist_xtrabackup-v2.test new file mode 100644 index 00000000000..8b399e77794 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_ist_xtrabackup-v2.test @@ -0,0 +1,9 @@ +--source include/big_test.inc +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--source suite/galera/include/galera_st_disconnect_slave.inc +--source suite/galera/include/galera_st_shutdown_slave.inc + +--source suite/galera/include/galera_st_kill_slave.inc +--source suite/galera/include/galera_st_kill_slave_ddl.inc diff --git a/mysql-test/suite/galera/t/galera_kill_ddl.test b/mysql-test/suite/galera/t/galera_kill_ddl.test new file mode 100644 index 00000000000..3c2bce5b9c9 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_kill_ddl.test @@ -0,0 +1,39 @@ +# +# This test kill -9-s a slave while small updates have been performed on the master. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--connection node_1 + +# Enable the master to continue running during the split-brain situation that +# occurs when the slave is killed +--let $wsrep_provider_options_orig = `SELECT @@wsrep_provider_options` +SET GLOBAL wsrep_provider_options = 'pc.ignore_sb=true'; + +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; + +--connection node_2 +--source include/kill_galera.inc + +--connection node_1 +ALTER TABLE t1 ADD COLUMN f2 INTEGER; + +--connection node_2 +--source include/start_mysqld.inc + +--let $galera_connection_name = node_2a +--let $galera_server_number = 2 +--source include/galera_connect.inc +--connection node_2a + +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='t1'; +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; + +--connection node_1 +--disable_query_log +--eval SET GLOBAL wsrep_provider_options = '$wsrep_provider_options_orig'; +--enable_query_log + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_kill_largechanges.test b/mysql-test/suite/galera/t/galera_kill_largechanges.test new file mode 100644 index 00000000000..e9a32ce813b --- /dev/null +++ b/mysql-test/suite/galera/t/galera_kill_largechanges.test @@ -0,0 +1,43 @@ +# +# This test kill -9-s a slave while a large update has been performed on the master. SST is performed. +# + +--source include/big_test.inc +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--connection node_1 +# Enable the master to continue running during the split-brain situation that +# occurs when the slave is killed +--let $wsrep_provider_options_orig = `SELECT @@wsrep_provider_options` +SET GLOBAL wsrep_provider_options = 'pc.ignore_sb=true'; + +CREATE TABLE ten (f1 INTEGER); +INSERT INTO ten VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10); +CREATE TABLE t1 (f1 VARCHAR(128)) ENGINE=InnoDB; + +--connection node_2 +--source include/kill_galera.inc + +--connection node_1 +# We create a 128Mb (or so) transaction that is larger than gcache. The size of the gcache is not adjustable dynamically +INSERT INTO t1 SELECT REPEAT('a', 128) FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5, ten AS a6; + +--connection node_2 +--source include/start_mysqld.inc + +--let $galera_connection_name = node_2a +--let $galera_server_number = 2 +--source include/galera_connect.inc +--connection node_2a + +SELECT COUNT(*) = 1000000 FROM t1; +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; + +--connection node_1 +--disable_query_log +--eval SET GLOBAL wsrep_provider_options = '$wsrep_provider_options_orig'; +--enable_query_log + +DROP TABLE t1; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/t/galera_kill_nochanges.test b/mysql-test/suite/galera/t/galera_kill_nochanges.test new file mode 100644 index 00000000000..1903df449e4 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_kill_nochanges.test @@ -0,0 +1,24 @@ +# +# This test kill -9-s a slave while no updates have been performed on the master. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +--connection node_2 +--source include/kill_galera.inc +--source include/start_mysqld.inc + +--let $galera_connection_name = node_2a +--let $galera_server_number = 2 +--source include/galera_connect.inc +--connection node_2a + +SELECT COUNT(*) = 1 FROM t1; +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_kill_smallchanges.test b/mysql-test/suite/galera/t/galera_kill_smallchanges.test new file mode 100644 index 00000000000..d998032cbc3 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_kill_smallchanges.test @@ -0,0 +1,39 @@ +# +# This test kill -9-s a slave while small updates have been performed on the master. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--connection node_1 + +# Enable the master to continue running during the split-brain situation that +# occurs when the slave is killed +--let $wsrep_provider_options_orig = `SELECT @@wsrep_provider_options` +SET GLOBAL wsrep_provider_options = 'pc.ignore_sb=true'; + +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; + +--connection node_2 +--source include/kill_galera.inc + +--connection node_1 +INSERT INTO t1 VALUES (1); + +--connection node_2 +--source include/start_mysqld.inc + +--let $galera_connection_name = node_2a +--let $galera_server_number = 2 +--source include/galera_connect.inc +--connection node_2a + +SELECT COUNT(*) = 1 FROM t1; +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; + +--connection node_1 +--disable_query_log +--eval SET GLOBAL wsrep_provider_options = '$wsrep_provider_options_orig'; +--enable_query_log + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_lock_table.test b/mysql-test/suite/galera/t/galera_lock_table.test new file mode 100644 index 00000000000..bd581842f6f --- /dev/null +++ b/mysql-test/suite/galera/t/galera_lock_table.test @@ -0,0 +1,43 @@ +# +# Test that a LOCK TABLE on the slave will cause the applier thread to block, so no subsequent updates +# are replicated on the slave until UNLOCK TABLE is issued. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--let $wsrep_sync_wait_orig = `SELECT @@wsrep_sync_wait` + +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB; +CREATE TABLE t2 (id INT PRIMARY KEY) ENGINE=InnoDB; + +--connection node_2 +LOCK TABLE t1 READ; + +--connection node_1 +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); + +# We use a separate connection here so that we can SELECT from both tables +# without running into "table t2 was not locked" error. + +--let $galera_connection_name = node_2a +--let $galera_server_number = 2 +--source include/galera_connect.inc +--connection node_2a +SET SESSION wsrep_sync_wait=0; +SELECT COUNT(*) = 0 FROM t1; +SELECT COUNT(*) = 0 FROM t2; + +--connection node_2 +UNLOCK TABLES; + +--disable_query_log +--eval SET SESSION wsrep_sync_wait=$wsrep_sync_wait_orig; +--enable_query_log + +SELECT COUNT(*) = 1 FROM t1; +SELECT COUNT(*) = 1 FROM t2; + +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/suite/galera/t/galera_log_bin-master.opt b/mysql-test/suite/galera/t/galera_log_bin-master.opt new file mode 100644 index 00000000000..8a755e98b00 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_log_bin-master.opt @@ -0,0 +1 @@ +--log-bin --log-slave-updates diff --git a/mysql-test/suite/galera/t/galera_log_bin.test b/mysql-test/suite/galera/t/galera_log_bin.test new file mode 100644 index 00000000000..7d592d63ee3 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_log_bin.test @@ -0,0 +1,36 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# Test Galera with --log-bin --log-slave-updates . +# This way the actual MySQL binary log is used, +# rather than Galera's own implementation +# + +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +CREATE TABLE t2 (id INT) ENGINE=InnoDB; +INSERT INTO t2 VALUES (1); +INSERT INTO t2 VALUES (1); + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1; +SELECT COUNT(*) = 2 FROM t2; + +--connection node_1 +ALTER TABLE t1 ADD COLUMN f2 INTEGER; + +FLUSH LOGS; +# Use pos 120 in order to skip the header that contains the MySQL version number. +# Otherwise, version number changes will cause the test to break +SHOW BINLOG EVENTS IN 'mysqld-bin.000002' LIMIT 4,18; + +--connection node_2 +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; + +SHOW BINLOG EVENTS IN 'mysqld-bin.000003' LIMIT 3,19; + +DROP TABLE t1; +DROP TABLE t2; + diff --git a/mysql-test/suite/galera/t/galera_log_output_csv-master.opt b/mysql-test/suite/galera/t/galera_log_output_csv-master.opt new file mode 100644 index 00000000000..2f71b140b65 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_log_output_csv-master.opt @@ -0,0 +1 @@ +--log-output=TABLE --log-queries-not-using-indexes --general-log --slow-query-log diff --git a/mysql-test/suite/galera/t/galera_log_output_csv.test b/mysql-test/suite/galera/t/galera_log_output_csv.test new file mode 100644 index 00000000000..00009396f6a --- /dev/null +++ b/mysql-test/suite/galera/t/galera_log_output_csv.test @@ -0,0 +1,27 @@ +# +# Test that --log-output=FILE works with Galera. +# The relevant options are set using a -master.opt file +# wsrep_replicate_myisam is not used as it crashes in MTR with mysql-wsrep#14 +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +SELECT COUNT(*) > 0 FROM mysql.general_log; + +SELECT 1 = 1 FROM t1; +SELECT COUNT(*) = 1 FROM mysql.slow_log WHERE sql_text = 'SELECT 1 = 1 FROM t1'; + +--connection node_2 + +# CREATE TABLE from master is also present in the slave query log, but is logged twice, mysql-wsrep#44 +SELECT COUNT(*) > 0 FROM mysql.general_log WHERE argument = 'CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB'; + +SELECT 2 = 2 FROM t1; +SELECT COUNT(*) = 1 FROM mysql.slow_log WHERE sql_text = 'SELECT 2 = 2 FROM t1'; + +--connection node_1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_many_columns.test b/mysql-test/suite/galera/t/galera_many_columns.test index 09bd9902e81..3f596179c01 100644 --- a/mysql-test/suite/galera/t/galera_many_columns.test +++ b/mysql-test/suite/galera/t/galera_many_columns.test @@ -2,20 +2,18 @@ --source include/galera_cluster.inc --source include/have_innodb.inc -CREATE TABLE t1 (f1017 VARCHAR(3) DEFAULT 'ABC') ENGINE=InnoDB; - ---let $count = 1016 +--disable_query_log +SET @create_var1 = ""; +--let $count = 1017 while ($count) { - --disable_query_log - --eval SET @ddl_var1 = CONCAT("ALTER TABLE t1 ADD COLUMN f", $count, " VARCHAR(3) DEFAULT 'ABC'") - --let $ddl_var = `SELECT @ddl_var1` - --enable_query_log - --eval $ddl_var + --eval SET @create_var1 = CONCAT(@create_var1, "f", $count, " VARCHAR(3) DEFAULT 'ABC', ") --dec $count } -ALTER TABLE t1 ADD PRIMARY KEY (f1, f1017); +--let $create_var = `SELECT @create_var1` +--eval CREATE TABLE t1 ($create_var PRIMARY KEY (f1, f1017)) ENGINE=InnoDB; +--enable_query_log INSERT INTO t1 (f1) VALUES (DEFAULT); diff --git a/mysql-test/suite/galera/t/galera_many_rows.test b/mysql-test/suite/galera/t/galera_many_rows.test index 5ec1af0a8bf..0f4c4c0db78 100644 --- a/mysql-test/suite/galera/t/galera_many_rows.test +++ b/mysql-test/suite/galera/t/galera_many_rows.test @@ -3,7 +3,7 @@ --source include/galera_cluster.inc --source include/have_innodb.inc -CREATE TABLE ten (f1 INTEGER) ENGINE=INNODB; +CREATE TABLE ten (f1 INTEGER); INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); CREATE TABLE t1 (f1 INTEGER AUTO_INCREMENT PRIMARY KEY, f2 INTEGER) Engine=InnoDB; diff --git a/mysql-test/suite/galera/t/galera_many_tables_nopk.test b/mysql-test/suite/galera/t/galera_many_tables_nopk.test new file mode 100644 index 00000000000..2496d145c93 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_many_tables_nopk.test @@ -0,0 +1,103 @@ +--source include/big_test.inc +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# This test forces 1K tables without a PK to participate in a single transaction +# + +# +# First, create 1K tables +# + +--connection node_1 + +--let $count = 1000 +while ($count) +{ + --disable_query_log + --let $ddl_var = `SELECT CONCAT("CREATE TABLE t", $count, " (f1 INTEGER) ENGINE=InnoDB")` + --eval $ddl_var + --enable_query_log + --dec $count +} + +--let $count = 1000 +while ($count) +{ + --disable_query_log + --let $ddl_var = `SELECT CONCAT("INSERT INTO t", $count, " VALUES (1234)")` + --eval $ddl_var + --enable_query_log + --dec $count +} + +# +# Second, perform 1K updates +# + +SET AUTOCOMMIT=OFF; +START TRANSACTION; + +--let $count = 1000 +while ($count) +{ + --disable_query_log + --let $ddl_var = `SELECT CONCAT("UPDATE t", $count, " SET f1 = 1")` + --eval $ddl_var + --enable_query_log + --dec $count +} + +COMMIT; + +# Third, confirm that all the inserts have arrived on the second node +# + +--connection node_2 +CREATE TABLE sum_table (f1 INTEGER); + +--let $count = 1000 +while ($count) +{ + --disable_query_log + --let $ddl_var = `SELECT CONCAT("INSERT INTO sum_table SELECT COUNT(*) FROM t", $count)` + --eval $ddl_var + --enable_query_log + --dec $count +} + +SELECT SUM(f1) = 1000 FROM sum_table; + +# +# Fourth, create a deadlock +# + +--connection node_1 +SET AUTOCOMMIT=OFF; +START TRANSACTION; + +--let $count = 1000 +while ($count) +{ + --disable_query_log + --let $ddl_var = `SELECT CONCAT("UPDATE t", $count, " SET f1 = 2")` + --eval $ddl_var + --enable_query_log + --dec $count +} + +--connection node_2 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1000 SET f1 = 3; + +--connection node_1 +COMMIT; + +--connection node_2 +--error ER_LOCK_DEADLOCK +COMMIT; + +DROP SCHEMA test; +CREATE SCHEMA test; diff --git a/mysql-test/suite/galera/t/galera_many_tables_pk.test b/mysql-test/suite/galera/t/galera_many_tables_pk.test new file mode 100644 index 00000000000..886cb7c1a00 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_many_tables_pk.test @@ -0,0 +1,98 @@ +--source include/big_test.inc +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# This test forces 1K tables with a PK to participate in a single transaction +# + +# +# First, create 1K tables and make sure the DDLs are all propagated +# + +--connection node_1 + +--let $count = 1000 +while ($count) +{ + --disable_query_log + --let $ddl_var = `SELECT CONCAT("CREATE TABLE t", $count, " (f1 INTEGER AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB")` + --eval $ddl_var + --enable_query_log + --dec $count +} + +--connection node_2 +SELECT COUNT(*) = 1000 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME LIKE 't%'; + +# +# Second, create a transaction that uses all those tables +# + +--connection node_1 +SET AUTOCOMMIT=OFF; +START TRANSACTION; + +--let $count = 1000 +while ($count) +{ + --disable_query_log + --let $ddl_var = `SELECT CONCAT("INSERT INTO t", $count, " VALUES (DEFAULT)")` + --eval $ddl_var + --enable_query_log + --dec $count +} + +COMMIT; + +# +# Third, confirm that all the inserts have arrived on the second node +# + +--connection node_2 +CREATE TABLE sum_table (f1 INTEGER); + +--let $count = 1000 +while ($count) +{ + --disable_query_log + --let $ddl_var = `SELECT CONCAT("INSERT INTO sum_table SELECT COUNT(*) FROM t", $count)` + --eval $ddl_var + --enable_query_log + --dec $count +} + +SELECT SUM(f1) = 1000 FROM sum_table; + +# +# Fourth, create a deadlock +# + +--connection node_1 +SET AUTOCOMMIT=OFF; +START TRANSACTION; + +--let $count = 1000 +while ($count) +{ + --disable_query_log + --let $ddl_var = `SELECT CONCAT("UPDATE t", $count, " SET f1 = 2")` + --eval $ddl_var + --enable_query_log + --dec $count +} + +--connection node_2 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1000 SET f1 = 3; + +--connection node_1 +COMMIT; + +--connection node_2 +--error ER_LOCK_DEADLOCK +COMMIT; + +DROP SCHEMA test; +CREATE SCHEMA test; diff --git a/mysql-test/suite/galera/t/galera_migrate.cnf b/mysql-test/suite/galera/t/galera_migrate.cnf new file mode 100644 index 00000000000..47bdf53afef --- /dev/null +++ b/mysql-test/suite/galera/t/galera_migrate.cnf @@ -0,0 +1,59 @@ +# +# This .cnf file starts 4 servers without enabling Galera. +# The galera_migrate.test will set wsrep_provider and the other settings as needed. +# + +!include include/default_mysqld.cnf + +[mysqld] +binlog-format=row +innodb_autoinc_lock_mode=2 +innodb_flush_log_at_trx_commit=2 +log-bin=mysqld-bin + +wsrep_node_address=127.0.0.1 +wsrep_causal_reads=ON +wsrep_sync_wait = 7 + +[mysqld.1] +#galera_port=@OPT.port +#ist_port=@OPT.port +#sst_port=@OPT.port + +[mysqld.2] +#galera_port=@OPT.port +#ist_port=@OPT.port +#sst_port=@OPT.port + +[mysqld.3] +#galera_port=@OPT.port +#ist_port=@OPT.port +#sst_port=@OPT.port + +[mysqld.4] +#galera_port=@OPT.port +#ist_port=@OPT.port +#sst_port=@OPT.port + +[ENV] +NODE_MYPORT_1= @mysqld.1.port +NODE_MYSOCK_1= @mysqld.1.socket + +NODE_MYPORT_2= @mysqld.2.port +NODE_MYSOCK_2= @mysqld.2.socket + +NODE_MYPORT_3= @mysqld.3.port +NODE_MYSOCK_3= @mysqld.3.socket + +NODE_MYPORT_4= @mysqld.4.port +NODE_MYSOCK_4= @mysqld.4.socket + +NODE_GALERAPORT_1= @mysqld.1.#galera_port +NODE_GALERAPORT_2= @mysqld.2.#galera_port +NODE_GALERAPORT_3= @mysqld.3.#galera_port +NODE_GALERAPORT_4= @mysqld.4.#galera_port + +NODE_SSTPORT_1= @mysqld.1.#sst_port +NODE_SSTPORT_2= @mysqld.2.#sst_port +NODE_SSTPORT_3= @mysqld.3.#sst_port +NODE_SSTPORT_4= @mysqld.4.#sst_port diff --git a/mysql-test/suite/galera/t/galera_migrate.test b/mysql-test/suite/galera/t/galera_migrate.test new file mode 100644 index 00000000000..873640b88d4 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_migrate.test @@ -0,0 +1,204 @@ +# +# Execute a migration from MariaDB replication to Galera replication. +# The test starts with 4 stand-alone servers defined by galera_migrate.cnf and then +# performs the following steps: +# +# 1. Begin with a single MySQL server +# 2. Establish traditional MySQL master-slave replication +# 3. Attach a new sever to serve as a MySQL replication slave +# 4. Enable Galera on the new slave and create a single-node Galera cluster +# 5. Attach a second Galera node +# 6. Turn off the traditional replication parts of the system +# 7. Continue replicating within Galera only +# + +--source include/big_test.inc +--source include/have_innodb.inc +--source include/have_log_bin.inc + +# +# Step #1 Begin with a single server +# + +--connect node_1, 127.0.0.1, root, , test, $NODE_MYPORT_1 + +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +# +# Step #2. Establish traditional MySQL replication +# + +--connect node_2, 127.0.0.1, root, , test, $NODE_MYPORT_2 +--disable_query_log +--eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT = $NODE_MYPORT_1; +--enable_query_log +START SLAVE; + +--connection node_1 +INSERT INTO t1 VALUES (2); + +--connection node_2 +--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +--source include/wait_condition.inc + +--let $wait_condition = SELECT COUNT(*) = 2 FROM t1; +--source include/wait_condition.inc + +# +# Step #3. Attach a second slave, later to be converted to Galera +# + +--connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3 +--disable_query_log +--eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT = $NODE_MYPORT_1; +--enable_query_log +START SLAVE USER='root'; + +--connection node_1 +INSERT INTO t1 VALUES (3); + +--connection node_3 +--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +--source include/wait_condition.inc + +--let $wait_condition = SELECT COUNT(*) = 3 FROM t1; +--source include/wait_condition.inc + +# +# Step #4. Convert this MySQL slave into a Galera node +# + +--connection node_1 +INSERT INTO t1 VALUES (4); + +--connection node_3 +--disable_query_log +--eval SET GLOBAL wsrep_provider='$WSREP_PROVIDER' +--eval SET GLOBAL wsrep_provider_options='base_port=$NODE_GALERAPORT_3' +--enable_query_log +SET GLOBAL wsrep_cluster_address='gcomm://'; + +--connection node_1 +INSERT INTO t1 VALUES (5); + +--connection node_3 +--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +--source include/wait_condition.inc +--let $wait_condition = SELECT COUNT(*) = 5 FROM t1; +--source include/wait_condition.inc + +--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +--source include/wait_condition.inc + +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; + +--connection node_1 +INSERT INTO t1 VALUES (6); + +# +# Step #5. Attach a second Galera node using mysqldump SST +# + +--connection node_3 +# We need a user with a password for mysqldump SST +GRANT ALL PRIVILEGES ON *.* TO 'sst' IDENTIFIED BY 'sst'; +SET GLOBAL wsrep_sst_auth = 'sst:sst'; + +--connect node_4, 127.0.0.1, root, , test, $NODE_MYPORT_4 +GRANT ALL PRIVILEGES ON *.* TO 'sst' IDENTIFIED BY 'sst'; + +--disable_query_log +--eval SET GLOBAL wsrep_sst_method = 'mysqldump'; +--eval SET GLOBAL wsrep_provider='$WSREP_PROVIDER' +--eval SET GLOBAL wsrep_provider_options='base_port=$NODE_GALERAPORT_4' +--eval SET GLOBAL wsrep_sst_receive_address = '127.0.0.2:$NODE_MYPORT_4'; +--eval SET GLOBAL wsrep_cluster_address='gcomm://127.0.0.1:$NODE_GALERAPORT_3' +--enable_query_log + +--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +--source include/wait_condition.inc + +--let $wait_condition = SELECT COUNT(*) = 6 FROM t1; +--source include/wait_condition.inc + +--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +--source include/wait_condition.inc + +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; + + +# +# Step #6. Turn off traditional replication +# + +--connection node_2 +STOP SLAVE; +RESET SLAVE ALL; + +--connection node_3 +STOP SLAVE; +RESET SLAVE ALL; + +# +# Step #7. Continue replicating within Galera only +# + +# We need fresh connections due to galera#191 + +--connect node_3a, 127.0.0.1, root, , test, $NODE_MYPORT_3 +INSERT INTO t1 VALUES (7); + +--connect node_4a, 127.0.0.1, root, , test, $NODE_MYPORT_4 +INSERT INTO t1 VALUES (8); + +--connection node_4a +SELECT COUNT(*) = 8 FROM t1; + +--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +--source include/wait_condition.inc + +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; + +--connection node_3a +SELECT COUNT(*) = 8 FROM t1; + +--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +--source include/wait_condition.inc + +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; + +# +# Teardown +# + +--connection node_1 +DROP TABLE t1; + +--connection node_2 +DROP TABLE t1; + +--connection node_3 +SET GLOBAL wsrep_provider = 'none'; +SET GLOBAL wsrep_sst_auth = ''; +SET GLOBAL wsrep_provider_options = ''; +DROP TABLE t1; +DROP USER sst; + +--connection node_4 +SET GLOBAL wsrep_provider = 'none'; +SET GLOBAL wsrep_sst_method = 'rsync'; +SET GLOBAL wsrep_provider_options = ''; +SET GLOBAL wsrep_sst_receive_address = 'AUTO'; +DROP TABLE t1; +DROP USER sst; + +CALL mtr.add_suppression("InnoDB: Error: Table \"mysql\"\\.\"innodb_index_stats\" not found"); diff --git a/mysql-test/suite/galera/t/galera_multi_database.test b/mysql-test/suite/galera/t/galera_multi_database.test new file mode 100644 index 00000000000..6e06aaaa2c6 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_multi_database.test @@ -0,0 +1,43 @@ +# +# Test that identical updates can be delivered to two separate +# databases without this causing a certification conflict +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE DATABASE d1; +CREATE TABLE d1.t1(f1 INTEGER) ENGINE=InnoDB; + +CREATE DATABASE d2; +CREATE TABLE d2.t1(f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; + +--connection node_1 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO d1.t1 VALUES (1); + +--connection node_2 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO d2.t1 VALUES (1); + +--connection node_1 +COMMIT; + +--connection node_2 +COMMIT; + +SELECT COUNT(*) = 1 FROM d1.t1; +SELECT COUNT(*) = 1 FROM d2.t1; + +--connection node_1 + +SELECT COUNT(*) = 1 FROM d1.t1; +SELECT COUNT(*) = 1 FROM d2.t1; + +DROP TABLE d1.t1; +DROP TABLE d2.t1; + +DROP DATABASE d1; +DROP DATABASE d2; diff --git a/mysql-test/suite/galera/t/galera_myisam_autocommit.test b/mysql-test/suite/galera/t/galera_myisam_autocommit.test new file mode 100644 index 00000000000..b01b5dc07f7 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_myisam_autocommit.test @@ -0,0 +1,45 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# This tests simple autocommit replication of MyISAM tables. No updates arrive on the slave. +# + +# Without a PK + +CREATE TABLE t1 (f1 INTEGER) ENGINE=MyISAM; + +INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2), (3); +INSERT INTO t1 SELECT 4 FROM DUAL UNION ALL SELECT 5 FROM DUAL; + +CREATE TABLE t2 (f1 INTEGER PRIMARY KEY) ENGINE=MyISAM; +INSERT INTO t2 VALUES (1); +INSERT INTO t2 VALUES (2), (3); +INSERT INTO t2 SELECT 4 FROM DUAL UNION ALL SELECT 5 FROM DUAL; + +# Error +--error ER_DUP_ENTRY +INSERT INTO t2 VALUES (6), (1); + +# UPDATE + +UPDATE t1 SET f1 = 9; +UPDATE t2 SET f1 = 9 WHERE f1 = 1; + +# DELETE + +DELETE FROM t1 WHERE f1 = 9; +DELETE FROM t2 WHERE f1 = 9; + +# TRUNCATE + +TRUNCATE TABLE t1; +TRUNCATE TABLE t1; + +--connection node_2 +SELECT COUNT(*) = 0 FROM t1; +SELECT COUNT(*) = 0 FROM t2; + +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/suite/galera/t/galera_myisam_transactions.test b/mysql-test/suite/galera/t/galera_myisam_transactions.test new file mode 100644 index 00000000000..00e0bf3fdca --- /dev/null +++ b/mysql-test/suite/galera/t/galera_myisam_transactions.test @@ -0,0 +1,36 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# This tests MyISAM tables in transactions. No MyISAM updates arrive on the slave, but InnoDB ones do. +# + +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +CREATE TABLE t2 (f1 INTEGER) ENGINE=MyISAM; +CREATE TABLE t3 (f1 INTEGER) ENGINE=MyISAM; + +CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW INSERT INTO t3 VALUES (NEW.f1); + +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); +COMMIT; + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1; +SELECT COUNT(*) = 0 FROM t2; +SELECT COUNT(*) = 0 FROM t2; + +--connection node_1 +START TRANSACTION; +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); +ROLLBACK; + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1; +SELECT COUNT(*) = 0 FROM t2; +SELECT COUNT(*) = 0 FROM t2; + +DROP TABLE t1, t2, t3; diff --git a/mysql-test/suite/galera/t/galera_nopk_unicode.test b/mysql-test/suite/galera/t/galera_nopk_unicode.test new file mode 100644 index 00000000000..e036e14ebe0 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_nopk_unicode.test @@ -0,0 +1,43 @@ +# +# Test non-ascii data in table without a PK +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE t1 ( + f1 VARCHAR(255), + KEY (f1) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +INSERT INTO t1 VALUES ('текст'); + +--connection node_2 +SELECT f1 = 'текст' FROM t1; + +# +# Provoke a conflict +# + +--connection node_1 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1 SET f1 = 'текст2'; + +--connection node_2 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1 SET f1 = 'текст3'; + +--connection node_1 +COMMIT; + +--connection node_2 +--error ER_LOCK_DEADLOCK +COMMIT; + +SELECT f1 = 'текст2' FROM t1; +SELECT f1 = 'текст2' FROM t1 WHERE f1 = 'текст2'; + + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_parallel_apply_lock_table.test b/mysql-test/suite/galera/t/galera_parallel_apply_lock_table.test new file mode 100644 index 00000000000..a071a1fab1b --- /dev/null +++ b/mysql-test/suite/galera/t/galera_parallel_apply_lock_table.test @@ -0,0 +1,51 @@ +# +# Test that a LOCK TABLE on the slave will cause all applier threads to block, +# Even though the two INSERTS are independent transactions, the fact that t1 is locked +# prevents the applier thread from committing the insert against t2, as commits are done +# in order. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB; +CREATE TABLE t2 (id INT PRIMARY KEY) ENGINE=InnoDB; + +--connection node_2 + +--let $wsrep_slave_threads_orig = `SELECT @@wsrep_slave_threads` +--let $wsrep_sync_wait_orig = `SELECT @@wsrep_sync_wait` + +SET GLOBAL wsrep_slave_threads = 2; +LOCK TABLE t1 READ; + +--connection node_1 +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); + +# We use a separate connection here so that we can SELECT from both tables +# without running into "table t2 was not locked" error. + +--let $galera_connection_name = node_2a +--let $galera_server_number = 2 +--source include/galera_connect.inc +--connection node_2a +--sleep 1 +SET SESSION wsrep_sync_wait=0; +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE '%applied write set%'; +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE '%Waiting for table level lock%'; +SELECT COUNT(*) = 0 FROM t1; +SELECT COUNT(*) = 0 FROM t2; + +--connection node_2 +UNLOCK TABLES; + +--connection node_2a +--eval SET SESSION wsrep_sync_wait = $wsrep_sync_wait_orig; +SELECT COUNT(*) = 1 FROM t1; +SELECT COUNT(*) = 1 FROM t2; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'closing tables'; + +--eval SET GLOBAL wsrep_slave_threads = $wsrep_slave_threads_orig; +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/suite/galera/t/galera_parallel_autoinc_largetrx.test b/mysql-test/suite/galera/t/galera_parallel_autoinc_largetrx.test new file mode 100644 index 00000000000..a192044754d --- /dev/null +++ b/mysql-test/suite/galera/t/galera_parallel_autoinc_largetrx.test @@ -0,0 +1,50 @@ +## +## This test tests parallel application of multiple auto-increment insert transactions +## + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# Create a second connection to node1 so that we can run transactions concurrently +--let $galera_connection_name = node_1a +--let $galera_server_number = 1 +--source include/galera_connect.inc + +--connection node_1 +CREATE TABLE ten (f1 INTEGER); +INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); + +CREATE TABLE t1 (f1 INTEGER AUTO_INCREMENT PRIMARY KEY, f2 INTEGER) Engine=InnoDB; +--connection node_2 +--let $wsrep_slave_threads_orig = `SELECT @@wsrep_slave_threads` +SET GLOBAL wsrep_slave_threads = 4; + +--connection node_1 +--send INSERT INTO t1 (f2) SELECT 1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4; + +--connection node_1a +--send INSERT INTO t1 (f2) SELECT 1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4; + +--connection node_2 +--send INSERT INTO t1 (f2) SELECT 1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4; + +--connection node_1 +--reap + +--connection node_1a +--reap + +--connection node_2 +--reap +SELECT COUNT(*) = 30000 FROM t1; +SELECT COUNT(DISTINCT f1) = 30000 FROM t1; +SELECT COUNT(*) = 5 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user'; + +--disable_query_log +--eval SET GLOBAL wsrep_slave_threads = $wsrep_slave_threads_orig; +--enable_query_log + +--connection default +DROP TABLE t1; +DROP TABLE ten; + diff --git a/mysql-test/suite/galera/t/galera_parallel_autoinc_manytrx.test b/mysql-test/suite/galera/t/galera_parallel_autoinc_manytrx.test new file mode 100644 index 00000000000..d67eba4d37c --- /dev/null +++ b/mysql-test/suite/galera/t/galera_parallel_autoinc_manytrx.test @@ -0,0 +1,53 @@ +## +## Tests the parallel application of many small-ish auto-increment insert transactions +## + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# Create a second connection to node1 so that we can run transactions concurrently +--let $galera_connection_name = node_1a +--let $galera_server_number = 1 +--source include/galera_connect.inc + +--connection node_1 +CREATE TABLE ten (f1 INTEGER); +INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); + +CREATE TABLE t1 (f1 INTEGER AUTO_INCREMENT PRIMARY KEY, f2 INTEGER) Engine=InnoDB; +--connection node_2 +--let $wsrep_slave_threads_orig = `SELECT @@wsrep_slave_threads` +SET GLOBAL wsrep_slave_threads = 4; + +--connection node_1 +--let $count = 1000 +while ($count) +{ + --disable_query_log + INSERT INTO t1 (f2) SELECT 1 FROM ten AS a1; + --enable_query_log + --dec $count +} + +--connection node_2 +--let $count = 1000 +while ($count) +{ + --disable_query_log + INSERT INTO t1 (f2) SELECT 1 FROM ten AS a1; + --enable_query_log + --dec $count +} + +SELECT COUNT(*) = 20000 FROM t1; +SELECT COUNT(DISTINCT f1) = 20000 FROM t1; +SELECT COUNT(*) = 4 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND STATE LIKE 'closing tables'; + +--disable_query_log +--eval SET GLOBAL wsrep_slave_threads = $wsrep_slave_threads_orig; +--enable_query_log + +--connection default +DROP TABLE t1; +DROP TABLE ten; + diff --git a/mysql-test/suite/galera/t/galera_parallel_simple.test b/mysql-test/suite/galera/t/galera_parallel_simple.test new file mode 100644 index 00000000000..a1429954980 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_parallel_simple.test @@ -0,0 +1,45 @@ +# +# Test that SHOW PROCESSLIST reports that two slave threads have been involved in applying +# two independent transactions +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--let $wsrep_slave_threads_orig = `SELECT @@wsrep_slave_threads` + +CREATE TABLE t1 (id INT) ENGINE=InnoDB; +CREATE TABLE t2 (id INT) ENGINE=InnoDB; + +--connection node_2 +SET GLOBAL wsrep_slave_threads = 2; + +--connection node_1 +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); + +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); + +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); + +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); + +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); + +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); + +--connection node_2 + +SELECT COUNT(*) = 6 FROM t1; +SELECT COUNT(*) = 6 FROM t2; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'closing tables'; + +--eval SET GLOBAL wsrep_slave_threads = $wsrep_slave_threads_orig; + +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/suite/galera/t/galera_pc_ignore_sb.test b/mysql-test/suite/galera/t/galera_pc_ignore_sb.test new file mode 100644 index 00000000000..f63215ebe4a --- /dev/null +++ b/mysql-test/suite/galera/t/galera_pc_ignore_sb.test @@ -0,0 +1,49 @@ +# +# Test pc.ignore_sb=true wsrep_provider option . Killing one node should leave the other running. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# Save original auto_increment_offset values. +--connection node_1 +let $auto_increment_offset_node_1 = `SELECT @@global.auto_increment_offset`; +--connection node_2 +let $auto_increment_offset_node_2 = `SELECT @@global.auto_increment_offset`; + +--connection node_1 +--let $wsrep_cluster_address_orig = `SELECT @@wsrep_cluster_address` +--let $wsrep_provider_options_orig = `SELECT @@wsrep_provider_options` + +SET GLOBAL wsrep_provider_options = 'pc.ignore_sb=true'; + +--connection node_2 +--source include/kill_galera.inc + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +DROP TABLE t1; + +SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; + +# Reset the master and restart the slave so that post-test checks can run + +SET GLOBAL wsrep_cluster_address = ''; +--disable_query_log +--eval SET GLOBAL wsrep_cluster_address = '$wsrep_cluster_address_orig'; +--eval SET GLOBAL wsrep_provider_options = '$wsrep_provider_options_orig'; +--enable_query_log + +--connection node_2 +--source include/start_mysqld.inc +--source include/wait_until_connected_again.inc + +--disable_query_log +# Restore original auto_increment_offset values. +--connection node_1 +--eval SET @@global.auto_increment_offset = $auto_increment_offset_node_1; +--connection node_2 +--eval SET @@global.auto_increment_offset = $auto_increment_offset_node_2; +--enable_query_log diff --git a/mysql-test/suite/galera/t/galera_pk_bigint_signed.test b/mysql-test/suite/galera/t/galera_pk_bigint_signed.test new file mode 100644 index 00000000000..12a8a8f5d64 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_pk_bigint_signed.test @@ -0,0 +1,46 @@ +# +# PK that is a BIGINT SIGNED +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE t1 (f1 BIGINT SIGNED PRIMARY KEY, f2 VARCHAR(5)) ENGINE=InnoDB; + +INSERT INTO t1 VALUES + (-9223372036854775808, 'min'), + (9223372036854775807, 'max') +; + +--connection node_2 +SELECT * FROM t1; + +UPDATE t1 SET f2 = CONCAT(f2, '_'); + +--connection node_1 +SELECT * FROM t1; + +# +# Deadlock +# + +--connection node_1 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1 SET f2 = 'foo' WHERE f1 = -9223372036854775808; + +--connection node_2 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1 SET f2 = 'bar' WHERE f1 = -9223372036854775808; + +--connection node_1 +COMMIT; +SET AUTOCOMMIT=ON; + +--connection node_2 +--error ER_LOCK_DEADLOCK +COMMIT; +SET AUTOCOMMIT=ON; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_pk_bigint_unsigned.test b/mysql-test/suite/galera/t/galera_pk_bigint_unsigned.test new file mode 100644 index 00000000000..2bb02d5ea4e --- /dev/null +++ b/mysql-test/suite/galera/t/galera_pk_bigint_unsigned.test @@ -0,0 +1,45 @@ +# +# PK that is a BIGINT UNSIGNED +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE t1 (f1 BIGINT UNSIGNED PRIMARY KEY, f2 VARCHAR(5)) ENGINE=InnoDB; + +INSERT INTO t1 VALUES + (18446744073709551615, 'max') +; + +--connection node_2 +SELECT f1 = 18446744073709551615 FROM t1; + +UPDATE t1 SET f2 = CONCAT(f2, '_'); + +--connection node_1 +SELECT f1 = 18446744073709551615 FROM t1; + +# +# Deadlock +# + +--connection node_1 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1 SET f2 = 'foo' WHERE f1 = 18446744073709551615; + +--connection node_2 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1 SET f2 = 'bar' WHERE f1 = 18446744073709551615; + +--connection node_1 +COMMIT; +SET AUTOCOMMIT=ON; + +--connection node_2 +--error ER_LOCK_DEADLOCK +COMMIT; +SET AUTOCOMMIT=ON; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_query_cache-master.opt b/mysql-test/suite/galera/t/galera_query_cache-master.opt new file mode 100644 index 00000000000..cb983993b91 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_query_cache-master.opt @@ -0,0 +1,3 @@ +--query_cache_type=1 --query_cache_size=1355776 + + diff --git a/mysql-test/suite/galera/t/galera_query_cache.test b/mysql-test/suite/galera/t/galera_query_cache.test new file mode 100644 index 00000000000..900faba0e1b --- /dev/null +++ b/mysql-test/suite/galera/t/galera_query_cache.test @@ -0,0 +1,67 @@ +--source include/have_query_cache.inc +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# Ensure that the query cache behaves properly with respect to Galera +# +# * in the absence of updates, the query cache does serve cached results +# * any cache-invalidating query on the remote node also causes the local cache to be invalidated +# + +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB; + +INSERT INTO t1 VALUES (1); + +--connection node_2 +RESET QUERY CACHE; +FLUSH STATUS; + +# +# 1. Cache works +# + +SELECT COUNT(*) FROM t1; +SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Qcache_queries_in_cache'; + +SELECT COUNT(*) FROM t1; +SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'Qcache_hits'; + +# +# 2. Cache is invalidated by DML on remote node +# + +--connection node_1 +INSERT INTO t1 VALUES (2); + +--connection node_2 +FLUSH STATUS; + +SELECT VARIABLE_VALUE = 0 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Qcache_queries_in_cache'; +SELECT COUNT(*) FROM t1; +SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Qcache_queries_in_cache'; + +SELECT VARIABLE_VALUE = 0 FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'Qcache_hits'; +SELECT COUNT(*) FROM t1; +SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'Qcache_hits'; + +# +# 3. Cache is invalidated by DDL on remote node +# + +--connection node_1 +ALTER TABLE t1 ADD COLUMN f2 INTEGER; + +--connection node_2 +FLUSH STATUS; + +SELECT VARIABLE_VALUE = 0 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Qcache_queries_in_cache'; +SELECT COUNT(*) FROM t1; +SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Qcache_queries_in_cache'; + +SELECT VARIABLE_VALUE = 0 FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'Qcache_hits'; +SELECT COUNT(*) FROM t1; +SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'Qcache_hits'; + +DROP TABLE t1; + diff --git a/mysql-test/suite/galera/t/galera_read_only.test b/mysql-test/suite/galera/t/galera_read_only.test new file mode 100644 index 00000000000..828f35d2ba3 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_read_only.test @@ -0,0 +1,23 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# Ensure that the read_only option does not apply to Galera appliers and that replication +# continues, the way MySQL replication would. +# + +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB; + +--connection node_2 +SET GLOBAL read_only=TRUE; + +--connection node_1 +INSERT INTO t1 VALUES (1); + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1; + +SET GLOBAL read_only=FALSE; + +DROP TABLE t1; + diff --git a/mysql-test/suite/galera/t/galera_repl_key_format_flat16.test b/mysql-test/suite/galera/t/galera_repl_key_format_flat16.test new file mode 100644 index 00000000000..8749c20faed --- /dev/null +++ b/mysql-test/suite/galera/t/galera_repl_key_format_flat16.test @@ -0,0 +1,34 @@ +# +# Test repl.key_format = FLAT16 . Since it is very difficult to cause a collision on a 16-byte hash, +# we simply verify that the option is settable and that replication works. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--connection node_1 +--let $wsrep_provider_options_orig = `SELECT @@wsrep_provider_options` +SET GLOBAL wsrep_provider_options = 'repl.key_format=FLAT16'; + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (123); + +CREATE TABLE t2 (f1 VARCHAR(256)) ENGINE=InnoDB; +INSERT INTO t2 VALUES (REPEAT('a', 256)); + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1; +UPDATE t1 SET f1 = 234; +UPDATE t2 SET f1 = REPEAT('b', 256); + +--connection node_1 +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 234; +SELECT COUNT(*) = 1 FROM t2 WHERE f1 = REPEAT('b', 256); + + +--disable_query_log +--eval SET GLOBAL wsrep_provider_options = '$wsrep_provider_options_orig'; +--enable_query_log + +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/suite/galera/t/galera_repl_max_ws_size.test b/mysql-test/suite/galera/t/galera_repl_max_ws_size.test new file mode 100644 index 00000000000..37a2f7d4ce3 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_repl_max_ws_size.test @@ -0,0 +1,25 @@ +# +# Test repl.max_ws_size . A transaction larger than this size can not commit. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--connection node_1 +--let $wsrep_provider_options_orig = `SELECT @@wsrep_provider_options` + +CREATE TABLE t1 (f1 VARCHAR(512)) ENGINE=InnoDB; + +SET GLOBAL wsrep_provider_options = 'repl.max_ws_size=512'; + +--error ER_ERROR_DURING_COMMIT +INSERT INTO t1 VALUES (REPEAT('a', 512)); + +SELECT COUNT(*) = 0 FROM t1; + +--disable_query_log +--eval SET GLOBAL wsrep_provider_options = '$wsrep_provider_options_orig'; +--enable_query_log + +DROP TABLE t1; + diff --git a/mysql-test/suite/galera/t/galera_restart_nochanges.test b/mysql-test/suite/galera/t/galera_restart_nochanges.test new file mode 100644 index 00000000000..8eb7617b8a6 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_restart_nochanges.test @@ -0,0 +1,23 @@ +# +# This test restarts a slave while no updates have been performed on the master. No SST is performed. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +--connection node_2 +--source include/restart_mysqld.inc + +--let $galera_connection_name = node_2a +--let $galera_server_number = 2 +--source include/galera_connect.inc +--connection node_2a + +SELECT COUNT(*) = 1 FROM t1; +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_rsu_add_pk.test b/mysql-test/suite/galera/t/galera_rsu_add_pk.test new file mode 100644 index 00000000000..7db990d7be1 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_rsu_add_pk.test @@ -0,0 +1,43 @@ +# +# ALTER TABLE ... ADD PRIMARY KEY under Rolling Schema Upgrade +# + +--source include/big_test.inc +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--connection node_1 +CREATE TABLE ten (f1 INTEGER); +INSERT INTO ten VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); + +CREATE TABLE t1 (f1 INTEGER) Engine=InnoDB; + +# Insert some values before the ALTER +INSERT INTO t1 (f1) SELECT 000000 + (10000 * a1.f1) + (1000 * a2.f1) + (100 * a3.f1) + (10 * a4.f1) + a5.f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5; + +# Insert more values while the ALTER is running +--send INSERT INTO t1 (f1) SELECT 100000 + (10000 * a1.f1) + (1000 * a2.f1) + (100 * a3.f1) + (10 * a4.f1) + a5.f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5; + +--connection node_2 +SET SESSION wsrep_OSU_method = "RSU"; +ALTER TABLE t1 ADD PRIMARY KEY (f1); +SET SESSION wsrep_OSU_method = "TOI"; + +# Insert values after the ALTER +INSERT INTO t1 (f1) SELECT 200000 + (10000 * a1.f1) + (1000 * a2.f1) + (100 * a3.f1) + (10 * a4.f1) + a5.f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5; + + +SELECT COUNT(*) = 300000 FROM t1; +SELECT MAX(f1) = 299999 FROM t1; + +--connection node_1 +--reap +SELECT COUNT(*) = 300000 FROM t1; +SELECT MAX(f1) = 299999 FROM t1; + +SET SESSION wsrep_OSU_method = "RSU"; +ALTER TABLE t1 ADD PRIMARY KEY (f1); +SET SESSION wsrep_OSU_method = "TOI"; + +DROP TABLE t1; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/t/galera_rsu_drop_pk.test b/mysql-test/suite/galera/t/galera_rsu_drop_pk.test new file mode 100644 index 00000000000..e64259494d1 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_rsu_drop_pk.test @@ -0,0 +1,58 @@ +# +# ALTER TABLE ... DROP PRIMARY KEY under Rolling Schema Upgrade +# + +--source include/big_test.inc +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--connection node_1 +CREATE TABLE ten (f1 INTEGER); +INSERT INTO ten VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) Engine=InnoDB; + +# Insert some values before the ALTER +INSERT INTO t1 (f1) SELECT 000000 + (10000 * a1.f1) + (1000 * a2.f1) + (100 * a3.f1) + (10 * a4.f1) + a5.f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5; + +# Insert more values while the ALTER is running +--send INSERT INTO t1 (f1) SELECT 100000 + (10000 * a1.f1) + (1000 * a2.f1) + (100 * a3.f1) + (10 * a4.f1) + a5.f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5; + +--connection node_2 +SET SESSION wsrep_OSU_method = "RSU"; +ALTER TABLE t1 DROP PRIMARY KEY; +SET SESSION wsrep_OSU_method = "TOI"; + +# Insert even more data after the ALTER has completed +INSERT INTO t1 (f1) SELECT 200000 + (10000 * a1.f1) + (1000 * a2.f1) + (100 * a3.f1) + (10 * a4.f1) + a5.f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5; + +SELECT COUNT(*) = 300000 FROM t1; +SELECT MAX(f1) = 299999 FROM t1; + +--connection node_1 +--reap +SELECT COUNT(*) = 300000 FROM t1; +SELECT MAX(f1) = 299999 FROM t1; + +SET SESSION wsrep_OSU_method = "RSU"; +ALTER TABLE t1 DROP PRIMARY KEY; +SET SESSION wsrep_OSU_method = "TOI"; + +# Insert some previously-conflicting values after the ALTER has been applied on all nodes. +--connection node_2 +INSERT INTO t1 (f1) VALUES (1); +INSERT INTO t1 (f1) VALUES (10); + +--connection node_1 +SELECT COUNT(*) = 2 FROM t1 WHERE f1 = 1; +SELECT COUNT(*) = 2 FROM t1 WHERE f1 = 10; + +INSERT INTO t1 (f1) VALUES (100); +INSERT INTO t1 (f1) VALUES (1000); + +--connection node_2 +SELECT COUNT(*) = 2 FROM t1 WHERE f1 = 100; +SELECT COUNT(*) = 2 FROM t1 WHERE f1 = 1000; + +DROP TABLE t1; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/t/galera_rsu_error.test b/mysql-test/suite/galera/t/galera_rsu_error.test new file mode 100644 index 00000000000..cad8154ac76 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_rsu_error.test @@ -0,0 +1,31 @@ +# +# Test DDL errors under Rolling Schema Upgrade +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE t1 (f1 INTEGER) Engine=InnoDB; +INSERT INTO t1 VALUES (1), (1); + +--connection node_2 +SET SESSION wsrep_OSU_method = "RSU"; +--error ER_DUP_ENTRY +ALTER TABLE t1 ADD PRIMARY KEY (f1); +SET SESSION wsrep_OSU_method = "TOI"; + +# The ALTER has no effect +SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 't1'; + +INSERT INTO t1 VALUES (1); + +--connection node_1 +SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 't1'; +SELECT COUNT(*) = 3 FROM t1; + +INSERT INTO t1 VALUES (1); + +--connection node_2 +SELECT COUNT(3) = 4 FROM t1; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_rsu_simple.test b/mysql-test/suite/galera/t/galera_rsu_simple.test new file mode 100644 index 00000000000..5841dbd8006 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_rsu_simple.test @@ -0,0 +1,34 @@ +# +# Test Rolling Schema Upgrade +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) Engine=InnoDB; + +--connection node_2 +SET SESSION wsrep_OSU_method = "RSU"; +ALTER TABLE t1 ADD COLUMN f2 INTEGER; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; + +--connection node_1 +# The ALTER above is not visible on node_1 +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; + +INSERT INTO t1 VALUES (1); + +--connection node_2 +# The INSERT above is now visible on node_2 +SELECT COUNT(*) = 1 FROM t1; + +INSERT INTO t1 (f1) VALUES (2); + +--connection node_1 +# The ALTER has not replicated +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; + +# However the INSERT above has +SELECT COUNT(*) = 2 FROM t1; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_sbr.test b/mysql-test/suite/galera/t/galera_sbr.test new file mode 100644 index 00000000000..33f45c6b532 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_sbr.test @@ -0,0 +1,27 @@ +# +# Test behavior if the user attempts to use statement-based replication +# +# SBR is not currently supported but we expect that no crashes or binlog-related assertions will be triggered. +# + +--source include/have_innodb.inc +--source include/galera_cluster.inc + +--connection node_1 +#SET GLOBAL binlog_format = 'STATEMENT'; +SET SESSION binlog_format = 'STATEMENT'; + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +SET SESSION binlog_format = 'MIXED'; + +INSERT INTO t1 VALUES (2); + +--connection node_2 +SELECT COUNT(*) = 2 FROM t1; + +DROP TABLE t1; + +--connection node_1 +SET GLOBAL binlog_format = 'ROW'; diff --git a/mysql-test/suite/galera/t/galera_sbr_binlog-master.opt b/mysql-test/suite/galera/t/galera_sbr_binlog-master.opt new file mode 100644 index 00000000000..beae84b3862 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_sbr_binlog-master.opt @@ -0,0 +1 @@ +--log-bin diff --git a/mysql-test/suite/galera/t/galera_sbr_binlog.test b/mysql-test/suite/galera/t/galera_sbr_binlog.test new file mode 100644 index 00000000000..1291a4ff8a9 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_sbr_binlog.test @@ -0,0 +1,28 @@ +# +# Test behavior if the user attempts to use statement-based replication +# +# SBR is not currently supported but we expect that no crashes or binlog-related assertions will be triggered. +# + +--source include/have_log_bin.inc +--source include/have_innodb.inc +--source include/galera_cluster.inc + +--connection node_1 +#SET GLOBAL binlog_format = 'STATEMENT'; +SET SESSION binlog_format = 'STATEMENT'; + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +SET SESSION binlog_format = 'MIXED'; + +INSERT INTO t1 VALUES (2); + +--connection node_2 +SELECT COUNT(*) = 2 FROM t1; + +DROP TABLE t1; + +--connection node_1 +SET GLOBAL binlog_format = 'ROW'; diff --git a/mysql-test/suite/galera/t/galera_split_brain.test b/mysql-test/suite/galera/t/galera_split_brain.test new file mode 100644 index 00000000000..c3e779618df --- /dev/null +++ b/mysql-test/suite/galera/t/galera_split_brain.test @@ -0,0 +1,53 @@ +# +# Confirm that with two nodes, killing one causes the other to stop accepting connections +# The pc.ignore_sb=true wsrep_provider option is tested in the galera_kill_* tests. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +call mtr.add_suppression("WSREP: TO isolation failed for: "); + +--connection node_1 +--let $wsrep_cluster_address_orig = `SELECT @@wsrep_cluster_address` + +# Save original auto_increment_offset values. +--connection node_1 +let $auto_increment_offset_node_1 = `SELECT @@global.auto_increment_offset`; +--connection node_2 +let $auto_increment_offset_node_2 = `SELECT @@global.auto_increment_offset`; + +--connection node_2 +--source include/kill_galera.inc + +--connection node_1 +--error ER_LOCK_DEADLOCK +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; + +# Reset the master and restart the slave so that post-test checks can run + +SET GLOBAL wsrep_cluster_address = ''; +--disable_query_log +--eval SET GLOBAL wsrep_cluster_address = '$wsrep_cluster_address_orig'; +--enable_query_log + +--source include/start_mysqld.inc +--sleep 5 +--source include/wait_until_connected_again.inc + +--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc + +--sleep 5 + +--connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2 +--source include/wait_until_connected_again.inc + +# Restore original auto_increment_offset values. +--disable_query_log +--connection node_1 +--eval SET @@global.auto_increment_offset = $auto_increment_offset_node_1; +--connection node_2a +--eval SET @@global.auto_increment_offset = $auto_increment_offset_node_2; +--enable_query_log + diff --git a/mysql-test/suite/galera/t/galera_sql_log_bin_zero.test b/mysql-test/suite/galera/t/galera_sql_log_bin_zero.test new file mode 100644 index 00000000000..b6965faa739 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_sql_log_bin_zero.test @@ -0,0 +1,25 @@ +# +# Test SET SESSION sql_log_bin = 0 . We expect that unlogged updates will not be replicated +# to the slave and that there will be no assertions in the process. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; + +SET SESSION sql_log_bin = 0; + +INSERT INTO t1 VALUES (1); + +SET SESSION sql_log_bin = 1; + +INSERT INTO t1 VALUES (2); + + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1; +SELECT COUNT(*) = 0 FROM t1 WHERE f1 = 1; + +--connection node_1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_ssl.cnf b/mysql-test/suite/galera/t/galera_ssl.cnf new file mode 100644 index 00000000000..1c22580cc15 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_ssl.cnf @@ -0,0 +1,7 @@ +!include ../galera_2nodes.cnf + +[mysqld.1] +wsrep_provider_options='base_port=@mysqld.1.#galera_port;gcache.size=10M;socket.ssl=yes;socket.ssl_cert=@ENV.MYSQL_TEST_DIR/std_data/galera-cert.pem;socket.ssl_key=@ENV.MYSQL_TEST_DIR/std_data/galera-key.pem' + +[mysqld.2] +wsrep_provider_options='base_port=@mysqld.2.#galera_port;gcache.size=10M;socket.ssl=yes;socket.ssl_cert=@ENV.MYSQL_TEST_DIR/std_data/galera-cert.pem;socket.ssl_key=@ENV.MYSQL_TEST_DIR/std_data/galera-key.pem' diff --git a/mysql-test/suite/galera/t/galera_ssl.test b/mysql-test/suite/galera/t/galera_ssl.test new file mode 100644 index 00000000000..8dc94dc1966 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_ssl.test @@ -0,0 +1,24 @@ +# +# Test node connections over SSL. The accompanying galera_ssl.cnf has a customized +# wsrep_provider_options setting that enables SSL. +# +# At this time, the actual operation of SSL is not visible only in the error log and not in SHOW STATUS. +# So this test can only check that the cluster has formed and is replicating. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) Engine=InnoDB; +INSERT INTO t1 VALUES (1); + +--connection node_2 +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; + +SELECT COUNT(*) = 1 FROM t1; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_sst_mysqldump.cnf b/mysql-test/suite/galera/t/galera_sst_mysqldump.cnf new file mode 100644 index 00000000000..574ae28b54a --- /dev/null +++ b/mysql-test/suite/galera/t/galera_sst_mysqldump.cnf @@ -0,0 +1,11 @@ +!include ../galera_2nodes.cnf + +# We do not set mysqldump-related SST options here because doing so on startup +# causes the first MTR connection to be forefully dropped by Galera, which in turn confuses MTR + +[mysqld.1] +wsrep_provider_options='base_port=@mysqld.1.#galera_port;gcache.size=1;pc.ignore_sb=true' + +[mysqld.2] +wsrep_provider_options='base_port=@mysqld.2.#galera_port;gcache.size=1;pc.ignore_sb=true' + diff --git a/mysql-test/suite/galera/t/galera_sst_mysqldump.test b/mysql-test/suite/galera/t/galera_sst_mysqldump.test new file mode 100644 index 00000000000..0b7171597dd --- /dev/null +++ b/mysql-test/suite/galera/t/galera_sst_mysqldump.test @@ -0,0 +1,18 @@ +--source include/big_test.inc +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--source suite/galera/include/galera_sst_set_mysqldump.inc + +--source suite/galera/include/galera_st_disconnect_slave.inc + +# We set the required mysqldump SST options here so that they are used every time the server is restarted during the test +--let $start_mysqld_params = --wsrep_sst_auth=sst:sst --wsrep_sst_method=mysqldump --wsrep-sst-receive-address=127.0.0.1:$NODE_MYPORT_2 --skip-grant-tables + +--source suite/galera/include/galera_st_shutdown_slave.inc +--source suite/galera/include/galera_st_clean_slave.inc + +--source suite/galera/include/galera_st_kill_slave.inc +--source suite/galera/include/galera_st_kill_slave_ddl.inc + +--source suite/galera/include/galera_sst_restore.inc diff --git a/mysql-test/suite/galera/t/galera_sst_rsync.cnf b/mysql-test/suite/galera/t/galera_sst_rsync.cnf new file mode 100644 index 00000000000..93981d9daa7 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_sst_rsync.cnf @@ -0,0 +1,11 @@ +!include ../galera_2nodes.cnf + +[mysqld] +wsrep_sst_method=rsync + +[mysqld.1] +wsrep_provider_options='base_port=@mysqld.1.#galera_port;gcache.size=1;pc.ignore_sb=true' + +[mysqld.2] +wsrep_provider_options='base_port=@mysqld.2.#galera_port;gcache.size=1;pc.ignore_sb=true' + diff --git a/mysql-test/suite/galera/t/galera_sst_rsync.test b/mysql-test/suite/galera/t/galera_sst_rsync.test new file mode 100644 index 00000000000..c6823795e59 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_sst_rsync.test @@ -0,0 +1,9 @@ +--source include/big_test.inc +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--source suite/galera/include/galera_st_shutdown_slave.inc +--source suite/galera/include/galera_st_clean_slave.inc + +--source suite/galera/include/galera_st_kill_slave.inc +--source suite/galera/include/galera_st_kill_slave_ddl.inc diff --git a/mysql-test/suite/galera/t/galera_sst_xtrabackup-v2.cnf b/mysql-test/suite/galera/t/galera_sst_xtrabackup-v2.cnf new file mode 100644 index 00000000000..47cb3e02292 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_sst_xtrabackup-v2.cnf @@ -0,0 +1,13 @@ +!include ../galera_2nodes.cnf + +[mysqld] +wsrep_sst_method=xtrabackup-v2 +wsrep_sst_auth="root:" +wsrep_debug=ON + +[mysqld.1] +wsrep_provider_options='base_port=@mysqld.1.#galera_port;gcache.size=1;pc.ignore_sb=true' + +[mysqld.2] +wsrep_provider_options='base_port=@mysqld.2.#galera_port;gcache.size=1;pc.ignore_sb=true' + diff --git a/mysql-test/suite/galera/t/galera_sst_xtrabackup-v2.test b/mysql-test/suite/galera/t/galera_sst_xtrabackup-v2.test new file mode 100644 index 00000000000..c6823795e59 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_sst_xtrabackup-v2.test @@ -0,0 +1,9 @@ +--source include/big_test.inc +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--source suite/galera/include/galera_st_shutdown_slave.inc +--source suite/galera/include/galera_st_clean_slave.inc + +--source suite/galera/include/galera_st_kill_slave.inc +--source suite/galera/include/galera_st_kill_slave_ddl.inc diff --git a/mysql-test/suite/galera/t/galera_status_cluster.test b/mysql-test/suite/galera/t/galera_status_cluster.test new file mode 100644 index 00000000000..3299613d584 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_status_cluster.test @@ -0,0 +1,18 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# A simple test for the wsrep_cluster_* status variables +# + +--connection node_1 + +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; + +--connection node_2 + +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; + + diff --git a/mysql-test/suite/galera/t/galera_status_local_state.test b/mysql-test/suite/galera/t/galera_status_local_state.test new file mode 100644 index 00000000000..09cdb25f80c --- /dev/null +++ b/mysql-test/suite/galera/t/galera_status_local_state.test @@ -0,0 +1,28 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# Test wsrep_local_state . We can not reliably produce all possible statuses in MTR, but +# we can at least test for the ones we can. +# + +SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state'; +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; + +SET GLOBAL wsrep_desync = 1; + +--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state'; +--source include/wait_condition.inc + +SELECT VARIABLE_VALUE = 'Donor/Desynced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; + +SET GLOBAL wsrep_desync = 0; + +--let $wait_condition = SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state'; +--source include/wait_condition.inc + +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; + + + + diff --git a/mysql-test/suite/galera/t/galera_suspend_slave.test b/mysql-test/suite/galera/t/galera_suspend_slave.test new file mode 100644 index 00000000000..acee3626f7a --- /dev/null +++ b/mysql-test/suite/galera/t/galera_suspend_slave.test @@ -0,0 +1,51 @@ +## +## This test tests that transactions on the master will fail if the slave +## is made completely unresponsive by suspending the process. Resuming the +## process should allow replication to continue to run. +## + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; + +--connection node_2 +--let NODE_2_PIDFILE = `SELECT @@pid_file` +--disconnect node_2 + +--connection node_1 +--echo Suspending node_2 ... +--perl + my $pid_filename = $ENV{'NODE_2_PIDFILE'}; + my $mysqld_pid = `cat $pid_filename`; + chomp($mysqld_pid); + system("kill -19 $mysqld_pid"); + exit(0); +EOF + +--error ER_UNKNOWN_COM_ERROR,ER_LOCK_WAIT_TIMEOUT +INSERT INTO t1 VALUES (1); + +--echo Resuming node_2 ... +--perl + my $pid_filename = $ENV{'NODE_2_PIDFILE'}; + my $mysqld_pid = `cat $pid_filename`; + chomp($mysqld_pid); + system("kill -18 $mysqld_pid"); + exit(0); +EOF + +--sleep 10 +--source include/wait_until_ready.inc +INSERT INTO t1 VALUES (1); + +--let $galera_connection_name = node_2a +--let $galera_server_number = 2 +--source include/galera_connect.inc +--connection node_2a + +--source include/wait_until_ready.inc +SELECT COUNT(*) = 1 FROM t1; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_toi_alter_auto_increment.test b/mysql-test/suite/galera/t/galera_toi_alter_auto_increment.test new file mode 100644 index 00000000000..641d2101c80 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_toi_alter_auto_increment.test @@ -0,0 +1,120 @@ + +# +# Test the operation of ALTER TABLE ... AUTO_INCREMENT +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--connection node_1 +CREATE TABLE ten (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); + +CREATE TABLE t1 (f1 INTEGER AUTO_INCREMENT PRIMARY KEY, f2 INTEGER) ENGINE=InnoDB; + +INSERT INTO t1 (f2) SELECT 1 FROM ten; + +--connection node_2 +INSERT INTO t1 (f2) SELECT 1 FROM ten; + +ALTER TABLE t1 AUTO_INCREMENT = 1000; +INSERT INTO t1 (f2) SELECT 1 FROM ten; + +--connection node_1 +INSERT INTO t1 (f2) SELECT 1 FROM ten; + +SELECT MIN(f1) >= 1000, COUNT(*) = 20, COUNT(DISTINCT f1) = 20 FROM t1 WHERE f1 >= 1000; + +--connection node_2 +SELECT MIN(f1) >= 1000, COUNT(*) = 20, COUNT(DISTINCT f1) = 20 FROM t1 WHERE f1 >= 1000; + +# +# AUTO_INCREMENT set to a value lower than the current one. +# The ALTER does nothing, the sequence continues from the current maximum. +# + +--connection node_1 +ALTER TABLE t1 AUTO_INCREMENT = 5; +INSERT INTO t1 (f2) SELECT 1 FROM ten; + +--connection node_2 +INSERT INTO t1 (f2) SELECT 1 FROM ten; +SELECT MIN(f1) >= 1000, COUNT(*) = 40, COUNT(DISTINCT f1) = 40 FROM t1 WHERE f1 >= 1000; + +--connection node_1 +SELECT MIN(f1) >= 1000, COUNT(*) = 40, COUNT(DISTINCT f1) = 40 FROM t1 WHERE f1 >= 1000; + +DROP TABLE t1; + +# +# Under wsrep_auto_increment_control = OFF +# + +--connection node_1 +--let $auto_increment_control_orig = `SELECT @@wsrep_auto_increment_control` +--let $auto_increment_increment_node1 = `SELECT @@auto_increment_increment` +--let $auto_increment_offset_node1 = `SELECT @@auto_increment_offset` + +# Restore stock MySQL defaults +SET GLOBAL wsrep_auto_increment_control = OFF; +SET GLOBAL auto_increment_increment = 1; +SET GLOBAL auto_increment_offset = 1; + +#Open a fresh connection to node_1 so that the variables above take effect +--let $galera_connection_name = node_1a +--let $galera_server_number = 1 +--source include/galera_connect.inc + +--connection node_2 +--let $auto_increment_increment_node2 = `SELECT @@auto_increment_increment` +--let $auto_increment_offset_node2 = `SELECT @@auto_increment_offset` + +SET GLOBAL wsrep_auto_increment_control = OFF; +SET GLOBAL auto_increment_increment = 1; +SET GLOBAL auto_increment_offset = 1; + +#Open a fresh connection to node_2 +--let $galera_connection_name = node_2a +--let $galera_server_number = 2 +--source include/galera_connect.inc + +--connection node_1a + +CREATE TABLE t1 (f1 INTEGER AUTO_INCREMENT PRIMARY KEY, f2 INTEGER) ENGINE=InnoDB; + +--connection node_2a + +ALTER TABLE t1 AUTO_INCREMENT=100; + +--connection node_1a +INSERT INTO t1 (f2) SELECT 1 FROM ten; + +--connection node_2a +INSERT INTO t1 (f2) SELECT 1 FROM ten; + +SELECT MIN(f1) = 100, MAX(f1) = 119, COUNT(f1) = 20, COUNT(DISTINCT f1) = 20 FROM t1; + +--connection node_1a +SELECT MIN(f1) = 100, MAX(f1) = 119, COUNT(f1) = 20, COUNT(DISTINCT f1) = 20 FROM t1; + +DROP TABLE t1; + +# +# Restore all variables as they were +# + +--disable_query_log + +--connection node_1 +--eval SET GLOBAL wsrep_auto_increment_control = $auto_increment_control_orig +--eval SET GLOBAL auto_increment_increment = $auto_increment_increment_node1 +--eval SET GLOBAL auto_increment_offset = $auto_increment_offset_node1 + +--connection node_2 +--eval SET GLOBAL wsrep_auto_increment_control = $auto_increment_control_orig +--eval SET GLOBAL auto_increment_increment = $auto_increment_increment_node2 +--eval SET GLOBAL auto_increment_offset = $auto_increment_offset_node2 + +--enable_query_log + +DROP TABLE ten; diff --git a/mysql-test/suite/galera/t/galera_toi_ddl_error.test b/mysql-test/suite/galera/t/galera_toi_ddl_error.test new file mode 100644 index 00000000000..c586d97bdb5 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_toi_ddl_error.test @@ -0,0 +1,29 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc +--source include/big_test.inc + +# +# Test the operation of DDLs that fail partway through +# + +CREATE TABLE ten (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); + +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; + +# Insert 100K rows +INSERT INTO t1 (f1) SELECT (10000 * a1.f1) + (1000 * a2.f1) + (100 * a3.f1) + (10 * a4.f1) + a5.f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5; + +# Insert one duplicate value +INSERT INTO t1 (f1) SELECT MAX(f1) FROM t1; + +--connection node_2 +--error ER_DUP_ENTRY +ALTER TABLE t1 ADD PRIMARY KEY (f1); +SHOW CREATE TABLE t1; + +--connection node_1 +SHOW CREATE TABLE t1; + +DROP TABLE t1; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/t/galera_toi_ddl_fk_insert.test b/mysql-test/suite/galera/t/galera_toi_ddl_fk_insert.test new file mode 100644 index 00000000000..1f446938775 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_toi_ddl_fk_insert.test @@ -0,0 +1,70 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc +--source include/big_test.inc + +# +# This test creates a new FK constraint while concurrent INSERTS are running +# + +CREATE TABLE ten (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); + +CREATE TABLE parent ( + id INT PRIMARY KEY AUTO_INCREMENT, + f2 INTEGER, + KEY (id) +) ENGINE=InnoDB; + +CREATE TABLE child ( + id INT PRIMARY KEY AUTO_INCREMENT, + parent_id INT +) ENGINE=InnoDB; + +INSERT INTO parent VALUES (DEFAULT, 0); + +--connection node_2 +--send INSERT INTO child (parent_id) SELECT 1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4; + +--let $galera_connection_name = node_1a +--let $galera_server_number = 1 +--source include/galera_connect.inc +--connection node_1a +--send INSERT INTO parent (f2) SELECT 1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4; + +--let $galera_connection_name = node_2a +--let $galera_server_number = 2 +--source include/galera_connect.inc +--connection node_2a +--send INSERT INTO parent (f2) SELECT 2 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4; + +--let $galera_connection_name = node_1b +--let $galera_server_number = 1 +--source include/galera_connect.inc +--connection node_1b +--sleep 2 +--send ALTER TABLE child ADD FOREIGN KEY (parent_id) REFERENCES parent(id); + +--connection node_1a +--reap + +--connection node_1b +--reap + +--connection node_2 +--reap + +--connection node_2a +--reap + +--connection node_1 +SELECT COUNT(*) = 20001 FROM parent; +SELECT COUNT(*) = 10000 FROM child; + +--connection node_2 +SELECT COUNT(*) = 20001 FROM parent; +SELECT COUNT(*) = 10000 FROM child; + +DROP TABLE child; +DROP TABLE parent; + +DROP TABLE ten; diff --git a/mysql-test/suite/galera/t/galera_toi_ddl_locking.test b/mysql-test/suite/galera/t/galera_toi_ddl_locking.test new file mode 100644 index 00000000000..ebab030d9d6 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_toi_ddl_locking.test @@ -0,0 +1,76 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc +--source include/have_debug.inc +--source include/have_debug_sync.inc + +# +# Test that DDL indeed causes all nodes to block so even unrelated updates +# are not allowed to proceed. We block the DDL using DBUG_SYNC +# + +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +CREATE TABLE t2 (f1 INTEGER) ENGINE=InnoDB; + +--connection node_1 +SET DEBUG_SYNC = 'alter_table_before_open_tables WAIT_FOR continue'; +--send ALTER TABLE t1 ADD COLUMN f2 INTEGER; + +--let $galera_connection_name = node_1a +--let $galera_server_number = 1 +--source include/galera_connect.inc + +--let $galera_connection_name = node_1b +--let $galera_server_number = 1 +--source include/galera_connect.inc + +--connection node_1a +SET SESSION wsrep_sync_wait = 0; + +# Allowed +SELECT COUNT(*) = 0 FROM t1; + +# Allowed +SELECT COUNT(*) = 0 FROM t2; + +# Not allowed +--error ER_LOCK_DEADLOCK +INSERT INTO t1 VALUES (1); + +SET AUTOCOMMIT=OFF; +START TRANSACTION; + +# Allowed +INSERT INTO t2 VALUES (1); + +# Hangs +--send COMMIT; +--sleep 1 + +--connection node_1b +SET SESSION wsrep_sync_wait = 0; + +# The Commit issued above is still not done +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO = 'Commit'; +SELECT COUNT(*) = 0 FROM t2; +SET DEBUG_SYNC= 'now SIGNAL continue'; + +--connection node_1a +--reap + +--connection node_1 +--reap +SELECT COUNT(*) = 0 FROM t1; +SELECT COUNT(*) = 1 FROM t2; + +--connection node_2 +SELECT COUNT(*) = 0 FROM t1; +SELECT COUNT(*) = 1 FROM t2; + +--connection node_1 +SET DEBUG_SYNC= 'RESET'; + +--connection node_1b +SET DEBUG_SYNC= 'RESET'; + +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/suite/galera/t/galera_toi_ddl_nonconflicting.test b/mysql-test/suite/galera/t/galera_toi_ddl_nonconflicting.test new file mode 100644 index 00000000000..821f7a6eb2c --- /dev/null +++ b/mysql-test/suite/galera/t/galera_toi_ddl_nonconflicting.test @@ -0,0 +1,30 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# In this test, we simultaneously send two non-conflicting ALTER TABLE statements +# + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY AUTO_INCREMENT, f2 INTEGER); + +--connection node_2 +--send ALTER TABLE t1 ADD COLUMN f3 INTEGER; INSERT INTO t1 (f1, f2) VALUES (DEFAULT, 123); + +--connection node_1 +--send CREATE UNIQUE INDEX i1 ON t1(f2); + +--connection node_2 +--reap +INSERT INTO t1 (f1, f2) VALUES (DEFAULT, 234); + +SELECT COUNT(*) = 3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_NAME = 't1'; +SELECT COUNT(*) = 2 FROM t1; + +--connection node_1 +--reap +SELECT COUNT(*) = 3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_NAME = 't1'; +SELECT COUNT(*) = 2 FROM t1; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_toi_ddl_sequential.test b/mysql-test/suite/galera/t/galera_toi_ddl_sequential.test new file mode 100644 index 00000000000..51eae7005df --- /dev/null +++ b/mysql-test/suite/galera/t/galera_toi_ddl_sequential.test @@ -0,0 +1,29 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# In this test, we send two ALTER TABLE statements that would only work if executed in the right order +# + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +--connection node_2 +ALTER TABLE t1 ADD COLUMN f2 INTEGER; +INSERT INTO t1 VALUES (2, 3); + +--connection node_1 +ALTER TABLE t1 DROP COLUMN f2; +INSERT INTO t1 VALUES (4); + +--connection node_2 +SHOW CREATE TABLE t1; +SELECT COUNT(*) = 3 FROM t1; +SELECT * FROM t1 ORDER BY f1; + +--connection node_1 +SHOW CREATE TABLE t1; +SELECT COUNT(*) = 3 FROM t1; +SELECT * FROM t1 ORDER BY f1; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_toi_ftwrl.test b/mysql-test/suite/galera/t/galera_toi_ftwrl.test new file mode 100644 index 00000000000..4d0edefda8e --- /dev/null +++ b/mysql-test/suite/galera/t/galera_toi_ftwrl.test @@ -0,0 +1,22 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# At this time, issing a FLUSH TABLES WITH READ LOCK on one node does not prevent DDLs from other nodes +# from proceeding. The locked node will apply the DDL after it has been unlocked +# + +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB; + +--connection node_2 +FLUSH TABLES WITH READ LOCK; + +--connection node_1 +ALTER TABLE t1 ADD COLUMN f2 INTEGER; + +--connection node_2 +UNLOCK TABLES; +SHOW CREATE TABLE t1; + +DROP TABLE t1; + diff --git a/mysql-test/suite/galera/t/galera_toi_lock_exclusive.test b/mysql-test/suite/galera/t/galera_toi_lock_exclusive.test new file mode 100644 index 00000000000..3c66286a3e6 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_toi_lock_exclusive.test @@ -0,0 +1,38 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# Ensure that ALTER LOCK=EXCLUSIVE works under TOI. It is difficult to check that concurrent operations +# are truly not possible, but at least we expect no hangs or deadlocks +# + +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +# Start a transaction that is concurrent to the DDL. This is not strictly necessary for this test +# but does put more locks into play. +--connection node_2 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES (2); + +--let $galera_connection_name = node_2a +--let $galera_server_number = 2 +--source include/galera_connect.inc +--connection node_2a +ALTER TABLE t1 ADD COLUMN f2 INTEGER, LOCK=EXCLUSIVE; + +# In Galera, a concurrent transaction aborts in the face of ALTER +--connection node_2 +--error ER_LOCK_DEADLOCK +COMMIT; + +--connection node_1 +INSERT INTO t1 VALUES (2, 2); +SELECT COUNT(*) = 2 FROM t1; + +--connection node_2 +INSERT INTO t1 VALUES (3, 3); +SELECT COUNT(*) = 3 FROM t1; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_toi_lock_shared.test b/mysql-test/suite/galera/t/galera_toi_lock_shared.test new file mode 100644 index 00000000000..6857a0e08ca --- /dev/null +++ b/mysql-test/suite/galera/t/galera_toi_lock_shared.test @@ -0,0 +1,23 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# Ensure that ALTER LOCK=SHARED works under TOI. It is difficult to check that concurrent operations +# will be possible, but at least we expect no hangs or deadlocks +# + +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +--connection node_2 +ALTER TABLE t1 ADD COLUMN f2 INTEGER, LOCK=SHARED; + +--connection node_1 +INSERT INTO t1 VALUES (2, 2); +SELECT COUNT(*) = 2 FROM t1; + +--connection node_2 +INSERT INTO t1 VALUES (3, 3); +SELECT COUNT(*) = 3 FROM t1; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_transaction_read_only.test b/mysql-test/suite/galera/t/galera_transaction_read_only.test new file mode 100644 index 00000000000..386d73fd3ca --- /dev/null +++ b/mysql-test/suite/galera/t/galera_transaction_read_only.test @@ -0,0 +1,58 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# Ensure that transactions that do not write anything do not cause the wsrep_last_committed counter to advance +# + +# Empty transaction + +--connection node_1 +CREATE TABLE t1 (id INT PRIMARY KEY) ENGINE=InnoDB; + +--connection node_2 +--let $wsrep_last_committed_before = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'wsrep_last_committed'` + +--connection node_1 + +SET AUTOCOMMIT=OFF; +START TRANSACTION; +COMMIT; + +--connection node_2 +--let $wsrep_last_committed_after = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'wsrep_last_committed'` +--disable_query_log +--eval SELECT $wsrep_last_committed_after = $wsrep_last_committed_before AS wsrep_last_committed_diff; +--enable_query_log + +# START TRANSACTION READ ONLY + +--connection node_2 +--let $wsrep_last_committed_before = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'wsrep_last_committed'` + +--connection node_1 +START TRANSACTION READ ONLY; +SELECT COUNT(*) = 0 FROM t1; +COMMIT; + +--connection node_2 +--let $wsrep_last_committed_after = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'wsrep_last_committed'` +--disable_query_log +--eval SELECT $wsrep_last_committed_after = $wsrep_last_committed_before AS wsrep_last_committed_diff; +--enable_query_log + +# Ordinary transaction with only SELECTs + +--connection node_1 +START TRANSACTION; +SELECT COUNT(*) = 0 FROM t1; +COMMIT; + +--connection node_2 +--let $wsrep_last_committed_after = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'wsrep_last_committed'` +--disable_query_log +--eval SELECT $wsrep_last_committed_after = $wsrep_last_committed_before AS wsrep_last_committed_diff; +--enable_query_log + +DROP TABLE t1; + diff --git a/mysql-test/suite/galera/t/galera_transaction_replay.test b/mysql-test/suite/galera/t/galera_transaction_replay.test new file mode 100644 index 00000000000..d2c74ab192b --- /dev/null +++ b/mysql-test/suite/galera/t/galera_transaction_replay.test @@ -0,0 +1,63 @@ +# +# This test tests the operation of transaction replay. If a potentially conflicting remote transaction arrives at +# just the right time during the commit of a local transaction, the local transaction will be aborted and replayed. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc +--source include/have_debug_sync.inc +--source suite/galera/include/galera_have_debug_sync.inc + +--let $wsrep_local_replays_old = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_replays'` + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 CHAR(1)); +INSERT INTO t1 VALUES (1, 'a'); +INSERT INTO t1 VALUES (2, 'a'); + +--connection node_1 +SET AUTOCOMMIT=ON; +START TRANSACTION; + +UPDATE t1 SET f2 = 'b' WHERE f1 = 1; +SELECT * FROM t1 WHERE f1 = 2 FOR UPDATE; + +# Block the commit +--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1 +SET GLOBAL wsrep_provider_options = 'dbug=d,apply_monitor_enter_sync'; + +--connection node_1 +--send COMMIT; + +# Wait until commit is blocked +--connection node_1a +SET SESSION wsrep_sync_wait = 0; +--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_debug_sync_waiters' AND VARIABLE_VALUE = 'apply_monitor_enter_sync' +--source include/wait_condition.inc + +# Issue a conflicting update on node #2 +--connection node_2 +UPDATE t1 SET f2 = 'c' WHERE f1 = 2; + +# Unblock the commit +--connection node_1a +SET GLOBAL wsrep_provider_options = 'dbug='; +SET GLOBAL wsrep_provider_options = 'signal=apply_monitor_enter_sync'; + +# Commit succeeds +--connection node_1 +--reap + +SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'b'; +SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'c'; + +# wsrep_local_replays has increased by 1 +--let $wsrep_local_replays_new = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_replays'` +--disable_query_log +--eval SELECT $wsrep_local_replays_new - $wsrep_local_replays_old = 1 AS wsrep_local_replays; +--enable_query_log + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'b'; +SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'c'; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_truncate.test b/mysql-test/suite/galera/t/galera_truncate.test new file mode 100644 index 00000000000..79f9bad1f1b --- /dev/null +++ b/mysql-test/suite/galera/t/galera_truncate.test @@ -0,0 +1,57 @@ +# +# Test TRUNCATE +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# Simple case +# + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) Engine=InnoDB; + +INSERT INTO t1 VALUES (1); + +--connection node_2 +TRUNCATE TABLE t1; +SELECT COUNT(*) = 0 FROM t1; + +--connection node_1 +SELECT COUNT(*) = 0 FROM t1; + +# +# Table with no PK +# + +--connection node_2 +CREATE TABLE t2 (f1 VARCHAR(255)) Engine=InnoDB; +INSERT INTO t2 VALUES ('abc'); + +--connection node_1 +TRUNCATE TABLE t2; + +--connection node_2 +SELECT COUNT(*) = 0 FROM t2; + +# +# Table with AUTO_INCREMENT. The AUTO_INCREMENT counter must be reset on all nodes +# + +--connection node_1 +CREATE TABLE t3 (f1 INTEGER AUTO_INCREMENT PRIMARY KEY) Engine=InnoDB; +INSERT INTO t3 VALUES (DEFAULT),(DEFAULT),(DEFAULT),(DEFAULT),(DEFAULT); + +CREATE TABLE t4 (f1 INTEGER AUTO_INCREMENT PRIMARY KEY) Engine=InnoDB AUTO_INCREMENT=1234; +INSERT INTO t4 VALUES (DEFAULT),(DEFAULT),(DEFAULT),(DEFAULT),(DEFAULT); + +TRUNCATE TABLE t3; +TRUNCATE TABLE t4; + +--connection node_2 +SELECT AUTO_INCREMENT = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME IN ('t3', 't4'); + +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; +DROP TABLE t4; diff --git a/mysql-test/suite/galera/t/galera_truncate_temporary.test b/mysql-test/suite/galera/t/galera_truncate_temporary.test new file mode 100644 index 00000000000..3ad94eb9930 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_truncate_temporary.test @@ -0,0 +1,82 @@ +# +# Test TRUNCATE on TEMPORARY tables. It should not be replicated +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TEMPORARY TABLE t1 (f1 INTEGER PRIMARY KEY) Engine=InnoDB; + +INSERT INTO t1 VALUES (1); + +TRUNCATE TABLE t1; +SELECT COUNT(*) = 0 FROM t1; + +--connection node_2 +--error ER_NO_SUCH_TABLE +SELECT * FROM t1; + +--connection node_1 +DROP TABLE t1; + +# +# Test the case where a TEMPORARY table is masking an existing one +# + +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +CREATE TEMPORARY TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (2); + +SELECT f1 = 2 FROM t1; +SELECT COUNT(*) = 1 FROM t1; + +TRUNCATE TABLE t1; + +SELECT COUNT(*) = 0 FROM t1; + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1; +SELECT f1 = 1 FROM t1; + +--connection node_1 + +DROP TABLE t1; +SELECT COUNT(*) = 1 FROM t1; +SELECT f1 = 1 FROM t1; + +TRUNCATE TABLE t1; +SELECT COUNT(*) = 0 FROM t1; + +--connection node_2 +SELECT COUNT(*) = 0 FROM t1; + +--connection node_1 +DROP TABLE t1; + +# +# Test the case where one node has a TEMPORARY table but the TRUNCATE arrives from another node +# + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +CREATE TEMPORARY TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (2); + +--connection node_2 +TRUNCATE TABLE t1; + +SELECT COUNT(*) = 0 FROM t1; + +--connection node_1 +SELECT f1 = 2 FROM t1; +SELECT COUNT(*) = 1 FROM t1; + +DROP TABLE t1; + +SELECT COUNT(*) = 0 FROM t1; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_udf-master.opt b/mysql-test/suite/galera/t/galera_udf-master.opt new file mode 100644 index 00000000000..14dfe3e20bc --- /dev/null +++ b/mysql-test/suite/galera/t/galera_udf-master.opt @@ -0,0 +1,2 @@ +$UDF_EXAMPLE_LIB_OPT +--query_cache_type=1 diff --git a/mysql-test/suite/galera/t/galera_unicode_identifiers.test b/mysql-test/suite/galera/t/galera_unicode_identifiers.test index 4722d6d61a2..2f255e9a197 100644 --- a/mysql-test/suite/galera/t/galera_unicode_identifiers.test +++ b/mysql-test/suite/galera/t/galera_unicode_identifiers.test @@ -21,7 +21,7 @@ CREATE TABLE `table with space` ( `column with space` INTEGER AUTO_INCREMENT PRIMARY KEY, `second column with space` INTEGER, UNIQUE `index name with space` (`second column with space`) -) ENGINE=INNODB; +); INSERT INTO `table with space` VALUES (DEFAULT, 1); # Unicode identifiers @@ -32,7 +32,7 @@ CREATE TABLE `таблица` ( `първа_колона` INTEGER PRIMARY KEY, `втора_колона` INTEGER, UNIQUE `индекс` (`втора_колона`) -) ENGINE=INNODB; +); INSERT INTO `таблица` VALUES (1, 1); @@ -44,19 +44,19 @@ CREATE TABLE `втора таблица` ( `първа колона` INTEGER, `втора колона` INTEGER, KEY `първи индекс` (`първа колона`) -) ENGINE=INNODB; +); INSERT INTO `втора таблица` VALUES (1, 1); --connection node_2 USE `database with space`; -SELECT * FROM `table with space`; +SELECT `second column with space` FROM `table with space`; USE `база`; SELECT * FROM `таблица`; USE `втора база`; -SELECT * FROM `втора таблица`; +SELECT `втора колона` FROM `втора таблица`; --eval SET GLOBAL wsrep_sync_wait = $wsrep_sync_wait_orig diff --git a/mysql-test/suite/galera/t/galera_unicode_pk.test b/mysql-test/suite/galera/t/galera_unicode_pk.test new file mode 100644 index 00000000000..0d571f5cfd7 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_unicode_pk.test @@ -0,0 +1,64 @@ +# +# Test non-ascii data in table where the PK is unicode +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE t1 ( + f1 VARCHAR(255) PRIMARY KEY +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +INSERT INTO t1 VALUES ('текст'); + +--connection node_2 +SELECT f1 = 'текст' FROM t1; + +# +# Provoke a conflict +# + +--connection node_1 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1 SET f1 = 'текст2'; + +--connection node_2 +SET AUTOCOMMIT=OFF; +START TRANSACTION; +UPDATE t1 SET f1 = 'текст3'; + +--connection node_1 +COMMIT; + +--connection node_2 +--error ER_LOCK_DEADLOCK +COMMIT; + +SELECT f1 = 'текст2' FROM t1; +SELECT f1 = 'текст2' FROM t1 WHERE f1 = 'текст2'; + +# +# Provoke a duplicate key error +# + +--connection node_2 +START TRANSACTION; +INSERT INTO t1 VALUES ('текст4'); + +--connection node_1 +START TRANSACTION; +INSERT INTO t1 VALUES ('текст4'); + +--connection node_2 +COMMIT; + +--connection node_1 +--error ER_LOCK_DEADLOCK +COMMIT; + +# Work around for mysql-wsrep#29 'Spurious deadlock error on a DROP TABLE' +--error 0,ER_LOCK_DEADLOCK +COMMIT; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_update_limit.test b/mysql-test/suite/galera/t/galera_update_limit.test new file mode 100644 index 00000000000..baacf2a60b2 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_update_limit.test @@ -0,0 +1,55 @@ +# +# UPDATE LIMIT should not cause any issues with row-based Galera replication +# regardless of the order in which the rows were updated +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# With a PK +# + +--connection node_1 +CREATE TABLE ten (f1 INTEGER) Engine=InnoDB; +INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) Engine=InnoDB; +INSERT INTO t1 SELECT f1 FROM ten ORDER BY RAND(); + +--connection node_2 +UPDATE IGNORE t1 SET f1 = FLOOR(1 + (RAND() * 10)) ORDER BY RAND() LIMIT 5; + +# Check that the sum of all elements and the max element are identical across nodes +# as this will indicate that the same UPDATE was applied to both nodes + +--let $sum_rows = `SELECT SUM(f1) FROM t1` +--let $max_row = `SELECT MAX(f1) FROM t1` + +--connection node_1 +--disable_query_log +--eval SELECT (SELECT SUM(f1) FROM t1) = $sum_rows AS sum_matches; +--eval SELECT f1 = $max_row AS max_matches FROM t1 WHERE f1 = $max_row; +--enable_query_log + +DROP TABLE t1; + +# +# Without a PK +# + +CREATE TABLE t2 (f1 INTEGER) Engine=InnoDB; +INSERT INTO t2 SELECT f1 FROM ten ORDER BY RAND(); + +--connection node_2 +UPDATE IGNORE t2 SET f1 = FLOOR(1 + (RAND() * 10)) ORDER BY RAND() LIMIT 5; + +--let $sum_rows = `SELECT SUM(f1) FROM t2` + +--connection node_1 +--disable_query_log +--eval SELECT (SELECT SUM(f1) FROM t2) = $sum_rows AS sum_matches; +--enable_query_log + +DROP TABLE t2; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/t/galera_v1_row_events-master.opt b/mysql-test/suite/galera/t/galera_v1_row_events-master.opt new file mode 100644 index 00000000000..dc82542128e --- /dev/null +++ b/mysql-test/suite/galera/t/galera_v1_row_events-master.opt @@ -0,0 +1 @@ +--log-bin-use-v1-row-events=1 diff --git a/mysql-test/suite/galera/t/galera_v1_row_events.test b/mysql-test/suite/galera/t/galera_v1_row_events.test new file mode 100644 index 00000000000..0c0a044510e --- /dev/null +++ b/mysql-test/suite/galera/t/galera_v1_row_events.test @@ -0,0 +1,21 @@ +# +# Test that Galera continues to run even with --log-bin-use-v1-row-events=1 +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE t1 (f1 INT PRIMARY KEY) ENGINE=InnoDB; + +INSERT INTO t1 VALUES (1); + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1; + +--connection node_1 +UPDATE t1 SET f1 = 2 WHERE f1 = 1; + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 2; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_var_OSU_method.test b/mysql-test/suite/galera/t/galera_var_OSU_method.test index 6190d5cec9a..fcf964c4f89 100644 --- a/mysql-test/suite/galera/t/galera_var_OSU_method.test +++ b/mysql-test/suite/galera/t/galera_var_OSU_method.test @@ -36,4 +36,10 @@ SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; --connection node_1 SET SESSION wsrep_OSU_method = "TOI"; +--connection node_1 +SET DEBUG_SYNC= 'RESET'; + +--connection node_1a +SET DEBUG_SYNC= 'RESET'; + DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_var_OSU_method2.test b/mysql-test/suite/galera/t/galera_var_OSU_method2.test index abc01ee3e0e..099e2cc6612 100644 --- a/mysql-test/suite/galera/t/galera_var_OSU_method2.test +++ b/mysql-test/suite/galera/t/galera_var_OSU_method2.test @@ -40,4 +40,8 @@ INSERT INTO t1 VALUES (3,4); --connection node_1 SET GLOBAL wsrep_OSU_method = "TOI"; DROP TABLE t1; +SET DEBUG_SYNC= 'RESET'; + +--connection node_1a +SET DEBUG_SYNC= 'RESET'; diff --git a/mysql-test/suite/galera/t/galera_var_auto_inc_control_off.test b/mysql-test/suite/galera/t/galera_var_auto_inc_control_off.test index 1ae08abc920..c0bbe5af8cf 100644 --- a/mysql-test/suite/galera/t/galera_var_auto_inc_control_off.test +++ b/mysql-test/suite/galera/t/galera_var_auto_inc_control_off.test @@ -88,6 +88,8 @@ SELECT * FROM t1; # Restore all variables as they were # +--disable_query_log + --connection node_1 --eval SET GLOBAL wsrep_auto_increment_control = $auto_increment_control_orig --eval SET GLOBAL auto_increment_increment = $auto_increment_increment_node1 @@ -98,4 +100,6 @@ SELECT * FROM t1; --eval SET GLOBAL auto_increment_increment = $auto_increment_increment_node2 --eval SET GLOBAL auto_increment_offset = $auto_increment_offset_node2 +--enable_query_log + DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_var_auto_inc_control_on.test b/mysql-test/suite/galera/t/galera_var_auto_inc_control_on.test index 4d1b9af1573..59f2615b685 100644 --- a/mysql-test/suite/galera/t/galera_var_auto_inc_control_on.test +++ b/mysql-test/suite/galera/t/galera_var_auto_inc_control_on.test @@ -9,13 +9,11 @@ CREATE TABLE t1 (f1 INTEGER AUTO_INCREMENT PRIMARY KEY, node VARCHAR(10)) ENGINE=InnoDB; -SHOW CREATE TABLE t1; - # auto_increment_increment is equal to the number of nodes # auto_increment_offset is equal to the ID of the node SELECT @@auto_increment_increment = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'); -SELECT @@auto_increment_offset = 1; +SELECT @@auto_increment_offset = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_index') + 1; # Expect no conflicts --send INSERT INTO t1 VALUES (DEFAULT, 'node1'); @@ -29,9 +27,8 @@ SELECT @@auto_increment_offset = 1; --connection node_2 --reap -SHOW CREATE TABLE t1; SELECT @@auto_increment_increment = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'); -SELECT @@auto_increment_offset = 2; +SELECT @@auto_increment_offset = (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_index') + 1; # Expect no conflicts --send INSERT INTO t1 VALUES (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'), (DEFAULT, 'node2'); diff --git a/mysql-test/suite/galera/t/galera_var_cluster_address.test b/mysql-test/suite/galera/t/galera_var_cluster_address.test new file mode 100644 index 00000000000..f53986c49b8 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_var_cluster_address.test @@ -0,0 +1,105 @@ +# +# Check the handling of @@wsrep_cluster_address +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# +# Set to invalid value +# + +--connection node_1 +--let $wsrep_cluster_address_node1 = `SELECT @@wsrep_cluster_address` +SET GLOBAL wsrep_cluster_address = 'foo://'; + +# With wsrep_sync_wait, this returns an error +#--error ER_LOCK_WAIT_TIMEOUT +#SHOW STATUS; + +SET SESSION wsrep_sync_wait=0; + +--error ER_UNKNOWN_COM_ERROR +SELECT * FROM INFORMATION_SCHEMA.GLOBAL_STATUS; + +# Must return 'OFF' +SHOW STATUS LIKE 'wsrep_ready'; + +# Must return 'Non-primary' +SHOW STATUS LIKE 'wsrep_cluster_status'; + +# Must return 0 = 'Initialized' +SHOW STATUS LIKE 'wsrep_local_state'; +SHOW STATUS LIKE 'wsrep_local_state_comment'; + +--connection node_2 +--sleep 1 +# Node #2 thinks that it is now part of a single-node primary cluster +SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; + +# +# Reset everything as it was +# + +--connection node_1 +--disable_query_log +--eval SET GLOBAL wsrep_cluster_address = '$wsrep_cluster_address_node1'; +--enable_query_log + +--connection node_2 +SET GLOBAL wsrep_cluster_address = @@wsrep_cluster_address; + +--source include/wait_until_connected_again.inc + +--connection node_1 +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; + +# +# Set to invalid host +# + +--connection node_1 +SET GLOBAL wsrep_cluster_address = 'gcomm://192.0.2.1'; + +--error ER_UNKNOWN_COM_ERROR +SELECT * FROM INFORMATION_SCHEMA.GLOBAL_STATUS; + +# Must return 'OFF' +SHOW STATUS LIKE 'wsrep_ready'; + +# Must return 'Non-primary' +SHOW STATUS LIKE 'wsrep_cluster_status'; + +# Must return 0 = 'Initialized' +SHOW STATUS LIKE 'wsrep_local_state'; +SHOW STATUS LIKE 'wsrep_local_state_comment'; + +# +# Reset everything as it was +# + +--connection node_1 +--disable_query_log +--eval SET GLOBAL wsrep_cluster_address = '$wsrep_cluster_address_node1'; +--enable_query_log + +--connection node_2 +SET GLOBAL wsrep_cluster_address = @@wsrep_cluster_address; +--sleep 1 + +--connection node_1 +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; + +CALL mtr.add_suppression("WSREP: .*Backend not supported: foo.*"); +CALL mtr.add_suppression("WSREP: .*Failed to initialize backend using 'foo.*"); +CALL mtr.add_suppression("WSREP: .*Failed to open channel 'my_wsrep_cluster' at 'foo*"); +CALL mtr.add_suppression("WSREP: gcs connect failed: Socket type not supported"); +CALL mtr.add_suppression("WSREP: failed to open gcomm backend connection: 110: failed to reach primary view: 110 \\(Connection timed out\\)"); +CALL mtr.add_suppression("WSREP: .*Failed to open backend connection: -110 \\(Connection timed out\\)"); +CALL mtr.add_suppression("WSREP: .*Failed to open channel 'my_wsrep_cluster' at 'gcomm://192\\.0\\.2\\.1': -110 \\(Connection timed out\\)"); +CALL mtr.add_suppression("WSREP: gcs connect failed: Connection timed out"); +CALL mtr.add_suppression("WSREP: wsrep::connect\\(\\) failed: 7"); +#CALL mtr.add_suppression("gcs_caused\\(\\) returned -103 \\(Software caused connection abort\\)"); diff --git a/mysql-test/suite/galera/t/galera_var_desync_on.test b/mysql-test/suite/galera/t/galera_var_desync_on.test new file mode 100644 index 00000000000..fb0fb9f762a --- /dev/null +++ b/mysql-test/suite/galera/t/galera_var_desync_on.test @@ -0,0 +1,58 @@ +# +# Test wsrep_desync = ON . Node should temporarily not participate in flow control +# so even if fc_limit has been reached, the master should be able to continue to +# commit transactions. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +--connection node_2 +--let $wsrep_provider_options_orig = `SELECT @@wsrep_provider_options` +SET GLOBAL wsrep_provider_options = 'gcs.fc_limit=1'; +SET GLOBAL wsrep_desync = TRUE; + +# Block the slave applier thread +FLUSH TABLES WITH READ LOCK; + +--connection node_1 + +# Without wsrep_desync = TRUE it would not be possible to perform 10 inserts on the master with gcs.fc_limit=1 +INSERT INTO t1 VALUES (2); +INSERT INTO t1 VALUES (3); +INSERT INTO t1 VALUES (4); +INSERT INTO t1 VALUES (5); +INSERT INTO t1 VALUES (6); +INSERT INTO t1 VALUES (7); +INSERT INTO t1 VALUES (8); +INSERT INTO t1 VALUES (9); +INSERT INTO t1 VALUES (10); +--sleep 1 + +--connection node_2 +SET SESSION wsrep_sync_wait = 0; +# No updates have arrived after the FLUSH TABLES +SELECT COUNT(*) = 1 FROM t1; + +# Resync the slave +SET GLOBAL wsrep_desync = FALSE; +--disable_query_log +--eval SET GLOBAL wsrep_provider_options = '$wsrep_provider_options_orig'; +--enable_query_log +UNLOCK TABLES; + +SET SESSION wsrep_sync_wait = 1; +# The slave is now fully caught up +SELECT COUNT(*) = 10 FROM t1; + +--connection node_1 +INSERT INTO t1 VALUES (11); + +--connection node_2 +# Replication continues normally +SELECT COUNT(*) = 11 FROM t1; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_var_innodb_disallow_writes.test b/mysql-test/suite/galera/t/galera_var_innodb_disallow_writes.test new file mode 100644 index 00000000000..c08483b63ad --- /dev/null +++ b/mysql-test/suite/galera/t/galera_var_innodb_disallow_writes.test @@ -0,0 +1,33 @@ +# +# This test checks that innodb_disallow_writes works as expected +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +# Open a separate connection to be used to run SHOW PROCESSLIST +--let $galera_connection_name = node_1a +--let $galera_server_number = 1 +--source include/galera_connect.inc +--connection node_1a +SET SESSION wsrep_sync_wait = 0; + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER) Engine=InnoDB; +SET GLOBAL innodb_disallow_writes=ON; +--send INSERT INTO t1 VALUES (1); + +--connection node_1a +let $wait_condition = SELECT 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO = 'INSERT INTO t1 VALUES (1)' AND State = 'query end'; +--source include/wait_condition.inc + +SET GLOBAL innodb_disallow_writes=OFF; + +--connection node_1 +--reap +SELECT COUNT(*) = 1 FROM t1; + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_var_load_data_splitting.test b/mysql-test/suite/galera/t/galera_var_load_data_splitting.test new file mode 100644 index 00000000000..0783dc897f8 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_var_load_data_splitting.test @@ -0,0 +1,38 @@ +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--let $wsrep_load_data_splitting_orig = `SELECT @@wsrep_load_data_splitting` + +# Create a file for LOAD DATA with 95K entries +--perl +open(FILE, ">", "$ENV{'MYSQLTEST_VARDIR'}/tmp/galera_var_load_data_splitting.csv") or die; +foreach my $i (1..95000) { + print FILE "$i\n"; +} +EOF + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; + +# Record wsrep_last_committed as it was before LOAD DATA +--connection node_2 +--let $wsrep_last_committed_before = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'wsrep_last_committed'` + +SET GLOBAL wsrep_load_data_splitting = TRUE; +--disable_query_log +--eval LOAD DATA INFILE '$MYSQLTEST_VARDIR/tmp/galera_var_load_data_splitting.csv' INTO TABLE t1; +--enable_query_log + +--connection node_2 +--let $wsrep_last_committed_after = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_STATUS WHERE VARIABLE_NAME = 'wsrep_last_committed'` + +SELECT COUNT(*) = 95000 FROM t1; + +# LOAD-ing 95K rows causes 10 commits to be registered +--disable_query_log +--eval SELECT $wsrep_last_committed_after = $wsrep_last_committed_before + 10 AS wsrep_last_committed_diff; +--enable_query_log + +--connection node_1 +--eval SET GLOBAL wsrep_load_data_splitting = $wsrep_load_data_splitting_orig; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_var_max_ws_size.test b/mysql-test/suite/galera/t/galera_var_max_ws_size.test new file mode 100644 index 00000000000..720f9be8a99 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_var_max_ws_size.test @@ -0,0 +1,27 @@ +# +# This test sets wsrep_max_ws_size to a very low value and checks that the transaction is rejected +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--connection node_1 +call mtr.add_suppression('WSREP: transaction size limit.*'); +call mtr.add_suppression('WSREP: rbr write fail.*'); +call mtr.add_suppression('WSREP: Maximum writeset size exceeded by.*'); +call mtr.add_suppression('WSREP: transaction size exceeded.*'); + +CREATE TABLE t1 (f1 INTEGER AUTO_INCREMENT PRIMARY KEY, f2 VARCHAR(1024)) Engine=InnoDB; + +--let $wsrep_max_ws_size_orig = `SELECT @@wsrep_max_ws_size` +SET GLOBAL wsrep_max_ws_size = 1024; + +--error ER_ERROR_DURING_COMMIT +INSERT INTO t1 VALUES (DEFAULT, REPEAT('X', 1024)); +SELECT COUNT(*) = 0 FROM t1; + +--disable_query_log +--eval SET GLOBAL wsrep_max_ws_size = $wsrep_max_ws_size_orig +--enable_query_log + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_var_notify_cmd-master.opt b/mysql-test/suite/galera/t/galera_var_notify_cmd-master.opt new file mode 100644 index 00000000000..70dfc98736b --- /dev/null +++ b/mysql-test/suite/galera/t/galera_var_notify_cmd-master.opt @@ -0,0 +1 @@ +--wsrep_notify_cmd=$MYSQL_TEST_DIR/std_data/wsrep_notify.sh --wsrep-sync-wait=0 diff --git a/mysql-test/suite/galera/t/galera_var_notify_cmd.test b/mysql-test/suite/galera/t/galera_var_notify_cmd.test new file mode 100644 index 00000000000..4fea69f62bb --- /dev/null +++ b/mysql-test/suite/galera/t/galera_var_notify_cmd.test @@ -0,0 +1,14 @@ +# +# Test wsrep_notify_cmd. We use a version of the support-files/wsrep_notify.sh script that writes +# notifications into a table. +# + +--source include/have_innodb.inc +--source include/galera_cluster.inc + +--connection node_1 +SELECT COUNT(DISTINCT uuid) = 2 FROM mtr_wsrep_notify.membership; +SELECT MAX(size) = 2 FROM mtr_wsrep_notify.status; +SELECT COUNT(DISTINCT idx) = 2 FROM mtr_wsrep_notify.status; + +DROP SCHEMA mtr_wsrep_notify; diff --git a/mysql-test/suite/galera/t/galera_var_replicate_myisam_on.test b/mysql-test/suite/galera/t/galera_var_replicate_myisam_on.test index f6838028e66..9cb0edf1810 100644 --- a/mysql-test/suite/galera/t/galera_var_replicate_myisam_on.test +++ b/mysql-test/suite/galera/t/galera_var_replicate_myisam_on.test @@ -5,17 +5,135 @@ --source include/galera_cluster.inc --source include/have_innodb.inc +--connection node_1 --let $wsrep_replicate_myisam_orig = `SELECT @@wsrep_replicate_myisam` +--connection node_1 SET GLOBAL wsrep_replicate_myisam = TRUE; +--connection node_2 +SET GLOBAL wsrep_replicate_myisam = TRUE; + +# +# Simple INSERT +# +--connection node_1 CREATE TABLE t1 (f1 INT PRIMARY KEY) Engine=MyISAM; INSERT INTO t1 VALUES (1); +INSERT INTO t1 VALUES (2), (3); +INSERT INTO t1 SELECT 4 FROM DUAL UNION ALL SELECT 5 FROM DUAL; + +--connection node_2 +SELECT COUNT(*) = 5 FROM t1; + +DROP TABLE t1; + +# +# REPLACE +# + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 VARCHAR(100)) ENGINE=MyISAM; +INSERT INTO t1 VALUES (1, 'abc'),(2,'abc'), (3, 'xxx'); +REPLACE INTO t1 VALUES (1, 'klm'), (2,'xyz'); +REPLACE INTO t1 SELECT 3, 'yyy' FROM DUAL; + +--connection node_2 +SELECT COUNT(*) = 3 FROM t1; +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 1 AND f2 = 'klm'; +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 2 AND f2 = 'xyz'; +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 3 AND f2 = 'yyy'; + +# +# UPDATE +# + +--connection node_1 +UPDATE t1 SET f2 = 'zzz' WHERE f2 = 'yyy'; + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'zzz'; + +# +# DELETE +# + +--connection node_1 +DELETE FROM t1 WHERE f2 = 'zzz'; + +--connection node_2 +SELECT COUNT(*) = 0 FROM t1 WHERE f2 = 'zzz'; + +# +# TRUNCATE +# + +--connection node_1 +TRUNCATE TABLE t1; + +--connection node_2 +SELECT COUNT(*) = 0 FROM t1; +DROP TABLE t1; + +# +# Transaction +# + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER) ENGINE=MyISAM; +CREATE TABLE t2 (f1 INTEGER) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); +COMMIT; --connection node_2 SELECT COUNT(*) = 1 FROM t1; +SELECT COUNT(*) = 1 FROM t2; + +# +# Transaction rollback +# --connection node_1 ---eval SET GLOBAL wsrep_replicate_myisam = $wsrep_replicate_myisam_orig +START TRANSACTION; +INSERT INTO t1 VALUES (2); +INSERT INTO t2 VALUES (2); +ROLLBACK; + +--connection node_2 +SELECT COUNT(*) = 2 FROM t1; +SELECT COUNT(*) = 1 FROM t2; + +DROP TABLE t1; +DROP TABLE t2; + +# +# Transaction conflict +# + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=MyISAM; +CREATE TABLE t2 (f2 INTEGER PRIMARY KEY) ENGINE=InnoDB; + +START TRANSACTION; +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); + +--connection node_2 +# The MyISAM update is replicated immediately, so a duplicate key error happens even before the COMMIT +--error ER_DUP_ENTRY +INSERT INTO t1 VALUES (1); + +--connection node_1 +COMMIT; DROP TABLE t1; +DROP TABLE t2; + +--connection node_1 +--eval SET GLOBAL wsrep_replicate_myisam = $wsrep_replicate_myisam_orig + +--connection node_2 +--eval SET GLOBAL wsrep_replicate_myisam = $wsrep_replicate_myisam_orig diff --git a/mysql-test/suite/galera/t/galera_var_slave_threads.test b/mysql-test/suite/galera/t/galera_var_slave_threads.test new file mode 100644 index 00000000000..a83924c13ce --- /dev/null +++ b/mysql-test/suite/galera/t/galera_var_slave_threads.test @@ -0,0 +1,70 @@ +# +# This tests the very basic operations around wsrep-slave-threads +# More complex scenarios will be tested separately in the context of +# parallel replication +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--let $wsrep_slave_threads_orig = `SELECT @@wsrep_slave_threads` + +--connection node_1 +CREATE TABLE t1 (f1 INT PRIMARY KEY) Engine=InnoDB; +CREATE TABLE t2 (f1 INT AUTO_INCREMENT PRIMARY KEY) Engine=InnoDB; + +--connection node_2 + +# Setting wsrep_slave_threads to zero triggers a warning +SET GLOBAL wsrep_slave_threads = 0; +SHOW WARNINGS; +SELECT @@wsrep_slave_threads = 1; + +SET GLOBAL wsrep_slave_threads = 1; +# There is a separate wsrep_aborter thread at all times +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user'; +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND STATE LIKE '%wsrep aborter%'; + +# +# Increase the number of slave threads. The change takes effect immediately +# + +SET GLOBAL wsrep_slave_threads = 64; +--sleep 0.5 + +--connection node_1 +INSERT INTO t1 VALUES (1); + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1; + +SELECT COUNT(*) = @@wsrep_slave_threads + 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user'; +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND STATE LIKE '%wsrep aborter%'; + +# +# Reduce the number of slave threads. The change is not immediate -- a thread will only exit after a replication event +# + +SET GLOBAL wsrep_slave_threads = 1; + +--connection node_1 + +# Generate 64 replication events +--let $count = 64 +while ($count) +{ + INSERT INTO t2 VALUES (DEFAULT); + --dec $count +} + +--connection node_2 +SELECT COUNT(*) = 64 FROM t2; + +SELECT COUNT(*) = @@wsrep_slave_threads + 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user'; +SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND STATE LIKE '%wsrep aborter%'; + + +--eval SET GLOBAL wsrep_slave_threads = $wsrep_slave_threads_orig + +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/suite/galera/t/galera_var_wsrep_on_off.test b/mysql-test/suite/galera/t/galera_var_wsrep_on_off.test new file mode 100644 index 00000000000..783b78792e6 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_var_wsrep_on_off.test @@ -0,0 +1,32 @@ +# +# Test wsrep_on = OFF. Some events will not be replicated +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +SET SESSION wsrep_on = FALSE; + +# This statement will not be replicated +INSERT INTO t1 VALUES (2); + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1; + +--connection node_1 +SET GLOBAL wsrep_on = TRUE; +INSERT INTO t1 VALUES (3); + +--connection node_2 +SELECT COUNT(*) = 2 FROM t1; + +# Middle insert is not replicated +SELECT COUNT(*) = 0 FROM t1 WHERE f1 = 2; + +# Final insert is replicated +SELECT COUNT(*) = 1 FROM t1 WHERE f1 = 3; + +DROP TABLE t1; + diff --git a/mysql-test/suite/galera/t/galera_wan.cnf b/mysql-test/suite/galera/t/galera_wan.cnf new file mode 100644 index 00000000000..0effd59403b --- /dev/null +++ b/mysql-test/suite/galera/t/galera_wan.cnf @@ -0,0 +1,14 @@ +!include ../galera_4nodes.cnf + +[mysqld.1] +wsrep_provider_options='base_port=@mysqld.1.#galera_port;gcache.size=10M;gmcast.segment=1' + +[mysqld.2] +wsrep_provider_options='base_port=@mysqld.2.#galera_port;gcache.size=10M;gmcast.segment=1' + +[mysqld.3] +wsrep_provider_options='base_port=@mysqld.3.#galera_port;gcache.size=10M;gmcast.segment=2' + +[mysqld.4] +wsrep_provider_options='base_port=@mysqld.4.#galera_port;gcache.size=10M;gmcast.segment=3' + diff --git a/mysql-test/suite/galera/t/galera_wan.test b/mysql-test/suite/galera/t/galera_wan.test new file mode 100644 index 00000000000..a8fd351b168 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_wan.test @@ -0,0 +1,30 @@ +# +# Test WAN replication and the gmcast.segment functionality. +# The galera_wan.cnf file partitions 4 Galera nodes into 3 WAN segments +# +# We can not test any of the actual WAN optimizations from inside MTR and no +# status variables are provided. So we only check that simple replication works. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER); + +--connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3 +--connection node_3 +INSERT INTO t1 VALUES (1); +CALL mtr.add_suppression("There are no nodes in the same segment that will ever be able to become donors, yet there is a suitable donor outside"); + +--connect node_4, 127.0.0.1, root, , test, $NODE_MYPORT_4 +--connection node_4 +SELECT VARIABLE_VALUE LIKE '%gmcast.segment = 3%' FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME = 'wsrep_provider_options'; + +SELECT COUNT(*) = 1 FROM t1; + +DROP TABLE t1; + +CALL mtr.add_suppression("There are no nodes in the same segment that will ever be able to become donors, yet there is a suitable donor outside"); diff --git a/mysql-test/suite/galera/t/galera_wsrep_desync_wsrep_on.test b/mysql-test/suite/galera/t/galera_wsrep_desync_wsrep_on.test new file mode 100644 index 00000000000..3c7988a4924 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_wsrep_desync_wsrep_on.test @@ -0,0 +1,57 @@ +# +# Test the wsrep_desync + wsrep_on method for schema upgrades discussed at +# http://www.slideshare.net/Severalnines/schema-upgrades-codershippresodec2013 , slide 30 +# + +--source include/big_test.inc +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--connection node_1 +CREATE TABLE ten (f1 INTEGER); +INSERT INTO ten VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); + +CREATE TABLE t1 (f1 INTEGER) Engine=InnoDB; + +# Insert some values before the ALTER +INSERT INTO t1 (f1) SELECT 000000 + (10000 * a1.f1) + (1000 * a2.f1) + (100 * a3.f1) + (10 * a4.f1) + a5.f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5; + +--connection node_2 +SET GLOBAL wsrep_desync = TRUE; +SET SESSION wsrep_on = FALSE; + +ALTER TABLE t1 ADD PRIMARY KEY (f1); + +SET SESSION wsrep_on = TRUE; +SET GLOBAL wsrep_desync = FALSE; + +# Insert even more data after the ALTER has completed +INSERT INTO t1 (f1) SELECT 100000 + (10000 * a1.f1) + (1000 * a2.f1) + (100 * a3.f1) + (10 * a4.f1) + a5.f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5; + +SELECT COUNT(*) = 200000 FROM t1; +SELECT MAX(f1) = 199999 FROM t1; + +--connection node_1 +SELECT COUNT(*) = 200000 FROM t1; +SELECT MAX(f1) = 199999 FROM t1; + +SET GLOBAL wsrep_desync = TRUE; +SET SESSION wsrep_on = FALSE; + +ALTER TABLE t1 ADD PRIMARY KEY (f1); + +SET SESSION wsrep_on = TRUE; +SET GLOBAL wsrep_desync = FALSE; + +# Insert some conflicting values after the ALTER has been applied on all nodes. + +--connection node_2 +--error ER_DUP_ENTRY +INSERT INTO t1 (f1) VALUES (1); + +--connection node_1 +--error ER_DUP_ENTRY +INSERT INTO t1 (f1) VALUES (100); + +DROP TABLE t1; +DROP TABLE ten; diff --git a/mysql-test/suite/galera/t/galera_wsrep_new_cluster-master.opt b/mysql-test/suite/galera/t/galera_wsrep_new_cluster-master.opt new file mode 100644 index 00000000000..c31150c46af --- /dev/null +++ b/mysql-test/suite/galera/t/galera_wsrep_new_cluster-master.opt @@ -0,0 +1 @@ +--wsrep-new-cluster diff --git a/mysql-test/suite/galera/t/galera_wsrep_new_cluster.test b/mysql-test/suite/galera/t/galera_wsrep_new_cluster.test new file mode 100644 index 00000000000..6ba8ce786c8 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_wsrep_new_cluster.test @@ -0,0 +1,24 @@ +# +# Test the --wsrep-new-cluster option by putting it in the galera_wsrep_new_cluster-master.opt file +# +# In MTR, running two nodes, the result is two separate clusters of size 1 +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_connected'; +SELECT VARIABLE_VALUE = 0 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_index'; +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state'; +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; + +--connection node_2 + +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_connected'; +SELECT VARIABLE_VALUE = 0 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_index'; +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state'; +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; diff --git a/mysql-test/suite/galera/t/galera_wsrep_provider_unset_set.test b/mysql-test/suite/galera/t/galera_wsrep_provider_unset_set.test new file mode 100644 index 00000000000..fe4c358bd89 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_wsrep_provider_unset_set.test @@ -0,0 +1,41 @@ +# +# Test that wsrep_provider can be unset and then set back to its original value +# and replication will continue except for any updates made while the value was 'none' +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +--connection node_2 +--let $wsrep_provider_orig = `SELECT @@wsrep_provider` +--let $wsrep_cluster_address_orig = `SELECT @@wsrep_cluster_address` + +SET GLOBAL wsrep_provider='none'; +INSERT INTO t1 VALUES (2); + +--connection node_1 +INSERT INTO t1 VALUES (3); + +--connection node_2 +--disable_query_log +--eval SET GLOBAL wsrep_provider = '$wsrep_provider_orig'; +--eval SET GLOBAL wsrep_cluster_address = '$wsrep_cluster_address_orig'; +--enable_query_log + +--source include/wait_until_connected_again.inc +--source include/galera_wait_ready.inc + +INSERT INTO t1 VALUES (4); + +# Node #2 has all the inserts +SELECT COUNT(*) = 4 FROM t1; + +--connection node_1 +# Node #1 is missing the insert made while Node #2 was not replicated +SELECT COUNT(*) = 3 FROM t1; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/galera_zero_length_column.test b/mysql-test/suite/galera/t/galera_zero_length_column.test new file mode 100644 index 00000000000..6ae81a83271 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_zero_length_column.test @@ -0,0 +1,41 @@ +# +# Test columns with size zero. This is known to have tripped other storage engines. +# Keys are not allowed on such columns +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY , f2 VARCHAR(0)) ENGINE=InnoDB; +CREATE TABLE t2 (f1 VARCHAR(0)) ENGINE=InnoDB; + + +INSERT INTO t1 VALUES (1, NULL); +INSERT INTO t1 VALUES (2, ''); + +INSERT INTO t2 VALUES (NULL); +INSERT INTO t2 VALUES (''); + +--connection node_2 +SELECT COUNT(*) = 2 FROM t1; +SELECT f2 IS NULL FROM t1 WHERE f1 = 1; +SELECT f2 = '' FROM t1 WHERE f1 = 2; + +SELECT COUNT(*) = 2 FROM t2; +SELECT f1 IS NULL FROM t2 WHERE f1 IS NULL; +SELECT f1 = '' FROM t2 WHERE f1 IS NOT NULL; + +UPDATE t1 SET f2 = '' WHERE f1 = 1; +UPDATE t1 SET f2 = NULL WHERE f1 = 2; + +UPDATE t2 SET f1 = '' WHERE f1 IS NULL; + +--connection node_1 +SELECT f2 = '' FROM t1 WHERE f1 = 1; +SELECT f2 IS NULL FROM t1 WHERE f1 = 2; + +SELECT COUNT(*) = 2 FROM t2 WHERE f1 = ''; + +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/suite/galera/t/lp1276424.test b/mysql-test/suite/galera/t/lp1276424.test new file mode 100644 index 00000000000..a37e950b6a1 --- /dev/null +++ b/mysql-test/suite/galera/t/lp1276424.test @@ -0,0 +1,17 @@ +# +# LP:1276424 Deadlock with insertion of NULL unique ke +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE t1 (f1 INT DEFAULT NULL, UNIQUE KEY i1 (f1)) ENGINE=InnoDB; + +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (NULL); + +--connection node_2 +SELECT COUNT(*) = 2 FROM t1; +SELECT f1 IS NULL FROM t1; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/lp1347768.test b/mysql-test/suite/galera/t/lp1347768.test new file mode 100644 index 00000000000..96d42867c6a --- /dev/null +++ b/mysql-test/suite/galera/t/lp1347768.test @@ -0,0 +1,24 @@ +# +# LP:1347768 Assertion failure in file ha_innodb.cc line 6759 +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +CREATE TABLE `r8kmb_redirect_links` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `old_url` varchar(255) DEFAULT NULL, + `new_url` varchar(255) NOT NULL, + `referer` varchar(150) NOT NULL, + `comment` varchar(255) NOT NULL, + `published` tinyint(4) NOT NULL, + `created_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `modified_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`), + UNIQUE KEY `idx_link_old` (`old_url`), + KEY `idx_link_modifed` (`modified_date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +INSERT INTO r8kmb_redirect_links VALUES (550,'http://mysite.com/images/download/ßуñûічýøù_ôþóþòір_þфõÑ.doc','','','',0,'2013-07-15 14:29:42','0000-00-00 00:00:00'); + +DROP TABLE r8kmb_redirect_links; diff --git a/mysql-test/suite/galera/t/lp959512.test b/mysql-test/suite/galera/t/lp959512.test new file mode 100644 index 00000000000..bcc0db24ea7 --- /dev/null +++ b/mysql-test/suite/galera/t/lp959512.test @@ -0,0 +1,26 @@ +# +# LP#959512 IO cache not reset at trx cleanup if write set was empty Edit +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +DROP TABLE IF EXISTS variable; +DROP TABLE IF EXISTS foo; +CREATE TABLE variable ( + name varchar(128) NOT NULL DEFAULT '' COMMENT 'The name of the variable.', + value longblob NOT NULL COMMENT 'The value of the variable.', + PRIMARY KEY (name) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Named variable/value pairs created by Drupal core or any...'; +CREATE TABLE foo (a int); +INSERT INTO variable (name, value) VALUES ('menu_expanded', 'a:0:{}'); +START TRANSACTION; +SELECT 1 AS expression FROM variable variable + WHERE ( (name = 'menu_expanded') ) FOR UPDATE; +UPDATE variable SET value='a:0:{}' WHERE ( (name = 'menu_expanded') ); +COMMIT; +INSERT INTO foo VALUES (1); +UPDATE foo SET a = 2 WHERE a = 1; + +DROP TABLE foo; +DROP TABLE variable; diff --git a/mysql-test/suite/galera/t/mysql-wsrep#33.cnf b/mysql-test/suite/galera/t/mysql-wsrep#33.cnf new file mode 100644 index 00000000000..f1c3d802e4b --- /dev/null +++ b/mysql-test/suite/galera/t/mysql-wsrep#33.cnf @@ -0,0 +1,8 @@ +!include ../galera_2nodes.cnf + +[mysqld.1] +wsrep_provider_options='base_port=@mysqld.1.#galera_port;pc.ignore_sb=true' + +[mysqld.2] +wsrep_provider_options='base_port=@mysqld.2.#galera_port;pc.ignore_sb=true' + diff --git a/mysql-test/suite/galera/t/mysql-wsrep#33.test b/mysql-test/suite/galera/t/mysql-wsrep#33.test new file mode 100644 index 00000000000..acc7c735849 --- /dev/null +++ b/mysql-test/suite/galera/t/mysql-wsrep#33.test @@ -0,0 +1,18 @@ + +--source include/big_test.inc +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--source suite/galera/include/galera_sst_set_mysqldump.inc + +--source suite/galera/include/galera_st_disconnect_slave.inc + +--source suite/galera/include/galera_sst_restore.inc + +--connection node_2 +# We have to manually restore global_log and slow_query_log due to mysql-wsrep#108 +# Otherwise MTR's check_testcases complains + +SET GLOBAL general_log = ON; +SET GLOBAL slow_query_log = ON; + diff --git a/mysql-test/suite/galera_3nodes/disabled.def b/mysql-test/suite/galera_3nodes/disabled.def new file mode 100644 index 00000000000..ec02e73b4a3 --- /dev/null +++ b/mysql-test/suite/galera_3nodes/disabled.def @@ -0,0 +1,2 @@ +galera_garbd : Fix the test case +galera_evs_suspect_timeout : TODO: investigate diff --git a/mysql-test/suite/galera_3nodes/galera_3nodes.cnf b/mysql-test/suite/galera_3nodes/galera_3nodes.cnf new file mode 100644 index 00000000000..689fd4db26c --- /dev/null +++ b/mysql-test/suite/galera_3nodes/galera_3nodes.cnf @@ -0,0 +1,58 @@ +# Use default setting for mysqld processes +!include include/default_mysqld.cnf + +[mysqld] +binlog-format=row +innodb-autoinc-lock-mode=2 +default-storage-engine=innodb +wsrep-provider=@ENV.WSREP_PROVIDER +wsrep_node_address=127.0.0.1 +# enforce read-committed characteristics across the cluster +wsrep-causal-reads=ON +wsrep-sync-wait=7 + +[mysqld.1] +#galera_port=@OPT.port +#ist_port=@OPT.port +#sst_port=@OPT.port +wsrep-cluster-address=gcomm:// +wsrep_provider_options='base_port=@mysqld.1.#galera_port;gcache.size=10M' +wsrep_node_incoming_address=127.0.0.1:@mysqld.1.port +wsrep_sst_receive_address='127.0.0.1:@mysqld.1.#sst_port' + +[mysqld.2] +#galera_port=@OPT.port +#ist_port=@OPT.port +#sst_port=@OPT.port +wsrep_cluster_address='gcomm://127.0.0.1:@mysqld.1.#galera_port' +wsrep_provider_options='base_port=@mysqld.2.#galera_port;gcache.size=10M' +wsrep_node_incoming_address=127.0.0.1:@mysqld.2.port +wsrep_sst_receive_address='127.0.0.1:@mysqld.2.#sst_port' + +[mysqld.3] +#galera_port=@OPT.port +#ist_port=@OPT.port +#sst_port=@OPT.port +wsrep_cluster_address='gcomm://127.0.0.1:@mysqld.1.#galera_port' +wsrep_provider_options='base_port=@mysqld.3.#galera_port;gcache.size=10M' +wsrep_node_incoming_address=127.0.0.1:@mysqld.3.port +wsrep_sst_receive_address='127.0.0.1:@mysqld.3.#sst_port' + +[ENV] +NODE_MYPORT_1= @mysqld.1.port +NODE_MYSOCK_1= @mysqld.1.socket + +NODE_MYPORT_2= @mysqld.2.port +NODE_MYSOCK_2= @mysqld.2.socket + +NODE_MYPORT_3= @mysqld.3.port +NODE_MYSOCK_3= @mysqld.3.socket + +NODE_GALERAPORT_1= @mysqld.1.#galera_port +NODE_GALERAPORT_2= @mysqld.2.#galera_port +NODE_GALERAPORT_3= @mysqld.3.#galera_port + +NODE_SSTPORT_1= @mysqld.1.#sst_port +NODE_SSTPORT_2= @mysqld.2.#sst_port +NODE_SSTPORT_3= @mysqld.3.#sst_port + diff --git a/mysql-test/suite/galera_3nodes/include/galera_suspend.inc b/mysql-test/suite/galera_3nodes/include/galera_suspend.inc new file mode 100644 index 00000000000..3495ad2342b --- /dev/null +++ b/mysql-test/suite/galera_3nodes/include/galera_suspend.inc @@ -0,0 +1,14 @@ +# +# This macro suspends the current node +# + +--let _SUSPEND_NODE_PIDFILE = `SELECT @@pid_file` +--echo Suspending node ... + +--perl + my $pid_filename = $ENV{'_SUSPEND_NODE_PIDFILE'}; + my $mysqld_pid = `cat $pid_filename`; + chomp($mysqld_pid); + system("kill -19 $mysqld_pid"); + exit(0); +EOF diff --git a/mysql-test/suite/galera_3nodes/my.cnf b/mysql-test/suite/galera_3nodes/my.cnf new file mode 100644 index 00000000000..bb25b95ceea --- /dev/null +++ b/mysql-test/suite/galera_3nodes/my.cnf @@ -0,0 +1 @@ +!include galera_3nodes.cnf diff --git a/mysql-test/suite/galera_3nodes/r/galera_certification_ccc.result b/mysql-test/suite/galera_3nodes/r/galera_certification_ccc.result new file mode 100644 index 00000000000..96a2bec0d7f --- /dev/null +++ b/mysql-test/suite/galera_3nodes/r/galera_certification_ccc.result @@ -0,0 +1,17 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES (1); +SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 3 +1 +SET GLOBAL wsrep_cluster_address = ''; +INSERT INTO t1 VALUES (2); +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 2 +1 +COMMIT; +SELECT COUNT(*) = 2 FROM t1; +COUNT(*) = 2 +1 +DROP TABLE t1; diff --git a/mysql-test/suite/galera_3nodes/r/galera_certification_double_failure.result b/mysql-test/suite/galera_3nodes/r/galera_certification_double_failure.result new file mode 100644 index 00000000000..9dc735d5d3d --- /dev/null +++ b/mysql-test/suite/galera_3nodes/r/galera_certification_double_failure.result @@ -0,0 +1,12 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +CREATE TABLE t2 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); +COMMIT; +ERROR 40001: Deadlock found when trying to get lock; try restarting transaction +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/suite/galera_3nodes/r/galera_evs_suspect_timeout.result b/mysql-test/suite/galera_3nodes/r/galera_evs_suspect_timeout.result new file mode 100644 index 00000000000..1464222a079 --- /dev/null +++ b/mysql-test/suite/galera_3nodes/r/galera_evs_suspect_timeout.result @@ -0,0 +1,19 @@ +SET GLOBAL wsrep_provider_options = 'evs.inactive_timeout=PT100M; evs.suspect_timeout=PT1S'; +SET GLOBAL wsrep_provider_options = 'evs.inactive_timeout=PT100M; evs.suspect_timeout=PT1S'; +Suspending node ... +SET SESSION wsrep_sync_wait = 0; +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 2 +1 +CREATE TABLE t1 (f1 INTEGER); +INSERT INTO t1 VALUES (1); +SET SESSION wsrep_sync_wait = 0; +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 2 +1 +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +DROP TABLE t1; +Resuming node ... +CALL mtr.add_suppression("WSREP: gcs_caused() returned -1 \\(Operation not permitted\\)"); diff --git a/mysql-test/suite/galera_3nodes/r/galera_garbd.result b/mysql-test/suite/galera_3nodes/r/galera_garbd.result new file mode 100644 index 00000000000..616c9d33303 --- /dev/null +++ b/mysql-test/suite/galera_3nodes/r/galera_garbd.result @@ -0,0 +1,14 @@ +Killing node #3 to free ports for garbd ... +Starting garbd ... +CREATE TABLE t1 (f1 INTEGER); +INSERT INTO t1 VALUES (1); +SELECT COUNT(*) = 1 FROM t1; +COUNT(*) = 1 +1 +Killing garbd ... +INSERT INTO t1 VALUES (2); +SELECT COUNT(*) = 2 FROM t1; +COUNT(*) = 2 +1 +DROP TABLE t1; +Restarting node #3 to satisfy MTR's end-of-test checks diff --git a/mysql-test/suite/galera_3nodes/r/galera_ist_gcache_rollover.result b/mysql-test/suite/galera_3nodes/r/galera_ist_gcache_rollover.result new file mode 100644 index 00000000000..1ecea5db5ab --- /dev/null +++ b/mysql-test/suite/galera_3nodes/r/galera_ist_gcache_rollover.result @@ -0,0 +1,46 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY); +INSERT INTO t1 VALUES (01), (02), (03), (04), (05); +Unloading wsrep provider ... +SET GLOBAL wsrep_provider = 'none'; +Unloading wsrep provider ... +SET GLOBAL wsrep_provider = 'none'; +INSERT INTO t1 VALUES (11), (12), (13), (14), (15); +INSERT INTO t1 VALUES (21), (22), (23), (24), (25); +SET GLOBAL wsrep_provider_options = 'dbug=d,ist_sender_send_after_get_buffers'; +INSERT INTO t1 VALUES (31), (32), (33), (34), (35); +SHOW STATUS LIKE 'wsrep_debug_sync_waiters'; +Variable_name Value +wsrep_debug_sync_waiters ist_sender_send_after_get_buffers ist_sender_send_after_get_buffers +INSERT INTO t1 VALUES (41), (42), (43), (44), (45); +CREATE TABLE t2 (f1 LONGTEXT); +INSERT INTO t2 VALUES (REPEAT('x', 512 * 1024)); +INSERT INTO t2 VALUES (REPEAT('x', 512 * 1024)); +INSERT INTO t2 VALUES (REPEAT('x', 512 * 1024)); +SET GLOBAL wsrep_provider_options = 'signal=ist_sender_send_after_get_buffers'; +SET GLOBAL wsrep_provider_options = 'dbug='; +INSERT INTO t1 VALUES (51), (52), (53), (54), (55); +SELECT COUNT(*) = 30 FROM t1; +COUNT(*) = 30 +1 +SELECT COUNT(*) = 3 FROM t2; +COUNT(*) = 3 +1 +SELECT LENGTH(f1) = 512 * 1024 FROM t2; +LENGTH(f1) = 512 * 1024 +1 +1 +1 +CALL mtr.add_suppression("WSREP: Unsupported protocol downgrade: incremental data collection disabled"); +SELECT COUNT(*) = 30 FROM t1; +COUNT(*) = 30 +1 +SELECT COUNT(*) = 3 FROM t2; +COUNT(*) = 3 +1 +SELECT LENGTH(f1) = 512 * 1024 FROM t2; +LENGTH(f1) = 512 * 1024 +1 +1 +1 +CALL mtr.add_suppression("WSREP: Unsupported protocol downgrade: incremental data collection disabled"); +DROP TABLE t1, t2; diff --git a/mysql-test/suite/galera_3nodes/r/galera_parallel_apply_3nodes.result b/mysql-test/suite/galera_3nodes/r/galera_parallel_apply_3nodes.result new file mode 100644 index 00000000000..1d0da8bf50c --- /dev/null +++ b/mysql-test/suite/galera_3nodes/r/galera_parallel_apply_3nodes.result @@ -0,0 +1,13 @@ +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); +SET GLOBAL wsrep_slave_threads = 2; +UPDATE t1 SET f1 = f1 + 10;; +UPDATE t1 SET f1 = f1 + 100;; +SELECT f1 = 111 FROM t1; +f1 = 111 +1 +SELECT COUNT(*) IN (1, 2) FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND STATE LIKE 'closing tables'; +COUNT(*) IN (1, 2) +1 +SET GLOBAL wsrep_slave_threads = 1;; +DROP TABLE t1; diff --git a/mysql-test/suite/galera_3nodes/r/galera_pc_weight.result b/mysql-test/suite/galera_3nodes/r/galera_pc_weight.result new file mode 100644 index 00000000000..ca051436491 --- /dev/null +++ b/mysql-test/suite/galera_3nodes/r/galera_pc_weight.result @@ -0,0 +1,118 @@ +SET GLOBAL wsrep_provider_options = 'pc.weight=3'; +Suspending node ... +SET SESSION wsrep_sync_wait=0; +SHOW STATUS LIKE 'wsrep_cluster_size'; +Variable_name Value +wsrep_cluster_size 2 +SHOW STATUS LIKE 'wsrep_cluster_status'; +Variable_name Value +wsrep_cluster_status non-Primary +SHOW STATUS LIKE 'wsrep_connected'; +Variable_name Value +wsrep_connected ON +SHOW STATUS LIKE 'wsrep_ready'; +Variable_name Value +wsrep_ready OFF +SHOW STATUS LIKE 'wsrep_local_state'; +Variable_name Value +wsrep_local_state 0 +SHOW STATUS LIKE 'wsrep_local_state_comment'; +Variable_name Value +wsrep_local_state_comment Initialized +SET SESSION wsrep_sync_wait=0; +SHOW STATUS LIKE 'wsrep_cluster_size'; +Variable_name Value +wsrep_cluster_size 2 +SHOW STATUS LIKE 'wsrep_cluster_status'; +Variable_name Value +wsrep_cluster_status non-Primary +SHOW STATUS LIKE 'wsrep_connected'; +Variable_name Value +wsrep_connected ON +SHOW STATUS LIKE 'wsrep_ready'; +Variable_name Value +wsrep_ready OFF +SHOW STATUS LIKE 'wsrep_local_state'; +Variable_name Value +wsrep_local_state 0 +SHOW STATUS LIKE 'wsrep_local_state_comment'; +Variable_name Value +wsrep_local_state_comment Initialized +Resuming node ... +SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 1 +1 +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +VARIABLE_VALUE = 'Primary' +1 +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_connected'; +VARIABLE_VALUE = 'ON' +1 +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +VARIABLE_VALUE = 'ON' +1 +SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state'; +VARIABLE_VALUE = 4 +1 +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +VARIABLE_VALUE = 'Synced' +1 +SET SESSION wsrep_sync_wait=0; +SET SESSION wsrep_sync_wait=0; +SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 3 +1 +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +VARIABLE_VALUE = 'Primary' +1 +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_connected'; +VARIABLE_VALUE = 'ON' +1 +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +VARIABLE_VALUE = 'ON' +1 +SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state'; +VARIABLE_VALUE = 4 +1 +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +VARIABLE_VALUE = 'Synced' +1 +SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 3 +1 +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +VARIABLE_VALUE = 'Primary' +1 +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_connected'; +VARIABLE_VALUE = 'ON' +1 +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +VARIABLE_VALUE = 'ON' +1 +SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state'; +VARIABLE_VALUE = 4 +1 +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +VARIABLE_VALUE = 'Synced' +1 +SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +VARIABLE_VALUE = 3 +1 +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +VARIABLE_VALUE = 'Primary' +1 +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_connected'; +VARIABLE_VALUE = 'ON' +1 +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +VARIABLE_VALUE = 'ON' +1 +SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state'; +VARIABLE_VALUE = 4 +1 +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +VARIABLE_VALUE = 'Synced' +1 +CALL mtr.add_suppression('WSREP: gcs_caused\\(\\) returned -1'); +CALL mtr.add_suppression('WSREP: user message in state LEAVING'); +CALL mtr.add_suppression('sending install message failed: Transport endpoint is not connected'); diff --git a/mysql-test/suite/galera_3nodes/suite.pm b/mysql-test/suite/galera_3nodes/suite.pm new file mode 100644 index 00000000000..1f00e37bdc3 --- /dev/null +++ b/mysql-test/suite/galera_3nodes/suite.pm @@ -0,0 +1,52 @@ +package My::Suite::GALERA_3NODES; +use File::Basename; +use My::Find; + +@ISA = qw(My::Suite); + +return "Not run for embedded server" if $::opt_embedded_server; + +return "WSREP is not compiled in" unless defined $::mysqld_variables{'wsrep-on'}; + +my ($provider) = grep { -f $_ } $ENV{WSREP_PROVIDER}, + "/usr/lib/galera/libgalera_smm.so", + "/usr/lib64/galera/libgalera_smm.so"; + +return "No wsrep provider library" unless -f $provider; + +$ENV{WSREP_PROVIDER} = $provider; + +my ($spath) = grep { -f "$_/wsrep_sst_rsync"; } "$::bindir/scripts", $::path_client_bindir; +return "No SST scripts" unless $spath; + +my ($epath) = grep { -f "$_/my_print_defaults"; } "$::bindir/extra", $::path_client_bindir; +return "No my_print_defaults" unless $epath; + +push @::global_suppressions, + ( + qr(WSREP: wsrep_sst_receive_address is set to '127.0.0.1), + qr(WSREP: Could not open saved state file for reading: ), + qr(WSREP: Gap in state sequence. Need state transfer.), + qr(WSREP: Failed to prepare for incremental state transfer:), + qr(WSREP:.*down context.*), + qr(WSREP: Failed to send state UUID:), + qr(WSREP: last inactive check more than .* skipping check), + qr(WSREP: SQL statement was ineffective), + qr(WSREP: Releasing seqno [0-9]* before [0-9]* was assigned.), + qr|WSREP: access file\(gvwstate.dat\) failed\(No such file or directory\)|, + qr(WSREP: Quorum: No node with complete state), + qr(WSREP: Initial position was provided by configuration or SST, avoiding override), + qr|WSREP: discarding established \(time wait\) .*|, + qr(WSREP: There are no nodes in the same segment that will ever be able to become donors, yet there is a suitable donor outside. Will use that one.), + qr(WSREP: evs::proto.*), + qr|WSREP: Ignoring possible split-brain (allowed by configuration) from view:.*|, + qr(WSREP: Could not find peer:), + qr(WSREP: Protocol violation. JOIN message sender .*), + ); + + +$ENV{PATH}="$epath:$ENV{PATH}"; +$ENV{PATH}="$spath:$ENV{PATH}" unless $epath eq $spath; + +bless { }; + diff --git a/mysql-test/suite/galera_3nodes/t/galera_certification_ccc.test b/mysql-test/suite/galera_3nodes/t/galera_certification_ccc.test new file mode 100644 index 00000000000..e19169a350c --- /dev/null +++ b/mysql-test/suite/galera_3nodes/t/galera_certification_ccc.test @@ -0,0 +1,60 @@ +# +# Test that a cluster configuration change during a transaction does not cause a failure +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--let $galera_connection_name = node_3 +--let $galera_server_number = 3 +--source include/galera_connect.inc + +# Save original auto_increment_offset values. +--connection node_1 +let $auto_increment_offset_node_1 = `SELECT @@global.auto_increment_offset`; +--connection node_2 +let $auto_increment_offset_node_2 = `SELECT @@global.auto_increment_offset`; +--connection node_3 +let $auto_increment_offset_node_3 = `SELECT @@global.auto_increment_offset`; + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; + +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES (1); +SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; + +--connection node_3 +--let $wsrep_cluster_address_orig = `SELECT @@wsrep_cluster_address` +SET GLOBAL wsrep_cluster_address = ''; +--sleep 5 + +--connection node_1 +INSERT INTO t1 VALUES (2); +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +COMMIT; + +--connection node_2 +SELECT COUNT(*) = 2 FROM t1; + +--connection node_3 +--disable_query_log +--eval SET GLOBAL wsrep_cluster_address = '$wsrep_cluster_address_orig'; +--enable_query_log +--sleep 5 +--source include/wait_until_ready.inc + +--connection node_1 +DROP TABLE t1; + +# Restore original auto_increment_offset values. +--disable_query_log +--connection node_1 +--eval SET @@global.auto_increment_offset = $auto_increment_offset_node_1; +--connection node_2 +--eval SET @@global.auto_increment_offset = $auto_increment_offset_node_2; +--connection node_3 +--eval SET @@global.auto_increment_offset = $auto_increment_offset_node_3; +--enable_query_log + diff --git a/mysql-test/suite/galera_3nodes/t/galera_certification_double_failure.test b/mysql-test/suite/galera_3nodes/t/galera_certification_double_failure.test new file mode 100644 index 00000000000..a2ad0765028 --- /dev/null +++ b/mysql-test/suite/galera_3nodes/t/galera_certification_double_failure.test @@ -0,0 +1,33 @@ +# +# This test creates a transaction whose certification will fail on two separate nodes +# for two different reasons. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--let $galera_connection_name = node_3 +--let $galera_server_number = 3 +--source include/galera_connect.inc + +--connection node_1 +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +CREATE TABLE t2 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; + +SET AUTOCOMMIT=OFF; +START TRANSACTION; +INSERT INTO t1 VALUES (1); +INSERT INTO t2 VALUES (1); + +--connection node_2 +INSERT INTO t1 VALUES (1); + +--connection node_3 +INSERT INTO t2 VALUES (1); + +--connection node_1 +--error ER_LOCK_DEADLOCK +COMMIT; + +DROP TABLE t1; +DROP TABLE t2; diff --git a/mysql-test/suite/galera_3nodes/t/galera_evs_suspect_timeout.test b/mysql-test/suite/galera_3nodes/t/galera_evs_suspect_timeout.test new file mode 100644 index 00000000000..a87f19ac94e --- /dev/null +++ b/mysql-test/suite/galera_3nodes/t/galera_evs_suspect_timeout.test @@ -0,0 +1,67 @@ +# +# Test the operation of evs.suspect_timeout. +# +# We set evs.inactive_timeout to a very high value so that evs.suspect_timeout can kick in instead. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--connection node_1 +--let $wsrep_provider_options_node1 = `SELECT @@wsrep_provider_options` +SET GLOBAL wsrep_provider_options = 'evs.inactive_timeout=PT100M; evs.suspect_timeout=PT1S'; + +--connection node_2 +--source include/wait_until_connected_again.inc +--let $wsrep_provider_options_node2 = `SELECT @@wsrep_provider_options` +SET GLOBAL wsrep_provider_options = 'evs.inactive_timeout=PT100M; evs.suspect_timeout=PT1S'; + +--let $galera_connection_name = node_3 +--let $galera_server_number = 3 +--source include/galera_connect.inc +--connection node_3 +--source include/wait_until_connected_again.inc +--let $wsrep_cluster_address_node3 = `SELECT @@wsrep_cluster_address` + +# Suspend node #3 + +--source include/galera_suspend.inc +--sleep 5 + +# Confirm that the other nodes have booted it out + +--connection node_1 +--source include/wait_until_connected_again.inc +SET SESSION wsrep_sync_wait = 0; +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +--disable_query_log +--eval SET GLOBAL wsrep_provider_options = '$wsrep_provider_options_node1'; +--enable_query_log + +--source include/wait_until_connected_again.inc +CREATE TABLE t1 (f1 INTEGER); +INSERT INTO t1 VALUES (1); + +--connection node_2 +SET SESSION wsrep_sync_wait = 0; +SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +--disable_query_log +--eval SET GLOBAL wsrep_provider_options = '$wsrep_provider_options_node2'; +--enable_query_log + +--source include/wait_until_connected_again.inc +SELECT COUNT(*) = 1 FROM t1; +DROP TABLE t1; + +# Reconnect node #3 so that MTR's end-of-test checks can run + +--connection node_3 +--source include/galera_resume.inc +--source include/wait_until_connected_again.inc + +CALL mtr.add_suppression("WSREP: gcs_caused() returned -1 \\(Operation not permitted\\)"); + +--disable_query_log +--eval SET GLOBAL wsrep_cluster_address = '$wsrep_cluster_address_node3'; +--enable_query_log +--source include/wait_until_connected_again.inc diff --git a/mysql-test/suite/galera_3nodes/t/galera_garbd.test b/mysql-test/suite/galera_3nodes/t/galera_garbd.test new file mode 100644 index 00000000000..3f58783ad31 --- /dev/null +++ b/mysql-test/suite/galera_3nodes/t/galera_garbd.test @@ -0,0 +1,50 @@ +# +# A very basic test for the galera arbitrator. We shut down node #3 and use its port allocation to start garbd. +# As MTR does not allow multiple servers to be down at the same time, we are limited as to what we can test. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc +--source include/big_test.inc + +--echo Killing node #3 to free ports for garbd ... +--let $galera_connection_name = node_3 +--let $galera_server_number = 3 +--source include/galera_connect.inc +--source include/shutdown_mysqld.inc + +--connection node_1 +--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc + +--echo Starting garbd ... +--exec `dirname $WSREP_PROVIDER`/garb/garbd --address "gcomm://127.0.0.1:$NODE_GALERAPORT_1" --group my_wsrep_cluster --options 'base_port=$NODE_GALERAPORT_3' > $MYSQL_TMP_DIR/garbd.log 2>&1 & + +--sleep 5 + +--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc + +CREATE TABLE t1 (f1 INTEGER); +INSERT INTO t1 VALUES (1); + +--connection node_2 +SELECT COUNT(*) = 1 FROM t1; + +--echo Killing garbd ... +--exec pkill --oldest --full garbd.*$NODE_GALERAPORT_3 + +--connection node_1 +--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc + +INSERT INTO t1 VALUES (2); + +--connection node_2 +SELECT COUNT(*) = 2 FROM t1; + +DROP TABLE t1; + +--echo Restarting node #3 to satisfy MTR's end-of-test checks +--connection node_3 +--source include/start_mysqld.inc diff --git a/mysql-test/suite/galera_3nodes/t/galera_ist_gcache_rollover.cnf b/mysql-test/suite/galera_3nodes/t/galera_ist_gcache_rollover.cnf new file mode 100644 index 00000000000..821175220ac --- /dev/null +++ b/mysql-test/suite/galera_3nodes/t/galera_ist_gcache_rollover.cnf @@ -0,0 +1,11 @@ +!include ../galera_3nodes.cnf + +[mysqld.1] +wsrep_provider_options='base_port=@mysqld.1.#galera_port;pc.ignore_sb=true;gcache.size=1M' + +[mysqld.2] +wsrep_provider_options='base_port=@mysqld.2.#galera_port;pc.ignore_sb=true;gcache.size=1M' + +[mysqld.3] +wsrep_provider_options='base_port=@mysqld.3.#galera_port;pc.ignore_sb=true;gcache.size=1M' + diff --git a/mysql-test/suite/galera_3nodes/t/galera_ist_gcache_rollover.test b/mysql-test/suite/galera_3nodes/t/galera_ist_gcache_rollover.test new file mode 100644 index 00000000000..0668c246624 --- /dev/null +++ b/mysql-test/suite/galera_3nodes/t/galera_ist_gcache_rollover.test @@ -0,0 +1,98 @@ +# +# Test that if the gcache rolls over while IST is in progress, IST will still complete. +# This is achieved by using the ist_sender_send_after_get_buffers Galera dbug sync point to block the donor after +# the first gcache buffer has been locked for IST. +# +# After IST blocks, we roll over the gcache and resume IST to confirm that it completes successfully. +# +# Two nodes perform IST at the same time in order to make the test more stressfull +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc +--source include/have_debug_sync.inc +--source suite/galera/include/galera_have_debug_sync.inc + +--let $galera_connection_name = node_3 +--let $galera_server_number = 3 +--source include/galera_connect.inc + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY); +INSERT INTO t1 VALUES (01), (02), (03), (04), (05); + +# Disconnect nodes #2 and #3 +--connection node_2 +--source suite/galera/include/galera_unload_provider.inc + +--connection node_3 +--source suite/galera/include/galera_unload_provider.inc + +--connection node_1 +--source include/wait_until_connected_again.inc +INSERT INTO t1 VALUES (11), (12), (13), (14), (15); + +# Wait until nodes #2 and #3 have left +--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc + +INSERT INTO t1 VALUES (21), (22), (23), (24), (25); + +# Make sure IST will block ... +SET GLOBAL wsrep_provider_options = 'dbug=d,ist_sender_send_after_get_buffers'; + +# ... and restart providers to force IST +--connection node_2 +--disable_query_log +--eval SET GLOBAL wsrep_provider = '$wsrep_provider_orig'; +--eval SET GLOBAL wsrep_cluster_address = '$wsrep_cluster_address_orig'; +--enable_query_log + +--connection node_1 +INSERT INTO t1 VALUES (31), (32), (33), (34), (35); + +--connection node_3 +--disable_query_log +--eval SET GLOBAL wsrep_provider = '$wsrep_provider_orig'; +--eval SET GLOBAL wsrep_cluster_address = '$wsrep_cluster_address_orig'; +--enable_query_log + +--connection node_1 +--sleep 2 +SHOW STATUS LIKE 'wsrep_debug_sync_waiters'; + +INSERT INTO t1 VALUES (41), (42), (43), (44), (45); + +# Roll over gcache by writing a lot of information to it + +CREATE TABLE t2 (f1 LONGTEXT); +INSERT INTO t2 VALUES (REPEAT('x', 512 * 1024)); +INSERT INTO t2 VALUES (REPEAT('x', 512 * 1024)); +INSERT INTO t2 VALUES (REPEAT('x', 512 * 1024)); + +# Unlock IST and wait for it to complete +SET GLOBAL wsrep_provider_options = 'signal=ist_sender_send_after_get_buffers'; +SET GLOBAL wsrep_provider_options = 'dbug='; + +INSERT INTO t1 VALUES (51), (52), (53), (54), (55); + +--connection node_2 +--source include/wait_until_connected_again.inc + +--connection node_3 +--source include/wait_until_connected_again.inc + +# Final checks +--connection node_2 +SELECT COUNT(*) = 30 FROM t1; +SELECT COUNT(*) = 3 FROM t2; +SELECT LENGTH(f1) = 512 * 1024 FROM t2; +CALL mtr.add_suppression("WSREP: Unsupported protocol downgrade: incremental data collection disabled"); + +# Final checks +--connection node_3 +SELECT COUNT(*) = 30 FROM t1; +SELECT COUNT(*) = 3 FROM t2; +SELECT LENGTH(f1) = 512 * 1024 FROM t2; +CALL mtr.add_suppression("WSREP: Unsupported protocol downgrade: incremental data collection disabled"); + +DROP TABLE t1, t2; diff --git a/mysql-test/suite/galera_3nodes/t/galera_parallel_apply_3nodes.test b/mysql-test/suite/galera_3nodes/t/galera_parallel_apply_3nodes.test new file mode 100644 index 00000000000..ef5eb8aca4a --- /dev/null +++ b/mysql-test/suite/galera_3nodes/t/galera_parallel_apply_3nodes.test @@ -0,0 +1,38 @@ +# +# This test performs two dependent updates on two nodes and checks the results on the third where +# parallel apply is enabled. +# + +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--let $galera_connection_name = node_3 +--let $galera_server_number = 3 +--source include/galera_connect.inc + +CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; +INSERT INTO t1 VALUES (1); + +--connection node_3 +--let $wsrep_slave_threads_orig = `SELECT @@wsrep_slave_threads` +SET GLOBAL wsrep_slave_threads = 2; + +--connection node_1 +--send UPDATE t1 SET f1 = f1 + 10; + +--connection node_2 +--send UPDATE t1 SET f1 = f1 + 100; + +--connection node_1 +--reap + +--connection node_2 +--reap + +--connection node_3 +SELECT f1 = 111 FROM t1; +SELECT COUNT(*) IN (1, 2) FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = 'system user' AND STATE LIKE 'closing tables'; + +--eval SET GLOBAL wsrep_slave_threads = $wsrep_slave_threads_orig; + +DROP TABLE t1; diff --git a/mysql-test/suite/galera_3nodes/t/galera_pc_weight.test b/mysql-test/suite/galera_3nodes/t/galera_pc_weight.test new file mode 100644 index 00000000000..8956bae98ec --- /dev/null +++ b/mysql-test/suite/galera_3nodes/t/galera_pc_weight.test @@ -0,0 +1,110 @@ +# +# Test the pc.weight wsrep provider option. We set Node #1 to have a high weight and then +# suspend it. This will cause Nodes #2 and #3 to transition to non-primary component. +# + +--source include/big_test.inc +--source include/galera_cluster.inc +--source include/have_innodb.inc + +--let $wsrep_provider_options_node1 = `SELECT @@wsrep_provider_options` +SET GLOBAL wsrep_provider_options = 'pc.weight=3'; + +--source include/wait_until_connected_again.inc +--source include/galera_suspend.inc +--sleep 10 + +--connection node_2 +# Do not wait for causality as we are no longer in the primary component +SET SESSION wsrep_sync_wait=0; +--source include/wait_until_connected_again.inc + +# We can not use SELECT queries here, as only SHOW is allowed to run. +# For nodes #2 and #3, we expect a non-primary component of size 2 + +SHOW STATUS LIKE 'wsrep_cluster_size'; +SHOW STATUS LIKE 'wsrep_cluster_status'; +SHOW STATUS LIKE 'wsrep_connected'; +SHOW STATUS LIKE 'wsrep_ready'; +SHOW STATUS LIKE 'wsrep_local_state'; +SHOW STATUS LIKE 'wsrep_local_state_comment'; + +--let $galera_connection_name = node_3 +--let $galera_server_number = 3 +--source include/galera_connect.inc +--connection node_3 +SET SESSION wsrep_sync_wait=0; +--source include/wait_until_connected_again.inc + +SHOW STATUS LIKE 'wsrep_cluster_size'; +SHOW STATUS LIKE 'wsrep_cluster_status'; +SHOW STATUS LIKE 'wsrep_connected'; +SHOW STATUS LIKE 'wsrep_ready'; +SHOW STATUS LIKE 'wsrep_local_state'; +SHOW STATUS LIKE 'wsrep_local_state_comment'; + +--connection node_1 +--source include/galera_resume.inc +--sleep 5 +--source include/wait_until_connected_again.inc + +# For Node #1, we expect a primary component of size 1 + +SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_connected'; +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state'; +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; + +# Restore the cluster by resetting wsrep_cluster_address on nodes #1 and #2 + +--connection node_2 +--disable_query_log +--eval SET GLOBAL wsrep_cluster_address = @@wsrep_cluster_address; +--enable_query_log + +SET SESSION wsrep_sync_wait=0; +--source include/wait_until_connected_again.inc + +--connection node_3 +--disable_query_log +--eval SET GLOBAL wsrep_cluster_address = @@wsrep_cluster_address; +--enable_query_log + +SET SESSION wsrep_sync_wait=0; +--source include/wait_until_connected_again.inc + +# On all nodes, we now expect a Primary component of size 3, Synced and ready + +--connection node_1 +--source include/wait_until_connected_again.inc +SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_connected'; +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state'; +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; + +--connection node_2 +SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_connected'; +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state'; +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; + +--connection node_3 +SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_connected'; +SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state'; +SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; + +--connection node_1 +CALL mtr.add_suppression('WSREP: gcs_caused\\(\\) returned -1'); + +--connection node_3 +CALL mtr.add_suppression('WSREP: user message in state LEAVING'); +CALL mtr.add_suppression('sending install message failed: Transport endpoint is not connected'); diff --git a/mysql-test/suite/wsrep/r/variables.result b/mysql-test/suite/wsrep/r/variables.result index bd6f0d4adb7..9c047177ca8 100644 --- a/mysql-test/suite/wsrep/r/variables.result +++ b/mysql-test/suite/wsrep/r/variables.result @@ -35,8 +35,12 @@ wsrep_local_commits # wsrep_local_cert_failures # wsrep_local_replays # wsrep_local_send_queue # +wsrep_local_send_queue_max # +wsrep_local_send_queue_min # wsrep_local_send_queue_avg # wsrep_local_recv_queue # +wsrep_local_recv_queue_max # +wsrep_local_recv_queue_min # wsrep_local_recv_queue_avg # wsrep_local_cached_downto # wsrep_flow_control_paused_ns # @@ -86,8 +90,12 @@ wsrep_local_commits # wsrep_local_cert_failures # wsrep_local_replays # wsrep_local_send_queue # +wsrep_local_send_queue_max # +wsrep_local_send_queue_min # wsrep_local_send_queue_avg # wsrep_local_recv_queue # +wsrep_local_recv_queue_max # +wsrep_local_recv_queue_min # wsrep_local_recv_queue_avg # wsrep_local_cached_downto # wsrep_flow_control_paused_ns # diff --git a/mysql-test/suite/wsrep/t/variables.test b/mysql-test/suite/wsrep/t/variables.test index ec405969eba..6922e2d1444 100644 --- a/mysql-test/suite/wsrep/t/variables.test +++ b/mysql-test/suite/wsrep/t/variables.test @@ -28,7 +28,7 @@ CALL mtr.add_suppression("WSREP: Could not open saved state file for reading.*") --disable_query_log eval SET GLOBAL wsrep_provider= '$WSREP_PROVIDER'; ---let $galera_version=25.3.5 +--let $galera_version=3.9 source include/check_galera_version.inc; --enable_query_log diff --git a/sql/sql_table.cc b/sql/sql_table.cc index cf3f588b323..c6647962af5 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -8332,6 +8332,17 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, DEBUG_SYNC(thd, "alter_opened_table"); +#ifdef WITH_WSREP + DBUG_EXECUTE_IF("sync.alter_opened_table", + { + const char act[]= + "now " + "wait_for signal.alter_opened_table"; + DBUG_ASSERT(!debug_sync_set_action(thd, + STRING_WITH_LEN(act))); + };); +#endif // WITH_WSREP + if (error) DBUG_RETURN(true); |