mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge 10.2 into 10.3
This commit is contained in:
@ -1200,6 +1200,7 @@ write_slave_info(MYSQL *connection)
|
|||||||
char *master = NULL;
|
char *master = NULL;
|
||||||
char *filename = NULL;
|
char *filename = NULL;
|
||||||
char *gtid_executed = NULL;
|
char *gtid_executed = NULL;
|
||||||
|
char *using_gtid = NULL;
|
||||||
char *position = NULL;
|
char *position = NULL;
|
||||||
char *gtid_slave_pos = NULL;
|
char *gtid_slave_pos = NULL;
|
||||||
char *ptr;
|
char *ptr;
|
||||||
@ -1210,6 +1211,7 @@ write_slave_info(MYSQL *connection)
|
|||||||
{"Relay_Master_Log_File", &filename},
|
{"Relay_Master_Log_File", &filename},
|
||||||
{"Exec_Master_Log_Pos", &position},
|
{"Exec_Master_Log_Pos", &position},
|
||||||
{"Executed_Gtid_Set", >id_executed},
|
{"Executed_Gtid_Set", >id_executed},
|
||||||
|
{"Using_Gtid", &using_gtid},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1250,7 +1252,8 @@ write_slave_info(MYSQL *connection)
|
|||||||
ut_a(asprintf(&mysql_slave_position,
|
ut_a(asprintf(&mysql_slave_position,
|
||||||
"master host '%s', purge list '%s'",
|
"master host '%s', purge list '%s'",
|
||||||
master, gtid_executed) != -1);
|
master, gtid_executed) != -1);
|
||||||
} else if (gtid_slave_pos && *gtid_slave_pos) {
|
} else if (gtid_slave_pos && *gtid_slave_pos &&
|
||||||
|
!(using_gtid && !strncmp(using_gtid, "No", 2))) {
|
||||||
/* MariaDB >= 10.0 with GTID enabled */
|
/* MariaDB >= 10.0 with GTID enabled */
|
||||||
result = backup_file_printf(XTRABACKUP_SLAVE_INFO,
|
result = backup_file_printf(XTRABACKUP_SLAVE_INFO,
|
||||||
"SET GLOBAL gtid_slave_pos = '%s';\n"
|
"SET GLOBAL gtid_slave_pos = '%s';\n"
|
||||||
|
@ -117,6 +117,8 @@ extern struct wsrep_service_st {
|
|||||||
void (*wsrep_unlock_rollback_func)();
|
void (*wsrep_unlock_rollback_func)();
|
||||||
void (*wsrep_set_data_home_dir_func)(const char *data_dir);
|
void (*wsrep_set_data_home_dir_func)(const char *data_dir);
|
||||||
my_bool (*wsrep_thd_is_applier_func)(MYSQL_THD);
|
my_bool (*wsrep_thd_is_applier_func)(MYSQL_THD);
|
||||||
|
void (*wsrep_report_bf_lock_wait_func)(MYSQL_THD thd,
|
||||||
|
unsigned long long trx_id);
|
||||||
} *wsrep_service;
|
} *wsrep_service;
|
||||||
|
|
||||||
#ifdef MYSQL_DYNAMIC_PLUGIN
|
#ifdef MYSQL_DYNAMIC_PLUGIN
|
||||||
@ -165,6 +167,7 @@ extern struct wsrep_service_st {
|
|||||||
#define wsrep_unlock_rollback() wsrep_service->wsrep_unlock_rollback_func()
|
#define wsrep_unlock_rollback() wsrep_service->wsrep_unlock_rollback_func()
|
||||||
#define wsrep_set_data_home_dir(A) wsrep_service->wsrep_set_data_home_dir_func(A)
|
#define wsrep_set_data_home_dir(A) wsrep_service->wsrep_set_data_home_dir_func(A)
|
||||||
#define wsrep_thd_is_applier(T) wsrep_service->wsrep_thd_is_applier_func(T)
|
#define wsrep_thd_is_applier(T) wsrep_service->wsrep_thd_is_applier_func(T)
|
||||||
|
#define wsrep_report_bf_lock_wait(T,I) wsrep_service->wsrep_report_bf_lock_wait_func(T,I)
|
||||||
|
|
||||||
#define wsrep_debug get_wsrep_debug()
|
#define wsrep_debug get_wsrep_debug()
|
||||||
#define wsrep_log_conflicts get_wsrep_log_conflicts()
|
#define wsrep_log_conflicts get_wsrep_log_conflicts()
|
||||||
@ -229,6 +232,8 @@ bool wsrep_thd_ignore_table(THD *thd);
|
|||||||
void wsrep_unlock_rollback();
|
void wsrep_unlock_rollback();
|
||||||
void wsrep_set_data_home_dir(const char *data_dir);
|
void wsrep_set_data_home_dir(const char *data_dir);
|
||||||
my_bool wsrep_thd_is_applier(MYSQL_THD thd);
|
my_bool wsrep_thd_is_applier(MYSQL_THD thd);
|
||||||
|
void wsrep_report_bf_lock_wait(THD *thd,
|
||||||
|
unsigned long long trx_id);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -2,48 +2,45 @@ connection node_1;
|
|||||||
connection node_2;
|
connection node_2;
|
||||||
connection node_1;
|
connection node_1;
|
||||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB;
|
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB;
|
||||||
CREATE PROCEDURE p1 ()
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
BEGIN
|
|
||||||
DECLARE x INT DEFAULT 1;
|
|
||||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
|
|
||||||
WHILE 1 DO
|
|
||||||
INSERT INTO t1 VALUES (DEFAULT);
|
|
||||||
COMMIT;
|
|
||||||
END WHILE;
|
|
||||||
END|
|
|
||||||
CALL p1();;
|
|
||||||
connection node_2;
|
|
||||||
CALL p1();;
|
|
||||||
connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2;
|
connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2;
|
||||||
connection node_2a;
|
connection node_2a;
|
||||||
Killing server ...
|
Killing server ...
|
||||||
INSERT INTO t1 VALUES (DEFAULT);
|
connection node_1;
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
connection node_2a;
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
||||||
connection node_1a;
|
connection node_1a;
|
||||||
INSERT INTO t1 VALUES (DEFAULT);
|
SELECT COUNT(*) FROM t1;
|
||||||
connection node_1;
|
COUNT(*)
|
||||||
Got one of the listed errors
|
132
|
||||||
connection node_2;
|
|
||||||
Got one of the listed errors
|
|
||||||
connection node_1a;
|
|
||||||
connection node_2a;
|
connection node_2a;
|
||||||
count_equal
|
SELECT COUNT(*) FROM t1;
|
||||||
1
|
COUNT(*)
|
||||||
CALL mtr.add_suppression("WSREP: Action message in non-primary configuration from member 0");
|
132
|
||||||
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
connection node_1;
|
||||||
VARIABLE_VALUE
|
|
||||||
2
|
|
||||||
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
|
||||||
VARIABLE_VALUE = 2
|
|
||||||
1
|
|
||||||
connection node_1a;
|
|
||||||
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
|
||||||
VARIABLE_VALUE
|
|
||||||
2
|
|
||||||
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
|
||||||
VARIABLE_VALUE = 2
|
|
||||||
1
|
|
||||||
DROP PROCEDURE p1;
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
CALL mtr.add_suppression("gcs_caused\\(\\) returned -1 \\(Operation not permitted\\)");
|
CALL mtr.add_suppression("gcs_caused\\(\\) returned -1 \\(Operation not permitted\\)");
|
||||||
CALL mtr.add_suppression("WSREP: Action message in non-primary configuration from member 0");
|
CALL mtr.add_suppression("WSREP: Action message in non-primary configuration from member 0");
|
||||||
|
disconnect node_1a;
|
||||||
|
disconnect node_2a;
|
||||||
|
@ -4,11 +4,11 @@ connection node_1;
|
|||||||
connection node_2;
|
connection node_2;
|
||||||
connection node_3;
|
connection node_3;
|
||||||
connection node_4;
|
connection node_4;
|
||||||
SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
SELECT VARIABLE_VALUE AS EXPECT_4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
VARIABLE_VALUE = 4
|
EXPECT_4
|
||||||
1
|
4
|
||||||
connection node_1;
|
connection node_1;
|
||||||
CREATE TABLE t1 (f1 INTEGER);
|
CREATE TABLE t1 (f1 INTEGER NOT NULL PRIMARY KEY) ENGINE=INNODB;
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
connection node_2;
|
connection node_2;
|
||||||
INSERT INTO t1 VALUES (2);
|
INSERT INTO t1 VALUES (2);
|
||||||
@ -20,60 +20,78 @@ connection node_3;
|
|||||||
INSERT INTO t1 VALUES (13);
|
INSERT INTO t1 VALUES (13);
|
||||||
Shutting down server ...
|
Shutting down server ...
|
||||||
connection node_1;
|
connection node_1;
|
||||||
|
SELECT VARIABLE_VALUE AS EXPECT_3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
|
EXPECT_3
|
||||||
|
3
|
||||||
INSERT INTO t1 VALUES (11);
|
INSERT INTO t1 VALUES (11);
|
||||||
connection node_2;
|
connection node_2;
|
||||||
INSERT INTO t1 VALUES (12);
|
INSERT INTO t1 VALUES (12);
|
||||||
connection node_4;
|
connection node_4;
|
||||||
INSERT INTO t1 VALUES (14);
|
INSERT INTO t1 VALUES (14);
|
||||||
connection node_3;
|
connection node_3;
|
||||||
|
SELECT VARIABLE_VALUE AS EXPECT_4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
|
EXPECT_4
|
||||||
|
4
|
||||||
INSERT INTO t1 VALUES (131);
|
INSERT INTO t1 VALUES (131);
|
||||||
connection node_2;
|
connection node_2;
|
||||||
INSERT INTO t1 VALUES (22);
|
INSERT INTO t1 VALUES (22);
|
||||||
Shutting down server ...
|
Shutting down server ...
|
||||||
connection node_1;
|
connection node_1;
|
||||||
|
SELECT VARIABLE_VALUE AS EXPECT_3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
|
EXPECT_3
|
||||||
|
3
|
||||||
INSERT INTO t1 VALUES (21);
|
INSERT INTO t1 VALUES (21);
|
||||||
connection node_3;
|
connection node_3;
|
||||||
INSERT INTO t1 VALUES (23);
|
INSERT INTO t1 VALUES (23);
|
||||||
connection node_4;
|
connection node_4;
|
||||||
INSERT INTO t1 VALUES (24);
|
INSERT INTO t1 VALUES (24);
|
||||||
connection node_2;
|
connection node_2;
|
||||||
|
SELECT VARIABLE_VALUE AS EXPECT_4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
|
EXPECT_4
|
||||||
|
4
|
||||||
INSERT INTO t1 VALUES (221);
|
INSERT INTO t1 VALUES (221);
|
||||||
connection node_4;
|
connection node_4;
|
||||||
INSERT INTO t1 VALUES (34);
|
INSERT INTO t1 VALUES (34);
|
||||||
Shutting down server ...
|
Shutting down server ...
|
||||||
connection node_1;
|
connection node_1;
|
||||||
|
SELECT VARIABLE_VALUE AS EXPECT_3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
|
EXPECT_3
|
||||||
|
3
|
||||||
INSERT INTO t1 VALUES (31);
|
INSERT INTO t1 VALUES (31);
|
||||||
connection node_2;
|
connection node_2;
|
||||||
INSERT INTO t1 VALUES (32);
|
INSERT INTO t1 VALUES (32);
|
||||||
connection node_3;
|
connection node_3;
|
||||||
INSERT INTO t1 VALUES (33);
|
INSERT INTO t1 VALUES (33);
|
||||||
connection node_4;
|
connection node_4;
|
||||||
|
SELECT VARIABLE_VALUE AS EXPECT_4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
|
EXPECT_4
|
||||||
|
4
|
||||||
INSERT INTO t1 VALUES (341);
|
INSERT INTO t1 VALUES (341);
|
||||||
connection node_1;
|
connection node_1;
|
||||||
SELECT COUNT(*) = 19 FROM t1;
|
SELECT COUNT(*) AS EXPECT_19 FROM t1;
|
||||||
COUNT(*) = 19
|
EXPECT_19
|
||||||
1
|
19
|
||||||
connection node_2;
|
connection node_2;
|
||||||
SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
VARIABLE_VALUE = 4
|
VARIABLE_VALUE = 4
|
||||||
1
|
1
|
||||||
SELECT COUNT(*) = 19 FROM t1;
|
SELECT COUNT(*) AS EXPECT_19 FROM t1;
|
||||||
COUNT(*) = 19
|
EXPECT_19
|
||||||
1
|
19
|
||||||
connection node_3;
|
connection node_3;
|
||||||
SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
VARIABLE_VALUE = 4
|
VARIABLE_VALUE = 4
|
||||||
1
|
1
|
||||||
SELECT COUNT(*) = 19 FROM t1;
|
SELECT COUNT(*) AS EXPECT_19 FROM t1;
|
||||||
COUNT(*) = 19
|
EXPECT_19
|
||||||
1
|
19
|
||||||
connection node_4;
|
connection node_4;
|
||||||
SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
VARIABLE_VALUE = 4
|
VARIABLE_VALUE = 4
|
||||||
1
|
1
|
||||||
SELECT COUNT(*) = 19 FROM t1;
|
SELECT COUNT(*) AS EXPECT_19 FROM t1;
|
||||||
COUNT(*) = 19
|
EXPECT_19
|
||||||
1
|
19
|
||||||
connection node_1;
|
connection node_1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
CALL mtr.add_suppression("There are no nodes in the same segment that will ever be able to become donors, yet there is a suitable donor outside");
|
CALL mtr.add_suppression("There are no nodes in the same segment that will ever be able to become donors, yet there is a suitable donor outside");
|
||||||
@ -84,5 +102,6 @@ CALL mtr.add_suppression("There are no nodes in the same segment that will ever
|
|||||||
CALL mtr.add_suppression("Action message in non-primary configuration from member 0");
|
CALL mtr.add_suppression("Action message in non-primary configuration from member 0");
|
||||||
connection node_4;
|
connection node_4;
|
||||||
CALL mtr.add_suppression("Action message in non-primary configuration from member 0");
|
CALL mtr.add_suppression("Action message in non-primary configuration from member 0");
|
||||||
disconnect node_2;
|
connection node_1;
|
||||||
disconnect node_1;
|
disconnect node_3;
|
||||||
|
disconnect node_4;
|
||||||
|
@ -2,93 +2,61 @@
|
|||||||
# Test that autoincrement works correctly while the cluster membership
|
# Test that autoincrement works correctly while the cluster membership
|
||||||
# is changing and SST takes place.
|
# is changing and SST takes place.
|
||||||
#
|
#
|
||||||
|
|
||||||
--source include/big_test.inc
|
--source include/big_test.inc
|
||||||
--source include/galera_cluster.inc
|
--source include/galera_cluster.inc
|
||||||
--source include/have_innodb.inc
|
|
||||||
--source include/have_mariabackup.inc
|
--source include/have_mariabackup.inc
|
||||||
|
--source include/force_restart.inc
|
||||||
|
|
||||||
--let $node_1=node_1
|
--let $node_1=node_1
|
||||||
--let $node_2=node_2
|
--let $node_2=node_2
|
||||||
--source include/auto_increment_offset_save.inc
|
--source include/auto_increment_offset_save.inc
|
||||||
|
|
||||||
--connection node_1
|
--connection node_1
|
||||||
--let $connection_id = `SELECT CONNECTION_ID()`
|
|
||||||
|
|
||||||
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB;
|
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB;
|
||||||
|
|
||||||
# Issue an endless stream of autoincrement inserts
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
|
||||||
DELIMITER |;
|
|
||||||
CREATE PROCEDURE p1 ()
|
|
||||||
BEGIN
|
|
||||||
DECLARE x INT DEFAULT 1;
|
|
||||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
|
|
||||||
|
|
||||||
WHILE 1 DO
|
|
||||||
INSERT INTO t1 VALUES (DEFAULT);
|
|
||||||
COMMIT;
|
|
||||||
END WHILE;
|
|
||||||
END|
|
|
||||||
DELIMITER ;|
|
|
||||||
|
|
||||||
--send CALL p1();
|
|
||||||
--sleep 1
|
|
||||||
|
|
||||||
--connection node_2
|
|
||||||
--send CALL p1();
|
|
||||||
--sleep 1
|
|
||||||
|
|
||||||
# Kill and restart node #2
|
# Kill and restart node #2
|
||||||
|
|
||||||
--connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2
|
--connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2
|
||||||
--connection node_2a
|
--connection node_2a
|
||||||
--source include/kill_galera.inc
|
--source include/kill_galera.inc
|
||||||
|
|
||||||
|
--connection node_1
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
|
||||||
|
--connection node_2a
|
||||||
--source include/start_mysqld.inc
|
--source include/start_mysqld.inc
|
||||||
|
--source include/wait_until_connected_again.inc
|
||||||
|
|
||||||
INSERT INTO t1 VALUES (DEFAULT);
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
# Terminate the stored procedure
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||||
|
|
||||||
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
||||||
--connection node_1a
|
--connection node_1a
|
||||||
--disable_query_log
|
SELECT COUNT(*) FROM t1;
|
||||||
--eval KILL CONNECTION $connection_id
|
|
||||||
--enable_query_log
|
|
||||||
|
|
||||||
INSERT INTO t1 VALUES (DEFAULT);
|
|
||||||
|
|
||||||
--connection node_1
|
|
||||||
# CR_SERVER_LOST
|
|
||||||
--error 2013,2006
|
|
||||||
--reap
|
|
||||||
|
|
||||||
--connection node_2
|
|
||||||
# CR_SERVER_LOST
|
|
||||||
--error 2013,2006
|
|
||||||
--reap
|
|
||||||
|
|
||||||
# Confirm that the count is correct and that the cluster is intact
|
|
||||||
|
|
||||||
--connection node_1a
|
|
||||||
--let $count = `SELECT COUNT(*) FROM t1`
|
|
||||||
|
|
||||||
--connection node_2a
|
--connection node_2a
|
||||||
--disable_query_log
|
SELECT COUNT(*) FROM t1;
|
||||||
--eval SELECT COUNT(*) = $count AS count_equal FROM t1
|
|
||||||
--enable_query_log
|
|
||||||
|
|
||||||
CALL mtr.add_suppression("WSREP: Action message in non-primary configuration from member 0");
|
--connection node_1
|
||||||
|
|
||||||
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
|
||||||
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
|
||||||
|
|
||||||
--connection node_1a
|
|
||||||
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
|
||||||
SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
|
||||||
|
|
||||||
DROP PROCEDURE p1;
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
CALL mtr.add_suppression("gcs_caused\\(\\) returned -1 \\(Operation not permitted\\)");
|
CALL mtr.add_suppression("gcs_caused\\(\\) returned -1 \\(Operation not permitted\\)");
|
||||||
@ -97,3 +65,6 @@ CALL mtr.add_suppression("WSREP: Action message in non-primary configuration fro
|
|||||||
--let $node_1=node_1a
|
--let $node_1=node_1a
|
||||||
--let $node_2=node_2a
|
--let $node_2=node_2a
|
||||||
--source include/auto_increment_offset_restore.inc
|
--source include/auto_increment_offset_restore.inc
|
||||||
|
|
||||||
|
--disconnect node_1a
|
||||||
|
--disconnect node_2a
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
--source include/big_test.inc
|
--source include/big_test.inc
|
||||||
--source include/galera_cluster.inc
|
--source include/galera_cluster.inc
|
||||||
--source include/have_innodb.inc
|
--source include/force_restart.inc
|
||||||
|
|
||||||
--connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3
|
--connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3
|
||||||
--connect node_4, 127.0.0.1, root, , test, $NODE_MYPORT_4
|
--connect node_4, 127.0.0.1, root, , test, $NODE_MYPORT_4
|
||||||
@ -22,10 +22,13 @@
|
|||||||
--let $node_4=node_4
|
--let $node_4=node_4
|
||||||
--source include/auto_increment_offset_save.inc
|
--source include/auto_increment_offset_save.inc
|
||||||
|
|
||||||
SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
--let $wait_condition = SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
|
SELECT VARIABLE_VALUE AS EXPECT_4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
|
|
||||||
--connection node_1
|
--connection node_1
|
||||||
CREATE TABLE t1 (f1 INTEGER);
|
CREATE TABLE t1 (f1 INTEGER NOT NULL PRIMARY KEY) ENGINE=INNODB;
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
|
|
||||||
--connection node_2
|
--connection node_2
|
||||||
@ -46,9 +49,13 @@ INSERT INTO t1 VALUES (13);
|
|||||||
|
|
||||||
--echo Shutting down server ...
|
--echo Shutting down server ...
|
||||||
--source include/shutdown_mysqld.inc
|
--source include/shutdown_mysqld.inc
|
||||||
--sleep 5
|
|
||||||
|
|
||||||
--connection node_1
|
--connection node_1
|
||||||
|
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
SELECT VARIABLE_VALUE AS EXPECT_3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
|
|
||||||
INSERT INTO t1 VALUES (11);
|
INSERT INTO t1 VALUES (11);
|
||||||
|
|
||||||
--connection node_2
|
--connection node_2
|
||||||
@ -59,9 +66,12 @@ INSERT INTO t1 VALUES (14);
|
|||||||
|
|
||||||
--connection node_3
|
--connection node_3
|
||||||
--source include/start_mysqld.inc
|
--source include/start_mysqld.inc
|
||||||
--sleep 5
|
|
||||||
--source include/wait_until_connected_again.inc
|
--source include/wait_until_connected_again.inc
|
||||||
|
|
||||||
|
--let $wait_condition = SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
SELECT VARIABLE_VALUE AS EXPECT_4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
|
|
||||||
INSERT INTO t1 VALUES (131);
|
INSERT INTO t1 VALUES (131);
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -73,9 +83,12 @@ INSERT INTO t1 VALUES (22);
|
|||||||
|
|
||||||
--echo Shutting down server ...
|
--echo Shutting down server ...
|
||||||
--source include/shutdown_mysqld.inc
|
--source include/shutdown_mysqld.inc
|
||||||
--sleep 5
|
|
||||||
|
|
||||||
--connection node_1
|
--connection node_1
|
||||||
|
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
SELECT VARIABLE_VALUE AS EXPECT_3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
|
|
||||||
INSERT INTO t1 VALUES (21);
|
INSERT INTO t1 VALUES (21);
|
||||||
|
|
||||||
--connection node_3
|
--connection node_3
|
||||||
@ -86,9 +99,12 @@ INSERT INTO t1 VALUES (24);
|
|||||||
|
|
||||||
--connection node_2
|
--connection node_2
|
||||||
--source include/start_mysqld.inc
|
--source include/start_mysqld.inc
|
||||||
--sleep 5
|
|
||||||
--source include/wait_until_connected_again.inc
|
--source include/wait_until_connected_again.inc
|
||||||
|
|
||||||
|
--let $wait_condition = SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
SELECT VARIABLE_VALUE AS EXPECT_4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
|
|
||||||
INSERT INTO t1 VALUES (221);
|
INSERT INTO t1 VALUES (221);
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -100,9 +116,12 @@ INSERT INTO t1 VALUES (34);
|
|||||||
|
|
||||||
--echo Shutting down server ...
|
--echo Shutting down server ...
|
||||||
--source include/shutdown_mysqld.inc
|
--source include/shutdown_mysqld.inc
|
||||||
--sleep 5
|
|
||||||
|
|
||||||
--connection node_1
|
--connection node_1
|
||||||
|
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
SELECT VARIABLE_VALUE AS EXPECT_3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
|
|
||||||
INSERT INTO t1 VALUES (31);
|
INSERT INTO t1 VALUES (31);
|
||||||
|
|
||||||
--connection node_2
|
--connection node_2
|
||||||
@ -113,9 +132,12 @@ INSERT INTO t1 VALUES (33);
|
|||||||
|
|
||||||
--connection node_4
|
--connection node_4
|
||||||
--source include/start_mysqld.inc
|
--source include/start_mysqld.inc
|
||||||
--sleep 5
|
|
||||||
--source include/wait_until_connected_again.inc
|
--source include/wait_until_connected_again.inc
|
||||||
|
|
||||||
|
--let $wait_condition = SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
SELECT VARIABLE_VALUE AS EXPECT_4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
|
|
||||||
INSERT INTO t1 VALUES (341);
|
INSERT INTO t1 VALUES (341);
|
||||||
|
|
||||||
|
|
||||||
@ -124,22 +146,44 @@ INSERT INTO t1 VALUES (341);
|
|||||||
#
|
#
|
||||||
|
|
||||||
--connection node_1
|
--connection node_1
|
||||||
--let $wait_condition = SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
--let $wait_condition = SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
--let $wait_condition = SELECT COUNT(*) = 19 FROM t1
|
||||||
--source include/wait_condition.inc
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
SELECT COUNT(*) = 19 FROM t1;
|
SELECT COUNT(*) AS EXPECT_19 FROM t1;
|
||||||
|
|
||||||
--connection node_2
|
--connection node_2
|
||||||
|
--let $wait_condition = SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||||
|
--source include/wait_condition.inc
|
||||||
SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
SELECT COUNT(*) = 19 FROM t1;
|
|
||||||
|
--let $wait_condition = SELECT COUNT(*) = 19 FROM t1
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
|
SELECT COUNT(*) AS EXPECT_19 FROM t1;
|
||||||
|
|
||||||
|
|
||||||
--connection node_3
|
--connection node_3
|
||||||
|
--let $wait_condition = SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||||
|
--source include/wait_condition.inc
|
||||||
SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
SELECT COUNT(*) = 19 FROM t1;
|
|
||||||
|
--let $wait_condition = SELECT COUNT(*) = 19 FROM t1
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
|
SELECT COUNT(*) AS EXPECT_19 FROM t1;
|
||||||
|
|
||||||
--connection node_4
|
--connection node_4
|
||||||
|
--let $wait_condition = SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
|
--source include/wait_condition.inc
|
||||||
SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
SELECT VARIABLE_VALUE = 4 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
SELECT COUNT(*) = 19 FROM t1;
|
|
||||||
|
--let $wait_condition = SELECT COUNT(*) = 19 FROM t1
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
|
SELECT COUNT(*) AS EXPECT_19 FROM t1;
|
||||||
|
|
||||||
|
|
||||||
--connection node_1
|
--connection node_1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
@ -158,4 +202,6 @@ CALL mtr.add_suppression("Action message in non-primary configuration from membe
|
|||||||
# Restore original auto_increment_offset values.
|
# Restore original auto_increment_offset values.
|
||||||
--source include/auto_increment_offset_restore.inc
|
--source include/auto_increment_offset_restore.inc
|
||||||
|
|
||||||
--source include/galera_end.inc
|
--connection node_1
|
||||||
|
--disconnect node_3
|
||||||
|
--disconnect node_4
|
||||||
|
@ -7,11 +7,11 @@ VARIABLE_VALUE = 3
|
|||||||
connection node_2;
|
connection node_2;
|
||||||
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
|
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
|
||||||
connection node_1;
|
connection node_1;
|
||||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
CREATE TABLE t1 (f1 INTEGER NOT NULL PRIMARY KEY) ENGINE=InnoDB;
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
connection node_2;
|
connection node_2;
|
||||||
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
|
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
|
||||||
SELECT COUNT(*) = 1 FROM t1;
|
SELECT COUNT(*) AS EXPECT_1 FROM t1;
|
||||||
COUNT(*) = 1
|
EXPECT_1
|
||||||
1
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -7,16 +7,16 @@ VARIABLE_VALUE = 3
|
|||||||
connection node_2;
|
connection node_2;
|
||||||
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
|
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
|
||||||
connection node_1;
|
connection node_1;
|
||||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
CREATE TABLE t1 (f1 INTEGER NOT NULL PRIMARY KEY) ENGINE=InnoDB;
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
connection node_2;
|
connection node_2;
|
||||||
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
|
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
|
||||||
SELECT COUNT(*) = 1 FROM t1;
|
SELECT COUNT(*) AS EXPECT_1 FROM t1;
|
||||||
COUNT(*) = 1
|
EXPECT_1
|
||||||
1
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
connection node_1;
|
connection node_1;
|
||||||
include/assert_grep.inc [Streaming the backup to joiner at \[::1\]]
|
include/assert_grep.inc [Streaming the backup to joiner at \[::1\]]
|
||||||
include/assert_grep.inc [async IST sender starting to serve tcp://\[::1\]:]
|
include/assert_grep.inc [async IST sender starting to serve tcp://\[::1\]:]
|
||||||
include/assert_grep.inc [IST receiver addr using tcp://\[::1\]]
|
include/assert_grep.inc [IST receiver addr using tcp://\[::1\]]
|
||||||
include/assert_grep.inc [Prepared IST receiver, listening at: tcp://\[::1\]]
|
include/assert_grep.inc [, listening at: tcp://\[::1\]]
|
||||||
|
@ -7,12 +7,12 @@ VARIABLE_VALUE = 3
|
|||||||
connection node_2;
|
connection node_2;
|
||||||
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
|
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
|
||||||
connection node_1;
|
connection node_1;
|
||||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
CREATE TABLE t1 (f1 INTEGER NOT NULL PRIMARY KEY) ENGINE=InnoDB;
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
connection node_2;
|
connection node_2;
|
||||||
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
|
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
|
||||||
SELECT COUNT(*) = 1 FROM t1;
|
SELECT COUNT(*) AS EXPECT_1 FROM t1;
|
||||||
COUNT(*) = 1
|
EXPECT_1
|
||||||
1
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
connection node_1;
|
connection node_1;
|
||||||
@ -20,4 +20,4 @@ include/assert_grep.inc [Streaming the backup to joiner at \[::1\]]
|
|||||||
include/assert_grep.inc [async IST sender starting to serve tcp://\[::1\]:]
|
include/assert_grep.inc [async IST sender starting to serve tcp://\[::1\]:]
|
||||||
connection node_2;
|
connection node_2;
|
||||||
include/assert_grep.inc [IST receiver addr using tcp://\[::1\]]
|
include/assert_grep.inc [IST receiver addr using tcp://\[::1\]]
|
||||||
include/assert_grep.inc [Prepared IST receiver, listening at: tcp://\[::1\]]
|
include/assert_grep.inc [, listening at: tcp://\[::1\]]
|
||||||
|
@ -12,12 +12,12 @@ SET GLOBAL wsrep_sst_method = 'mysqldump';
|
|||||||
Shutting down server ...
|
Shutting down server ...
|
||||||
connection node_1;
|
connection node_1;
|
||||||
Cleaning var directory ...
|
Cleaning var directory ...
|
||||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
CREATE TABLE t1 (f1 INTEGER NOT NULL PRIMARY KEY) ENGINE=InnoDB;
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
connection node_2;
|
connection node_2;
|
||||||
Starting server ...
|
Starting server ...
|
||||||
SELECT COUNT(*) = 1 FROM t1;
|
SELECT COUNT(*) AS EXPECT_1 FROM t1;
|
||||||
COUNT(*) = 1
|
EXPECT_1
|
||||||
1
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
SELECT VARIABLE_VALUE LIKE '%[::1]%' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_incoming_addresses';
|
SELECT VARIABLE_VALUE LIKE '%[::1]%' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_incoming_addresses';
|
||||||
|
@ -7,11 +7,11 @@ VARIABLE_VALUE = 3
|
|||||||
connection node_2;
|
connection node_2;
|
||||||
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
|
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
|
||||||
connection node_1;
|
connection node_1;
|
||||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
CREATE TABLE t1 (f1 INTEGER NOT NULL PRIMARY KEY) ENGINE=InnoDB;
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
connection node_2;
|
connection node_2;
|
||||||
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
|
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
|
||||||
SELECT COUNT(*) = 1 FROM t1;
|
SELECT COUNT(*) AS EXPECT_1 FROM t1;
|
||||||
COUNT(*) = 1
|
EXPECT_1
|
||||||
1
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -7,11 +7,11 @@ VARIABLE_VALUE = 3
|
|||||||
connection node_2;
|
connection node_2;
|
||||||
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
|
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
|
||||||
connection node_1;
|
connection node_1;
|
||||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
CREATE TABLE t1 (f1 INTEGER NOT NULL PRIMARY KEY) ENGINE=InnoDB;
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
connection node_2;
|
connection node_2;
|
||||||
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
|
SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
|
||||||
SELECT COUNT(*) = 1 FROM t1;
|
SELECT COUNT(*) AS EXPECT_1 FROM t1;
|
||||||
COUNT(*) = 1
|
EXPECT_1
|
||||||
1
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -2,7 +2,8 @@ connection node_1;
|
|||||||
connection node_2;
|
connection node_2;
|
||||||
connection node_3;
|
connection node_3;
|
||||||
connection node_1;
|
connection node_1;
|
||||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
CREATE TABLE t1 (f1 INTEGER NOT NULL PRIMARY KEY) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
include/assert_grep.inc [grastate.dat does not have 'safe_to_bootstrap: 0']
|
include/assert_grep.inc [grastate.dat does not have 'safe_to_bootstrap: 0']
|
||||||
include/assert_grep.inc [grastate.dat does not have 'safe_to_bootstrap: 0']
|
include/assert_grep.inc [grastate.dat does not have 'safe_to_bootstrap: 0']
|
||||||
include/assert_grep.inc [grastate.dat does not have 'safe_to_bootstrap: 0']
|
include/assert_grep.inc [grastate.dat does not have 'safe_to_bootstrap: 0']
|
||||||
@ -48,6 +49,7 @@ CALL mtr.add_suppression("Failed to prepare for incremental state transfer");
|
|||||||
SHOW CREATE TABLE t1;
|
SHOW CREATE TABLE t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`f1` int(11) DEFAULT NULL
|
`f1` int(11) NOT NULL,
|
||||||
|
PRIMARY KEY (`f1`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -2,7 +2,7 @@ connection node_1;
|
|||||||
connection node_2;
|
connection node_2;
|
||||||
connection node_3;
|
connection node_3;
|
||||||
connection node_1;
|
connection node_1;
|
||||||
CREATE TABLE t1 (f1 INTEGER);
|
CREATE TABLE t1 (f1 INTEGER) ENGINE=INNODB;
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
connection node_2;
|
connection node_2;
|
||||||
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
|
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
|
||||||
|
@ -10,6 +10,7 @@ wsrep_node_address=[::1]
|
|||||||
wsrep_provider_options='base_port=@mysqld.1.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.1.#galera_port;ist.recv_addr=[::1]'
|
wsrep_provider_options='base_port=@mysqld.1.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.1.#galera_port;ist.recv_addr=[::1]'
|
||||||
wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port'
|
wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port'
|
||||||
wsrep_node_incoming_address='[::1]:@mysqld.1.port'
|
wsrep_node_incoming_address='[::1]:@mysqld.1.port'
|
||||||
|
bind-address=::
|
||||||
|
|
||||||
[mysqld.2]
|
[mysqld.2]
|
||||||
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
||||||
@ -17,6 +18,7 @@ wsrep_node_address=[::1]
|
|||||||
wsrep_provider_options='base_port=@mysqld.2.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.2.#galera_port;ist.recv_addr=[::1]'
|
wsrep_provider_options='base_port=@mysqld.2.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.2.#galera_port;ist.recv_addr=[::1]'
|
||||||
wsrep_sst_receive_address='[::1]:@mysqld.2.#sst_port'
|
wsrep_sst_receive_address='[::1]:@mysqld.2.#sst_port'
|
||||||
wsrep_node_incoming_address='[::1]:@mysqld.2.port'
|
wsrep_node_incoming_address='[::1]:@mysqld.2.port'
|
||||||
|
bind-address=::
|
||||||
|
|
||||||
[mysqld.3]
|
[mysqld.3]
|
||||||
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
||||||
@ -24,3 +26,4 @@ wsrep_node_address=[::1]
|
|||||||
wsrep_provider_options='base_port=@mysqld.3.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.3.#galera_port;ist.recv_addr=[::1]'
|
wsrep_provider_options='base_port=@mysqld.3.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.3.#galera_port;ist.recv_addr=[::1]'
|
||||||
wsrep_sst_receive_address='[::1]:@mysqld.3.#sst_port'
|
wsrep_sst_receive_address='[::1]:@mysqld.3.#sst_port'
|
||||||
wsrep_node_incoming_address='[::1]:@mysqld.3.port'
|
wsrep_node_incoming_address='[::1]:@mysqld.3.port'
|
||||||
|
bind-address=::
|
||||||
|
@ -1 +0,0 @@
|
|||||||
--bind-address=::
|
|
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
--source include/galera_cluster.inc
|
--source include/galera_cluster.inc
|
||||||
--source include/check_ipv6.inc
|
--source include/check_ipv6.inc
|
||||||
|
--source include/force_restart.inc
|
||||||
|
|
||||||
# Confirm that initial handshake happened over ipv6
|
# Confirm that initial handshake happened over ipv6
|
||||||
|
|
||||||
@ -21,7 +22,7 @@ SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
|
|||||||
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
--source include/wait_condition.inc
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
CREATE TABLE t1 (f1 INTEGER NOT NULL PRIMARY KEY) ENGINE=InnoDB;
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
|
|
||||||
--connection node_2
|
--connection node_2
|
||||||
@ -33,6 +34,6 @@ SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
|
|||||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
|
--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
|
||||||
--source include/wait_condition.inc
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
SELECT COUNT(*) = 1 FROM t1;
|
SELECT COUNT(*) AS EXPECT_1 FROM t1;
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -10,18 +10,21 @@ wsrep-cluster-address=gcomm://
|
|||||||
wsrep_provider_options='base_host=[::1];base_port=@mysqld.1.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.1.#galera_port;ist.recv_addr=[::1]:@mysqld.1.#ist_port'
|
wsrep_provider_options='base_host=[::1];base_port=@mysqld.1.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.1.#galera_port;ist.recv_addr=[::1]:@mysqld.1.#ist_port'
|
||||||
wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port'
|
wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port'
|
||||||
wsrep_node_incoming_address='[::1]:@mysqld.1.port'
|
wsrep_node_incoming_address='[::1]:@mysqld.1.port'
|
||||||
|
bind-address=::
|
||||||
|
|
||||||
[mysqld.2]
|
[mysqld.2]
|
||||||
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
||||||
wsrep_provider_options='base_host=[::1];base_port=@mysqld.2.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.2.#galera_port;ist.recv_addr=[::1]:@mysqld.2.#ist_port'
|
wsrep_provider_options='base_host=[::1];base_port=@mysqld.2.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.2.#galera_port;ist.recv_addr=[::1]:@mysqld.2.#ist_port'
|
||||||
wsrep_sst_receive_address='[::1]:@mysqld.2.#sst_port'
|
wsrep_sst_receive_address='[::1]:@mysqld.2.#sst_port'
|
||||||
wsrep_node_incoming_address='[::1]:@mysqld.2.port'
|
wsrep_node_incoming_address='[::1]:@mysqld.2.port'
|
||||||
|
bind-address=::
|
||||||
|
|
||||||
[mysqld.3]
|
[mysqld.3]
|
||||||
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
||||||
wsrep_provider_options='base_host=[::1];base_port=@mysqld.3.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.3.#galera_port;ist.recv_addr=[::1]:@mysqld.3.#ist_port'
|
wsrep_provider_options='base_host=[::1];base_port=@mysqld.3.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.3.#galera_port;ist.recv_addr=[::1]:@mysqld.3.#ist_port'
|
||||||
wsrep_sst_receive_address='[::1]:@mysqld.3.#sst_port'
|
wsrep_sst_receive_address='[::1]:@mysqld.3.#sst_port'
|
||||||
wsrep_node_incoming_address='[::1]:@mysqld.3.port'
|
wsrep_node_incoming_address='[::1]:@mysqld.3.port'
|
||||||
|
bind-address=::
|
||||||
|
|
||||||
[SST]
|
[SST]
|
||||||
transferfmt=@ENV.MTR_GALERA_TFMT
|
transferfmt=@ENV.MTR_GALERA_TFMT
|
||||||
|
@ -1 +0,0 @@
|
|||||||
--bind-address=::
|
|
@ -18,7 +18,7 @@ SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
|
|||||||
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
--source include/wait_condition.inc
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
CREATE TABLE t1 (f1 INTEGER NOT NULL PRIMARY KEY) ENGINE=InnoDB;
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
|
|
||||||
--connection node_2
|
--connection node_2
|
||||||
@ -30,7 +30,7 @@ SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
|
|||||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
|
--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
|
||||||
--source include/wait_condition.inc
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
SELECT COUNT(*) = 1 FROM t1;
|
SELECT COUNT(*) AS EXPECT_1 FROM t1;
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
@ -56,6 +56,8 @@ DROP TABLE t1;
|
|||||||
--let $assert_select = IST receiver addr using tcp://\[::1\]
|
--let $assert_select = IST receiver addr using tcp://\[::1\]
|
||||||
--source include/assert_grep.inc
|
--source include/assert_grep.inc
|
||||||
|
|
||||||
--let $assert_text = Prepared IST receiver, listening at: tcp://\[::1\]
|
# The receiver expects IST
|
||||||
--let $assert_select = Prepared IST receiver, listening at: tcp://\[::1\]
|
--let $assert_count = 1
|
||||||
|
--let $assert_text = , listening at: tcp://\[::1\]
|
||||||
|
--let $assert_select = , listening at: tcp://\[::1\]
|
||||||
--source include/assert_grep.inc
|
--source include/assert_grep.inc
|
||||||
|
@ -3,35 +3,37 @@
|
|||||||
# decoy value - should not be read by mysqld or sst scripts
|
# decoy value - should not be read by mysqld or sst scripts
|
||||||
[mysqld]
|
[mysqld]
|
||||||
innodb-data-home-dir=/tmp
|
innodb-data-home-dir=/tmp
|
||||||
|
bind-address=::
|
||||||
[galera]
|
|
||||||
innodb-data-home-dir=
|
innodb-data-home-dir=
|
||||||
wsrep_sst_method=mariabackup
|
wsrep_sst_method=mariabackup
|
||||||
wsrep_sst_auth="root:"
|
wsrep_sst_auth="root:"
|
||||||
wsrep_node_address=::1
|
wsrep_node_address=::1
|
||||||
|
|
||||||
[galera.1]
|
[mysqld.1]
|
||||||
wsrep-cluster-address=gcomm://
|
wsrep-cluster-address=gcomm://
|
||||||
wsrep_provider_options='base_host=[::1];base_port=@mysqld.1.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.1.#galera_port;ist.recv_addr=[::1]:@mysqld.1.#ist_port'
|
wsrep_provider_options='base_host=[::1];base_port=@mysqld.1.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.1.#galera_port;ist.recv_addr=[::1]:@mysqld.1.#ist_port'
|
||||||
wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port'
|
wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port'
|
||||||
wsrep_node_incoming_address='[::1]:@mysqld.1.port'
|
wsrep_node_incoming_address='[::1]:@mysqld.1.port'
|
||||||
wsrep_node_name=node_1
|
wsrep_node_name=node_1
|
||||||
|
bind-address=::
|
||||||
|
|
||||||
[galera.2]
|
[mysqld.2]
|
||||||
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
||||||
wsrep_provider_options='base_host=[::1];base_port=@mysqld.2.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.2.#galera_port;ist.recv_addr=[::1]:@mysqld.2.#ist_port'
|
wsrep_provider_options='base_host=[::1];base_port=@mysqld.2.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.2.#galera_port;ist.recv_addr=[::1]:@mysqld.2.#ist_port'
|
||||||
wsrep_sst_receive_address='[::1]:@mysqld.2.#sst_port'
|
wsrep_sst_receive_address='[::1]:@mysqld.2.#sst_port'
|
||||||
wsrep_node_incoming_address='[::1]:@mysqld.2.port'
|
wsrep_node_incoming_address='[::1]:@mysqld.2.port'
|
||||||
wsrep_node_name=node_2
|
wsrep_node_name=node_2
|
||||||
wsrep_sst_donor=node_1
|
wsrep_sst_donor=node_1
|
||||||
|
bind-address=::
|
||||||
|
|
||||||
[galera.3]
|
[mysqld.3]
|
||||||
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
||||||
wsrep_provider_options='base_host=[::1];base_port=@mysqld.3.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.3.#galera_port;ist.recv_addr=[::1]:@mysqld.3.#ist_port'
|
wsrep_provider_options='base_host=[::1];base_port=@mysqld.3.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.3.#galera_port;ist.recv_addr=[::1]:@mysqld.3.#ist_port'
|
||||||
wsrep_sst_receive_address='[::1]:@mysqld.3.#sst_port'
|
wsrep_sst_receive_address='[::1]:@mysqld.3.#sst_port'
|
||||||
wsrep_node_incoming_address='[::1]:@mysqld.3.port'
|
wsrep_node_incoming_address='[::1]:@mysqld.3.port'
|
||||||
wsrep_node_name=node_3
|
wsrep_node_name=node_3
|
||||||
wsrep_sst_donor=node_1
|
wsrep_sst_donor=node_1
|
||||||
|
bind-address=::
|
||||||
|
|
||||||
[SST]
|
[SST]
|
||||||
transferfmt=@ENV.MTR_GALERA_TFMT
|
transferfmt=@ENV.MTR_GALERA_TFMT
|
||||||
|
@ -1 +0,0 @@
|
|||||||
--bind-address=::
|
|
@ -18,7 +18,7 @@ SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
|
|||||||
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
--source include/wait_condition.inc
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
CREATE TABLE t1 (f1 INTEGER NOT NULL PRIMARY KEY) ENGINE=InnoDB;
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
|
|
||||||
--connection node_2
|
--connection node_2
|
||||||
@ -30,7 +30,7 @@ SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
|
|||||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
|
--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
|
||||||
--source include/wait_condition.inc
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
SELECT COUNT(*) = 1 FROM t1;
|
SELECT COUNT(*) AS EXPECT_1 FROM t1;
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
@ -64,8 +64,8 @@ DROP TABLE t1;
|
|||||||
--let $assert_select = IST receiver addr using tcp://\[::1\]
|
--let $assert_select = IST receiver addr using tcp://\[::1\]
|
||||||
--source include/assert_grep.inc
|
--source include/assert_grep.inc
|
||||||
|
|
||||||
# There will be only one Prepared IST and in Galera 3 segnos are not printed
|
# The receiver expects IST
|
||||||
--let $assert_count= 1
|
--let $assert_count = 1
|
||||||
--let $assert_text = Prepared IST receiver, listening at: tcp://\[::1\]
|
--let $assert_text = , listening at: tcp://\[::1\]
|
||||||
--let $assert_select = Prepared IST receiver, listening at: tcp://\[::1\]
|
--let $assert_select = , listening at: tcp://\[::1\]
|
||||||
--source include/assert_grep.inc
|
--source include/assert_grep.inc
|
||||||
|
@ -9,18 +9,21 @@ wsrep-cluster-address=gcomm://
|
|||||||
wsrep_provider_options='base_host=[::1];base_port=@mysqld.1.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.1.#galera_port;ist.recv_addr=[::1]:@mysqld.1.#ist_port'
|
wsrep_provider_options='base_host=[::1];base_port=@mysqld.1.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.1.#galera_port;ist.recv_addr=[::1]:@mysqld.1.#ist_port'
|
||||||
wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port'
|
wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port'
|
||||||
wsrep_node_incoming_address='[::1]:@mysqld.1.port'
|
wsrep_node_incoming_address='[::1]:@mysqld.1.port'
|
||||||
|
bind-address=::
|
||||||
|
|
||||||
[mysqld.2]
|
[mysqld.2]
|
||||||
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
||||||
wsrep_provider_options='base_host=[::1];base_port=@mysqld.2.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.2.#galera_port;ist.recv_addr=[::1]:@mysqld.2.#ist_port'
|
wsrep_provider_options='base_host=[::1];base_port=@mysqld.2.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.2.#galera_port;ist.recv_addr=[::1]:@mysqld.2.#ist_port'
|
||||||
wsrep_sst_receive_address='[::1]:@mysqld.2.#sst_port'
|
wsrep_sst_receive_address='[::1]:@mysqld.2.#sst_port'
|
||||||
wsrep_node_incoming_address='[::1]:@mysqld.2.port'
|
wsrep_node_incoming_address='[::1]:@mysqld.2.port'
|
||||||
|
bind-address=::
|
||||||
|
|
||||||
[mysqld.3]
|
[mysqld.3]
|
||||||
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
||||||
wsrep_provider_options='base_host=[::1];base_port=@mysqld.3.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.3.#galera_port;ist.recv_addr=[::1]:@mysqld.3.#ist_port'
|
wsrep_provider_options='base_host=[::1];base_port=@mysqld.3.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.3.#galera_port;ist.recv_addr=[::1]:@mysqld.3.#ist_port'
|
||||||
wsrep_sst_receive_address='[::1]:@mysqld.3.#sst_port'
|
wsrep_sst_receive_address='[::1]:@mysqld.3.#sst_port'
|
||||||
wsrep_node_incoming_address='[::1]:@mysqld.3.port'
|
wsrep_node_incoming_address='[::1]:@mysqld.3.port'
|
||||||
|
bind-address=::
|
||||||
|
|
||||||
[SST]
|
[SST]
|
||||||
sockopt=",pf=ip6"
|
sockopt=",pf=ip6"
|
||||||
|
@ -1 +0,0 @@
|
|||||||
--bind-address=::
|
|
@ -54,7 +54,7 @@ SET GLOBAL wsrep_sst_method = 'mysqldump';
|
|||||||
--remove_files_wildcard $MYSQLTEST_VARDIR/mysqld.2/data/mysql
|
--remove_files_wildcard $MYSQLTEST_VARDIR/mysqld.2/data/mysql
|
||||||
--remove_files_wildcard $MYSQLTEST_VARDIR/mysqld.2/data
|
--remove_files_wildcard $MYSQLTEST_VARDIR/mysqld.2/data
|
||||||
|
|
||||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
CREATE TABLE t1 (f1 INTEGER NOT NULL PRIMARY KEY) ENGINE=InnoDB;
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
|
|
||||||
--connection node_2
|
--connection node_2
|
||||||
@ -70,7 +70,7 @@ INSERT INTO t1 VALUES (1);
|
|||||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
|
--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
|
||||||
--source include/wait_condition.inc
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
SELECT COUNT(*) = 1 FROM t1;
|
SELECT COUNT(*) AS EXPECT_1 FROM t1;
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
@ -9,18 +9,21 @@ wsrep-cluster-address=gcomm://
|
|||||||
wsrep_provider_options='base_host=[::1];base_port=@mysqld.1.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.1.#galera_port;ist.recv_addr=[::1]:@mysqld.1.#ist_port'
|
wsrep_provider_options='base_host=[::1];base_port=@mysqld.1.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.1.#galera_port;ist.recv_addr=[::1]:@mysqld.1.#ist_port'
|
||||||
wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port'
|
wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port'
|
||||||
wsrep_node_incoming_address='[::1]:@mysqld.1.port'
|
wsrep_node_incoming_address='[::1]:@mysqld.1.port'
|
||||||
|
bind-address=::
|
||||||
|
|
||||||
[mysqld.2]
|
[mysqld.2]
|
||||||
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
||||||
wsrep_provider_options='base_host=[::1];base_port=@mysqld.2.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.2.#galera_port;ist.recv_addr=[::1]:@mysqld.2.#ist_port'
|
wsrep_provider_options='base_host=[::1];base_port=@mysqld.2.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.2.#galera_port;ist.recv_addr=[::1]:@mysqld.2.#ist_port'
|
||||||
wsrep_sst_receive_address='[::1]:@mysqld.2.#sst_port'
|
wsrep_sst_receive_address='[::1]:@mysqld.2.#sst_port'
|
||||||
wsrep_node_incoming_address='[::1]:@mysqld.2.port'
|
wsrep_node_incoming_address='[::1]:@mysqld.2.port'
|
||||||
|
bind-address=::
|
||||||
|
|
||||||
[mysqld.3]
|
[mysqld.3]
|
||||||
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
||||||
wsrep_provider_options='base_host=[::1];base_port=@mysqld.3.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.3.#galera_port;ist.recv_addr=[::1]:@mysqld.3.#ist_port'
|
wsrep_provider_options='base_host=[::1];base_port=@mysqld.3.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.3.#galera_port;ist.recv_addr=[::1]:@mysqld.3.#ist_port'
|
||||||
wsrep_sst_receive_address='[::1]:@mysqld.3.#sst_port'
|
wsrep_sst_receive_address='[::1]:@mysqld.3.#sst_port'
|
||||||
wsrep_node_incoming_address='[::1]:@mysqld.3.port'
|
wsrep_node_incoming_address='[::1]:@mysqld.3.port'
|
||||||
|
bind-address=::
|
||||||
|
|
||||||
[SST]
|
[SST]
|
||||||
sockopt=",pf=ip6"
|
sockopt=",pf=ip6"
|
||||||
|
@ -1 +0,0 @@
|
|||||||
--bind-address=::
|
|
@ -16,7 +16,7 @@ SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
|
|||||||
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
--source include/wait_condition.inc
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
CREATE TABLE t1 (f1 INTEGER NOT NULL PRIMARY KEY) ENGINE=InnoDB;
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
|
|
||||||
--connection node_2
|
--connection node_2
|
||||||
@ -28,6 +28,6 @@ SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
|
|||||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
|
--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
|
||||||
--source include/wait_condition.inc
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
SELECT COUNT(*) = 1 FROM t1;
|
SELECT COUNT(*) AS EXPECT_1 FROM t1;
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -4,28 +4,31 @@
|
|||||||
[mysqld]
|
[mysqld]
|
||||||
innodb-data-home-dir=/tmp
|
innodb-data-home-dir=/tmp
|
||||||
|
|
||||||
[mariadb]
|
[mysqld]
|
||||||
innodb-data-home-dir=
|
innodb-data-home-dir=
|
||||||
wsrep_sst_method=rsync
|
wsrep_sst_method=rsync
|
||||||
wsrep_node_address=::1
|
wsrep_node_address=::1
|
||||||
|
|
||||||
[mariadb.1]
|
[mysqld.1]
|
||||||
wsrep-cluster-address=gcomm://
|
wsrep-cluster-address=gcomm://
|
||||||
wsrep_provider_options='base_host=[::1];base_port=@mysqld.1.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.1.#galera_port;ist.recv_addr=[::1]:@mysqld.1.#ist_port'
|
wsrep_provider_options='base_host=[::1];base_port=@mysqld.1.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.1.#galera_port;ist.recv_addr=[::1]:@mysqld.1.#ist_port'
|
||||||
wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port'
|
wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port'
|
||||||
wsrep_node_incoming_address='[::1]:@mysqld.1.port'
|
wsrep_node_incoming_address='[::1]:@mysqld.1.port'
|
||||||
|
bind-address=::
|
||||||
|
|
||||||
[mariadb.2]
|
[mysqld.2]
|
||||||
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
||||||
wsrep_provider_options='base_host=[::1];base_port=@mysqld.2.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.2.#galera_port;ist.recv_addr=[::1]:@mysqld.2.#ist_port'
|
wsrep_provider_options='base_host=[::1];base_port=@mysqld.2.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.2.#galera_port;ist.recv_addr=[::1]:@mysqld.2.#ist_port'
|
||||||
wsrep_sst_receive_address='[::1]:@mysqld.2.#sst_port'
|
wsrep_sst_receive_address='[::1]:@mysqld.2.#sst_port'
|
||||||
wsrep_node_incoming_address='[::1]:@mysqld.2.port'
|
wsrep_node_incoming_address='[::1]:@mysqld.2.port'
|
||||||
|
bind-address=::
|
||||||
|
|
||||||
[mariadb.3]
|
[mysqld.3]
|
||||||
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port'
|
||||||
wsrep_provider_options='base_host=[::1];base_port=@mysqld.3.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.3.#galera_port;ist.recv_addr=[::1]:@mysqld.3.#ist_port'
|
wsrep_provider_options='base_host=[::1];base_port=@mysqld.3.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.3.#galera_port;ist.recv_addr=[::1]:@mysqld.3.#ist_port'
|
||||||
wsrep_sst_receive_address='[::1]:@mysqld.3.#sst_port'
|
wsrep_sst_receive_address='[::1]:@mysqld.3.#sst_port'
|
||||||
wsrep_node_incoming_address='[::1]:@mysqld.3.port'
|
wsrep_node_incoming_address='[::1]:@mysqld.3.port'
|
||||||
|
bind-address=::
|
||||||
|
|
||||||
[SST]
|
[SST]
|
||||||
sockopt=",pf=ip6"
|
sockopt=",pf=ip6"
|
||||||
|
@ -1 +0,0 @@
|
|||||||
--bind-address=::
|
|
@ -16,7 +16,7 @@ SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
|
|||||||
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
--source include/wait_condition.inc
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
CREATE TABLE t1 (f1 INTEGER NOT NULL PRIMARY KEY) ENGINE=InnoDB;
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
|
|
||||||
--connection node_2
|
--connection node_2
|
||||||
@ -28,6 +28,6 @@ SET GLOBAL wsrep_provider_options='gmcast.isolate=0';
|
|||||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
|
--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready';
|
||||||
--source include/wait_condition.inc
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
SELECT COUNT(*) = 1 FROM t1;
|
SELECT COUNT(*) AS EXPECT_1 FROM t1;
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
!include ../galera_3nodes.cnf
|
||||||
|
|
||||||
|
[mysqld.1]
|
||||||
|
wsrep_debug=1
|
||||||
|
|
||||||
|
[mysqld.2]
|
||||||
|
wsrep_debug=1
|
||||||
|
|
||||||
|
[mysqld.3]
|
||||||
|
wsrep_debug=1
|
@ -2,6 +2,7 @@
|
|||||||
# Test the safe_to_bootstrap in grastate.dat
|
# Test the safe_to_bootstrap in grastate.dat
|
||||||
#
|
#
|
||||||
--source include/galera_cluster.inc
|
--source include/galera_cluster.inc
|
||||||
|
--source include/force_restart.inc
|
||||||
|
|
||||||
--let $galera_connection_name = node_3
|
--let $galera_connection_name = node_3
|
||||||
--let $galera_server_number = 3
|
--let $galera_server_number = 3
|
||||||
@ -14,7 +15,11 @@
|
|||||||
--source ../galera/include/auto_increment_offset_save.inc
|
--source ../galera/include/auto_increment_offset_save.inc
|
||||||
|
|
||||||
--connection node_1
|
--connection node_1
|
||||||
CREATE TABLE t1 (f1 INTEGER) ENGINE=InnoDB;
|
CREATE TABLE t1 (f1 INTEGER NOT NULL PRIMARY KEY) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
|
||||||
|
--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
#
|
#
|
||||||
# At start, all grastate.dat files have safe_to_boostrap: 0
|
# At start, all grastate.dat files have safe_to_boostrap: 0
|
||||||
@ -151,10 +156,18 @@ SET SESSION wsrep_on = OFF;
|
|||||||
--source include/start_mysqld.inc
|
--source include/start_mysqld.inc
|
||||||
--source include/wait_until_connected_again.inc
|
--source include/wait_until_connected_again.inc
|
||||||
|
|
||||||
|
--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
|
|
||||||
--connection node_2
|
--connection node_2
|
||||||
--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||||
--source include/start_mysqld.inc
|
--source include/start_mysqld.inc
|
||||||
|
|
||||||
|
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size';
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
|
|
||||||
--connection node_3
|
--connection node_3
|
||||||
--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.3.expect
|
--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.3.expect
|
||||||
--source include/start_mysqld.inc
|
--source include/start_mysqld.inc
|
||||||
|
@ -16,10 +16,13 @@
|
|||||||
--source ../galera/include/auto_increment_offset_save.inc
|
--source ../galera/include/auto_increment_offset_save.inc
|
||||||
|
|
||||||
--connection node_1
|
--connection node_1
|
||||||
CREATE TABLE t1 (f1 INTEGER);
|
CREATE TABLE t1 (f1 INTEGER) ENGINE=INNODB;
|
||||||
INSERT INTO t1 VALUES (1);
|
INSERT INTO t1 VALUES (1);
|
||||||
|
|
||||||
--connection node_2
|
--connection node_2
|
||||||
|
--let $wait_condition = SELECT COUNT(*) = 1 FROM t1;
|
||||||
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
|
SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
|
||||||
|
|
||||||
--connection node_1
|
--connection node_1
|
||||||
@ -28,15 +31,11 @@ SET GLOBAL wsrep_provider_options='gmcast.isolate=1';
|
|||||||
|
|
||||||
--connection node_2
|
--connection node_2
|
||||||
SET SESSION wsrep_sync_wait = 0;
|
SET SESSION wsrep_sync_wait = 0;
|
||||||
|
|
||||||
--let $wait_condition = SELECT VARIABLE_VALUE = 'non-Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = '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
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
SET SESSION wsrep_dirty_reads = 1;
|
SET SESSION wsrep_dirty_reads = 1;
|
||||||
|
|
||||||
--let $wait_condition = SELECT COUNT(*) = 1 FROM t1;
|
|
||||||
--source include/wait_condition.inc
|
|
||||||
|
|
||||||
# Those statements should succeed
|
# Those statements should succeed
|
||||||
|
|
||||||
--error 0
|
--error 0
|
||||||
|
@ -740,3 +740,32 @@ t1 CREATE TABLE `t1` (
|
|||||||
KEY `v4` (`v4`)
|
KEY `v4` (`v4`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV-20396 Server crashes after DELETE with SEL NULL Foreign key and a
|
||||||
|
# virtual column in index
|
||||||
|
#
|
||||||
|
CREATE TABLE parent
|
||||||
|
(
|
||||||
|
ID int unsigned NOT NULL,
|
||||||
|
PRIMARY KEY (ID)
|
||||||
|
);
|
||||||
|
CREATE TABLE child
|
||||||
|
(
|
||||||
|
ID int unsigned NOT NULL,
|
||||||
|
ParentID int unsigned NULL,
|
||||||
|
Value int unsigned NOT NULL DEFAULT 0,
|
||||||
|
Flag int unsigned AS (Value) VIRTUAL,
|
||||||
|
PRIMARY KEY (ID),
|
||||||
|
KEY (ParentID, Flag),
|
||||||
|
FOREIGN KEY (ParentID) REFERENCES parent (ID) ON DELETE SET NULL
|
||||||
|
ON UPDATE CASCADE
|
||||||
|
);
|
||||||
|
INSERT INTO parent (ID) VALUES (100);
|
||||||
|
INSERT INTO child (ID,ParentID,Value) VALUES (123123,100,1);
|
||||||
|
DELETE FROM parent WHERE ID=100;
|
||||||
|
select * from child;
|
||||||
|
ID ParentID Value Flag
|
||||||
|
123123 NULL 1 1
|
||||||
|
INSERT INTO parent (ID) VALUES (100);
|
||||||
|
UPDATE child SET ParentID=100 WHERE ID=123123;
|
||||||
|
DROP TABLE child, parent;
|
||||||
|
@ -605,3 +605,35 @@ ALTER TABLE t1 ADD CONSTRAINT fk FOREIGN KEY (v4) REFERENCES nosuch(col);
|
|||||||
SHOW CREATE TABLE t1;
|
SHOW CREATE TABLE t1;
|
||||||
# Cleanup
|
# Cleanup
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-20396 Server crashes after DELETE with SEL NULL Foreign key and a
|
||||||
|
--echo # virtual column in index
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE parent
|
||||||
|
(
|
||||||
|
ID int unsigned NOT NULL,
|
||||||
|
PRIMARY KEY (ID)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE child
|
||||||
|
(
|
||||||
|
ID int unsigned NOT NULL,
|
||||||
|
ParentID int unsigned NULL,
|
||||||
|
Value int unsigned NOT NULL DEFAULT 0,
|
||||||
|
Flag int unsigned AS (Value) VIRTUAL,
|
||||||
|
PRIMARY KEY (ID),
|
||||||
|
KEY (ParentID, Flag),
|
||||||
|
FOREIGN KEY (ParentID) REFERENCES parent (ID) ON DELETE SET NULL
|
||||||
|
ON UPDATE CASCADE
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO parent (ID) VALUES (100);
|
||||||
|
INSERT INTO child (ID,ParentID,Value) VALUES (123123,100,1);
|
||||||
|
DELETE FROM parent WHERE ID=100;
|
||||||
|
select * from child;
|
||||||
|
INSERT INTO parent (ID) VALUES (100);
|
||||||
|
UPDATE child SET ParentID=100 WHERE ID=123123;
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
DROP TABLE child, parent;
|
||||||
|
@ -5,8 +5,7 @@ SET GLOBAL innodb_file_per_table=1;
|
|||||||
#
|
#
|
||||||
SET GLOBAL innodb_file_per_table=ON;
|
SET GLOBAL innodb_file_per_table=ON;
|
||||||
create table t1 (a int not null, d varchar(15) not null, b
|
create table t1 (a int not null, d varchar(15) not null, b
|
||||||
varchar(198) not null, c char(156),
|
varchar(198) not null, c char(156)) engine=InnoDB
|
||||||
fulltext ftsic(c)) engine=InnoDB
|
|
||||||
row_format=redundant;
|
row_format=redundant;
|
||||||
insert into t1 values(123, 'abcdef', 'jghikl', 'mnop');
|
insert into t1 values(123, 'abcdef', 'jghikl', 'mnop');
|
||||||
insert into t1 values(456, 'abcdef', 'jghikl', 'mnop');
|
insert into t1 values(456, 'abcdef', 'jghikl', 'mnop');
|
||||||
@ -72,7 +71,7 @@ DROP TABLE t1;
|
|||||||
Warnings:
|
Warnings:
|
||||||
Warning 1932 Table 'test.t1' doesn't exist in engine
|
Warning 1932 Table 'test.t1' doesn't exist in engine
|
||||||
DROP TABLE t2,t3;
|
DROP TABLE t2,t3;
|
||||||
FOUND 50 /\[ERROR\] InnoDB: Table `test`\.`t1` in InnoDB data dictionary contains invalid flags\. SYS_TABLES\.TYPE=1 SYS_TABLES\.MIX_LEN=511\b/ in mysqld.1.err
|
FOUND 6 /\[ERROR\] InnoDB: Table `test`\.`t1` in InnoDB data dictionary contains invalid flags\. SYS_TABLES\.TYPE=1 SYS_TABLES\.MIX_LEN=511\b/ in mysqld.1.err
|
||||||
ib_buffer_pool
|
ib_buffer_pool
|
||||||
ib_logfile0
|
ib_logfile0
|
||||||
ib_logfile1
|
ib_logfile1
|
||||||
|
@ -32,8 +32,7 @@ SET GLOBAL innodb_file_per_table=1;
|
|||||||
|
|
||||||
SET GLOBAL innodb_file_per_table=ON;
|
SET GLOBAL innodb_file_per_table=ON;
|
||||||
create table t1 (a int not null, d varchar(15) not null, b
|
create table t1 (a int not null, d varchar(15) not null, b
|
||||||
varchar(198) not null, c char(156),
|
varchar(198) not null, c char(156)) engine=InnoDB
|
||||||
fulltext ftsic(c)) engine=InnoDB
|
|
||||||
row_format=redundant;
|
row_format=redundant;
|
||||||
|
|
||||||
insert into t1 values(123, 'abcdef', 'jghikl', 'mnop');
|
insert into t1 values(123, 'abcdef', 'jghikl', 'mnop');
|
||||||
|
37
mysql-test/suite/mariabackup/rpl_slave_info.result
Normal file
37
mysql-test/suite/mariabackup/rpl_slave_info.result
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
include/master-slave.inc
|
||||||
|
[connection master]
|
||||||
|
connection slave;
|
||||||
|
###############
|
||||||
|
# If Using_Gtid != 'No', backup gtid_slave_pos
|
||||||
|
########################
|
||||||
|
include/stop_slave.inc
|
||||||
|
change master to master_use_gtid=slave_pos;
|
||||||
|
include/start_slave.inc
|
||||||
|
connection master;
|
||||||
|
CREATE TABLE t(i INT);
|
||||||
|
connection slave;
|
||||||
|
"using_gtid: Slave_Pos"
|
||||||
|
FOUND 1 /gtid_slave_pos/ in xtrabackup_slave_info
|
||||||
|
NOT FOUND /MASTER_LOG_FILE/ in xtrabackup_slave_info
|
||||||
|
###############
|
||||||
|
# If Using_Gtid != 'No' and !gtid_slave_pos, backup master position
|
||||||
|
########################
|
||||||
|
include/stop_slave.inc
|
||||||
|
SET GLOBAL gtid_slave_pos="";
|
||||||
|
NOT FOUND /gtid_slave_pos/ in xtrabackup_slave_info
|
||||||
|
FOUND 1 /MASTER_LOG_FILE/ in xtrabackup_slave_info
|
||||||
|
###############
|
||||||
|
# If Using_Gtid == 'No', backup Exec_Master_Log_Pos
|
||||||
|
########################
|
||||||
|
change master to master_use_gtid=no;
|
||||||
|
include/start_slave.inc
|
||||||
|
connection master;
|
||||||
|
INSERT INTO t VALUES(1);
|
||||||
|
connection slave;
|
||||||
|
"using_gtid: No"
|
||||||
|
NOT FOUND /gtid_slave_pos/ in xtrabackup_slave_info
|
||||||
|
FOUND 1 /MASTER_LOG_FILE/ in xtrabackup_slave_info
|
||||||
|
connection master;
|
||||||
|
DROP TABLE t;
|
||||||
|
connection slave;
|
||||||
|
include/rpl_end.inc
|
84
mysql-test/suite/mariabackup/rpl_slave_info.test
Normal file
84
mysql-test/suite/mariabackup/rpl_slave_info.test
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
--source include/master-slave.inc
|
||||||
|
|
||||||
|
--connection slave
|
||||||
|
|
||||||
|
--echo ###############
|
||||||
|
--echo # If Using_Gtid != 'No', backup gtid_slave_pos
|
||||||
|
--echo ########################
|
||||||
|
|
||||||
|
--source include/stop_slave.inc
|
||||||
|
change master to master_use_gtid=slave_pos;
|
||||||
|
--source include/start_slave.inc
|
||||||
|
|
||||||
|
--connection master
|
||||||
|
CREATE TABLE t(i INT);
|
||||||
|
--sync_slave_with_master
|
||||||
|
|
||||||
|
--let $using_gtid=query_get_value(SHOW SLAVE STATUS,Using_Gtid,1)
|
||||||
|
--echo "using_gtid: $using_gtid"
|
||||||
|
|
||||||
|
--let $targetdir=$MYSQLTEST_VARDIR/tmp/backup
|
||||||
|
--disable_result_log
|
||||||
|
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --defaults-group-suffix=.2 --slave-info --backup --target-dir=$targetdir;
|
||||||
|
--enable_result_log
|
||||||
|
|
||||||
|
--let SEARCH_FILE=$targetdir/xtrabackup_slave_info
|
||||||
|
--let SEARCH_PATTERN=gtid_slave_pos
|
||||||
|
--source include/search_pattern_in_file.inc
|
||||||
|
--let SEARCH_PATTERN=MASTER_LOG_FILE
|
||||||
|
--source include/search_pattern_in_file.inc
|
||||||
|
|
||||||
|
rmdir $targetdir;
|
||||||
|
|
||||||
|
--echo ###############
|
||||||
|
--echo # If Using_Gtid != 'No' and !gtid_slave_pos, backup master position
|
||||||
|
--echo ########################
|
||||||
|
|
||||||
|
--source include/stop_slave.inc
|
||||||
|
SET GLOBAL gtid_slave_pos="";
|
||||||
|
|
||||||
|
--let $targetdir=$MYSQLTEST_VARDIR/tmp/backup
|
||||||
|
--disable_result_log
|
||||||
|
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --defaults-group-suffix=.2 --slave-info --backup --target-dir=$targetdir;
|
||||||
|
--enable_result_log
|
||||||
|
|
||||||
|
--let SEARCH_FILE=$targetdir/xtrabackup_slave_info
|
||||||
|
--let SEARCH_PATTERN=gtid_slave_pos
|
||||||
|
--source include/search_pattern_in_file.inc
|
||||||
|
--let SEARCH_PATTERN=MASTER_LOG_FILE
|
||||||
|
--source include/search_pattern_in_file.inc
|
||||||
|
|
||||||
|
rmdir $targetdir;
|
||||||
|
|
||||||
|
--echo ###############
|
||||||
|
--echo # If Using_Gtid == 'No', backup Exec_Master_Log_Pos
|
||||||
|
--echo ########################
|
||||||
|
|
||||||
|
change master to master_use_gtid=no;
|
||||||
|
--source include/start_slave.inc
|
||||||
|
|
||||||
|
--connection master
|
||||||
|
INSERT INTO t VALUES(1);
|
||||||
|
--sync_slave_with_master
|
||||||
|
|
||||||
|
--let $using_gtid=query_get_value(SHOW SLAVE STATUS,Using_Gtid,1)
|
||||||
|
--echo "using_gtid: $using_gtid"
|
||||||
|
|
||||||
|
--let $targetdir=$MYSQLTEST_VARDIR/tmp/backup
|
||||||
|
--disable_result_log
|
||||||
|
exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --defaults-group-suffix=.2 --slave-info --backup --target-dir=$targetdir;
|
||||||
|
--enable_result_log
|
||||||
|
|
||||||
|
--let SEARCH_FILE=$targetdir/xtrabackup_slave_info
|
||||||
|
--let SEARCH_PATTERN=gtid_slave_pos
|
||||||
|
--source include/search_pattern_in_file.inc
|
||||||
|
--let SEARCH_PATTERN=MASTER_LOG_FILE
|
||||||
|
--source include/search_pattern_in_file.inc
|
||||||
|
|
||||||
|
rmdir $targetdir;
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
--connection master
|
||||||
|
DROP TABLE t;
|
||||||
|
--sync_slave_with_master
|
||||||
|
--source include/rpl_end.inc
|
@ -186,7 +186,8 @@ static struct wsrep_service_st wsrep_handler = {
|
|||||||
wsrep_trx_order_before,
|
wsrep_trx_order_before,
|
||||||
wsrep_unlock_rollback,
|
wsrep_unlock_rollback,
|
||||||
wsrep_set_data_home_dir,
|
wsrep_set_data_home_dir,
|
||||||
wsrep_thd_is_applier
|
wsrep_thd_is_applier,
|
||||||
|
wsrep_report_bf_lock_wait
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct thd_specifics_service_st thd_specifics_handler=
|
static struct thd_specifics_service_st thd_specifics_handler=
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 2014 SkySQL Ab.
|
/* Copyright (C) 2014, 2020, MariaDB
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -163,3 +163,7 @@ void wsrep_log(void (*)(const char *, ...), const char *, ...)
|
|||||||
|
|
||||||
my_bool wsrep_thd_is_applier(MYSQL_THD thd)
|
my_bool wsrep_thd_is_applier(MYSQL_THD thd)
|
||||||
{ return false; }
|
{ return false; }
|
||||||
|
|
||||||
|
void wsrep_report_bf_lock_wait(MYSQL_THD thd,
|
||||||
|
unsigned long long id)
|
||||||
|
{}
|
||||||
|
@ -875,3 +875,23 @@ bool wsrep_is_load_multi_commit(THD *thd)
|
|||||||
{
|
{
|
||||||
return thd->wsrep_split_flag;
|
return thd->wsrep_split_flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wsrep_report_bf_lock_wait(THD *thd,
|
||||||
|
unsigned long long trx_id)
|
||||||
|
{
|
||||||
|
if (thd)
|
||||||
|
{
|
||||||
|
WSREP_ERROR("Thread %s trx_id: %llu thread: %ld "
|
||||||
|
"seqno: %lld query_state: %s conf_state: %s exec_mode: %s "
|
||||||
|
"applier: %d query: %s",
|
||||||
|
wsrep_thd_is_BF(thd, false) ? "BF" : "normal",
|
||||||
|
trx_id,
|
||||||
|
thd_get_thread_id(thd),
|
||||||
|
wsrep_thd_trx_seqno(thd),
|
||||||
|
wsrep_thd_query_state_str(thd),
|
||||||
|
wsrep_thd_conflict_state_str(thd),
|
||||||
|
wsrep_thd_exec_mode_str(thd),
|
||||||
|
thd->wsrep_applier,
|
||||||
|
wsrep_thd_query(thd));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -45,6 +45,9 @@ extern "C" my_bool wsrep_thd_is_BF_or_commit(void *thd_ptr, my_bool sync);
|
|||||||
extern "C" my_bool wsrep_thd_is_local(void *thd_ptr, my_bool sync);
|
extern "C" my_bool wsrep_thd_is_local(void *thd_ptr, my_bool sync);
|
||||||
extern "C" int wsrep_thd_in_locking_session(void *thd_ptr);
|
extern "C" int wsrep_thd_in_locking_session(void *thd_ptr);
|
||||||
|
|
||||||
|
extern void wsrep_report_bf_lock_wait(THD *thd,
|
||||||
|
unsigned long long trx_id);
|
||||||
|
|
||||||
#else /* WITH_WSREP */
|
#else /* WITH_WSREP */
|
||||||
|
|
||||||
#define wsrep_thd_is_BF(T, S) (0)
|
#define wsrep_thd_is_BF(T, S) (0)
|
||||||
|
@ -148,9 +148,7 @@ fts_config_create_index_param_name(
|
|||||||
::strcpy(name, param);
|
::strcpy(name, param);
|
||||||
name[len] = '_';
|
name[len] = '_';
|
||||||
|
|
||||||
fts_write_object_id(index->id, name + len + 1,
|
fts_write_object_id(index->id, name + len + 1);
|
||||||
DICT_TF2_FLAG_IS_SET(index->table,
|
|
||||||
DICT_TF2_FTS_AUX_HEX_NAME));
|
|
||||||
|
|
||||||
return(name);
|
return(name);
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -55,28 +55,23 @@ fts_get_table_id(
|
|||||||
long */
|
long */
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
bool hex_name = DICT_TF2_FLAG_IS_SET(fts_table->table,
|
|
||||||
DICT_TF2_FTS_AUX_HEX_NAME);
|
|
||||||
|
|
||||||
ut_a(fts_table->table != NULL);
|
ut_a(fts_table->table != NULL);
|
||||||
|
|
||||||
switch (fts_table->type) {
|
switch (fts_table->type) {
|
||||||
case FTS_COMMON_TABLE:
|
case FTS_COMMON_TABLE:
|
||||||
len = fts_write_object_id(fts_table->table_id, table_id,
|
len = fts_write_object_id(fts_table->table_id, table_id);
|
||||||
hex_name);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FTS_INDEX_TABLE:
|
case FTS_INDEX_TABLE:
|
||||||
|
|
||||||
len = fts_write_object_id(fts_table->table_id, table_id,
|
len = fts_write_object_id(fts_table->table_id, table_id);
|
||||||
hex_name);
|
|
||||||
|
|
||||||
table_id[len] = '_';
|
table_id[len] = '_';
|
||||||
++len;
|
++len;
|
||||||
table_id += len;
|
table_id += len;
|
||||||
|
|
||||||
len += fts_write_object_id(fts_table->index_id, table_id,
|
len += fts_write_object_id(fts_table->index_id, table_id);
|
||||||
hex_name);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -736,12 +736,9 @@ fts_savepoint_rollback_last_stmt(
|
|||||||
/*=============================*/
|
/*=============================*/
|
||||||
trx_t* trx); /*!< in: transaction */
|
trx_t* trx); /*!< in: transaction */
|
||||||
|
|
||||||
/***********************************************************************//**
|
/** Drop all orphaned FTS auxiliary tables, those that don't have a parent
|
||||||
Drop all orphaned FTS auxiliary tables, those that don't have a parent
|
|
||||||
table or FTS index defined on them. */
|
table or FTS index defined on them. */
|
||||||
void
|
void fts_drop_orphaned_tables();
|
||||||
fts_drop_orphaned_tables(void);
|
|
||||||
/*==========================*/
|
|
||||||
|
|
||||||
/** Run SYNC on the table, i.e., write out data from the cache to the
|
/** Run SYNC on the table, i.e., write out data from the cache to the
|
||||||
FTS auxiliary INDEX table and clear the cache at the end.
|
FTS auxiliary INDEX table and clear the cache at the end.
|
||||||
@ -775,15 +772,6 @@ fts_init_doc_id(
|
|||||||
/*============*/
|
/*============*/
|
||||||
const dict_table_t* table); /*!< in: table */
|
const dict_table_t* table); /*!< in: table */
|
||||||
|
|
||||||
/* Get parent table name if it's a fts aux table
|
|
||||||
@param[in] aux_table_name aux table name
|
|
||||||
@param[in] aux_table_len aux table length
|
|
||||||
@return parent table name, or NULL */
|
|
||||||
char*
|
|
||||||
fts_get_parent_table_name(
|
|
||||||
const char* aux_table_name,
|
|
||||||
ulint aux_table_len);
|
|
||||||
|
|
||||||
/******************************************************************//**
|
/******************************************************************//**
|
||||||
compare two character string according to their charset. */
|
compare two character string according to their charset. */
|
||||||
extern
|
extern
|
||||||
@ -990,4 +978,14 @@ and there are no new fts index to add.
|
|||||||
@param[in] trx transaction to drop all fts tables */
|
@param[in] trx transaction to drop all fts tables */
|
||||||
void fts_clear_all(dict_table_t *table, trx_t *trx);
|
void fts_clear_all(dict_table_t *table, trx_t *trx);
|
||||||
|
|
||||||
|
/** Check whether the given name is fts auxiliary table
|
||||||
|
and fetch the parent table id and index id
|
||||||
|
@param[in] name table name
|
||||||
|
@param[in,out] table_id parent table id
|
||||||
|
@param[in,out] index_id index id
|
||||||
|
@return true if it is auxilary table */
|
||||||
|
bool fts_check_aux_table(const char *name,
|
||||||
|
table_id_t *table_id,
|
||||||
|
index_id_t *index_id);
|
||||||
|
|
||||||
#endif /*!< fts0fts.h */
|
#endif /*!< fts0fts.h */
|
||||||
|
@ -461,11 +461,7 @@ int
|
|||||||
fts_write_object_id(
|
fts_write_object_id(
|
||||||
/*================*/
|
/*================*/
|
||||||
ib_id_t id, /*!< in: a table/index id */
|
ib_id_t id, /*!< in: a table/index id */
|
||||||
char* str, /*!< in: buffer to write the id to */
|
char* str); /*!< in: buffer to write the id to */
|
||||||
bool hex_format MY_ATTRIBUTE((unused)))
|
|
||||||
/*!< in: true for fixed hex format,
|
|
||||||
false for old ambiguous format */
|
|
||||||
MY_ATTRIBUTE((nonnull));
|
|
||||||
/******************************************************************//**
|
/******************************************************************//**
|
||||||
Read the table id from the string generated by fts_write_object_id().
|
Read the table id from the string generated by fts_write_object_id().
|
||||||
@return TRUE if parse successful */
|
@return TRUE if parse successful */
|
||||||
|
@ -32,10 +32,7 @@ int
|
|||||||
fts_write_object_id(
|
fts_write_object_id(
|
||||||
/*================*/
|
/*================*/
|
||||||
ib_id_t id, /* in: a table/index id */
|
ib_id_t id, /* in: a table/index id */
|
||||||
char* str, /* in: buffer to write the id to */
|
char* str) /* in: buffer to write the id to */
|
||||||
bool hex_format MY_ATTRIBUTE((unused)))
|
|
||||||
/* in: true for fixed hex format,
|
|
||||||
false for old ambiguous format */
|
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
@ -60,11 +57,6 @@ fts_write_object_id(
|
|||||||
|
|
||||||
#endif /* _WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
/* As above, but this is only for those tables failing to rename. */
|
|
||||||
if (!hex_format) {
|
|
||||||
return(sprintf(str, "%016llu", (ulonglong) id));
|
|
||||||
}
|
|
||||||
|
|
||||||
return(sprintf(str, "%016llx", (ulonglong) id));
|
return(sprintf(str, "%016llx", (ulonglong) id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -637,6 +637,57 @@ lock_rec_get_insert_intention(
|
|||||||
return(lock->type_mode & LOCK_INSERT_INTENTION);
|
return(lock->type_mode & LOCK_INSERT_INTENTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WITH_WSREP
|
||||||
|
/** Check if both conflicting lock and other record lock are brute force
|
||||||
|
(BF). This case is a bug so report lock information and wsrep state.
|
||||||
|
@param[in] lock_rec1 conflicting waiting record lock or NULL
|
||||||
|
@param[in] lock_rec2 other waiting record lock
|
||||||
|
@param[in] trx1 lock_rec1 can be NULL, trx
|
||||||
|
*/
|
||||||
|
static void wsrep_assert_no_bf_bf_wait(
|
||||||
|
const lock_t* lock_rec1,
|
||||||
|
const lock_t* lock_rec2,
|
||||||
|
const trx_t* trx1)
|
||||||
|
{
|
||||||
|
ut_ad(!lock_rec1 || lock_get_type_low(lock_rec1) == LOCK_REC);
|
||||||
|
ut_ad(lock_get_type_low(lock_rec2) == LOCK_REC);
|
||||||
|
|
||||||
|
if (!trx1->is_wsrep() || !lock_rec2->trx->is_wsrep())
|
||||||
|
return;
|
||||||
|
if (UNIV_LIKELY(!wsrep_thd_is_BF(trx1->mysql_thd, FALSE)))
|
||||||
|
return;
|
||||||
|
if (UNIV_LIKELY(!wsrep_thd_is_BF(lock_rec2->trx->mysql_thd, FALSE)))
|
||||||
|
return;
|
||||||
|
|
||||||
|
mtr_t mtr;
|
||||||
|
|
||||||
|
if (lock_rec1) {
|
||||||
|
ib::error() << "Waiting lock on table: "
|
||||||
|
<< lock_rec1->index->table->name
|
||||||
|
<< " index: "
|
||||||
|
<< lock_rec1->index->name()
|
||||||
|
<< " that has conflicting lock ";
|
||||||
|
lock_rec_print(stderr, lock_rec1, mtr);
|
||||||
|
}
|
||||||
|
|
||||||
|
ib::error() << "Conflicting lock on table: "
|
||||||
|
<< lock_rec2->index->table->name
|
||||||
|
<< " index: "
|
||||||
|
<< lock_rec2->index->name()
|
||||||
|
<< " that has lock ";
|
||||||
|
lock_rec_print(stderr, lock_rec2, mtr);
|
||||||
|
|
||||||
|
ib::error() << "WSREP state: ";
|
||||||
|
|
||||||
|
wsrep_report_bf_lock_wait(trx1->mysql_thd,
|
||||||
|
trx1->id);
|
||||||
|
wsrep_report_bf_lock_wait(lock_rec2->trx->mysql_thd,
|
||||||
|
lock_rec2->trx->id);
|
||||||
|
/* BF-BF wait is a bug */
|
||||||
|
ut_error;
|
||||||
|
}
|
||||||
|
#endif /* WITH_WSREP */
|
||||||
|
|
||||||
/*********************************************************************//**
|
/*********************************************************************//**
|
||||||
Checks if a lock request for a new lock has to wait for request lock2.
|
Checks if a lock request for a new lock has to wait for request lock2.
|
||||||
@return TRUE if new lock has to wait for lock2 to be removed */
|
@return TRUE if new lock has to wait for lock2 to be removed */
|
||||||
@ -743,75 +794,9 @@ lock_rec_has_to_wait(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WITH_WSREP
|
#ifdef WITH_WSREP
|
||||||
/* if BF thread is locking and has conflict with another BF
|
/* There should not be two conflicting locks that are
|
||||||
thread, we need to look at trx ordering and lock types */
|
brute force. If there is it is a bug. */
|
||||||
if (wsrep_thd_is_BF(trx->mysql_thd, FALSE)
|
wsrep_assert_no_bf_bf_wait(NULL, lock2, trx);
|
||||||
&& wsrep_thd_is_BF(lock2->trx->mysql_thd, FALSE)) {
|
|
||||||
mtr_t mtr;
|
|
||||||
|
|
||||||
if (UNIV_UNLIKELY(wsrep_debug)) {
|
|
||||||
ib::info() << "BF-BF lock conflict, locking: "
|
|
||||||
<< for_locking;
|
|
||||||
lock_rec_print(stderr, lock2, mtr);
|
|
||||||
ib::info()
|
|
||||||
<< " SQL1: " << wsrep_thd_query(trx->mysql_thd)
|
|
||||||
<< " SQL2: "
|
|
||||||
<< wsrep_thd_query(lock2->trx->mysql_thd);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (wsrep_trx_order_before(trx->mysql_thd,
|
|
||||||
lock2->trx->mysql_thd)
|
|
||||||
&& (type_mode & LOCK_MODE_MASK) == LOCK_X
|
|
||||||
&& (lock2->type_mode & LOCK_MODE_MASK) == LOCK_X) {
|
|
||||||
if (for_locking || UNIV_UNLIKELY(wsrep_debug)) {
|
|
||||||
/* exclusive lock conflicts are not
|
|
||||||
accepted */
|
|
||||||
ib::info()
|
|
||||||
<< "BF-BF X lock conflict,mode: "
|
|
||||||
<< type_mode
|
|
||||||
<< " supremum: " << lock_is_on_supremum
|
|
||||||
<< "conflicts states: my "
|
|
||||||
<< wsrep_thd_conflict_state(
|
|
||||||
trx->mysql_thd, FALSE)
|
|
||||||
<< " locked "
|
|
||||||
<< wsrep_thd_conflict_state(
|
|
||||||
lock2->trx->mysql_thd,
|
|
||||||
FALSE);
|
|
||||||
lock_rec_print(stderr, lock2, mtr);
|
|
||||||
ib::info() << " SQL1: "
|
|
||||||
<< wsrep_thd_query(trx->mysql_thd)
|
|
||||||
<< " SQL2: "
|
|
||||||
<< wsrep_thd_query(
|
|
||||||
lock2->trx->mysql_thd);
|
|
||||||
|
|
||||||
if (for_locking) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* if lock2->index->n_uniq <=
|
|
||||||
lock2->index->n_user_defined_cols
|
|
||||||
operation is on uniq index
|
|
||||||
*/
|
|
||||||
if (wsrep_debug) {
|
|
||||||
ib::info()
|
|
||||||
<< "BF conflict, modes: " << type_mode
|
|
||||||
<< ":" << lock2->type_mode
|
|
||||||
<< " idx: " << lock2->index->name()
|
|
||||||
<< " table: "
|
|
||||||
<< lock2->index->table->name
|
|
||||||
<< " n_uniq: " << lock2->index->n_uniq
|
|
||||||
<< " n_user: "
|
|
||||||
<< lock2->index->n_user_defined_cols
|
|
||||||
<< " SQL1: "
|
|
||||||
<< wsrep_thd_query(trx->mysql_thd)
|
|
||||||
<< " SQL2: "
|
|
||||||
<< wsrep_thd_query(
|
|
||||||
lock2->trx->mysql_thd);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* WITH_WSREP */
|
#endif /* WITH_WSREP */
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -1471,11 +1456,8 @@ lock_rec_create_low(
|
|||||||
trx_mutex_exit(c_lock->trx);
|
trx_mutex_exit(c_lock->trx);
|
||||||
|
|
||||||
if (UNIV_UNLIKELY(wsrep_debug)) {
|
if (UNIV_UNLIKELY(wsrep_debug)) {
|
||||||
ib::info() << "WSREP: c_lock canceled "
|
wsrep_report_bf_lock_wait(trx->mysql_thd, trx->id);
|
||||||
<< ib::hex(c_lock->trx->id)
|
wsrep_report_bf_lock_wait(c_lock->trx->mysql_thd, c_lock->trx->id);
|
||||||
<< " SQL: "
|
|
||||||
<< wsrep_thd_query(
|
|
||||||
c_lock->trx->mysql_thd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* have to bail out here to avoid lock_set_lock... */
|
/* have to bail out here to avoid lock_set_lock... */
|
||||||
@ -1554,6 +1536,7 @@ lock_rec_insert_by_trx_age(
|
|||||||
hash_table_t* hash;
|
hash_table_t* hash;
|
||||||
hash_cell_t* cell;
|
hash_cell_t* cell;
|
||||||
|
|
||||||
|
ut_ad(!in_lock->trx->is_wsrep());
|
||||||
space = in_lock->un_member.rec_lock.space;
|
space = in_lock->un_member.rec_lock.space;
|
||||||
page_no = in_lock->un_member.rec_lock.page_no;
|
page_no = in_lock->un_member.rec_lock.page_no;
|
||||||
rec_fold = lock_rec_fold(space, page_no);
|
rec_fold = lock_rec_fold(space, page_no);
|
||||||
@ -1821,27 +1804,19 @@ lock_rec_add_to_queue(
|
|||||||
= lock_rec_other_has_expl_req(
|
= lock_rec_other_has_expl_req(
|
||||||
mode, block, false, heap_no, trx);
|
mode, block, false, heap_no, trx);
|
||||||
#ifdef WITH_WSREP
|
#ifdef WITH_WSREP
|
||||||
if (other_lock && trx->is_wsrep() &&
|
if (UNIV_UNLIKELY(other_lock && trx->is_wsrep())) {
|
||||||
!wsrep_thd_is_BF(trx->mysql_thd, FALSE) &&
|
/* Only BF transaction may be granted lock
|
||||||
!wsrep_thd_is_BF(other_lock->trx->mysql_thd, FALSE)) {
|
before other conflicting lock request. */
|
||||||
|
if (!wsrep_thd_is_BF(trx->mysql_thd, FALSE)
|
||||||
ib::info() << "WSREP BF lock conflict for my lock:\n BF:" <<
|
&& !wsrep_thd_is_BF(other_lock->trx->mysql_thd, FALSE)) {
|
||||||
((wsrep_thd_is_BF(trx->mysql_thd, FALSE)) ? "BF" : "normal") << " exec: " <<
|
/* If it is not BF, this case is a bug. */
|
||||||
wsrep_thd_exec_mode(trx->mysql_thd) << " conflict: " <<
|
wsrep_report_bf_lock_wait(trx->mysql_thd, trx->id);
|
||||||
wsrep_thd_conflict_state(trx->mysql_thd, false) << " seqno: " <<
|
wsrep_report_bf_lock_wait(other_lock->trx->mysql_thd, other_lock->trx->id);
|
||||||
wsrep_thd_trx_seqno(trx->mysql_thd) << " SQL: " <<
|
ut_error;
|
||||||
wsrep_thd_query(trx->mysql_thd);
|
}
|
||||||
trx_t* otrx = other_lock->trx;
|
} else
|
||||||
ib::info() << "WSREP other lock:\n BF:" <<
|
|
||||||
((wsrep_thd_is_BF(otrx->mysql_thd, FALSE)) ? "BF" : "normal") << " exec: " <<
|
|
||||||
wsrep_thd_exec_mode(otrx->mysql_thd) << " conflict: " <<
|
|
||||||
wsrep_thd_conflict_state(otrx->mysql_thd, false) << " seqno: " <<
|
|
||||||
wsrep_thd_trx_seqno(otrx->mysql_thd) << " SQL: " <<
|
|
||||||
wsrep_thd_query(otrx->mysql_thd);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
ut_a(!other_lock);
|
|
||||||
#endif /* WITH_WSREP */
|
#endif /* WITH_WSREP */
|
||||||
|
ut_ad(!other_lock);
|
||||||
}
|
}
|
||||||
#endif /* UNIV_DEBUG */
|
#endif /* UNIV_DEBUG */
|
||||||
|
|
||||||
@ -2047,9 +2022,6 @@ lock_rec_has_to_wait_in_queue(
|
|||||||
hash = lock_hash_get(wait_lock->type_mode);
|
hash = lock_hash_get(wait_lock->type_mode);
|
||||||
|
|
||||||
for (lock = lock_rec_get_first_on_page_addr(hash, space, page_no);
|
for (lock = lock_rec_get_first_on_page_addr(hash, space, page_no);
|
||||||
#ifdef WITH_WSREP
|
|
||||||
lock &&
|
|
||||||
#endif
|
|
||||||
lock != wait_lock;
|
lock != wait_lock;
|
||||||
lock = lock_rec_get_next_on_page_const(lock)) {
|
lock = lock_rec_get_next_on_page_const(lock)) {
|
||||||
const byte* p = (const byte*) &lock[1];
|
const byte* p = (const byte*) &lock[1];
|
||||||
@ -2057,24 +2029,6 @@ lock_rec_has_to_wait_in_queue(
|
|||||||
if (heap_no < lock_rec_get_n_bits(lock)
|
if (heap_no < lock_rec_get_n_bits(lock)
|
||||||
&& (p[bit_offset] & bit_mask)
|
&& (p[bit_offset] & bit_mask)
|
||||||
&& lock_has_to_wait(wait_lock, lock)) {
|
&& lock_has_to_wait(wait_lock, lock)) {
|
||||||
#ifdef WITH_WSREP
|
|
||||||
if (wsrep_thd_is_BF(wait_lock->trx->mysql_thd, FALSE) &&
|
|
||||||
wsrep_thd_is_BF(lock->trx->mysql_thd, FALSE)) {
|
|
||||||
|
|
||||||
if (UNIV_UNLIKELY(wsrep_debug)) {
|
|
||||||
mtr_t mtr;
|
|
||||||
ib::info() << "WSREP: waiting BF trx: " << ib::hex(wait_lock->trx->id)
|
|
||||||
<< " query: " << wsrep_thd_query(wait_lock->trx->mysql_thd);
|
|
||||||
lock_rec_print(stderr, wait_lock, mtr);
|
|
||||||
ib::info() << "WSREP: do not wait another BF trx: " << ib::hex(lock->trx->id)
|
|
||||||
<< " query: " << wsrep_thd_query(lock->trx->mysql_thd);
|
|
||||||
lock_rec_print(stderr, lock, mtr);
|
|
||||||
}
|
|
||||||
/* don't wait for another BF lock */
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
#endif /* WITH_WSREP */
|
|
||||||
|
|
||||||
return(lock);
|
return(lock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2190,6 +2144,7 @@ lock_grant_and_move_on_page(ulint rec_fold, ulint space, ulint page_no)
|
|||||||
lock = previous->hash;
|
lock = previous->hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ut_ad(!lock->trx->is_wsrep());
|
||||||
ut_ad(previous->hash == lock || previous == lock);
|
ut_ad(previous->hash == lock || previous == lock);
|
||||||
/* Grant locks if there are no conflicting locks ahead.
|
/* Grant locks if there are no conflicting locks ahead.
|
||||||
Move granted locks to the head of the list. */
|
Move granted locks to the head of the list. */
|
||||||
@ -2260,11 +2215,18 @@ static void lock_rec_dequeue_from_page(lock_t* in_lock)
|
|||||||
lock != NULL;
|
lock != NULL;
|
||||||
lock = lock_rec_get_next_on_page(lock)) {
|
lock = lock_rec_get_next_on_page(lock)) {
|
||||||
|
|
||||||
if (lock_get_wait(lock)
|
if (!lock_get_wait(lock)) {
|
||||||
&& !lock_rec_has_to_wait_in_queue(lock)) {
|
continue;
|
||||||
|
}
|
||||||
|
const lock_t* c = lock_rec_has_to_wait_in_queue(lock);
|
||||||
|
if (!c) {
|
||||||
/* Grant the lock */
|
/* Grant the lock */
|
||||||
ut_ad(lock->trx != in_lock->trx);
|
ut_ad(lock->trx != in_lock->trx);
|
||||||
lock_grant(lock);
|
lock_grant(lock);
|
||||||
|
#ifdef WITH_WSREP
|
||||||
|
} else {
|
||||||
|
wsrep_assert_no_bf_bf_wait(c, lock, c->trx);
|
||||||
|
#endif /* WITH_WSREP */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -3528,11 +3490,8 @@ lock_table_create(
|
|||||||
ut_list_insert(table->locks, c_lock, lock,
|
ut_list_insert(table->locks, c_lock, lock,
|
||||||
TableLockGetNode());
|
TableLockGetNode());
|
||||||
if (UNIV_UNLIKELY(wsrep_debug)) {
|
if (UNIV_UNLIKELY(wsrep_debug)) {
|
||||||
ib::info() << "table lock BF conflict for "
|
wsrep_report_bf_lock_wait(trx->mysql_thd, trx->id);
|
||||||
<< ib::hex(c_lock->trx->id)
|
wsrep_report_bf_lock_wait(c_lock->trx->mysql_thd, c_lock->trx->id);
|
||||||
<< " SQL: "
|
|
||||||
<< wsrep_thd_query(
|
|
||||||
c_lock->trx->mysql_thd);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ut_list_append(table->locks, lock, TableLockGetNode());
|
ut_list_append(table->locks, lock, TableLockGetNode());
|
||||||
@ -3544,6 +3503,8 @@ lock_table_create(
|
|||||||
c_lock->trx->lock.was_chosen_as_deadlock_victim = TRUE;
|
c_lock->trx->lock.was_chosen_as_deadlock_victim = TRUE;
|
||||||
|
|
||||||
if (UNIV_UNLIKELY(wsrep_debug)) {
|
if (UNIV_UNLIKELY(wsrep_debug)) {
|
||||||
|
wsrep_report_bf_lock_wait(trx->mysql_thd, trx->id);
|
||||||
|
wsrep_report_bf_lock_wait(c_lock->trx->mysql_thd, c_lock->trx->id);
|
||||||
wsrep_print_wait_locks(c_lock);
|
wsrep_print_wait_locks(c_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3553,14 +3514,6 @@ lock_table_create(
|
|||||||
lock_cancel_waiting_and_release(
|
lock_cancel_waiting_and_release(
|
||||||
c_lock->trx->lock.wait_lock);
|
c_lock->trx->lock.wait_lock);
|
||||||
trx_mutex_enter(trx);
|
trx_mutex_enter(trx);
|
||||||
|
|
||||||
if (UNIV_UNLIKELY(wsrep_debug)) {
|
|
||||||
ib::info() << "WSREP: c_lock canceled "
|
|
||||||
<< ib::hex(c_lock->trx->id)
|
|
||||||
<< " SQL: "
|
|
||||||
<< wsrep_thd_query(
|
|
||||||
c_lock->trx->mysql_thd);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
trx_mutex_exit(c_lock->trx);
|
trx_mutex_exit(c_lock->trx);
|
||||||
@ -4119,6 +4072,7 @@ lock_grant_and_move_on_rec(
|
|||||||
}
|
}
|
||||||
lock = previous->hash;
|
lock = previous->hash;
|
||||||
}
|
}
|
||||||
|
ut_ad(!lock->trx->is_wsrep());
|
||||||
/* Grant locks if there are no conflicting locks ahead.
|
/* Grant locks if there are no conflicting locks ahead.
|
||||||
Move granted locks to the head of the list. */
|
Move granted locks to the head of the list. */
|
||||||
for (;lock != NULL;) {
|
for (;lock != NULL;) {
|
||||||
@ -4218,12 +4172,18 @@ released:
|
|||||||
|
|
||||||
for (lock = first_lock; lock != NULL;
|
for (lock = first_lock; lock != NULL;
|
||||||
lock = lock_rec_get_next(heap_no, lock)) {
|
lock = lock_rec_get_next(heap_no, lock)) {
|
||||||
if (lock_get_wait(lock)
|
if (!lock_get_wait(lock)) {
|
||||||
&& !lock_rec_has_to_wait_in_queue(lock)) {
|
continue;
|
||||||
|
}
|
||||||
|
const lock_t* c = lock_rec_has_to_wait_in_queue(lock);
|
||||||
|
if (!c) {
|
||||||
/* Grant the lock */
|
/* Grant the lock */
|
||||||
ut_ad(trx != lock->trx);
|
ut_ad(trx != lock->trx);
|
||||||
lock_grant(lock);
|
lock_grant(lock);
|
||||||
|
#ifdef WITH_WSREP
|
||||||
|
} else {
|
||||||
|
wsrep_assert_no_bf_bf_wait(c, lock, c->trx);
|
||||||
|
#endif /* WITH_WSREP */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -4893,24 +4853,28 @@ func_exit:
|
|||||||
explicit granted lock. */
|
explicit granted lock. */
|
||||||
|
|
||||||
#ifdef WITH_WSREP
|
#ifdef WITH_WSREP
|
||||||
if (other_lock->trx->is_wsrep()) {
|
/** Galera record locking rules:
|
||||||
if (!lock_get_wait(other_lock) ) {
|
* If there is no other record lock to the same record, we may grant
|
||||||
ib::info() << "WSREP impl BF lock conflict for my impl lock:\n BF:" <<
|
the lock request.
|
||||||
((wsrep_thd_is_BF(impl_trx->mysql_thd, FALSE)) ? "BF" : "normal") << " exec: " <<
|
* If there is other record lock but this requested record lock is
|
||||||
wsrep_thd_exec_mode(impl_trx->mysql_thd) << " conflict: " <<
|
compatible, we may grant the lock request.
|
||||||
wsrep_thd_conflict_state(impl_trx->mysql_thd, false) << " seqno: " <<
|
* If there is other record lock and it is not compatible with
|
||||||
wsrep_thd_trx_seqno(impl_trx->mysql_thd) << " SQL: " <<
|
requested lock, all normal transactions must wait.
|
||||||
wsrep_thd_query(impl_trx->mysql_thd);
|
* BF (brute force) additional exceptions :
|
||||||
|
** If BF already holds record lock for requested record, we may
|
||||||
trx_t* otrx = other_lock->trx;
|
grant new record lock even if there is conflicting record lock(s)
|
||||||
|
waiting on a queue.
|
||||||
ib::info() << "WSREP other lock:\n BF:" <<
|
** If conflicting transaction holds requested record lock,
|
||||||
((wsrep_thd_is_BF(otrx->mysql_thd, FALSE)) ? "BF" : "normal") << " exec: " <<
|
we will cancel this record lock and select conflicting transaction
|
||||||
wsrep_thd_exec_mode(otrx->mysql_thd) << " conflict: " <<
|
for BF abort or kill victim.
|
||||||
wsrep_thd_conflict_state(otrx->mysql_thd, false) << " seqno: " <<
|
** If conflicting transaction is waiting for requested record lock
|
||||||
wsrep_thd_trx_seqno(otrx->mysql_thd) << " SQL: " <<
|
we will cancel this wait and select conflicting transaction
|
||||||
wsrep_thd_query(otrx->mysql_thd);
|
for BF abort or kill victim.
|
||||||
}
|
** There should not be two BF transactions waiting for same record lock
|
||||||
|
*/
|
||||||
|
if (other_lock->trx->is_wsrep() && !lock_get_wait(other_lock)) {
|
||||||
|
wsrep_report_bf_lock_wait(impl_trx->mysql_thd, impl_trx->id);
|
||||||
|
wsrep_report_bf_lock_wait(other_lock->trx->mysql_thd, other_lock->trx->id);
|
||||||
|
|
||||||
if (!lock_rec_has_expl(LOCK_X | LOCK_REC_NOT_GAP,
|
if (!lock_rec_has_expl(LOCK_X | LOCK_REC_NOT_GAP,
|
||||||
block, heap_no,
|
block, heap_no,
|
||||||
@ -4919,9 +4883,11 @@ func_exit:
|
|||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
#endif /* WITH_WSREP */
|
#endif /* WITH_WSREP */
|
||||||
ut_ad(lock_get_wait(other_lock));
|
{
|
||||||
ut_ad(lock_rec_has_expl(LOCK_X | LOCK_REC_NOT_GAP,
|
ut_ad(lock_get_wait(other_lock));
|
||||||
block, heap_no, impl_trx));
|
ut_ad(lock_rec_has_expl(LOCK_X | LOCK_REC_NOT_GAP,
|
||||||
|
block, heap_no, impl_trx));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_exit(&impl_trx->mutex);
|
mutex_exit(&impl_trx->mutex);
|
||||||
@ -4953,13 +4919,20 @@ func_exit:
|
|||||||
mode, block, false, heap_no,
|
mode, block, false, heap_no,
|
||||||
lock->trx);
|
lock->trx);
|
||||||
#ifdef WITH_WSREP
|
#ifdef WITH_WSREP
|
||||||
ut_a(!other_lock
|
if (UNIV_UNLIKELY(other_lock && lock->trx->is_wsrep())) {
|
||||||
|| wsrep_thd_is_BF(lock->trx->mysql_thd, FALSE)
|
/* Only BF transaction may be granted
|
||||||
|| wsrep_thd_is_BF(other_lock->trx->mysql_thd, FALSE));
|
lock before other conflicting lock
|
||||||
|
request. */
|
||||||
#else
|
if (!wsrep_thd_is_BF(lock->trx->mysql_thd, FALSE)
|
||||||
ut_a(!other_lock);
|
&& !wsrep_thd_is_BF(other_lock->trx->mysql_thd, FALSE)) {
|
||||||
|
/* If no BF, this case is a bug. */
|
||||||
|
wsrep_report_bf_lock_wait(lock->trx->mysql_thd, lock->trx->id);
|
||||||
|
wsrep_report_bf_lock_wait(other_lock->trx->mysql_thd, other_lock->trx->id);
|
||||||
|
ut_error;
|
||||||
|
}
|
||||||
|
} else
|
||||||
#endif /* WITH_WSREP */
|
#endif /* WITH_WSREP */
|
||||||
|
ut_ad(!other_lock);
|
||||||
} else if (lock_get_wait(lock) && !lock_rec_get_gap(lock)) {
|
} else if (lock_get_wait(lock) && !lock_rec_get_gap(lock)) {
|
||||||
|
|
||||||
ut_a(lock_rec_has_to_wait_in_queue(lock));
|
ut_a(lock_rec_has_to_wait_in_queue(lock));
|
||||||
|
@ -911,8 +911,6 @@ row_ins_foreign_fill_virtual(
|
|||||||
&ext, cascade->heap);
|
&ext, cascade->heap);
|
||||||
n_diff = update->n_fields;
|
n_diff = update->n_fields;
|
||||||
|
|
||||||
update->n_fields += n_v_fld;
|
|
||||||
|
|
||||||
if (index->table->vc_templ == NULL) {
|
if (index->table->vc_templ == NULL) {
|
||||||
/** This can occur when there is a cascading
|
/** This can occur when there is a cascading
|
||||||
delete or update after restart. */
|
delete or update after restart. */
|
||||||
@ -945,7 +943,7 @@ row_ins_foreign_fill_virtual(
|
|||||||
return DB_COMPUTE_VALUE_FAILED;
|
return DB_COMPUTE_VALUE_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
upd_field = upd_get_nth_field(update, n_diff);
|
upd_field = update->fields + n_diff;
|
||||||
|
|
||||||
upd_field->old_v_val = static_cast<dfield_t*>(
|
upd_field->old_v_val = static_cast<dfield_t*>(
|
||||||
mem_heap_alloc(cascade->heap,
|
mem_heap_alloc(cascade->heap,
|
||||||
@ -955,30 +953,27 @@ row_ins_foreign_fill_virtual(
|
|||||||
|
|
||||||
upd_field_set_v_field_no(upd_field, i, index);
|
upd_field_set_v_field_no(upd_field, i, index);
|
||||||
|
|
||||||
if (node->is_delete
|
bool set_null =
|
||||||
? (foreign->type & DICT_FOREIGN_ON_DELETE_SET_NULL)
|
node->is_delete
|
||||||
: (foreign->type & DICT_FOREIGN_ON_UPDATE_SET_NULL)) {
|
? (foreign->type & DICT_FOREIGN_ON_DELETE_SET_NULL)
|
||||||
|
: (foreign->type & DICT_FOREIGN_ON_UPDATE_SET_NULL);
|
||||||
|
|
||||||
dfield_set_null(&upd_field->new_val);
|
dfield_t* new_vfield = innobase_get_computed_value(
|
||||||
|
update->old_vrow, col, index,
|
||||||
|
&vc.heap, update->heap, NULL, thd,
|
||||||
|
mysql_table, record, NULL,
|
||||||
|
set_null ? update : node->update, foreign);
|
||||||
|
|
||||||
|
if (new_vfield == NULL) {
|
||||||
|
return DB_COMPUTE_VALUE_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!node->is_delete
|
dfield_copy(&upd_field->new_val, new_vfield);
|
||||||
&& (foreign->type & DICT_FOREIGN_ON_UPDATE_CASCADE)) {
|
|
||||||
|
|
||||||
dfield_t* new_vfield = innobase_get_computed_value(
|
if (!dfield_datas_are_binary_equal(
|
||||||
update->old_vrow, col, index,
|
upd_field->old_v_val,
|
||||||
&vc.heap, update->heap, NULL, thd,
|
&upd_field->new_val, 0))
|
||||||
mysql_table, record, NULL,
|
n_diff++;
|
||||||
node->update, foreign);
|
|
||||||
|
|
||||||
if (new_vfield == NULL) {
|
|
||||||
return DB_COMPUTE_VALUE_FAILED;
|
|
||||||
}
|
|
||||||
|
|
||||||
dfield_copy(&(upd_field->new_val), new_vfield);
|
|
||||||
}
|
|
||||||
|
|
||||||
n_diff++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
update->n_fields = n_diff;
|
update->n_fields = n_diff;
|
||||||
|
@ -3937,9 +3937,21 @@ loop:
|
|||||||
avoid accessing dropped fts aux tables in information
|
avoid accessing dropped fts aux tables in information
|
||||||
scheam when parent table still exists.
|
scheam when parent table still exists.
|
||||||
Note: Drop parent table will drop fts aux tables. */
|
Note: Drop parent table will drop fts aux tables. */
|
||||||
char* parent_table_name;
|
char* parent_table_name = NULL;
|
||||||
parent_table_name = fts_get_parent_table_name(
|
table_id_t table_id;
|
||||||
table_name, strlen(table_name));
|
index_id_t index_id;
|
||||||
|
|
||||||
|
if (fts_check_aux_table(
|
||||||
|
table_name, &table_id, &index_id)) {
|
||||||
|
dict_table_t* parent_table = dict_table_open_on_id(
|
||||||
|
table_id, TRUE, DICT_TABLE_OP_NORMAL);
|
||||||
|
if (parent_table != NULL) {
|
||||||
|
parent_table_name = mem_strdupl(
|
||||||
|
parent_table->name.m_name,
|
||||||
|
strlen(parent_table->name.m_name));
|
||||||
|
dict_table_close(parent_table, TRUE, FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (parent_table_name != NULL) {
|
if (parent_table_name != NULL) {
|
||||||
ut_free(table_name);
|
ut_free(table_name);
|
||||||
|
Reference in New Issue
Block a user