Merge branch '10.0-galera' into bb-10.1-serg
This commit is contained in:
commit
90266e8a0e
@ -26,7 +26,7 @@ ENDIF()
|
||||
OPTION(WITH_WSREP "WSREP replication API (to use, e.g. Galera Replication library)" ${with_wsrep_default})
|
||||
|
||||
# Set the patch version
|
||||
SET(WSREP_PATCH_VERSION "13")
|
||||
SET(WSREP_PATCH_VERSION "16")
|
||||
|
||||
# Obtain wsrep API version
|
||||
FILE(STRINGS "${MySQL_SOURCE_DIR}/wsrep/wsrep_api.h" WSREP_API_VERSION
|
||||
|
@ -28,3 +28,4 @@ galera_flush : mysql-wsrep/issues/229
|
||||
galera_transaction_read_only : mysql-wsrep/issues/229
|
||||
galera_gcs_fragment : Incorrect arguments to SET
|
||||
galera_flush_local : Fails sporadically
|
||||
galera_binlog_stmt_autoinc : TODO: investigate
|
@ -16,7 +16,7 @@ wsrep-sync-wait=7
|
||||
#ist_port=@OPT.port
|
||||
#sst_port=@OPT.port
|
||||
wsrep-cluster-address=gcomm://
|
||||
wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.1.#galera_port;gcache.size=10M'
|
||||
wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.1.#galera_port;gcache.size=10M;evs.suspect_timeout=PT10S'
|
||||
wsrep_node_incoming_address=127.0.0.1:@mysqld.1.port
|
||||
wsrep_sst_receive_address='127.0.0.1:@mysqld.1.#sst_port'
|
||||
|
||||
@ -25,7 +25,7 @@ wsrep_sst_receive_address='127.0.0.1:@mysqld.1.#sst_port'
|
||||
#ist_port=@OPT.port
|
||||
#sst_port=@OPT.port
|
||||
wsrep_cluster_address='gcomm://127.0.0.1:@mysqld.1.#galera_port'
|
||||
wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.2.#galera_port;gcache.size=10M'
|
||||
wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.2.#galera_port;gcache.size=10M;evs.suspect_timeout=PT10S'
|
||||
wsrep_node_incoming_address=127.0.0.1:@mysqld.2.port
|
||||
wsrep_sst_receive_address='127.0.0.1:@mysqld.2.#sst_port'
|
||||
|
||||
|
@ -0,0 +1,35 @@
|
||||
# See auto_increment_offset_restore.inc for details.
|
||||
|
||||
if (!$node_1)
|
||||
{
|
||||
--die ERROR IN TEST: $node_1 must be set before sourcing auto_increment_offset_save.inc
|
||||
}
|
||||
|
||||
if (!$node_2)
|
||||
{
|
||||
--die ERROR IN TEST: $node_2 must be set before sourcing auto_increment_offset_save.inc
|
||||
}
|
||||
|
||||
if (!$auto_increment_offset_node_1)
|
||||
{
|
||||
--die ERROR IN TEST: $auto_increment_offset_node_1 must be set before sourcing auto_increment_offset_save.inc
|
||||
}
|
||||
|
||||
if (!$auto_increment_offset_node_2)
|
||||
{
|
||||
--die ERROR IN TEST: $auto_increment_offset_node_2 must be set before sourcing auto_increment_offset_save.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_2
|
||||
--eval SET @@global.auto_increment_offset = $auto_increment_offset_node_2;
|
||||
|
||||
if ($node_3)
|
||||
{
|
||||
--connection $node_3
|
||||
--eval SET @@global.auto_increment_offset = $auto_increment_offset_node_3;
|
||||
}
|
||||
--enable_query_log
|
@ -0,0 +1,37 @@
|
||||
# This file can be used to save the @@global.auto_increment_offset value at
|
||||
# the beginning of any test that intends to restart any of the participating
|
||||
# nodes. This is required as the node may get auto-assigned a different
|
||||
# auto_increment_offset value on restart, which could cause MTR's internal
|
||||
# post-check to fail. auto_increment_offset_restore.inc can be used at the
|
||||
# end of the test to restore these saved values.
|
||||
|
||||
# Parameters
|
||||
# ----------
|
||||
# $node_1
|
||||
# Connection handle for 1st node
|
||||
# $node_2
|
||||
# Connection handle for 2nd node
|
||||
# $node_3 (optional)
|
||||
# Connection handle for 3rd node
|
||||
|
||||
if (!$node_1)
|
||||
{
|
||||
--die ERROR IN TEST: $node_1 must be set before sourcing auto_increment_offset_save.inc
|
||||
}
|
||||
|
||||
if (!$node_2)
|
||||
{
|
||||
--die ERROR IN TEST: $node_2 must be set before sourcing auto_increment_offset_save.inc
|
||||
}
|
||||
|
||||
--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`;
|
||||
|
||||
if ($node_3)
|
||||
{
|
||||
--connection $node_3
|
||||
let $auto_increment_offset_node_3 = `SELECT @@global.auto_increment_offset`;
|
||||
}
|
||||
|
6
mysql-test/suite/galera/r/GAL-382.result
Normal file
6
mysql-test/suite/galera/r/GAL-382.result
Normal file
@ -0,0 +1,6 @@
|
||||
create table t1 (i int, j int, k int, primary key pk(i)) engine=innodb;
|
||||
insert into t1 values (1, 1, 1), (2, 2, 2), (3, 3, 3);
|
||||
create table t2 (i int, j int, k int, primary key pk(i, j, k), index idx(i, k, j)) engine=innodb;
|
||||
replace into t2 (i, j, k) select /*!99997 */ i, k, j from t1;
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
7
mysql-test/suite/galera/r/MW-252.result
Normal file
7
mysql-test/suite/galera/r/MW-252.result
Normal file
@ -0,0 +1,7 @@
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
VARIABLE_VALUE = 2
|
||||
1
|
||||
UNLOCK TABLES;
|
||||
DROP TABLE t1;
|
34
mysql-test/suite/galera/r/MW-258.result
Normal file
34
mysql-test/suite/galera/r/MW-258.result
Normal file
@ -0,0 +1,34 @@
|
||||
CREATE TABLE t1 (f1 INTEGER);
|
||||
LOCK TABLE t1 WRITE;
|
||||
value prior to RSU:
|
||||
SHOW STATUS LIKE 'wsrep_desync_count';
|
||||
Variable_name Value
|
||||
wsrep_desync_count 0
|
||||
SHOW VARIABLES LIKE 'wsrep_desync';
|
||||
Variable_name Value
|
||||
wsrep_desync OFF
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
SET SESSION wsrep_osu_method = RSU;
|
||||
ALTER TABLE t1 ADD COLUMN f2 INTEGER;;
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
SET SESSION wsrep_osu_method = RSU;
|
||||
ALTER TABLE t1 ADD COLUMN f3 INTEGER;;
|
||||
value during RSU:
|
||||
SHOW STATUS LIKE 'wsrep_desync_count';
|
||||
Variable_name Value
|
||||
wsrep_desync_count 2
|
||||
SHOW VARIABLES LIKE 'wsrep_desync';
|
||||
Variable_name Value
|
||||
wsrep_desync OFF
|
||||
UNLOCK TABLES;
|
||||
value after RSU:
|
||||
SHOW STATUS LIKE 'wsrep_desync_count';
|
||||
Variable_name Value
|
||||
wsrep_desync_count 0
|
||||
SHOW VARIABLES LIKE 'wsrep_desync';
|
||||
Variable_name Value
|
||||
wsrep_desync OFF
|
||||
SET GLOBAL wsrep_desync=0;
|
||||
Warnings:
|
||||
Warning 1231 'wsrep_desync' is already OFF.
|
||||
DROP TABLE t1;
|
12
mysql-test/suite/galera/r/MW-259.result
Normal file
12
mysql-test/suite/galera/r/MW-259.result
Normal file
@ -0,0 +1,12 @@
|
||||
CREATE TABLE t1 (f1 INTEGER) Engine=InnoDB;
|
||||
SET GLOBAL wsrep_desync=0;
|
||||
Warnings:
|
||||
Warning 1231 'wsrep_desync' is already OFF.
|
||||
SET wsrep_OSU_method=RSU;
|
||||
SET DEBUG_SYNC = 'alter_table_before_open_tables WAIT_FOR continue';
|
||||
ALTER TABLE t1 ADD COLUMN f2 INTEGER;;
|
||||
SET GLOBAL wsrep_desync=1;;
|
||||
SET DEBUG_SYNC= 'now SIGNAL continue';
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL wsrep_desync=0;
|
||||
SET DEBUG_SYNC= 'RESET';
|
@ -11,3 +11,4 @@ DROP TABLE t1;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE ALL;
|
||||
CALL mtr.add_suppression('failed registering on master');
|
||||
CALL mtr.add_suppression('You need to use --log-bin to make --binlog-format work');
|
||||
|
19
mysql-test/suite/galera/r/MW-285.result
Normal file
19
mysql-test/suite/galera/r/MW-285.result
Normal file
@ -0,0 +1,19 @@
|
||||
CREATE TABLE parent1 ( id INT PRIMARY KEY, KEY (id) ) ENGINE=InnoDB;
|
||||
CREATE TABLE parent2 ( id INT PRIMARY KEY, KEY (id) ) ENGINE=InnoDB;
|
||||
CREATE TABLE child (
|
||||
id INT PRIMARY KEY,
|
||||
parent1_id INT,
|
||||
parent2_id INT,
|
||||
FOREIGN KEY (parent1_id) REFERENCES parent1(id),
|
||||
FOREIGN KEY (parent1_id) REFERENCES parent2(id)
|
||||
) ENGINE=InnoDB;
|
||||
INSERT INTO parent1 VALUES (1);
|
||||
INSERT INTO parent2 VALUES (1);
|
||||
INSERT INTO child VALUES (1,1,1);
|
||||
INSERT INTO child VALUES (2,1,1);
|
||||
SET foreign_key_checks=OFF;
|
||||
DROP TABLE parent1;
|
||||
UPDATE child SET parent1_id=2 WHERE id=1;
|
||||
DROP TABLE child;
|
||||
DROP TABLE parent2;
|
||||
SET foreign_key_checks=ON;
|
13
mysql-test/suite/galera/r/MW-286.result
Normal file
13
mysql-test/suite/galera/r/MW-286.result
Normal file
@ -0,0 +1,13 @@
|
||||
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 GLOBAL wsrep_desync = TRUE;
|
||||
SET wsrep_on = FALSE;
|
||||
ALTER TABLE t1 ADD PRIMARY KEY (f1);
|
||||
ERROR 70100: Query execution was interrupted
|
||||
SET wsrep_on = TRUE;
|
||||
SET GLOBAL wsrep_desync = FALSE;
|
||||
DROP TABLE t1;
|
||||
DROP TABLE ten;
|
30
mysql-test/suite/galera/r/MW-292.result
Normal file
30
mysql-test/suite/galera/r/MW-292.result
Normal file
@ -0,0 +1,30 @@
|
||||
CREATE TABLE rand_table (f1 FLOAT);
|
||||
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,commit_monitor_enter_sync';
|
||||
COMMIT;;
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
SET SESSION wsrep_on = 0;
|
||||
SET SESSION wsrep_on = 1;
|
||||
UPDATE t1 SET f2 = 'c' WHERE f1 = 2;
|
||||
SET GLOBAL wsrep_provider_options = 'dbug=';
|
||||
SET GLOBAL wsrep_provider_options = 'signal=commit_monitor_enter_sync';
|
||||
SELECT TIMEDIFF(SYSDATE(), NOW()) < 2;
|
||||
TIMEDIFF(SYSDATE(), NOW()) < 2
|
||||
1
|
||||
INSERT INTO rand_table VALUES (RAND()),(RAND()),(RAND()),(RAND()),(RAND());
|
||||
INSERT INTO rand_table VALUES (RAND()),(RAND()),(RAND()),(RAND()),(RAND());
|
||||
SELECT COUNT(DISTINCT f1) = 10 FROM rand_table;
|
||||
COUNT(DISTINCT f1) = 10
|
||||
1
|
||||
wsrep_local_replays
|
||||
1
|
||||
DROP TABLE t1;
|
||||
DROP TABLE rand_table;
|
14
mysql-test/suite/galera/r/MW-44.result
Normal file
14
mysql-test/suite/galera/r/MW-44.result
Normal file
@ -0,0 +1,14 @@
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
SET SESSION wsrep_osu_method=TOI;
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
||||
SET SESSION wsrep_osu_method=RSU;
|
||||
ALTER TABLE t1 ADD COLUMN f2 INTEGER;
|
||||
SET SESSION wsrep_osu_method=TOI;
|
||||
SELECT COUNT(*) = 2 FROM mysql.general_log WHERE argument LIKE 'CREATE%' OR argument LIKE 'ALTER%';
|
||||
COUNT(*) = 2
|
||||
1
|
||||
SELECT COUNT(*) = 0 FROM mysql.general_log WHERE argument NOT LIKE 'SELECT%';
|
||||
COUNT(*) = 0
|
||||
1
|
||||
DROP TABLE t1;
|
5
mysql-test/suite/galera/r/galera#414.result
Normal file
5
mysql-test/suite/galera/r/galera#414.result
Normal file
@ -0,0 +1,5 @@
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
SET SESSION wsrep_on = OFF;
|
||||
SET SESSION wsrep_on = ON;
|
||||
CALL mtr.add_suppression("Failed to set packet size");
|
||||
CALL mtr.add_suppression("Failed to set packet size");
|
@ -46,3 +46,4 @@ SET SQL_LOG_BIN=OFF;
|
||||
DROP TABLE t2, t3;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE ALL;
|
||||
CALL mtr.add_suppression('You need to use --log-bin to make --binlog-format work');
|
||||
|
82
mysql-test/suite/galera/r/galera_as_slave_autoinc.result
Normal file
82
mysql-test/suite/galera/r/galera_as_slave_autoinc.result
Normal file
@ -0,0 +1,82 @@
|
||||
START SLAVE;
|
||||
SET SESSION binlog_format='STATEMENT';
|
||||
CREATE TABLE t1 (
|
||||
i int(11) NOT NULL AUTO_INCREMENT,
|
||||
c char(32) DEFAULT 'dummy_text',
|
||||
PRIMARY KEY (i)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
insert into t1(i) values(null);
|
||||
select * from t1;
|
||||
i c
|
||||
1 dummy_text
|
||||
insert into t1(i) values(null), (null), (null);
|
||||
select * from t1;
|
||||
i c
|
||||
1 dummy_text
|
||||
2 dummy_text
|
||||
3 dummy_text
|
||||
4 dummy_text
|
||||
SET SESSION auto_increment_increment=7;
|
||||
insert into t1(i) values(null), (null), (null);
|
||||
SET SESSION auto_increment_offset=5;
|
||||
insert into t1(i) values(null), (null), (null);
|
||||
select * from t1;
|
||||
i c
|
||||
1 dummy_text
|
||||
2 dummy_text
|
||||
3 dummy_text
|
||||
4 dummy_text
|
||||
8 dummy_text
|
||||
15 dummy_text
|
||||
22 dummy_text
|
||||
33 dummy_text
|
||||
40 dummy_text
|
||||
47 dummy_text
|
||||
show variables like 'binlog_format';
|
||||
Variable_name Value
|
||||
binlog_format STATEMENT
|
||||
show variables like '%auto_increment%';
|
||||
Variable_name Value
|
||||
auto_increment_increment 7
|
||||
auto_increment_offset 5
|
||||
wsrep_auto_increment_control ON
|
||||
select * from t1;
|
||||
i c
|
||||
1 dummy_text
|
||||
2 dummy_text
|
||||
3 dummy_text
|
||||
4 dummy_text
|
||||
8 dummy_text
|
||||
15 dummy_text
|
||||
22 dummy_text
|
||||
33 dummy_text
|
||||
40 dummy_text
|
||||
47 dummy_text
|
||||
show variables like 'binlog_format';
|
||||
Variable_name Value
|
||||
binlog_format ROW
|
||||
show variables like 'auto_increment_increment';
|
||||
Variable_name Value
|
||||
auto_increment_increment 2
|
||||
select * from t1;
|
||||
i c
|
||||
1 dummy_text
|
||||
2 dummy_text
|
||||
3 dummy_text
|
||||
4 dummy_text
|
||||
8 dummy_text
|
||||
15 dummy_text
|
||||
22 dummy_text
|
||||
33 dummy_text
|
||||
40 dummy_text
|
||||
47 dummy_text
|
||||
show variables like 'binlog_format';
|
||||
Variable_name Value
|
||||
binlog_format ROW
|
||||
show variables like 'auto_increment_increment';
|
||||
Variable_name Value
|
||||
auto_increment_increment 2
|
||||
DROP TABLE t1;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE ALL;
|
||||
RESET MASTER;
|
@ -12,7 +12,7 @@ STOP SLAVE;
|
||||
RESET SLAVE ALL;
|
||||
CALL mtr.add_suppression("Slave SQL: Error 'Unknown command' on query");
|
||||
CALL mtr.add_suppression("Slave: Unknown command Error_code: 1047");
|
||||
CALL mtr.add_suppression("Send action {\\(nil\\), 328, TORDERED} returned -107 \\(Transport endpoint is not connected\\)");
|
||||
CALL mtr.add_suppression("Transport endpoint is not connected");
|
||||
CALL mtr.add_suppression("Slave SQL: Error in Xid_log_event: Commit could not be completed, 'Deadlock found when trying to get lock; try restarting transaction', Error_code: 1213");
|
||||
CALL mtr.add_suppression("Slave SQL: Node has dropped from cluster, Error_code: 1047");
|
||||
RESET MASTER;
|
||||
|
@ -6,9 +6,10 @@ SET SESSION wsrep_sync_wait = 0;
|
||||
UNLOCK TABLES;
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
SELECT * FROM t1;
|
||||
f1
|
||||
2
|
||||
SET SESSION wsrep_sync_wait = 7;
|
||||
SELECT COUNT(*) = 1 FROM t1;
|
||||
COUNT(*) = 1
|
||||
1
|
||||
wsrep_local_aborts_increment
|
||||
1
|
||||
DROP TABLE t1;
|
||||
|
@ -32,8 +32,8 @@ WSREP_GTID_DOMAIN_ID 0
|
||||
WSREP_GTID_MODE OFF
|
||||
WSREP_LOAD_DATA_SPLITTING ON
|
||||
WSREP_LOG_CONFLICTS OFF
|
||||
WSREP_MAX_WS_ROWS 131072
|
||||
WSREP_MAX_WS_SIZE 1073741824
|
||||
WSREP_MAX_WS_ROWS 0
|
||||
WSREP_MAX_WS_SIZE 2147483647
|
||||
WSREP_MYSQL_REPLICATION_BUNDLE 0
|
||||
WSREP_NOTIFY_CMD
|
||||
WSREP_ON ON
|
||||
@ -50,12 +50,12 @@ 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>; 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 = PT90S; repl.commit_order = 3; repl.key_format = FLAT8; repl.max_ws_size = 2147483647; repl.proto_max = 7; socket.checksum = 2;
|
||||
<BASE_DIR>; <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 = PT10S; 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; gcomm.thread_prio = ; 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>; 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 = PT90S; repl.commit_order = 3; repl.key_format = FLAT8; repl.max_ws_size = 2147483647; repl.proto_max = 7; socket.checksum = 2; socket.recv_buf_size = 212992;
|
||||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.GLOBAL_STATUS
|
||||
WHERE VARIABLE_NAME LIKE 'wsrep_%'
|
||||
AND VARIABLE_NAME != 'wsrep_debug_sync_waiters';
|
||||
COUNT(*)
|
||||
57
|
||||
58
|
||||
SELECT VARIABLE_NAME FROM INFORMATION_SCHEMA.GLOBAL_STATUS
|
||||
WHERE VARIABLE_NAME LIKE 'wsrep_%'
|
||||
AND VARIABLE_NAME != 'wsrep_debug_sync_waiters'
|
||||
@ -76,6 +76,7 @@ WSREP_COMMIT_OOOE
|
||||
WSREP_COMMIT_OOOL
|
||||
WSREP_COMMIT_WINDOW
|
||||
WSREP_CONNECTED
|
||||
WSREP_DESYNC_COUNT
|
||||
WSREP_EVS_DELAYED
|
||||
WSREP_EVS_EVICT_LIST
|
||||
WSREP_EVS_REPL_LATENCY
|
||||
|
@ -4,7 +4,7 @@ SELECT COUNT(*) = 1 FROM t1;
|
||||
COUNT(*) = 1
|
||||
1
|
||||
SET GLOBAL wsrep_provider_options = 'gcs.fc_limit=1';
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
LOCK TABLE t1 WRITE;
|
||||
INSERT INTO t1 VALUES (2);
|
||||
INSERT INTO t1 VALUES (3);
|
||||
INSERT INTO t1 VALUES (4);
|
||||
|
13
mysql-test/suite/galera/r/galera_ist_recv_bind.result
Normal file
13
mysql-test/suite/galera/r/galera_ist_recv_bind.result
Normal file
@ -0,0 +1,13 @@
|
||||
SELECT @@wsrep_provider_options LIKE '%ist.recv_bind = 127.0.0.1%';
|
||||
@@wsrep_provider_options LIKE '%ist.recv_bind = 127.0.0.1%'
|
||||
1
|
||||
SELECT @@wsrep_provider_options LIKE '%ist.recv_bind = 127.0.0.1%';
|
||||
@@wsrep_provider_options LIKE '%ist.recv_bind = 127.0.0.1%'
|
||||
1
|
||||
SET GLOBAL wsrep_provider_options = 'gmcast.isolate = 1';
|
||||
SET SESSION wsrep_on = OFF;
|
||||
SET SESSION wsrep_on = ON;
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
SET GLOBAL wsrep_provider_options = 'gmcast.isolate = 0';
|
||||
DROP TABLE t1;
|
@ -5,7 +5,4 @@ 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;
|
||||
|
@ -9,9 +9,6 @@ SELECT 1 = 1 FROM t1;
|
||||
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
|
||||
|
@ -1,6 +1,7 @@
|
||||
CREATE TABLE t1 (id INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (id INT) ENGINE=InnoDB;
|
||||
SET GLOBAL wsrep_slave_threads = 2;
|
||||
LOCK TABLE t1 WRITE;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t2 VALUES (1);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
@ -13,15 +14,15 @@ INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t2 VALUES (1);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t2 VALUES (1);
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
UNLOCK TABLES;
|
||||
SET SESSION wsrep_sync_wait = 7;
|
||||
SELECT COUNT(*) = 10 FROM t1;
|
||||
COUNT(*) = 10
|
||||
0
|
||||
SELECT COUNT(*) = 10 FROM t2;
|
||||
COUNT(*) = 10
|
||||
0
|
||||
SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'committed%';
|
||||
COUNT(*) = 2
|
||||
1
|
||||
SET GLOBAL wsrep_slave_threads = 1;;
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
|
@ -6,3 +6,7 @@ SELECT COUNT(*) = 0 FROM t1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
DROP TABLE t1;
|
||||
CALL mtr.add_suppression("Maximum writeset size exceeded by");
|
||||
CALL mtr.add_suppression("transaction size limit");
|
||||
CALL mtr.add_suppression("transaction size exceeded");
|
||||
CALL mtr.add_suppression("rbr write fail");
|
||||
|
@ -69,8 +69,8 @@ SET ROLE role1;
|
||||
FLUSH TABLES;
|
||||
SELECT * FROM mysql.roles_mapping;
|
||||
Host User Role Admin_option
|
||||
role1 Y
|
||||
localhost foo role1 N
|
||||
localhost root role1 Y
|
||||
SHOW TABLES FROM test1;
|
||||
Tables_in_test1
|
||||
t1
|
||||
@ -153,4 +153,43 @@ role1
|
||||
# Connect with node_1
|
||||
DROP USER foo@localhost;
|
||||
DROP DATABASE test1;
|
||||
#
|
||||
# MDEV-10566: Create role statement replicated inconsistently in Galera Cluster
|
||||
#
|
||||
|
||||
# On node_1
|
||||
CREATE USER foo@localhost;
|
||||
CREATE ROLE role1;
|
||||
CREATE ROLE role2 WITH ADMIN CURRENT_USER;
|
||||
CREATE ROLE role3 WITH ADMIN foo@localhost;
|
||||
CREATE ROLE role4 WITH ADMIN role1;
|
||||
SELECT * FROM mysql.roles_mapping;
|
||||
Host User Role Admin_option
|
||||
role1 role4 Y
|
||||
localhost foo role3 Y
|
||||
localhost root role1 Y
|
||||
localhost root role2 Y
|
||||
SELECT * FROM INFORMATION_SCHEMA.APPLICABLE_ROLES;
|
||||
GRANTEE ROLE_NAME IS_GRANTABLE
|
||||
role1 role4 YES
|
||||
root@localhost role1 YES
|
||||
root@localhost role2 YES
|
||||
|
||||
# On node_2
|
||||
SELECT * FROM mysql.roles_mapping;
|
||||
Host User Role Admin_option
|
||||
role1 role4 Y
|
||||
localhost foo role3 Y
|
||||
localhost root role1 Y
|
||||
localhost root role2 Y
|
||||
SELECT * FROM INFORMATION_SCHEMA.APPLICABLE_ROLES;
|
||||
GRANTEE ROLE_NAME IS_GRANTABLE
|
||||
role1 role4 YES
|
||||
root@localhost role1 YES
|
||||
root@localhost role2 YES
|
||||
DROP ROLE role1;
|
||||
DROP ROLE role2;
|
||||
DROP ROLE role3;
|
||||
DROP ROLE role4;
|
||||
DROP USER foo@localhost;
|
||||
# End of test
|
||||
|
@ -22,12 +22,11 @@ SET GLOBAL wsrep_desync=0;
|
||||
Warnings:
|
||||
Warning 1231 'wsrep_desync' is already OFF.
|
||||
SET wsrep_OSU_method=RSU;
|
||||
SET DEBUG_SYNC = 'alter_table_before_open_tables WAIT_FOR continue';
|
||||
SET DEBUG_SYNC = 'alter_table_before_create_table_no_lock WAIT_FOR continue';
|
||||
ALTER TABLE t1 ADD COLUMN f2 INTEGER;;
|
||||
SET GLOBAL wsrep_desync=1;
|
||||
ERROR HY000: Operation 'desync' failed for SET GLOBAL wsrep_desync=1
|
||||
SET GLOBAL wsrep_desync=0;
|
||||
SET GLOBAL wsrep_desync=1;;
|
||||
SET DEBUG_SYNC= 'now SIGNAL continue';
|
||||
SET GLOBAL wsrep_desync=0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
|
@ -4,21 +4,12 @@ VARIABLE_VALUE = 'Synced'
|
||||
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
VARIABLE_VALUE = 2
|
||||
1
|
||||
SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment';
|
||||
VARIABLE_VALUE = 'Synced'
|
||||
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
VARIABLE_VALUE = 2
|
||||
1
|
||||
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
VARIABLE_VALUE = 2
|
||||
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 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
|
||||
|
@ -30,3 +30,30 @@ SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'c';
|
||||
COUNT(*) = 1
|
||||
1
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (i int primary key, j int) ENGINE=INNODB;
|
||||
INSERT INTO t1 VALUES (1, 0), (3, 0);
|
||||
SELECT * FROM t1;
|
||||
i j
|
||||
1 0
|
||||
3 0
|
||||
PREPARE stmt1 FROM "UPDATE t1 SET j = 1 where i > 0";
|
||||
SET GLOBAL wsrep_provider_options = 'dbug=d,commit_monitor_enter_sync';
|
||||
EXECUTE stmt1;;
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
SET SESSION wsrep_on = 0;
|
||||
SET SESSION wsrep_on = 1;
|
||||
INSERT INTO t1 VALUES(2,2);
|
||||
SET GLOBAL wsrep_provider_options = 'dbug=';
|
||||
SET GLOBAL wsrep_provider_options = 'signal=commit_monitor_enter_sync';
|
||||
SELECT * FROM t1;
|
||||
i j
|
||||
1 1
|
||||
2 2
|
||||
3 1
|
||||
SELECT * FROM t1;
|
||||
i j
|
||||
1 1
|
||||
2 2
|
||||
3 1
|
||||
DEALLOCATE PREPARE stmt1;
|
||||
DROP TABLE t1;
|
||||
|
@ -26,4 +26,6 @@ INSERT INTO t1 VALUES (11);
|
||||
SELECT COUNT(*) = 11 FROM t1;
|
||||
COUNT(*) = 11
|
||||
1
|
||||
CALL mtr.add_suppression("Protocol violation");
|
||||
DROP TABLE t1;
|
||||
CALL mtr.add_suppression("Protocol violation");
|
||||
|
115
mysql-test/suite/galera/r/galera_var_max_ws_rows.result
Normal file
115
mysql-test/suite/galera/r/galera_var_max_ws_rows.result
Normal file
@ -0,0 +1,115 @@
|
||||
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;
|
||||
SET GLOBAL wsrep_max_ws_rows = 4;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f2) VALUES (1);
|
||||
INSERT INTO t1 (f2) VALUES (2);
|
||||
INSERT INTO t1 (f2) VALUES (3);
|
||||
INSERT INTO t1 (f2) VALUES (4);
|
||||
INSERT INTO t1 (f2) VALUES (5);
|
||||
ERROR HY000: wsrep_max_ws_rows exceeded
|
||||
COMMIT;
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f2) VALUES (1);
|
||||
INSERT INTO t1 (f2) VALUES (2);
|
||||
INSERT INTO t1 (f2) VALUES (3);
|
||||
INSERT INTO t1 (f2) VALUES (4);
|
||||
UPDATE t1 SET f2 = 10 WHERE f2 = 4;
|
||||
ERROR HY000: wsrep_max_ws_rows exceeded
|
||||
COMMIT;
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f2) VALUES (1);
|
||||
INSERT INTO t1 (f2) VALUES (2);
|
||||
INSERT INTO t1 (f2) VALUES (3);
|
||||
INSERT INTO t1 (f2) VALUES (4);
|
||||
DELETE FROM t1 WHERE f2 = 1;
|
||||
ERROR HY000: wsrep_max_ws_rows exceeded
|
||||
COMMIT;
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
SET GLOBAL wsrep_max_ws_rows = 5;
|
||||
INSERT INTO t1 (f2) VALUES (1),(2),(3),(4),(5);
|
||||
SET GLOBAL wsrep_max_ws_rows = 4;
|
||||
UPDATE t1 SET f2 = f2 + 10;
|
||||
ERROR HY000: wsrep_max_ws_rows exceeded
|
||||
SELECT COUNT(*) = 5 FROM t1;
|
||||
COUNT(*) = 5
|
||||
1
|
||||
DELETE FROM t1 WHERE f2 < 10;
|
||||
ERROR HY000: wsrep_max_ws_rows exceeded
|
||||
SELECT COUNT(*) = 5 FROM t1;
|
||||
COUNT(*) = 5
|
||||
1
|
||||
INSERT INTO t1 (f2) SELECT * FROM ten;
|
||||
ERROR HY000: wsrep_max_ws_rows exceeded
|
||||
SELECT COUNT(*) = 5 FROM t1;
|
||||
COUNT(*) = 5
|
||||
1
|
||||
INSERT INTO t1 (f2) VALUES (10),(20),(30),(40),(50);
|
||||
ERROR HY000: wsrep_max_ws_rows exceeded
|
||||
SELECT COUNT(*) = 5 FROM t1;
|
||||
COUNT(*) = 5
|
||||
1
|
||||
SET GLOBAL wsrep_max_ws_rows = 10;
|
||||
DELETE FROM t1 WHERE f2 < 10;
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
SET GLOBAL wsrep_max_ws_rows = 100;
|
||||
SELECT COUNT(*) = 100 FROM t1;
|
||||
COUNT(*) = 100
|
||||
1
|
||||
DELETE FROM t1 WHERE f2 < 101;
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
SET GLOBAL wsrep_max_ws_rows = 9999;
|
||||
INSERT INTO t1 (f2) SELECT 1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4;
|
||||
ERROR HY000: wsrep_max_ws_rows exceeded
|
||||
SET GLOBAL wsrep_max_ws_rows = 10000;
|
||||
INSERT INTO t1 (f2) SELECT 1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4;
|
||||
SET GLOBAL wsrep_max_ws_rows = 9999;
|
||||
UPDATE t1 SET f2 = 2 WHERE f2 = 1;
|
||||
ERROR HY000: wsrep_max_ws_rows exceeded
|
||||
SET GLOBAL wsrep_max_ws_rows = 10000;
|
||||
UPDATE t1 SET f2 = 2 WHERE f2 = 1;
|
||||
SET GLOBAL wsrep_max_ws_rows = 9999;
|
||||
DELETE FROM t1 WHERE f2 = 2;
|
||||
ERROR HY000: wsrep_max_ws_rows exceeded
|
||||
SET GLOBAL wsrep_max_ws_rows = 10000;
|
||||
DELETE FROM t1 WHERE f2 = 2;
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
SET AUTOCOMMIT = ON;
|
||||
SET GLOBAL wsrep_max_ws_rows = 1;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f2) VALUES (1);
|
||||
INSERT INTO t1 (f2) VALUES (2);
|
||||
ERROR HY000: wsrep_max_ws_rows exceeded
|
||||
INSERT INTO t1 (f2) VALUES (1);
|
||||
INSERT INTO t1 (f2) VALUES (2);
|
||||
SET AUTOCOMMIT = OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f2) VALUES (1);
|
||||
INSERT INTO t1 (f2) VALUES (2);
|
||||
ERROR HY000: wsrep_max_ws_rows exceeded
|
||||
INSERT INTO t1 (f2) VALUES (1);
|
||||
INSERT INTO t1 (f2) VALUES (2);
|
||||
ERROR HY000: wsrep_max_ws_rows exceeded
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f2) VALUES (1);
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f2) VALUES (1);
|
||||
INSERT INTO t1 (f2) VALUES (2);
|
||||
ERROR HY000: wsrep_max_ws_rows exceeded
|
||||
DROP TABLE t1;
|
||||
DROP TABLE ten;
|
@ -5,4 +5,13 @@ ERROR HY000: Got error 90 "Message too long" during COMMIT
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
COUNT(*) = 0
|
||||
1
|
||||
SET GLOBAL wsrep_provider_options = 'repl.max_ws_size=10000';
|
||||
SELECT @@wsrep_max_ws_size = 10000;
|
||||
@@wsrep_max_ws_size = 10000
|
||||
1
|
||||
SET GLOBAL wsrep_provider_options = 'repl.max_ws_size=20000';
|
||||
SET GLOBAL wsrep_provider_options = 'repl.max_ws_size=10000';
|
||||
SET GLOBAL wsrep_max_ws_size = 20000;
|
||||
provider_options_match
|
||||
1
|
||||
DROP TABLE t1;
|
||||
|
16
mysql-test/suite/galera/t/GAL-382.test
Normal file
16
mysql-test/suite/galera/t/GAL-382.test
Normal file
@ -0,0 +1,16 @@
|
||||
#
|
||||
# GAL-382 InnoDB: Failing assertion: xid_seqno > trx_sys_cur_xid_seqno in trx0sys.cc line 356
|
||||
#
|
||||
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
--connection node_1
|
||||
|
||||
create table t1 (i int, j int, k int, primary key pk(i)) engine=innodb;
|
||||
insert into t1 values (1, 1, 1), (2, 2, 2), (3, 3, 3);
|
||||
create table t2 (i int, j int, k int, primary key pk(i, j, k), index idx(i, k, j)) engine=innodb;
|
||||
replace into t2 (i, j, k) select /*!99997 */ i, k, j from t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
42
mysql-test/suite/galera/t/MW-252.test
Normal file
42
mysql-test/suite/galera/t/MW-252.test
Normal file
@ -0,0 +1,42 @@
|
||||
#
|
||||
# MW-252 - Check that FTWRL causes the node to become desynced
|
||||
# and not subject to flow control
|
||||
#
|
||||
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
||||
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
|
||||
# Node #1 is now desynced
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'Donor/Desynced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
|
||||
# Node #2 can issue updates without flow control kicking in
|
||||
--connection node_2
|
||||
|
||||
--let $count = 100
|
||||
--disable_query_log
|
||||
while ($count)
|
||||
{
|
||||
INSERT INTO t1 VALUES (1);
|
||||
--dec $count
|
||||
}
|
||||
--enable_query_log
|
||||
|
||||
# Restore cluster
|
||||
--connection node_1
|
||||
UNLOCK TABLES;
|
||||
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--let $wait_condition = SELECT COUNT(*) = 100 FROM t1
|
||||
--source include/wait_condition.inc
|
||||
|
||||
DROP TABLE t1;
|
41
mysql-test/suite/galera/t/MW-258.test
Normal file
41
mysql-test/suite/galera/t/MW-258.test
Normal file
@ -0,0 +1,41 @@
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (f1 INTEGER);
|
||||
LOCK TABLE t1 WRITE;
|
||||
--echo value prior to RSU:
|
||||
SHOW STATUS LIKE 'wsrep_desync_count';
|
||||
SHOW VARIABLES LIKE 'wsrep_desync';
|
||||
|
||||
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
||||
--connection node_1a
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
SET SESSION wsrep_osu_method = RSU;
|
||||
--send ALTER TABLE t1 ADD COLUMN f2 INTEGER;
|
||||
|
||||
--connect node_1b, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
||||
--connection node_1b
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
SET SESSION wsrep_osu_method = RSU;
|
||||
--send ALTER TABLE t1 ADD COLUMN f3 INTEGER;
|
||||
|
||||
--sleep 5
|
||||
--connection node_1
|
||||
--echo value during RSU:
|
||||
SHOW STATUS LIKE 'wsrep_desync_count';
|
||||
SHOW VARIABLES LIKE 'wsrep_desync';
|
||||
UNLOCK TABLES;
|
||||
|
||||
--connection node_1a
|
||||
--reap
|
||||
--connection node_1b
|
||||
--reap
|
||||
|
||||
--connection node_1
|
||||
--echo value after RSU:
|
||||
SHOW STATUS LIKE 'wsrep_desync_count';
|
||||
SHOW VARIABLES LIKE 'wsrep_desync';
|
||||
SET GLOBAL wsrep_desync=0;
|
||||
|
||||
DROP TABLE t1;
|
42
mysql-test/suite/galera/t/MW-259.test
Normal file
42
mysql-test/suite/galera/t/MW-259.test
Normal file
@ -0,0 +1,42 @@
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug_sync.inc
|
||||
|
||||
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
||||
--connect node_1b, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
||||
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (f1 INTEGER) Engine=InnoDB;
|
||||
|
||||
SET GLOBAL wsrep_desync=0;
|
||||
SET wsrep_OSU_method=RSU;
|
||||
|
||||
SET DEBUG_SYNC = 'alter_table_before_open_tables WAIT_FOR continue';
|
||||
--send ALTER TABLE t1 ADD COLUMN f2 INTEGER;
|
||||
|
||||
--connection node_1a
|
||||
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'debug sync point: alter_table_before_open_tables'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
# wsrep_desync=1 will block
|
||||
--send SET GLOBAL wsrep_desync=1;
|
||||
|
||||
--connection node_1b
|
||||
--sleep 2
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'exit open_tables()' and INFO = 'SET GLOBAL wsrep_desync=1'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SET DEBUG_SYNC= 'now SIGNAL continue';
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL wsrep_desync=0;
|
||||
|
||||
--connection node_1
|
||||
--reap
|
||||
|
||||
--connection node_1a
|
||||
--reap
|
||||
|
||||
# Cleanup
|
||||
SET DEBUG_SYNC= 'RESET';
|
||||
|
@ -55,3 +55,4 @@ STOP SLAVE;
|
||||
RESET SLAVE ALL;
|
||||
|
||||
CALL mtr.add_suppression('failed registering on master');
|
||||
CALL mtr.add_suppression('You need to use --log-bin to make --binlog-format work');
|
||||
|
31
mysql-test/suite/galera/t/MW-285.test
Normal file
31
mysql-test/suite/galera/t/MW-285.test
Normal file
@ -0,0 +1,31 @@
|
||||
#
|
||||
# Broken FK constraints cause assertions
|
||||
#
|
||||
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
CREATE TABLE parent1 ( id INT PRIMARY KEY, KEY (id) ) ENGINE=InnoDB;
|
||||
CREATE TABLE parent2 ( id INT PRIMARY KEY, KEY (id) ) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE child (
|
||||
id INT PRIMARY KEY,
|
||||
parent1_id INT,
|
||||
parent2_id INT,
|
||||
FOREIGN KEY (parent1_id) REFERENCES parent1(id),
|
||||
FOREIGN KEY (parent1_id) REFERENCES parent2(id)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO parent1 VALUES (1);
|
||||
INSERT INTO parent2 VALUES (1);
|
||||
INSERT INTO child VALUES (1,1,1);
|
||||
INSERT INTO child VALUES (2,1,1);
|
||||
|
||||
SET foreign_key_checks=OFF;
|
||||
DROP TABLE parent1;
|
||||
|
||||
UPDATE child SET parent1_id=2 WHERE id=1;
|
||||
|
||||
DROP TABLE child;
|
||||
DROP TABLE parent2;
|
||||
SET foreign_key_checks=ON;
|
32
mysql-test/suite/galera/t/MW-286.test
Normal file
32
mysql-test/suite/galera/t/MW-286.test
Normal file
@ -0,0 +1,32 @@
|
||||
#
|
||||
# MW-286 Spurious deadlock error after error with wsrep_desync and wsrep_on
|
||||
#
|
||||
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/big_test.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 GLOBAL wsrep_desync = TRUE;
|
||||
SET wsrep_on = FALSE;
|
||||
|
||||
--error ER_QUERY_INTERRUPTED
|
||||
ALTER TABLE t1 ADD PRIMARY KEY (f1);
|
||||
|
||||
SET wsrep_on = TRUE;
|
||||
SET GLOBAL wsrep_desync = FALSE;
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP TABLE ten;
|
79
mysql-test/suite/galera/t/MW-292.test
Normal file
79
mysql-test/suite/galera/t/MW-292.test
Normal file
@ -0,0 +1,79 @@
|
||||
#
|
||||
# MW-292 Reset timestamp after transaction replay
|
||||
#
|
||||
# We force transaction replay to happen and then we check that NOW() is not stuck in time.
|
||||
# As a bonus we also check that RAND() continues to return random values after replay
|
||||
#
|
||||
#
|
||||
|
||||
--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 rand_table (f1 FLOAT);
|
||||
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
|
||||
--let $galera_sync_point = commit_monitor_enter_sync
|
||||
--source include/galera_set_sync_point.inc
|
||||
|
||||
--connection node_1
|
||||
--send COMMIT;
|
||||
|
||||
# Wait until commit is blocked
|
||||
--connection node_1a
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
--source include/galera_wait_sync_point.inc
|
||||
|
||||
# Issue a conflicting update on node #2
|
||||
--connection node_2
|
||||
UPDATE t1 SET f2 = 'c' WHERE f1 = 2;
|
||||
|
||||
# Wait for both transactions to be blocked
|
||||
--connection node_1a
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'Update_rows_log_event::find_row%';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'init' AND INFO = 'COMMIT';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
# Unblock the commit
|
||||
--connection node_1a
|
||||
--source include/galera_clear_sync_point.inc
|
||||
--source include/galera_signal_sync_point.inc
|
||||
|
||||
# Commit succeeds via replay
|
||||
--connection node_1
|
||||
--reap
|
||||
|
||||
# Confirm that NOW() is not stuck in time relative to SYSDATE();
|
||||
--sleep 3
|
||||
SELECT TIMEDIFF(SYSDATE(), NOW()) < 2;
|
||||
|
||||
INSERT INTO rand_table VALUES (RAND()),(RAND()),(RAND()),(RAND()),(RAND());
|
||||
INSERT INTO rand_table VALUES (RAND()),(RAND()),(RAND()),(RAND()),(RAND());
|
||||
|
||||
SELECT COUNT(DISTINCT f1) = 10 FROM rand_table;
|
||||
|
||||
# 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
|
||||
DROP TABLE t1;
|
||||
DROP TABLE rand_table;
|
1
mysql-test/suite/galera/t/MW-44-master.opt
Normal file
1
mysql-test/suite/galera/t/MW-44-master.opt
Normal file
@ -0,0 +1 @@
|
||||
--log-output=TABLE
|
25
mysql-test/suite/galera/t/MW-44.test
Normal file
25
mysql-test/suite/galera/t/MW-44.test
Normal file
@ -0,0 +1,25 @@
|
||||
#
|
||||
# MW-44: DDL is logged in the general_log on the slave
|
||||
#
|
||||
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
--connection node_1
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
|
||||
--connection node_2
|
||||
TRUNCATE TABLE mysql.general_log;
|
||||
|
||||
--connection node_1
|
||||
SET SESSION wsrep_osu_method=TOI;
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
||||
SET SESSION wsrep_osu_method=RSU;
|
||||
ALTER TABLE t1 ADD COLUMN f2 INTEGER;
|
||||
SET SESSION wsrep_osu_method=TOI;
|
||||
|
||||
SELECT COUNT(*) = 2 FROM mysql.general_log WHERE argument LIKE 'CREATE%' OR argument LIKE 'ALTER%';
|
||||
|
||||
--connection node_2
|
||||
SELECT COUNT(*) = 0 FROM mysql.general_log WHERE argument NOT LIKE 'SELECT%';
|
||||
DROP TABLE t1;
|
8
mysql-test/suite/galera/t/galera#414.cnf
Normal file
8
mysql-test/suite/galera/t/galera#414.cnf
Normal file
@ -0,0 +1,8 @@
|
||||
!include ../galera_2nodes.cnf
|
||||
|
||||
[mysqld.1]
|
||||
wsrep_provider_options='base_port=@mysqld.1.#galera_port;gcs.max_packet_size=2'
|
||||
|
||||
[mysqld.2]
|
||||
wsrep_provider_options='base_port=@mysqld.2.#galera_port;gcs.max_packet_size=2'
|
||||
|
32
mysql-test/suite/galera/t/galera#414.test
Normal file
32
mysql-test/suite/galera/t/galera#414.test
Normal file
@ -0,0 +1,32 @@
|
||||
#
|
||||
# codership/galera#414 Shutdown crashes node if the node started with `gcs.max_packet_size=2`
|
||||
#
|
||||
|
||||
--source include/big_test.inc
|
||||
--source include/galera_cluster.inc
|
||||
|
||||
# We perform the shutdown/restart sequence in here. If there was a crash during shutdown, MTR will detect it
|
||||
|
||||
--connection node_2
|
||||
--source include/shutdown_mysqld.inc
|
||||
|
||||
--connection node_1
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
SET SESSION wsrep_on = OFF;
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--connection node_2
|
||||
--source include/start_mysqld.inc
|
||||
|
||||
--connection node_1
|
||||
SET SESSION wsrep_on = ON;
|
||||
--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
|
||||
CALL mtr.add_suppression("Failed to set packet size");
|
||||
|
||||
--connection node_2
|
||||
CALL mtr.add_suppression("Failed to set packet size");
|
||||
|
@ -60,3 +60,6 @@ DROP TABLE t2, t3;
|
||||
|
||||
STOP SLAVE;
|
||||
RESET SLAVE ALL;
|
||||
|
||||
CALL mtr.add_suppression('You need to use --log-bin to make --binlog-format work');
|
||||
|
||||
|
1
mysql-test/suite/galera/t/galera_as_slave_autoinc.cnf
Normal file
1
mysql-test/suite/galera/t/galera_as_slave_autoinc.cnf
Normal file
@ -0,0 +1 @@
|
||||
!include ../galera_2nodes_as_slave.cnf
|
83
mysql-test/suite/galera/t/galera_as_slave_autoinc.test
Normal file
83
mysql-test/suite/galera/t/galera_as_slave_autoinc.test
Normal file
@ -0,0 +1,83 @@
|
||||
#
|
||||
# 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
|
||||
|
||||
##
|
||||
## Verify the correct operation of the auto-increment when
|
||||
## the binlog format set to the 'STATEMENT' on the master node:
|
||||
##
|
||||
|
||||
SET SESSION binlog_format='STATEMENT';
|
||||
|
||||
CREATE TABLE t1 (
|
||||
i int(11) NOT NULL AUTO_INCREMENT,
|
||||
c char(32) DEFAULT 'dummy_text',
|
||||
PRIMARY KEY (i)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
insert into t1(i) values(null);
|
||||
|
||||
select * from t1;
|
||||
|
||||
insert into t1(i) values(null), (null), (null);
|
||||
|
||||
select * from t1;
|
||||
|
||||
SET SESSION auto_increment_increment=7;
|
||||
insert into t1(i) values(null), (null), (null);
|
||||
|
||||
SET SESSION auto_increment_offset=5;
|
||||
insert into t1(i) values(null), (null), (null);
|
||||
|
||||
select * from t1;
|
||||
|
||||
show variables like 'binlog_format';
|
||||
show variables like '%auto_increment%';
|
||||
|
||||
--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(*) = 10 FROM t1;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
select * from t1;
|
||||
|
||||
show variables like 'binlog_format';
|
||||
show variables like 'auto_increment_increment';
|
||||
|
||||
--connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3
|
||||
|
||||
select * from t1;
|
||||
|
||||
show variables like 'binlog_format';
|
||||
show variables like 'auto_increment_increment';
|
||||
|
||||
--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;
|
||||
|
||||
--connection node_1
|
||||
RESET MASTER;
|
@ -87,7 +87,7 @@ RESET SLAVE ALL;
|
||||
|
||||
CALL mtr.add_suppression("Slave SQL: Error 'Unknown command' on query");
|
||||
CALL mtr.add_suppression("Slave: Unknown command Error_code: 1047");
|
||||
CALL mtr.add_suppression("Send action {\\(nil\\), 328, TORDERED} returned -107 \\(Transport endpoint is not connected\\)");
|
||||
CALL mtr.add_suppression("Transport endpoint is not connected");
|
||||
CALL mtr.add_suppression("Slave SQL: Error in Xid_log_event: Commit could not be completed, 'Deadlock found when trying to get lock; try restarting transaction', Error_code: 1213");
|
||||
CALL mtr.add_suppression("Slave SQL: Node has dropped from cluster, Error_code: 1047");
|
||||
|
||||
|
@ -27,9 +27,8 @@ UNLOCK TABLES;
|
||||
|
||||
COMMIT;
|
||||
SET AUTOCOMMIT=ON;
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM t1
|
||||
--source include/wait_condition.inc
|
||||
SELECT * FROM t1;
|
||||
SET SESSION wsrep_sync_wait = 7;
|
||||
SELECT COUNT(*) = 1 FROM t1;
|
||||
|
||||
--let $wsrep_local_bf_aborts_after = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'`
|
||||
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
# Make sure that the test is operating on the right version of galera library.
|
||||
--disable_query_log
|
||||
--let $galera_version=3.9
|
||||
--let $galera_version=25.3.17
|
||||
source ../wsrep/include/check_galera_version.inc;
|
||||
--enable_query_log
|
||||
|
||||
|
@ -16,7 +16,7 @@ SELECT COUNT(*) = 1 FROM t1;
|
||||
SET GLOBAL wsrep_provider_options = 'gcs.fc_limit=1';
|
||||
|
||||
# Block the slave applier thread
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
LOCK TABLE t1 WRITE;
|
||||
|
||||
--connection node_1
|
||||
|
||||
|
8
mysql-test/suite/galera/t/galera_ist_recv_bind.cnf
Normal file
8
mysql-test/suite/galera/t/galera_ist_recv_bind.cnf
Normal file
@ -0,0 +1,8 @@
|
||||
!include ../galera_2nodes.cnf
|
||||
|
||||
[mysqld.1]
|
||||
wsrep_provider_options='base_port=@mysqld.1.#galera_port;ist.recv_bind=127.0.0.1;pc.ignore_sb=true'
|
||||
|
||||
[mysqld.2]
|
||||
wsrep_provider_options='base_port=@mysqld.2.#galera_port;ist.recv_bind=127.0.0.1'
|
||||
|
54
mysql-test/suite/galera/t/galera_ist_recv_bind.test
Normal file
54
mysql-test/suite/galera/t/galera_ist_recv_bind.test
Normal file
@ -0,0 +1,54 @@
|
||||
#
|
||||
# Test ist.recv_bind option. Since MTR can not do proper testing with multiple interfaces and such, we
|
||||
# simply confirm that the option can be set (in the galera_ist_recv_bind.cnf file) and that IST works as expected
|
||||
#
|
||||
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
--connection node_1
|
||||
SELECT @@wsrep_provider_options LIKE '%ist.recv_bind = 127.0.0.1%';
|
||||
|
||||
--connection node_2
|
||||
SELECT @@wsrep_provider_options LIKE '%ist.recv_bind = 127.0.0.1%';
|
||||
|
||||
# Isolate node #2
|
||||
|
||||
SET GLOBAL wsrep_provider_options = 'gmcast.isolate = 1';
|
||||
--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
|
||||
|
||||
--connection node_2
|
||||
SET SESSION wsrep_on = OFF;
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'non-Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
|
||||
--source include/wait_condition.inc
|
||||
SET SESSION wsrep_on = ON;
|
||||
|
||||
# Node #2 is now isolated. Run some transactions to accumulate writesets for IST
|
||||
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
# Restore node #2
|
||||
|
||||
--connection node_2
|
||||
SET GLOBAL wsrep_provider_options = 'gmcast.isolate = 0';
|
||||
|
||||
--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
|
||||
|
||||
--connection node_2
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
# Confirm that IST has taken place
|
||||
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM t1;
|
||||
--source include/wait_condition.inc
|
||||
|
||||
# Cleanup
|
||||
|
||||
DROP TABLE t1;
|
@ -9,6 +9,11 @@
|
||||
--source include/have_debug_sync.inc
|
||||
--source suite/galera/include/galera_have_debug_sync.inc
|
||||
|
||||
# Save original auto_increment_offset values.
|
||||
--let $node_1=node_1
|
||||
--let $node_2=node_2
|
||||
--source include/auto_increment_offset_save.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');
|
||||
|
||||
@ -106,3 +111,9 @@ SELECT COUNT(*) = 0 FROM t3;
|
||||
|
||||
--connection node_1
|
||||
DROP TABLE t1, t2, t3;
|
||||
|
||||
# Restore original auto_increment_offset values.
|
||||
--source include/auto_increment_offset_restore.inc
|
||||
|
||||
--source include/galera_end.inc
|
||||
|
||||
|
@ -28,8 +28,13 @@ ALTER TABLE t1 ADD COLUMN f2 INTEGER;
|
||||
--source include/galera_connect.inc
|
||||
--connection node_2a
|
||||
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
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
|
||||
|
@ -17,9 +17,6 @@ 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';
|
||||
|
||||
|
@ -13,6 +13,7 @@ CREATE TABLE t2 (id INT) ENGINE=InnoDB;
|
||||
|
||||
--connection node_2
|
||||
SET GLOBAL wsrep_slave_threads = 2;
|
||||
LOCK TABLE t1 WRITE;
|
||||
|
||||
--connection node_1
|
||||
INSERT INTO t1 VALUES (1);
|
||||
@ -34,10 +35,20 @@ INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t2 VALUES (1);
|
||||
|
||||
--connection node_2
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'Waiting for table metadata lock%';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'applied write set%';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
UNLOCK TABLES;
|
||||
|
||||
SET SESSION wsrep_sync_wait = 7;
|
||||
|
||||
SELECT COUNT(*) = 10 FROM t1;
|
||||
SELECT COUNT(*) = 10 FROM t2;
|
||||
SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'committed%';
|
||||
|
||||
--eval SET GLOBAL wsrep_slave_threads = $wsrep_slave_threads_orig;
|
||||
|
||||
|
@ -6,10 +6,9 @@
|
||||
--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`;
|
||||
--let $node_1=node_1
|
||||
--let $node_2=node_2
|
||||
--source include/auto_increment_offset_save.inc
|
||||
|
||||
--connection node_1
|
||||
--let $wsrep_cluster_address_orig = `SELECT @@wsrep_cluster_address`
|
||||
@ -40,10 +39,8 @@ SET GLOBAL wsrep_cluster_address = '';
|
||||
--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
|
||||
--source include/auto_increment_offset_restore.inc
|
||||
|
||||
--source include/galera_end.inc
|
||||
|
||||
|
@ -23,3 +23,7 @@ SELECT COUNT(*) = 0 FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
CALL mtr.add_suppression("Maximum writeset size exceeded by");
|
||||
CALL mtr.add_suppression("transaction size limit");
|
||||
CALL mtr.add_suppression("transaction size exceeded");
|
||||
CALL mtr.add_suppression("rbr write fail");
|
||||
|
@ -6,10 +6,9 @@
|
||||
--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`;
|
||||
--let $node_1=node_1
|
||||
--let $node_2=node_2
|
||||
--source include/auto_increment_offset_save.inc
|
||||
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
||||
@ -18,6 +17,10 @@ INSERT INTO t1 VALUES (1);
|
||||
--connection node_2
|
||||
--source include/restart_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
|
||||
|
||||
--let $galera_connection_name = node_2a
|
||||
--let $galera_server_number = 2
|
||||
--source include/galera_connect.inc
|
||||
@ -29,11 +32,9 @@ SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_N
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--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_2a
|
||||
--eval SET @@global.auto_increment_offset = $auto_increment_offset_node_2;
|
||||
--enable_query_log
|
||||
--let $node_2=node_2a
|
||||
--source include/auto_increment_offset_restore.inc
|
||||
|
||||
--source include/galera_end.inc
|
||||
|
||||
|
@ -163,5 +163,37 @@ disconnect foo_node_2;
|
||||
DROP USER foo@localhost;
|
||||
DROP DATABASE test1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-10566: Create role statement replicated inconsistently in Galera Cluster
|
||||
--echo #
|
||||
--echo
|
||||
--echo # On node_1
|
||||
--connection node_1
|
||||
CREATE USER foo@localhost;
|
||||
CREATE ROLE role1;
|
||||
CREATE ROLE role2 WITH ADMIN CURRENT_USER;
|
||||
CREATE ROLE role3 WITH ADMIN foo@localhost;
|
||||
CREATE ROLE role4 WITH ADMIN role1;
|
||||
|
||||
--sorted_result
|
||||
SELECT * FROM mysql.roles_mapping;
|
||||
--sorted_result
|
||||
SELECT * FROM INFORMATION_SCHEMA.APPLICABLE_ROLES;
|
||||
|
||||
--echo
|
||||
--echo # On node_2
|
||||
--connection node_2
|
||||
--sorted_result
|
||||
SELECT * FROM mysql.roles_mapping;
|
||||
--sorted_result
|
||||
SELECT * FROM INFORMATION_SCHEMA.APPLICABLE_ROLES;
|
||||
|
||||
# Cleanup
|
||||
DROP ROLE role1;
|
||||
DROP ROLE role2;
|
||||
DROP ROLE role3;
|
||||
DROP ROLE role4;
|
||||
DROP USER foo@localhost;
|
||||
|
||||
--source include/galera_end.inc
|
||||
--echo # End of test
|
||||
|
@ -17,9 +17,11 @@ SET wsrep_OSU_method=RSU;
|
||||
SET DEBUG_SYNC = 'alter_table_before_open_tables WAIT_FOR continue';
|
||||
--send ALTER TABLE t1 ADD COLUMN f2 INTEGER;
|
||||
|
||||
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
||||
--connection node_1a
|
||||
|
||||
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
||||
--connect node_1b, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
||||
|
||||
--connection node_1a
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'debug sync point: alter_table_before_open_tables'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
@ -44,24 +46,32 @@ CREATE TABLE t1 (f1 INTEGER) Engine=InnoDB;
|
||||
SET GLOBAL wsrep_desync=0;
|
||||
SET wsrep_OSU_method=RSU;
|
||||
|
||||
SET DEBUG_SYNC = 'alter_table_before_open_tables WAIT_FOR continue';
|
||||
SET DEBUG_SYNC = 'alter_table_before_create_table_no_lock WAIT_FOR continue';
|
||||
--send ALTER TABLE t1 ADD COLUMN f2 INTEGER;
|
||||
|
||||
--connection node_1a
|
||||
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'debug sync point: alter_table_before_open_tables'
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'debug sync point: alter_table_before_create_table_no_lock'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
# This transition is currently not allowed
|
||||
--error ER_CANNOT_USER
|
||||
SET GLOBAL wsrep_desync=1;
|
||||
SET GLOBAL wsrep_desync=0;
|
||||
# wsrep_desync=1 will block
|
||||
--send SET GLOBAL wsrep_desync=1;
|
||||
|
||||
|
||||
--connection node_1b
|
||||
--sleep 2
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'exit open_tables()' and INFO = 'SET GLOBAL wsrep_desync=1'
|
||||
--source include/wait_condition.inc
|
||||
|
||||
SET DEBUG_SYNC= 'now SIGNAL continue';
|
||||
|
||||
--connection node_1
|
||||
--reap
|
||||
|
||||
--connection node_1a
|
||||
--reap
|
||||
SET GLOBAL wsrep_desync=0;
|
||||
|
||||
SHOW CREATE TABLE t1;
|
||||
|
||||
# Restore old state
|
||||
@ -74,5 +84,3 @@ CALL mtr.add_suppression("desync failed");
|
||||
|
||||
--connection node_2
|
||||
CALL mtr.add_suppression("Protocol violation");
|
||||
|
||||
|
||||
|
@ -6,17 +6,16 @@
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
# Save original auto_increment_offset values.
|
||||
--let $node_1=node_1
|
||||
--let $node_2=node_2
|
||||
--source include/auto_increment_offset_save.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
|
||||
|
||||
@ -44,10 +43,8 @@ SET GLOBAL wsrep_cluster_address = '';
|
||||
--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
|
||||
--let $node_2=node_2a
|
||||
--source include/auto_increment_offset_restore.inc
|
||||
|
||||
--source include/galera_end.inc
|
||||
|
||||
|
@ -18,7 +18,8 @@ SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_N
|
||||
--source include/start_mysqld.inc
|
||||
--source include/wait_until_connected_again.inc
|
||||
|
||||
SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment';
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment';
|
||||
--source include/wait_condition.inc
|
||||
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
|
||||
# 3. Restart node #2 with the new socket.ssl_ca , socket.ssl_cert and socket.ssl_key
|
||||
@ -29,7 +30,8 @@ SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_N
|
||||
--source include/start_mysqld.inc
|
||||
--source include/wait_until_connected_again.inc
|
||||
|
||||
SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment';
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment';
|
||||
--source include/wait_condition.inc
|
||||
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
|
||||
# 4. Restart node #1 with the new socket.ssl_ca , socket.ssl_cert and socket.ssl_key
|
||||
@ -40,7 +42,8 @@ SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_N
|
||||
--source include/start_mysqld.inc
|
||||
--source include/wait_until_connected_again.inc
|
||||
|
||||
SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment';
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment';
|
||||
--source include/wait_condition.inc
|
||||
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||
|
||||
# Upgrade complete. Both nodes now use the new key and certificate
|
||||
|
@ -8,10 +8,9 @@
|
||||
--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`;
|
||||
--let $node_1=node_1
|
||||
--let $node_2=node_2
|
||||
--source include/auto_increment_offset_save.inc
|
||||
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
||||
@ -56,11 +55,7 @@ SELECT COUNT(*) = 1 FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--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_2a
|
||||
--eval SET @@global.auto_increment_offset = $auto_increment_offset_node_2;
|
||||
--enable_query_log
|
||||
--let $node_2=node_2a
|
||||
--source include/auto_increment_offset_restore.inc
|
||||
|
||||
|
@ -40,7 +40,7 @@ UPDATE t1 SET f2 = 'c' WHERE f1 = 2;
|
||||
|
||||
# Wait for both transactions to be blocked
|
||||
--connection node_1a
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'System lock';
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'Update_rows_log_event::find_row%';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'init' AND INFO = 'COMMIT';
|
||||
@ -69,3 +69,56 @@ SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'b';
|
||||
SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'c';
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
#echo "# test for PS replaying"
|
||||
|
||||
#
|
||||
# test replaying of prepared statements
|
||||
#
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (i int primary key, j int) ENGINE=INNODB;
|
||||
INSERT INTO t1 VALUES (1, 0), (3, 0);
|
||||
SELECT * FROM t1;
|
||||
|
||||
PREPARE stmt1 FROM "UPDATE t1 SET j = 1 where i > 0";
|
||||
|
||||
# block the commit of PS
|
||||
--connection node_1a
|
||||
--let $galera_sync_point = commit_monitor_enter_sync
|
||||
--source include/galera_set_sync_point.inc
|
||||
|
||||
--connection node_1
|
||||
--send EXECUTE stmt1;
|
||||
|
||||
# Wait until commit is blocked
|
||||
--connection node_1a
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
--source include/galera_wait_sync_point.inc
|
||||
|
||||
# Issue a conflicting update on node_2
|
||||
--connection node_2
|
||||
#UPDATE t1 SET j=2;
|
||||
INSERT INTO t1 VALUES(2,2);
|
||||
|
||||
|
||||
# Wait until applying begins in node_1
|
||||
--connection node_1a
|
||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'Write_rows_log_event::write_row%';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
# Unblock the PS commit
|
||||
--connection node_1a
|
||||
--source include/galera_clear_sync_point.inc
|
||||
--source include/galera_signal_sync_point.inc
|
||||
|
||||
# Commit succeeds
|
||||
--connection node_1
|
||||
--reap
|
||||
SELECT * FROM t1;
|
||||
|
||||
--connection node_2
|
||||
SELECT * FROM t1;
|
||||
|
||||
--connection node_1
|
||||
DEALLOCATE PREPARE stmt1;
|
||||
DROP TABLE t1;
|
||||
|
@ -55,4 +55,8 @@ INSERT INTO t1 VALUES (11);
|
||||
# Replication continues normally
|
||||
SELECT COUNT(*) = 11 FROM t1;
|
||||
|
||||
CALL mtr.add_suppression("Protocol violation");
|
||||
DROP TABLE t1;
|
||||
|
||||
--connection node_1
|
||||
CALL mtr.add_suppression("Protocol violation");
|
||||
|
@ -5,13 +5,10 @@
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
--disable_query_log
|
||||
# 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`;
|
||||
--enable_query_log
|
||||
--let $node_1=node_1
|
||||
--let $node_2=node_2
|
||||
--source include/auto_increment_offset_save.inc
|
||||
|
||||
--connection node_2
|
||||
--let $wsrep_cluster_address_saved = `SELECT @@global.wsrep_cluster_address`
|
||||
@ -49,13 +46,8 @@ SELECT * FROM t1;
|
||||
# Cleanup
|
||||
DROP TABLE t1;
|
||||
|
||||
--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
|
||||
--source include/auto_increment_offset_restore.inc
|
||||
|
||||
--source include/galera_end.inc
|
||||
--echo # End of test
|
||||
|
155
mysql-test/suite/galera/t/galera_var_max_ws_rows.test
Normal file
155
mysql-test/suite/galera/t/galera_var_max_ws_rows.test
Normal file
@ -0,0 +1,155 @@
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
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;
|
||||
|
||||
--let $wsrep_max_ws_rows_orig = `SELECT @@wsrep_max_ws_rows`
|
||||
SET GLOBAL wsrep_max_ws_rows = 4;
|
||||
|
||||
# Test that wsrep_max_ws_rows is enforced with multi statement transactions
|
||||
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f2) VALUES (1);
|
||||
INSERT INTO t1 (f2) VALUES (2);
|
||||
INSERT INTO t1 (f2) VALUES (3);
|
||||
INSERT INTO t1 (f2) VALUES (4);
|
||||
--error ER_ERROR_DURING_COMMIT
|
||||
INSERT INTO t1 (f2) VALUES (5);
|
||||
COMMIT;
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f2) VALUES (1);
|
||||
INSERT INTO t1 (f2) VALUES (2);
|
||||
INSERT INTO t1 (f2) VALUES (3);
|
||||
INSERT INTO t1 (f2) VALUES (4);
|
||||
--error ER_ERROR_DURING_COMMIT
|
||||
UPDATE t1 SET f2 = 10 WHERE f2 = 4;
|
||||
COMMIT;
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f2) VALUES (1);
|
||||
INSERT INTO t1 (f2) VALUES (2);
|
||||
INSERT INTO t1 (f2) VALUES (3);
|
||||
INSERT INTO t1 (f2) VALUES (4);
|
||||
--error ER_ERROR_DURING_COMMIT
|
||||
DELETE FROM t1 WHERE f2 = 1;
|
||||
COMMIT;
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
|
||||
|
||||
# Test that wsrep_max_ws_rows is enforced on sigle statements
|
||||
|
||||
SET GLOBAL wsrep_max_ws_rows = 5;
|
||||
INSERT INTO t1 (f2) VALUES (1),(2),(3),(4),(5);
|
||||
SET GLOBAL wsrep_max_ws_rows = 4;
|
||||
|
||||
--error ER_ERROR_DURING_COMMIT
|
||||
UPDATE t1 SET f2 = f2 + 10;
|
||||
SELECT COUNT(*) = 5 FROM t1;
|
||||
|
||||
--error ER_ERROR_DURING_COMMIT
|
||||
DELETE FROM t1 WHERE f2 < 10;
|
||||
SELECT COUNT(*) = 5 FROM t1;
|
||||
|
||||
--error ER_ERROR_DURING_COMMIT
|
||||
INSERT INTO t1 (f2) SELECT * FROM ten;
|
||||
SELECT COUNT(*) = 5 FROM t1;
|
||||
|
||||
--error ER_ERROR_DURING_COMMIT
|
||||
INSERT INTO t1 (f2) VALUES (10),(20),(30),(40),(50);
|
||||
SELECT COUNT(*) = 5 FROM t1;
|
||||
|
||||
# Fewer than wsrep_max_ws_rows is OK
|
||||
|
||||
SET GLOBAL wsrep_max_ws_rows = 10;
|
||||
DELETE FROM t1 WHERE f2 < 10;
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
|
||||
# Test a series of transactions
|
||||
|
||||
--disable_query_log
|
||||
SET GLOBAL wsrep_max_ws_rows = 5;
|
||||
let $i= 100;
|
||||
while ($i)
|
||||
{
|
||||
START TRANSACTION;
|
||||
--eval INSERT INTO t1 (f2) VALUES ($i);
|
||||
COMMIT;
|
||||
dec $i;
|
||||
}
|
||||
--enable_query_log
|
||||
SET GLOBAL wsrep_max_ws_rows = 100;
|
||||
SELECT COUNT(*) = 100 FROM t1;
|
||||
DELETE FROM t1 WHERE f2 < 101;
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
|
||||
# Test large statements
|
||||
|
||||
SET GLOBAL wsrep_max_ws_rows = 9999;
|
||||
--error ER_ERROR_DURING_COMMIT
|
||||
INSERT INTO t1 (f2) SELECT 1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4;
|
||||
SET GLOBAL wsrep_max_ws_rows = 10000;
|
||||
INSERT INTO t1 (f2) SELECT 1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4;
|
||||
|
||||
SET GLOBAL wsrep_max_ws_rows = 9999;
|
||||
--error ER_ERROR_DURING_COMMIT
|
||||
UPDATE t1 SET f2 = 2 WHERE f2 = 1;
|
||||
SET GLOBAL wsrep_max_ws_rows = 10000;
|
||||
UPDATE t1 SET f2 = 2 WHERE f2 = 1;
|
||||
|
||||
SET GLOBAL wsrep_max_ws_rows = 9999;
|
||||
--error ER_ERROR_DURING_COMMIT
|
||||
DELETE FROM t1 WHERE f2 = 2;
|
||||
SET GLOBAL wsrep_max_ws_rows = 10000;
|
||||
DELETE FROM t1 WHERE f2 = 2;
|
||||
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
|
||||
|
||||
# Test that wsrep_max_ws_rows is reset when switching autocommit mode
|
||||
|
||||
SET AUTOCOMMIT = ON;
|
||||
SET GLOBAL wsrep_max_ws_rows = 1;
|
||||
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f2) VALUES (1);
|
||||
--error ER_ERROR_DURING_COMMIT
|
||||
INSERT INTO t1 (f2) VALUES (2);
|
||||
|
||||
INSERT INTO t1 (f2) VALUES (1);
|
||||
INSERT INTO t1 (f2) VALUES (2);
|
||||
|
||||
|
||||
SET AUTOCOMMIT = OFF;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f2) VALUES (1);
|
||||
--error ER_ERROR_DURING_COMMIT
|
||||
INSERT INTO t1 (f2) VALUES (2);
|
||||
|
||||
INSERT INTO t1 (f2) VALUES (1);
|
||||
--error ER_ERROR_DURING_COMMIT
|
||||
INSERT INTO t1 (f2) VALUES (2);
|
||||
|
||||
|
||||
# Test that wsrep_max_ws_rows is reset on implicit commits
|
||||
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f2) VALUES (1);
|
||||
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 (f2) VALUES (1);
|
||||
--error ER_ERROR_DURING_COMMIT
|
||||
INSERT INTO t1 (f2) VALUES (2);
|
||||
|
||||
|
||||
--disable_query_log
|
||||
--eval SET GLOBAL wsrep_max_ws_rows = $wsrep_max_ws_rows_orig
|
||||
--enable_query_log
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP TABLE ten;
|
@ -16,6 +16,29 @@ SET GLOBAL wsrep_max_ws_size = 1024;
|
||||
INSERT INTO t1 VALUES (DEFAULT, REPEAT('X', 1024));
|
||||
SELECT COUNT(*) = 0 FROM t1;
|
||||
|
||||
#
|
||||
# Changing repl.max_ws_size also changes wsrep_max_ws_size
|
||||
#
|
||||
|
||||
SET GLOBAL wsrep_provider_options = 'repl.max_ws_size=10000';
|
||||
SELECT @@wsrep_max_ws_size = 10000;
|
||||
|
||||
|
||||
#
|
||||
# Changing wsrep_max_ws_size is equivalent to changing repl.max_ws_size
|
||||
#
|
||||
|
||||
SET GLOBAL wsrep_provider_options = 'repl.max_ws_size=20000';
|
||||
--let $provider_options = `SELECT @@wsrep_provider_options`
|
||||
SET GLOBAL wsrep_provider_options = 'repl.max_ws_size=10000';
|
||||
|
||||
SET GLOBAL wsrep_max_ws_size = 20000;
|
||||
--let $provider_options_updated = `SELECT @@wsrep_provider_options`
|
||||
|
||||
--disable_query_log
|
||||
--eval SELECT STRCMP('$provider_options', '$provider_options_updated') = 0 AS provider_options_match
|
||||
--enable_query_log
|
||||
|
||||
--disable_query_log
|
||||
--eval SET GLOBAL wsrep_max_ws_size = $wsrep_max_ws_size_orig
|
||||
--enable_query_log
|
||||
|
@ -1,6 +1,11 @@
|
||||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
# Save original auto_increment_offset values.
|
||||
--let $node_1=node_1
|
||||
--let $node_2=node_2
|
||||
--source include/auto_increment_offset_save.inc
|
||||
|
||||
--connection node_1
|
||||
|
||||
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
||||
@ -36,4 +41,13 @@ if ($galera_wsrep_start_position != $expected_position)
|
||||
DROP TABLE t1;
|
||||
DROP DATABASE db;
|
||||
|
||||
--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.
|
||||
--let $node_2=node_2a
|
||||
--source include/auto_increment_offset_restore.inc
|
||||
|
||||
--source include/galera_end.inc
|
||||
|
||||
|
||||
|
@ -18,7 +18,7 @@ wsrep-sync-wait=7
|
||||
#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_provider_options='base_port=@mysqld.1.#galera_port;gcache.size=10M;evs.suspect_timeout=PT10S'
|
||||
wsrep_node_incoming_address=127.0.0.1:@mysqld.1.port
|
||||
wsrep_sst_receive_address='127.0.0.1:@mysqld.1.#sst_port'
|
||||
|
||||
@ -27,7 +27,7 @@ wsrep_sst_receive_address='127.0.0.1:@mysqld.1.#sst_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_provider_options='base_port=@mysqld.2.#galera_port;gcache.size=10M;evs.suspect_timeout=PT10S'
|
||||
wsrep_node_incoming_address=127.0.0.1:@mysqld.2.port
|
||||
wsrep_sst_receive_address='127.0.0.1:@mysqld.2.#sst_port'
|
||||
|
||||
@ -36,7 +36,7 @@ wsrep_sst_receive_address='127.0.0.1:@mysqld.2.#sst_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_provider_options='base_port=@mysqld.3.#galera_port;gcache.size=10M;evs.suspect_timeout=PT10S'
|
||||
wsrep_node_incoming_address=127.0.0.1:@mysqld.3.port
|
||||
wsrep_sst_receive_address='127.0.0.1:@mysqld.3.#sst_port'
|
||||
|
||||
|
@ -3,9 +3,6 @@ SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1';
|
||||
SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1';
|
||||
SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1';
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
SHOW STATUS LIKE 'wsrep_cluster_status';
|
||||
Variable_name Value
|
||||
wsrep_cluster_status non-Primary
|
||||
SET GLOBAL wsrep_provider_options = 'pc.bootstrap=1';
|
||||
SHOW STATUS LIKE 'wsrep_cluster_size';
|
||||
Variable_name Value
|
||||
|
@ -1,6 +1,8 @@
|
||||
SET GLOBAL wsrep_provider_options = 'pc.weight=3';
|
||||
Suspending node ...
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
SET SESSION wsrep_on=OFF;
|
||||
SET SESSION wsrep_on=ON;
|
||||
SHOW STATUS LIKE 'wsrep_cluster_size';
|
||||
Variable_name Value
|
||||
wsrep_cluster_size 2
|
||||
|
@ -10,12 +10,10 @@
|
||||
--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`;
|
||||
--let $node_1=node_1
|
||||
--let $node_2=node_2
|
||||
--let $node_3=node_3
|
||||
--source ../galera/include/auto_increment_offset_save.inc
|
||||
|
||||
--connection node_1
|
||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
|
||||
@ -49,12 +47,7 @@ SELECT COUNT(*) = 2 FROM t1;
|
||||
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
|
||||
--source ../galera/include/auto_increment_offset_restore.inc
|
||||
|
||||
--source include/galera_end.inc
|
||||
|
||||
|
@ -13,8 +13,8 @@ INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
|
||||
SELECT COUNT(*) = 10 FROM t1;
|
||||
|
||||
--exec rm -rf $MYSQL_TMP_DIR/innobackupex_backup
|
||||
--exec innobackupex $MYSQL_TMP_DIR/innobackupex_backup --galera-info --defaults-file=$MYSQLTEST_VARDIR/my.cnf --defaults-group=mysqld.2 --port=$NODE_MYPORT_2 --host=127.0.0.1 --no-timestamp > $MYSQL_TMP_DIR/innobackupex-backup.log
|
||||
--exec innobackupex $MYSQL_TMP_DIR/innobackupex_backup --apply-log --galera-info --defaults-file=$MYSQLTEST_VARDIR/my.cnf --defaults-group=mysqld.2 --port=$NODE_MYPORT_2 --host=127.0.0.1 --no-timestamp > $MYSQL_TMP_DIR/innobackupex-apply.log
|
||||
--exec innobackupex --defaults-file=$MYSQLTEST_VARDIR/my.cnf --defaults-group=mysqld.2 $MYSQL_TMP_DIR/innobackupex_backup --galera-info --port=$NODE_MYPORT_2 --host=127.0.0.1 --no-timestamp > $MYSQL_TMP_DIR/innobackupex-backup.log
|
||||
--exec innobackupex --defaults-file=$MYSQLTEST_VARDIR/my.cnf --defaults-group=mysqld.2 $MYSQL_TMP_DIR/innobackupex_backup --apply-log --galera-info --port=$NODE_MYPORT_2 --host=127.0.0.1 --no-timestamp > $MYSQL_TMP_DIR/innobackupex-apply.log
|
||||
|
||||
--source include/kill_galera.inc
|
||||
--sleep 1
|
||||
@ -23,7 +23,7 @@ SELECT COUNT(*) = 10 FROM t1;
|
||||
INSERT INTO t1 VALUES (11),(12),(13),(14),(15),(16),(17),(18),(19),(20);
|
||||
|
||||
--exec rm -rf $MYSQLTEST_VARDIR/mysqld.2/data/*
|
||||
--exec innobackupex --copy-back $MYSQL_TMP_DIR/innobackupex_backup --defaults-file=$MYSQLTEST_VARDIR/my.cnf --defaults-group=mysqld.2 --port=$NODE_MYPORT_2 --host=127.0.0.1 > $MYSQL_TMP_DIR/innobackupex-restore.log
|
||||
--exec innobackupex --defaults-file=$MYSQLTEST_VARDIR/my.cnf --defaults-group=mysqld.2 --copy-back $MYSQL_TMP_DIR/innobackupex_backup --port=$NODE_MYPORT_2 --host=127.0.0.1 > $MYSQL_TMP_DIR/innobackupex-restore.log
|
||||
|
||||
#
|
||||
# Convert the xtrabackup_galera_info into a grastate.dat file
|
||||
|
@ -82,6 +82,8 @@ INSERT INTO t1 VALUES (51), (52), (53), (54), (55);
|
||||
--connection node_3
|
||||
--source include/wait_until_connected_again.inc
|
||||
|
||||
sleep 5;
|
||||
|
||||
# Final checks
|
||||
--connection node_2
|
||||
SELECT COUNT(*) = 30 FROM t1;
|
||||
|
5
mysql-test/suite/galera_3nodes/t/galera_pc_bootstrap.cnf
Normal file
5
mysql-test/suite/galera_3nodes/t/galera_pc_bootstrap.cnf
Normal file
@ -0,0 +1,5 @@
|
||||
# We need a dedicated .cnf file, even if empty, in order to force this test to run
|
||||
# alone on a freshly started cluster. Otherwise there are adverse interactions with
|
||||
# prior tests such as galera_3nodes.galera_innobackupex_backup
|
||||
|
||||
!include ../galera_3nodes.cnf
|
@ -23,7 +23,8 @@ SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1';
|
||||
|
||||
# Node #2 should be non-primary
|
||||
SET SESSION wsrep_sync_wait = 0;
|
||||
SHOW STATUS LIKE 'wsrep_cluster_status';
|
||||
--let $wait_condition = SELECT variable_value = 'non-Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE variable_name = 'wsrep_cluster_status';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
# Signal node #2 to bootstrap
|
||||
--connection node_2
|
||||
|
5
mysql-test/suite/galera_3nodes/t/galera_pc_weight.cnf
Normal file
5
mysql-test/suite/galera_3nodes/t/galera_pc_weight.cnf
Normal file
@ -0,0 +1,5 @@
|
||||
# We need a dedicated .cnf file, even if empty, in order to force this test to run
|
||||
# alone on a freshly started cluster. Otherwise there are adverse interactions with
|
||||
# following tests such as galera_3nodes.galera_var_dirty_reads2
|
||||
|
||||
!include ../galera_3nodes.cnf
|
@ -19,6 +19,11 @@ SET GLOBAL wsrep_provider_options = 'pc.weight=3';
|
||||
SET SESSION wsrep_sync_wait=0;
|
||||
--source include/wait_until_connected_again.inc
|
||||
|
||||
SET SESSION wsrep_on=OFF;
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'non-Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'
|
||||
--source include/wait_condition.inc
|
||||
SET SESSION wsrep_on=ON;
|
||||
|
||||
# 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
|
||||
|
||||
@ -45,7 +50,7 @@ SHOW STATUS LIKE 'wsrep_local_state_comment';
|
||||
|
||||
--connection node_1
|
||||
--source include/galera_resume.inc
|
||||
--sleep 5
|
||||
--sleep 10
|
||||
--source include/wait_until_connected_again.inc
|
||||
|
||||
# For Node #1, we expect a primary component of size 1
|
||||
|
@ -20,10 +20,12 @@ SET @@global.wsrep_desync=ON;
|
||||
Got one of the listed errors
|
||||
SELECT @@global.wsrep_desync;
|
||||
@@global.wsrep_desync
|
||||
1
|
||||
0
|
||||
|
||||
# valid values
|
||||
SET @@global.wsrep_desync='OFF';
|
||||
Warnings:
|
||||
Warning 1231 'wsrep_desync' is already OFF.
|
||||
SELECT @@global.wsrep_desync;
|
||||
@@global.wsrep_desync
|
||||
0
|
||||
@ -31,8 +33,10 @@ SET @@global.wsrep_desync=ON;
|
||||
Got one of the listed errors
|
||||
SELECT @@global.wsrep_desync;
|
||||
@@global.wsrep_desync
|
||||
1
|
||||
0
|
||||
SET @@global.wsrep_desync=default;
|
||||
Warnings:
|
||||
Warning 1231 'wsrep_desync' is already OFF.
|
||||
SELECT @@global.wsrep_desync;
|
||||
@@global.wsrep_desync
|
||||
0
|
||||
|
@ -6,7 +6,7 @@ SET @wsrep_max_ws_rows_global_saved = @@global.wsrep_max_ws_rows;
|
||||
# default
|
||||
SELECT @@global.wsrep_max_ws_rows;
|
||||
@@global.wsrep_max_ws_rows
|
||||
131072
|
||||
0
|
||||
|
||||
# scope
|
||||
SELECT @@session.wsrep_max_ws_rows;
|
||||
@ -26,11 +26,9 @@ SELECT @@global.wsrep_max_ws_rows;
|
||||
@@global.wsrep_max_ws_rows
|
||||
131073
|
||||
SET @@global.wsrep_max_ws_rows=0;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect wsrep_max_ws_rows value: '0'
|
||||
SELECT @@global.wsrep_max_ws_rows;
|
||||
@@global.wsrep_max_ws_rows
|
||||
1
|
||||
0
|
||||
SET @@global.wsrep_max_ws_rows=default;
|
||||
SELECT @global.wsrep_max_ws_rows;
|
||||
@global.wsrep_max_ws_rows
|
||||
|
@ -3,10 +3,11 @@
|
||||
#
|
||||
# save the initial value
|
||||
SET @wsrep_max_ws_size_global_saved = @@global.wsrep_max_ws_size;
|
||||
SET @wsrep_provider_options_saved = @@global.wsrep_provider_options;
|
||||
# default
|
||||
SELECT @@global.wsrep_max_ws_size;
|
||||
@@global.wsrep_max_ws_size
|
||||
1073741824
|
||||
2147483647
|
||||
|
||||
# scope
|
||||
SELECT @@session.wsrep_max_ws_size;
|
||||
@ -55,4 +56,5 @@ NULL
|
||||
|
||||
# restore the initial value
|
||||
SET @@global.wsrep_max_ws_size = @wsrep_max_ws_size_global_saved;
|
||||
SET @@global.wsrep_provider_options = @wsrep_provider_options_saved;
|
||||
# End of test
|
||||
|
@ -6,6 +6,7 @@
|
||||
|
||||
--echo # save the initial value
|
||||
SET @wsrep_max_ws_size_global_saved = @@global.wsrep_max_ws_size;
|
||||
SET @wsrep_provider_options_saved = @@global.wsrep_provider_options;
|
||||
|
||||
--echo # default
|
||||
SELECT @@global.wsrep_max_ws_size;
|
||||
@ -41,5 +42,6 @@ SELECT @global.wsrep_max_ws_size;
|
||||
--echo
|
||||
--echo # restore the initial value
|
||||
SET @@global.wsrep_max_ws_size = @wsrep_max_ws_size_global_saved;
|
||||
SET @@global.wsrep_provider_options = @wsrep_provider_options_saved;
|
||||
|
||||
--echo # End of test
|
||||
|
@ -36,6 +36,7 @@ wsrep_commit_oooe #
|
||||
wsrep_commit_oool #
|
||||
wsrep_commit_window #
|
||||
wsrep_connected #
|
||||
wsrep_debug_sync_waiters #
|
||||
wsrep_flow_control_paused #
|
||||
wsrep_flow_control_paused_ns #
|
||||
wsrep_flow_control_recv #
|
||||
@ -91,6 +92,7 @@ wsrep_commit_oooe #
|
||||
wsrep_commit_oool #
|
||||
wsrep_commit_window #
|
||||
wsrep_connected #
|
||||
wsrep_debug_sync_waiters #
|
||||
wsrep_flow_control_paused #
|
||||
wsrep_flow_control_paused_ns #
|
||||
wsrep_flow_control_recv #
|
||||
|
@ -29,7 +29,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=3.9
|
||||
--let $galera_version=25.3.17
|
||||
source include/check_galera_version.inc;
|
||||
--enable_query_log
|
||||
|
||||
|
@ -1222,25 +1222,6 @@
|
||||
fun:dlerror
|
||||
}
|
||||
|
||||
{
|
||||
GitHub codership/mysql-wsrep#176
|
||||
Memcheck:Leak
|
||||
fun:_Z16wsrep_get_paramsRKN6galera10ReplicatorE
|
||||
fun:galera_parameters_get
|
||||
fun:_ZL24refresh_provider_optionsv
|
||||
fun:_Z29wsrep_provider_options_updateP7sys_varP3THD13enum_var_type
|
||||
fun:_ZN7sys_var6updateEP3THDP7set_var
|
||||
fun:_ZN7set_var6updateEP3THD
|
||||
fun:_Z17sql_set_variablesP3THDP4ListI12set_var_baseE
|
||||
fun:_Z21mysql_execute_commandP3THD
|
||||
fun:_Z11mysql_parseP3THDPcjP12Parser_state
|
||||
fun:_ZL17wsrep_mysql_parseP3THDPcjP12Parser_state
|
||||
fun:_Z16dispatch_command19enum_server_commandP3THDPcj
|
||||
fun:_Z10do_commandP3THD
|
||||
fun:_Z24do_handle_one_connectionP3THD
|
||||
fun:handle_one_connection
|
||||
}
|
||||
|
||||
{
|
||||
GitHub codership/galera#330
|
||||
Memcheck:Leak
|
||||
@ -1334,31 +1315,6 @@ g codership/mysql-wsrep/issues#176
|
||||
fun:_Z16wsrep_set_paramsRN6galera10ReplicatorEPKc
|
||||
}
|
||||
|
||||
{
|
||||
codership/mysql-wsrep/issues#176
|
||||
Memcheck:Leak
|
||||
fun:_Z16wsrep_get_paramsRKN6galera10ReplicatorE
|
||||
}
|
||||
|
||||
{
|
||||
codership/mysql-wsrep/issues#176
|
||||
Memcheck:Leak
|
||||
fun:_Z16wsrep_get_paramsRKN6galera10ReplicatorE
|
||||
fun:galera_parameters_get
|
||||
fun:_ZL24refresh_provider_optionsv
|
||||
fun:_Z21wsrep_provider_updateP7sys_varP3THD13enum_var_type
|
||||
fun:_ZN7sys_var6updateEP3THDP7set_var
|
||||
fun:_ZN7set_var6updateEP3THD
|
||||
fun:_Z17sql_set_variablesP3THDP4ListI12set_var_baseE
|
||||
fun:_Z21mysql_execute_commandP3THD
|
||||
fun:_Z11mysql_parseP3THDPcjP12Parser_state
|
||||
fun:_ZL17wsrep_mysql_parseP3THDPcjP12Parser_state
|
||||
fun:_Z16dispatch_command19enum_server_commandP3THDPcj
|
||||
fun:_Z10do_commandP3THD
|
||||
fun:_Z24do_handle_one_connectionP3THD
|
||||
fun:handle_one_connection
|
||||
}
|
||||
|
||||
{
|
||||
codership/mysql-wsrep/issues#176
|
||||
Memcheck:Leak
|
||||
@ -1469,72 +1425,6 @@ g codership/mysql-wsrep/issues#176
|
||||
fun:_Z24do_handle_one_connectionP3THD
|
||||
}
|
||||
|
||||
{
|
||||
codership/mysql-wsrep/issues#176
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: possible
|
||||
fun:malloc
|
||||
fun:strdup
|
||||
fun:_Z16wsrep_get_paramsRKN6galera10ReplicatorE
|
||||
fun:galera_parameters_get
|
||||
fun:_ZL24refresh_provider_optionsv
|
||||
fun:_Z29wsrep_provider_options_updateP7sys_varP3THD13enum_var_type
|
||||
fun:_ZN7sys_var6updateEP3THDP7set_var
|
||||
fun:_ZN7set_var6updateEP3THD
|
||||
fun:_Z17sql_set_variablesP3THDP4ListI12set_var_baseE
|
||||
fun:_Z21mysql_execute_commandP3THD
|
||||
fun:_Z11mysql_parseP3THDPcjP12Parser_state
|
||||
fun:_ZL17wsrep_mysql_parseP3THDPcjP12Parser_state
|
||||
fun:_Z16dispatch_command19enum_server_commandP3THDPcj
|
||||
fun:_Z10do_commandP3THD
|
||||
fun:_Z24do_handle_one_connectionP3THD
|
||||
fun:handle_one_connection
|
||||
}
|
||||
|
||||
{
|
||||
codership/mysql-wsrep/issues#176
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: definite
|
||||
fun:malloc
|
||||
fun:strdup
|
||||
fun:_Z16wsrep_get_paramsRKN6galera10ReplicatorE
|
||||
fun:galera_parameters_get
|
||||
fun:_ZL24refresh_provider_optionsv
|
||||
fun:_Z29wsrep_provider_options_updateP7sys_varP3THD13enum_var_type
|
||||
fun:_ZN7sys_var6updateEP3THDP7set_var
|
||||
fun:_ZN7set_var6updateEP3THD
|
||||
fun:_Z17sql_set_variablesP3THDP4ListI12set_var_baseE
|
||||
fun:_Z21mysql_execute_commandP3THD
|
||||
fun:_Z11mysql_parseP3THDPcjP12Parser_state
|
||||
fun:_ZL17wsrep_mysql_parseP3THDPcjP12Parser_state
|
||||
fun:_Z16dispatch_command19enum_server_commandP3THDPcj
|
||||
fun:_Z10do_commandP3THD
|
||||
fun:_Z24do_handle_one_connectionP3THD
|
||||
fun:handle_one_connection
|
||||
}
|
||||
|
||||
{
|
||||
codership/mysql-wsrep/issues#176
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: definite
|
||||
fun:malloc
|
||||
fun:strdup
|
||||
fun:_Z16wsrep_get_paramsRKN6galera10ReplicatorE
|
||||
fun:galera_parameters_get
|
||||
fun:_ZL24refresh_provider_optionsv
|
||||
fun:_Z21wsrep_provider_updateP7sys_varP3THD13enum_var_type
|
||||
fun:_ZN7sys_var6updateEP3THDP7set_var
|
||||
fun:_ZN7set_var6updateEP3THD
|
||||
fun:_Z17sql_set_variablesP3THDP4ListI12set_var_baseE
|
||||
fun:_Z21mysql_execute_commandP3THD
|
||||
fun:_Z11mysql_parseP3THDPcjP12Parser_state
|
||||
fun:_ZL17wsrep_mysql_parseP3THDPcjP12Parser_state
|
||||
fun:_Z16dispatch_command19enum_server_commandP3THDPcj
|
||||
fun:_Z10do_commandP3THD
|
||||
fun:_Z24do_handle_one_connectionP3THD
|
||||
fun:handle_one_connection
|
||||
}
|
||||
|
||||
{
|
||||
codership/galera#331
|
||||
Memcheck:Leak
|
||||
|
@ -188,7 +188,7 @@ wsrep_log_info()
|
||||
|
||||
wsrep_cleanup_progress_file()
|
||||
{
|
||||
[ -n "$SST_PROGRESS_FILE" ] && rm -f "$SST_PROGRESS_FILE" 2>/dev/null
|
||||
[ -n "${SST_PROGRESS_FILE:-}" ] && rm -f "$SST_PROGRESS_FILE" 2>/dev/null || true
|
||||
}
|
||||
|
||||
wsrep_check_program()
|
||||
|
@ -222,7 +222,8 @@ then
|
||||
[ "$OS" == "Linux" ] && count=$(grep -c processor /proc/cpuinfo)
|
||||
[ "$OS" == "Darwin" -o "$OS" == "FreeBSD" ] && count=$(sysctl -n hw.ncpu)
|
||||
|
||||
find . -maxdepth 1 -mindepth 1 -type d -print0 | xargs -I{} -0 -P $count \
|
||||
find . -maxdepth 1 -mindepth 1 -type d -not -name "lost+found" -print0 | \
|
||||
xargs -I{} -0 -P $count \
|
||||
rsync --owner --group --perms --links --specials \
|
||||
--ignore-times --inplace --recursive --delete --quiet \
|
||||
$WHOLE_FILE_OPT --exclude '*/ib_logfile*' "$WSREP_SST_OPT_DATA"/{}/ \
|
||||
|
@ -689,6 +689,7 @@ then
|
||||
|
||||
if [ $WSREP_SST_OPT_BYPASS -eq 0 ]
|
||||
then
|
||||
usrst=0
|
||||
if [[ -z $sst_ver ]];then
|
||||
wsrep_log_error "Upgrade joiner to 5.6.21 or higher for backup locks support"
|
||||
wsrep_log_error "The joiner is not supported for this version of donor"
|
||||
@ -704,13 +705,14 @@ then
|
||||
itmpdir=$(mktemp -d)
|
||||
wsrep_log_info "Using $itmpdir as innobackupex temporary directory"
|
||||
|
||||
if [ "$WSREP_SST_OPT_USER" != "(null)" ]; then
|
||||
if [[ -n "${WSREP_SST_OPT_USER:-}" && "$WSREP_SST_OPT_USER" != "(null)" ]]; then
|
||||
INNOEXTRA+=" --user=$WSREP_SST_OPT_USER"
|
||||
usrst=1
|
||||
fi
|
||||
|
||||
if [ -n "${WSREP_SST_OPT_PSWD:-}" ]; then
|
||||
INNOEXTRA+=" --password=$WSREP_SST_OPT_PSWD"
|
||||
else
|
||||
elif [[ $usrst -eq 1 ]];then
|
||||
# Empty password, used for testing, debugging etc.
|
||||
INNOEXTRA+=" --password="
|
||||
fi
|
||||
|
@ -436,15 +436,17 @@ then
|
||||
|
||||
if [ $WSREP_SST_OPT_BYPASS -eq 0 ]
|
||||
then
|
||||
usrst=0
|
||||
TMPDIR="${TMPDIR:-/tmp}"
|
||||
|
||||
if [ "$WSREP_SST_OPT_USER" != "(null)" ]; then
|
||||
if [[ -n "${WSREP_SST_OPT_USER:-}" && "$WSREP_SST_OPT_USER" != "(null)" ]]; then
|
||||
INNOEXTRA+=" --user=$WSREP_SST_OPT_USER"
|
||||
usrst=1
|
||||
fi
|
||||
|
||||
if [ -n "${WSREP_SST_OPT_PSWD:-}" ]; then
|
||||
INNOEXTRA+=" --password=$WSREP_SST_OPT_PSWD"
|
||||
else
|
||||
elif [[ $usrst -eq 1 ]];then
|
||||
# Empty password, used for testing, debugging etc.
|
||||
INNOEXTRA+=" --password="
|
||||
fi
|
||||
|
@ -5897,6 +5897,17 @@ int handler::ha_write_row(uchar *buf)
|
||||
rows_changed++;
|
||||
if (unlikely(error= binlog_log_row(table, 0, buf, log_func)))
|
||||
DBUG_RETURN(error); /* purecov: inspected */
|
||||
#ifdef WITH_WSREP
|
||||
current_thd->wsrep_affected_rows++;
|
||||
if (wsrep_max_ws_rows &&
|
||||
current_thd->wsrep_exec_mode != REPL_RECV &&
|
||||
current_thd->wsrep_affected_rows > wsrep_max_ws_rows)
|
||||
{
|
||||
trans_rollback_stmt(current_thd) || trans_rollback(current_thd);
|
||||
my_message(ER_ERROR_DURING_COMMIT, "wsrep_max_ws_rows exceeded", MYF(0));
|
||||
DBUG_RETURN(ER_ERROR_DURING_COMMIT);
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
DEBUG_SYNC_C("ha_write_row_end");
|
||||
DBUG_RETURN(0);
|
||||
@ -5930,6 +5941,17 @@ int handler::ha_update_row(const uchar *old_data, uchar *new_data)
|
||||
rows_changed++;
|
||||
if (unlikely(error= binlog_log_row(table, old_data, new_data, log_func)))
|
||||
return error;
|
||||
#ifdef WITH_WSREP
|
||||
current_thd->wsrep_affected_rows++;
|
||||
if (wsrep_max_ws_rows &&
|
||||
current_thd->wsrep_exec_mode != REPL_RECV &&
|
||||
current_thd->wsrep_affected_rows > wsrep_max_ws_rows)
|
||||
{
|
||||
trans_rollback_stmt(current_thd) || trans_rollback(current_thd);
|
||||
my_message(ER_ERROR_DURING_COMMIT, "wsrep_max_ws_rows exceeded", MYF(0));
|
||||
return ER_ERROR_DURING_COMMIT;
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -5957,6 +5979,17 @@ int handler::ha_delete_row(const uchar *buf)
|
||||
rows_changed++;
|
||||
if (unlikely(error= binlog_log_row(table, buf, 0, log_func)))
|
||||
return error;
|
||||
#ifdef WITH_WSREP
|
||||
current_thd->wsrep_affected_rows++;
|
||||
if (wsrep_max_ws_rows &&
|
||||
current_thd->wsrep_exec_mode != REPL_RECV &&
|
||||
current_thd->wsrep_affected_rows > wsrep_max_ws_rows)
|
||||
{
|
||||
trans_rollback_stmt(current_thd) || trans_rollback(current_thd);
|
||||
my_message(ER_ERROR_DURING_COMMIT, "wsrep_max_ws_rows exceeded", MYF(0));
|
||||
return ER_ERROR_DURING_COMMIT;
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
58
sql/lock.cc
58
sql/lock.cc
@ -1036,10 +1036,21 @@ void Global_read_lock::unlock_global_read_lock(THD *thd)
|
||||
thd->mdl_context.release_lock(m_mdl_blocks_commits_lock);
|
||||
m_mdl_blocks_commits_lock= NULL;
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON)
|
||||
if (WSREP(thd) || wsrep_node_is_donor())
|
||||
{
|
||||
wsrep_locked_seqno= WSREP_SEQNO_UNDEFINED;
|
||||
wsrep->resume(wsrep);
|
||||
/* resync here only if we did implicit desync earlier */
|
||||
if (!wsrep_desync && wsrep_node_is_synced())
|
||||
{
|
||||
int ret = wsrep->resync(wsrep);
|
||||
if (ret != WSREP_OK)
|
||||
{
|
||||
WSREP_WARN("resync failed %d for FTWRL: db: %s, query: %s", ret,
|
||||
(thd->db ? thd->db : "(null)"), thd->query());
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
}
|
||||
@ -1079,14 +1090,11 @@ bool Global_read_lock::make_global_read_lock_block_commit(THD *thd)
|
||||
DBUG_RETURN(0);
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON && m_mdl_blocks_commits_lock)
|
||||
if (WSREP(thd) && m_mdl_blocks_commits_lock)
|
||||
{
|
||||
WSREP_DEBUG("GRL was in block commit mode when entering "
|
||||
"make_global_read_lock_block_commit");
|
||||
thd->mdl_context.release_lock(m_mdl_blocks_commits_lock);
|
||||
m_mdl_blocks_commits_lock= NULL;
|
||||
wsrep_locked_seqno= WSREP_SEQNO_UNDEFINED;
|
||||
wsrep->resume(wsrep);
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
@ -1100,7 +1108,43 @@ bool Global_read_lock::make_global_read_lock_block_commit(THD *thd)
|
||||
m_state= GRL_ACQUIRED_AND_BLOCKS_COMMIT;
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
if (WSREP_ON)
|
||||
/* Native threads should bail out before wsrep oprations to follow.
|
||||
Donor servicing thread is an exception, it should pause provider but not desync,
|
||||
as it is already desynced in donor state
|
||||
*/
|
||||
if (!WSREP(thd) && !wsrep_node_is_donor())
|
||||
{
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
|
||||
/* if already desynced or donor, avoid double desyncing
|
||||
if not in PC and synced, desyncing is not possible either
|
||||
*/
|
||||
if (wsrep_desync || !wsrep_node_is_synced())
|
||||
{
|
||||
WSREP_DEBUG("desync set upfont, skipping implicit desync for FTWRL: %d",
|
||||
wsrep_desync);
|
||||
}
|
||||
else
|
||||
{
|
||||
int rcode;
|
||||
WSREP_DEBUG("running implicit desync for node");
|
||||
rcode = wsrep->desync(wsrep);
|
||||
if (rcode != WSREP_OK)
|
||||
{
|
||||
WSREP_WARN("FTWRL desync failed %d for schema: %s, query: %s",
|
||||
rcode, (thd->db ? thd->db : "(null)"), thd->query());
|
||||
my_message(ER_LOCK_DEADLOCK, "wsrep desync failed for FTWRL", MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
long long ret = wsrep->pause(wsrep);
|
||||
if (ret >= 0)
|
||||
{
|
||||
wsrep_locked_seqno= ret;
|
||||
}
|
||||
else if (ret != -ENOSYS) /* -ENOSYS - no provider */
|
||||
{
|
||||
long long ret = wsrep->pause(wsrep);
|
||||
if (ret >= 0)
|
||||
|
@ -1029,6 +1029,7 @@ THD::THD(bool is_wsrep_applier)
|
||||
wsrep_TOI_pre_query_len = 0;
|
||||
wsrep_info[sizeof(wsrep_info) - 1] = '\0'; /* make sure it is 0-terminated */
|
||||
wsrep_sync_wait_gtid = WSREP_GTID_UNDEFINED;
|
||||
wsrep_affected_rows = 0;
|
||||
#endif
|
||||
/* Call to init() below requires fully initialized Open_tables_state. */
|
||||
reset_open_tables_state(this);
|
||||
@ -1444,6 +1445,7 @@ void THD::init(void)
|
||||
wsrep_TOI_pre_query = NULL;
|
||||
wsrep_TOI_pre_query_len = 0;
|
||||
wsrep_sync_wait_gtid = WSREP_GTID_UNDEFINED;
|
||||
wsrep_affected_rows = 0;
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
if (variables.sql_log_bin)
|
||||
@ -2233,6 +2235,8 @@ void THD::cleanup_after_query()
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
wsrep_sync_wait_gtid= WSREP_GTID_UNDEFINED;
|
||||
if (!in_active_multi_stmt_transaction())
|
||||
wsrep_affected_rows= 0;
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
DBUG_VOID_RETURN;
|
||||
@ -5196,7 +5200,11 @@ void THD::get_definer(LEX_USER *definer, bool role)
|
||||
{
|
||||
binlog_invoker(role);
|
||||
#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
|
||||
#ifdef WITH_WSREP
|
||||
if ((wsrep_applier || slave_thread) && has_invoker())
|
||||
#else
|
||||
if (slave_thread && has_invoker())
|
||||
#endif
|
||||
{
|
||||
definer->user = invoker_user;
|
||||
definer->host= invoker_host;
|
||||
|
@ -4029,6 +4029,7 @@ public:
|
||||
*/
|
||||
bool wsrep_ignore_table;
|
||||
wsrep_gtid_t wsrep_sync_wait_gtid;
|
||||
ulong wsrep_affected_rows;
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
/* Handling of timeouts for commands */
|
||||
|
@ -6883,10 +6883,13 @@ void THD::reset_for_next_command()
|
||||
/*
|
||||
Autoinc variables should be adjusted only for locally executed
|
||||
transactions. Appliers and replayers are either processing ROW
|
||||
events or get autoinc variable values from Query_log_event.
|
||||
events or get autoinc variable values from Query_log_event and
|
||||
mysql slave may be processing STATEMENT format events, but he should
|
||||
use autoinc values passed in binlog events, not the values forced by
|
||||
the cluster.
|
||||
*/
|
||||
if (WSREP(thd) && thd->wsrep_exec_mode == LOCAL_STATE &&
|
||||
wsrep_auto_increment_control)
|
||||
!thd->slave_thread && wsrep_auto_increment_control)
|
||||
{
|
||||
thd->variables.auto_increment_offset=
|
||||
global_system_variables.auto_increment_offset;
|
||||
|
@ -4864,13 +4864,14 @@ static Sys_var_charptr Sys_wsrep_start_position (
|
||||
static Sys_var_ulong Sys_wsrep_max_ws_size (
|
||||
"wsrep_max_ws_size", "Max write set size (bytes)",
|
||||
GLOBAL_VAR(wsrep_max_ws_size), CMD_LINE(REQUIRED_ARG),
|
||||
/* Upper limit is 65K short of 4G to avoid overlows on 32-bit systems */
|
||||
VALID_RANGE(1024, WSREP_MAX_WS_SIZE), DEFAULT(1073741824UL), BLOCK_SIZE(1));
|
||||
VALID_RANGE(1024, WSREP_MAX_WS_SIZE), DEFAULT(WSREP_MAX_WS_SIZE),
|
||||
BLOCK_SIZE(1), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0),
|
||||
ON_UPDATE(wsrep_max_ws_size_update));
|
||||
|
||||
static Sys_var_ulong Sys_wsrep_max_ws_rows (
|
||||
"wsrep_max_ws_rows", "Max number of rows in write set",
|
||||
GLOBAL_VAR(wsrep_max_ws_rows), CMD_LINE(REQUIRED_ARG),
|
||||
VALID_RANGE(1, 1048576), DEFAULT(131072), BLOCK_SIZE(1));
|
||||
VALID_RANGE(0, 1048576), DEFAULT(0), BLOCK_SIZE(1));
|
||||
|
||||
static Sys_var_charptr Sys_wsrep_notify_cmd(
|
||||
"wsrep_notify_cmd", "",
|
||||
|
@ -39,15 +39,9 @@ static Log_event* wsrep_read_log_event(
|
||||
const char *error= 0;
|
||||
Log_event *res= 0;
|
||||
|
||||
if (data_len > wsrep_max_ws_size)
|
||||
{
|
||||
error = "Event too big";
|
||||
goto err;
|
||||
}
|
||||
res= Log_event::read_log_event(buf, data_len, &error, description_event,
|
||||
true);
|
||||
|
||||
res= Log_event::read_log_event(buf, data_len, &error, description_event, true);
|
||||
|
||||
err:
|
||||
if (!res)
|
||||
{
|
||||
DBUG_ASSERT(error != 0);
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user