Merge 10.4 into 10.5

This commit is contained in:
Marko Mäkelä 2022-06-02 16:51:13 +03:00
commit 4b3c3e526e
36 changed files with 802 additions and 1193 deletions

View File

@ -1,6 +1,6 @@
/* /*
Copyright (c) 2001, 2012, Oracle and/or its affiliates. Copyright (c) 2001, 2012, Oracle and/or its affiliates.
Copyright (c) 2009, 2020, MariaDB Copyright (c) 2009, 2022, 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
@ -102,6 +102,7 @@ enum options_client
OPT_IGNORE_DATA, OPT_IGNORE_DATA,
OPT_PRINT_ROW_COUNT, OPT_PRINT_ROW_EVENT_POSITIONS, OPT_PRINT_ROW_COUNT, OPT_PRINT_ROW_EVENT_POSITIONS,
OPT_CHECK_IF_UPGRADE_NEEDED, OPT_CHECK_IF_UPGRADE_NEEDED,
OPT_COMPATIBILTY_CLEARTEXT_PLUGIN,
OPT_SHUTDOWN_WAIT_FOR_SLAVES, OPT_SHUTDOWN_WAIT_FOR_SLAVES,
OPT_COPY_S3_TABLES, OPT_COPY_S3_TABLES,
OPT_PRINT_TABLE_METADATA, OPT_PRINT_TABLE_METADATA,

View File

@ -1514,6 +1514,8 @@ static struct my_option my_long_options[] =
&delimiter_str, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, &delimiter_str, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"execute", 'e', "Execute command and quit. (Disables --force and history file.)", 0, {"execute", 'e', "Execute command and quit. (Disables --force and history file.)", 0,
0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"enable-cleartext-plugin", OPT_COMPATIBILTY_CLEARTEXT_PLUGIN, "Obsolete option. Exists only for MySQL compatibility.",
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
{"vertical", 'E', "Print the output of a query (rows) vertically.", {"vertical", 'E', "Print the output of a query (rows) vertically.",
&vertical, &vertical, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, &vertical, &vertical, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0,
0}, 0},
@ -1812,6 +1814,14 @@ get_one_option(const struct my_option *opt, const char *argument, const char *)
printf("WARNING: --server-arg option not supported in this configuration.\n"); printf("WARNING: --server-arg option not supported in this configuration.\n");
#endif #endif
break; break;
case OPT_COMPATIBILTY_CLEARTEXT_PLUGIN:
/*
This option exists in MySQL client but not in MariaDB. Users switching from
MySQL might still have this option in their commands, and it will not work
in MariaDB unless it is handled. Therefore output a warning and continue.
*/
printf("WARNING: option '--enable-cleartext-plugin' is obsolete.\n");
break;
case 'A': case 'A':
opt_rehash= 0; opt_rehash= 0;
break; break;

View File

@ -1,5 +1,6 @@
/****************************************************** /******************************************************
Copyright (c) 2011-2013 Percona LLC and/or its affiliates. Copyright (c) 2011-2013 Percona LLC and/or its affiliates.
Copyright (c) 2022, MariaDB Corporation.
Compressing datasink implementation for XtraBackup. Compressing datasink implementation for XtraBackup.
@ -32,11 +33,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
typedef struct { typedef struct {
pthread_t id; pthread_t id;
uint num; uint num;
pthread_mutex_t ctrl_mutex;
pthread_cond_t ctrl_cond;
pthread_mutex_t data_mutex; pthread_mutex_t data_mutex;
pthread_cond_t data_cond; pthread_cond_t data_cond;
my_bool started;
my_bool data_avail; my_bool data_avail;
my_bool cancelled; my_bool cancelled;
const char *from; const char *from;
@ -206,14 +204,13 @@ compress_write(ds_file_t *file, const uchar *buf, size_t len)
thd = threads + i; thd = threads + i;
pthread_mutex_lock(&thd->ctrl_mutex); pthread_mutex_lock(&thd->data_mutex);
chunk_len = (len > COMPRESS_CHUNK_SIZE) ? chunk_len = (len > COMPRESS_CHUNK_SIZE) ?
COMPRESS_CHUNK_SIZE : len; COMPRESS_CHUNK_SIZE : len;
thd->from = ptr; thd->from = ptr;
thd->from_len = chunk_len; thd->from_len = chunk_len;
pthread_mutex_lock(&thd->data_mutex);
thd->data_avail = TRUE; thd->data_avail = TRUE;
pthread_cond_signal(&thd->data_cond); pthread_cond_signal(&thd->data_cond);
pthread_mutex_unlock(&thd->data_mutex); pthread_mutex_unlock(&thd->data_mutex);
@ -239,26 +236,24 @@ compress_write(ds_file_t *file, const uchar *buf, size_t len)
xb_a(threads[i].to_len > 0); xb_a(threads[i].to_len > 0);
if (ds_write(dest_file, "NEWBNEWB", 8) || bool fail = ds_write(dest_file, "NEWBNEWB", 8) ||
write_uint64_le(dest_file, write_uint64_le(dest_file,
comp_file->bytes_processed)) { comp_file->bytes_processed);
msg("compress: write to the destination stream "
"failed.");
return 1;
}
comp_file->bytes_processed += threads[i].from_len; comp_file->bytes_processed += threads[i].from_len;
if (write_uint32_le(dest_file, threads[i].adler) || if (!fail) {
ds_write(dest_file, threads[i].to, fail = write_uint32_le(dest_file, threads[i].adler) ||
threads[i].to_len)) { ds_write(dest_file, threads[i].to,
msg("compress: write to the destination stream " threads[i].to_len);
"failed.");
return 1;
} }
pthread_mutex_unlock(&threads[i].data_mutex); pthread_mutex_unlock(&threads[i].data_mutex);
pthread_mutex_unlock(&threads[i].ctrl_mutex);
if (fail) {
msg("compress: write to the destination stream "
"failed.");
return 1;
}
} }
} }
@ -328,6 +323,23 @@ write_uint64_le(ds_file_t *file, ulonglong n)
return ds_write(file, tmp, sizeof(tmp)); return ds_write(file, tmp, sizeof(tmp));
} }
static
void
destroy_worker_thread(comp_thread_ctxt_t *thd)
{
pthread_mutex_lock(&thd->data_mutex);
thd->cancelled = TRUE;
pthread_cond_signal(&thd->data_cond);
pthread_mutex_unlock(&thd->data_mutex);
pthread_join(thd->id, NULL);
pthread_cond_destroy(&thd->data_cond);
pthread_mutex_destroy(&thd->data_mutex);
my_free(thd->to);
}
static static
comp_thread_ctxt_t * comp_thread_ctxt_t *
create_worker_threads(uint n) create_worker_threads(uint n)
@ -342,53 +354,31 @@ create_worker_threads(uint n)
comp_thread_ctxt_t *thd = threads + i; comp_thread_ctxt_t *thd = threads + i;
thd->num = i + 1; thd->num = i + 1;
thd->started = FALSE;
thd->cancelled = FALSE; thd->cancelled = FALSE;
thd->data_avail = FALSE; thd->data_avail = FALSE;
thd->to = (char *) my_malloc(PSI_NOT_INSTRUMENTED, thd->to = (char *) my_malloc(PSI_NOT_INSTRUMENTED,
COMPRESS_CHUNK_SIZE + MY_QLZ_COMPRESS_OVERHEAD, MYF(MY_FAE)); COMPRESS_CHUNK_SIZE + MY_QLZ_COMPRESS_OVERHEAD, MYF(MY_FAE));
/* Initialize the control mutex and condition var */
if (pthread_mutex_init(&thd->ctrl_mutex, NULL) ||
pthread_cond_init(&thd->ctrl_cond, NULL)) {
goto err;
}
/* Initialize and data mutex and condition var */ /* Initialize and data mutex and condition var */
if (pthread_mutex_init(&thd->data_mutex, NULL) || if (pthread_mutex_init(&thd->data_mutex, NULL) ||
pthread_cond_init(&thd->data_cond, NULL)) { pthread_cond_init(&thd->data_cond, NULL)) {
goto err; goto err;
} }
pthread_mutex_lock(&thd->ctrl_mutex);
if (pthread_create(&thd->id, NULL, compress_worker_thread_func, if (pthread_create(&thd->id, NULL, compress_worker_thread_func,
thd)) { thd)) {
msg("compress: pthread_create() failed: " msg("compress: pthread_create() failed: "
"errno = %d", errno); "errno = %d", errno);
pthread_mutex_unlock(&thd->ctrl_mutex);
goto err; goto err;
} }
} }
/* Wait for the threads to start */
for (i = 0; i < n; i++) {
comp_thread_ctxt_t *thd = threads + i;
while (thd->started == FALSE)
pthread_cond_wait(&thd->ctrl_cond, &thd->ctrl_mutex);
pthread_mutex_unlock(&thd->ctrl_mutex);
}
return threads; return threads;
err: err:
while (i > 0) { for (; i; i--) {
comp_thread_ctxt_t *thd; destroy_worker_thread(threads + i);
i--;
thd = threads + i;
pthread_mutex_unlock(&thd->ctrl_mutex);
} }
my_free(threads); my_free(threads);
@ -402,21 +392,7 @@ destroy_worker_threads(comp_thread_ctxt_t *threads, uint n)
uint i; uint i;
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
comp_thread_ctxt_t *thd = threads + i; destroy_worker_thread(threads + i);
pthread_mutex_lock(&thd->data_mutex);
threads[i].cancelled = TRUE;
pthread_cond_signal(&thd->data_cond);
pthread_mutex_unlock(&thd->data_mutex);
pthread_join(thd->id, NULL);
pthread_cond_destroy(&thd->data_cond);
pthread_mutex_destroy(&thd->data_mutex);
pthread_cond_destroy(&thd->ctrl_cond);
pthread_mutex_destroy(&thd->ctrl_mutex);
my_free(thd->to);
} }
my_free(threads); my_free(threads);
@ -428,19 +404,9 @@ compress_worker_thread_func(void *arg)
{ {
comp_thread_ctxt_t *thd = (comp_thread_ctxt_t *) arg; comp_thread_ctxt_t *thd = (comp_thread_ctxt_t *) arg;
pthread_mutex_lock(&thd->ctrl_mutex);
pthread_mutex_lock(&thd->data_mutex); pthread_mutex_lock(&thd->data_mutex);
thd->started = TRUE;
pthread_cond_signal(&thd->ctrl_cond);
pthread_mutex_unlock(&thd->ctrl_mutex);
while (1) { while (1) {
thd->data_avail = FALSE;
pthread_cond_signal(&thd->data_cond);
while (!thd->data_avail && !thd->cancelled) { while (!thd->data_avail && !thd->cancelled) {
pthread_cond_wait(&thd->data_cond, &thd->data_mutex); pthread_cond_wait(&thd->data_cond, &thd->data_mutex);
} }

View File

@ -507,6 +507,21 @@ the section called \(lqMYSQL COMMANDS\(rq\&.
.sp -1 .sp -1
.IP \(bu 2.3 .IP \(bu 2.3
.\} .\}
.\" mysql: enable cleartext plugin option
.\" enable cleartext plugin option: mysql
\fB\-\-enable\-cleartext\-plugin\fR
.sp
Obsolete option\&. Exists only for MySQL compatibility\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
.\" mysql: execute option .\" mysql: execute option
.\" execute option: mysql .\" execute option: mysql
\fB\-\-execute=\fR\fB\fIstatement\fR\fR, \fB\-\-execute=\fR\fB\fIstatement\fR\fR,

View File

@ -629,4 +629,7 @@ drop table t1;
# #
# MDEV-15538 '-N' Produce html output wrong # MDEV-15538 '-N' Produce html output wrong
# #
<TABLE BORDER=1><TR><TD>1</TD></TR></TABLE> <TABLE BORDER=1><TR><TD>1</TD></TR></TABLE>
WARNING: option '--enable-cleartext-plugin' is obsolete.
1
1

View File

@ -708,3 +708,11 @@ drop table t1;
--echo # MDEV-15538 '-N' Produce html output wrong --echo # MDEV-15538 '-N' Produce html output wrong
--echo # --echo #
--exec $MYSQL -NHe "select 1 as a" --exec $MYSQL -NHe "select 1 as a"
#
# Test obsolete option --enable-cleartext-plugin
# This should proceed with a warning
#
--echo
--exec $MYSQL test --enable-cleartext-plugin -e "select 1"

View File

@ -6,7 +6,18 @@ drop table if exists t1, t2;
CREATE TABLE t1 (a int); CREATE TABLE t1 (a int);
CREATE OR REPLACE VIEW v1 AS SELECT * FROM t1; CREATE OR REPLACE VIEW v1 AS SELECT * FROM t1;
ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE v1; ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE v1;
ERROR 42000: Can't open table ERROR HY000: 'test.v1' is not of type 'BASE TABLE'
DROP VIEW v1;
DROP TABLE t1;
#
# MDEV-28599 EXCHANGE PARTITION on view causes ER_CHECK_NO_SUCH_TABLE instead of ER_WRONG_OBJECT
#
CREATE TABLE t1 (a int)
PARTITION BY HASH (a)
PARTITIONS 2;
CREATE OR REPLACE VIEW v1 AS SELECT * FROM t1;
ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE v1;
ERROR HY000: 'test.v1' is not of type 'BASE TABLE'
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# #

View File

@ -16,7 +16,19 @@ let $MYSQLD_DATADIR= `SELECT @@datadir`;
--echo # --echo #
CREATE TABLE t1 (a int); CREATE TABLE t1 (a int);
CREATE OR REPLACE VIEW v1 AS SELECT * FROM t1; CREATE OR REPLACE VIEW v1 AS SELECT * FROM t1;
--error ER_CHECK_NO_SUCH_TABLE --error ER_WRONG_OBJECT
ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE v1;
DROP VIEW v1;
DROP TABLE t1;
--echo #
--echo # MDEV-28599 EXCHANGE PARTITION on view causes ER_CHECK_NO_SUCH_TABLE instead of ER_WRONG_OBJECT
--echo #
CREATE TABLE t1 (a int)
PARTITION BY HASH (a)
PARTITIONS 2;
CREATE OR REPLACE VIEW v1 AS SELECT * FROM t1;
--error ER_WRONG_OBJECT
ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE v1; ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE v1;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;

View File

@ -12,3 +12,6 @@ INSERT INTO t1 VALUES (NEXT VALUE FOR Seq1_1);
ERROR 23000: Duplicate entry '1' for key 'PRIMARY' ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
DROP SEQUENCE Seq1_1; DROP SEQUENCE Seq1_1;
DROP TABLE t1; DROP TABLE t1;
CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster.");
connection node_2;
CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster.");

View File

@ -0,0 +1,54 @@
connection node_2;
connection node_1;
CREATE SEQUENCE seq_nocache ENGINE=InnoDB;
DROP SEQUENCE seq_nocache;
CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster.");
connection node_2;
CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster.");
connection node_1;
CREATE SEQUENCE seq NOCACHE ENGINE=InnoDB;
SELECT NEXTVAL(seq) = 1;
NEXTVAL(seq) = 1
1
connection node_2;
SELECT NEXTVAL(seq) = 2;
NEXTVAL(seq) = 2
1
connection node_1;
SELECT NEXTVAL(seq) = 3;
NEXTVAL(seq) = 3
1
SELECT SETVAL(seq, 100);
SETVAL(seq, 100)
100
connection node_2;
SELECT NEXTVAL(seq) = 101;
NEXTVAL(seq) = 101
1
connection node_1;
SELECT NEXTVAL(seq) = 102;
NEXTVAL(seq) = 102
1
DROP SEQUENCE seq;
CREATE TABLE t1(f1 INT);
CREATE SEQUENCE seq_transaction NOCACHE ENGINE=InnoDB;
START TRANSACTION;
INSERT INTO t1 VALUES (0);
SELECT NEXTVAL(seq_transaction);
NEXTVAL(seq_transaction)
1
INSERT INTO t1 VALUES (NEXTVAL(seq_transaction));
COMMIT;
connection node_2;
SELECT COUNT(*) = 2 FROM t1;
COUNT(*) = 2
1
SELECT NEXTVAL(seq_transaction) = 3;
NEXTVAL(seq_transaction) = 3
1
connection node_1;
SELECT NEXTVAL(seq_transaction) = 4;
NEXTVAL(seq_transaction) = 4
1
DROP SEQUENCE seq_transaction;
DROP TABLE t1;

View File

@ -1,27 +1,27 @@
--- r/galera_ist_MDEV-28423.result --- r/galera_ist_MDEV-28423.result
+++ r/galera_ist_MDEV-28423,debug.reject +++ r/galera_ist_MDEV-28423.reject
@@ -517,3 +517,187 @@ @@ -286,3 +286,111 @@
1
DROP TABLE t1; DROP TABLE t1;
COMMIT; COMMIT;
SET AUTOCOMMIT=ON;
+Performing State Transfer on a server that has been killed and restarted +Performing State Transfer on a server that has been killed and restarted
+while a DDL was in progress on it +while a DDL was in progress on it
+connection node_1; +connection node_1;
+CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB; +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
+SET AUTOCOMMIT=OFF; +SET AUTOCOMMIT=OFF;
+START TRANSACTION; +START TRANSACTION;
+INSERT INTO t1 VALUES (1,'node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before');
+INSERT INTO t1 VALUES (2,'node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before');
+INSERT INTO t1 VALUES (3,'node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before');
+INSERT INTO t1 VALUES (4,'node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before');
+INSERT INTO t1 VALUES (5,'node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before');
+connection node_2; +connection node_2;
+START TRANSACTION; +START TRANSACTION;
+INSERT INTO t1 VALUES (6,'node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before');
+INSERT INTO t1 VALUES (7,'node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before');
+INSERT INTO t1 VALUES (8,'node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before');
+INSERT INTO t1 VALUES (9,'node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before');
+INSERT INTO t1 VALUES (10,'node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before');
+COMMIT; +COMMIT;
+SET GLOBAL debug_dbug = 'd,sync.alter_opened_table'; +SET GLOBAL debug_dbug = 'd,sync.alter_opened_table';
+connection node_1; +connection node_1;
@ -32,26 +32,26 @@
+connection node_1; +connection node_1;
+SET AUTOCOMMIT=OFF; +SET AUTOCOMMIT=OFF;
+START TRANSACTION; +START TRANSACTION;
+INSERT INTO t1 (id,f1) VALUES (11,'node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during');
+INSERT INTO t1 (id,f1) VALUES (12,'node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during');
+INSERT INTO t1 (id,f1) VALUES (13,'node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during');
+INSERT INTO t1 (id,f1) VALUES (14,'node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during');
+INSERT INTO t1 (id,f1) VALUES (15,'node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during');
+COMMIT; +COMMIT;
+START TRANSACTION; +START TRANSACTION;
+INSERT INTO t1 (id,f1) VALUES (16,'node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (17,'node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (18,'node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (19,'node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (20,'node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+connect node_1a_galera_st_kill_slave_ddl, 127.0.0.1, root, , test, $NODE_MYPORT_1; +connect node_1a_galera_st_kill_slave_ddl, 127.0.0.1, root, , test, $NODE_MYPORT_1;
+SET AUTOCOMMIT=OFF; +SET AUTOCOMMIT=OFF;
+START TRANSACTION; +START TRANSACTION;
+INSERT INTO t1 (id,f1) VALUES (21,'node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (22,'node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (23,'node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (24,'node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (25,'node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+connection node_2; +connection node_2;
+Performing --wsrep-recover ... +Performing --wsrep-recover ...
+connection node_2; +connection node_2;
@ -59,132 +59,56 @@
+Using --wsrep-start-position when starting mysqld ... +Using --wsrep-start-position when starting mysqld ...
+SET AUTOCOMMIT=OFF; +SET AUTOCOMMIT=OFF;
+START TRANSACTION; +START TRANSACTION;
+INSERT INTO t1 (id,f1) VALUES (26,'node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after');
+INSERT INTO t1 (id,f1) VALUES (27,'node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after');
+INSERT INTO t1 (id,f1) VALUES (28,'node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after');
+INSERT INTO t1 (id,f1) VALUES (29,'node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after');
+INSERT INTO t1 (id,f1) VALUES (30,'node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after');
+COMMIT; +COMMIT;
+connection node_1; +connection node_1;
+INSERT INTO t1 (id,f1) VALUES (31,'node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (32,'node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (33,'node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (34,'node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (35,'node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+COMMIT; +COMMIT;
+SET AUTOCOMMIT=OFF; +SET AUTOCOMMIT=OFF;
+START TRANSACTION; +START TRANSACTION;
+INSERT INTO t1 (id,f1) VALUES (36,'node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after');
+INSERT INTO t1 (id,f1) VALUES (37,'node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after');
+INSERT INTO t1 (id,f1) VALUES (38,'node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after');
+INSERT INTO t1 (id,f1) VALUES (39,'node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after');
+INSERT INTO t1 (id,f1) VALUES (40,'node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after');
+COMMIT; +COMMIT;
+connection node_1a_galera_st_kill_slave_ddl; +connection node_1a_galera_st_kill_slave_ddl;
+INSERT INTO t1 (id,f1) VALUES (41,'node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (42,'node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (43,'node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (44,'node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (45,'node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+ROLLBACK; +ROLLBACK;
+SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
+SET SESSION wsrep_sync_wait=15; +COUNT(*) = 2
+SELECT COUNT(*) AS EXPECT_3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +1
+EXPECT_3 +SELECT COUNT(*) = 35 FROM t1;
+3 +COUNT(*) = 35
+SELECT COUNT(*) AS EXPECT_35 FROM t1; +1
+EXPECT_35
+35
+SELECT * FROM t1;
+id f1 f2
+1 node1_committed_before NULL
+2 node1_committed_before NULL
+3 node1_committed_before NULL
+4 node1_committed_before NULL
+5 node1_committed_before NULL
+6 node2_committed_before NULL
+7 node2_committed_before NULL
+8 node2_committed_before NULL
+9 node2_committed_before NULL
+10 node2_committed_before NULL
+11 node1_committed_during NULL
+12 node1_committed_during NULL
+13 node1_committed_during NULL
+14 node1_committed_during NULL
+15 node1_committed_during NULL
+16 node1_to_be_committed_after NULL
+17 node1_to_be_committed_after NULL
+18 node1_to_be_committed_after NULL
+19 node1_to_be_committed_after NULL
+20 node1_to_be_committed_after NULL
+26 node2_committed_after NULL
+27 node2_committed_after NULL
+28 node2_committed_after NULL
+29 node2_committed_after NULL
+30 node2_committed_after NULL
+31 node1_to_be_committed_after NULL
+32 node1_to_be_committed_after NULL
+33 node1_to_be_committed_after NULL
+34 node1_to_be_committed_after NULL
+35 node1_to_be_committed_after NULL
+36 node1_committed_after NULL
+37 node1_committed_after NULL
+38 node1_committed_after NULL
+39 node1_committed_after NULL
+40 node1_committed_after NULL
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
+COUNT(*) = 0 +COUNT(*) = 0
+1 +1
+COMMIT; +COMMIT;
+connection node_1;
+SET AUTOCOMMIT=ON; +SET AUTOCOMMIT=ON;
+SET SESSION wsrep_sync_wait=15; +connection node_1;
+SELECT COUNT(*) AS EXPECT_3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
+EXPECT_3 +COUNT(*) = 2
+3 +1
+SELECT COUNT(*) AS EXPECT_35 FROM t1; +SELECT COUNT(*) = 35 FROM t1;
+EXPECT_35 +COUNT(*) = 35
+35 +1
+SELECT * FROM t1;
+id f1 f2
+1 node1_committed_before NULL
+2 node1_committed_before NULL
+3 node1_committed_before NULL
+4 node1_committed_before NULL
+5 node1_committed_before NULL
+6 node2_committed_before NULL
+7 node2_committed_before NULL
+8 node2_committed_before NULL
+9 node2_committed_before NULL
+10 node2_committed_before NULL
+11 node1_committed_during NULL
+12 node1_committed_during NULL
+13 node1_committed_during NULL
+14 node1_committed_during NULL
+15 node1_committed_during NULL
+16 node1_to_be_committed_after NULL
+17 node1_to_be_committed_after NULL
+18 node1_to_be_committed_after NULL
+19 node1_to_be_committed_after NULL
+20 node1_to_be_committed_after NULL
+26 node2_committed_after NULL
+27 node2_committed_after NULL
+28 node2_committed_after NULL
+29 node2_committed_after NULL
+30 node2_committed_after NULL
+31 node1_to_be_committed_after NULL
+32 node1_to_be_committed_after NULL
+33 node1_to_be_committed_after NULL
+34 node1_to_be_committed_after NULL
+35 node1_to_be_committed_after NULL
+36 node1_committed_after NULL
+37 node1_committed_after NULL
+38 node1_committed_after NULL
+39 node1_committed_after NULL
+40 node1_committed_after NULL
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
+COUNT(*) = 0 +COUNT(*) = 0
+1 +1
+DROP TABLE t1; +DROP TABLE t1;
+COMMIT; +COMMIT;
+SET AUTOCOMMIT=ON;
+SET GLOBAL debug_dbug = $debug_orig; +SET GLOBAL debug_dbug = $debug_orig;

View File

@ -1,519 +1,287 @@
connection node_2;
connection node_1;
connection node_1; connection node_1;
connection node_2; connection node_2;
Performing State Transfer on a server that has been temporarily disconnected Performing State Transfer on a server that has been temporarily disconnected
connection node_1; connection node_1;
CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB; CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (1,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (2,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (3,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (4,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (5,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
COMMIT; COMMIT;
connection node_2; connection node_2;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (6,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (7,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (8,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (9,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (10,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
COMMIT; COMMIT;
Unloading wsrep provider ... Unloading wsrep provider ...
SET GLOBAL wsrep_cluster_address = ''; SET GLOBAL wsrep_cluster_address = '';
connection node_1; connection node_1;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (11,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (12,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (13,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (14,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (15,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
COMMIT; COMMIT;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (16,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (17,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (18,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (19,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (20,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
connect node_1a_galera_st_disconnect_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1; connect node_1a_galera_st_disconnect_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (21,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (22,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (23,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (24,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (25,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
connection node_2; connection node_2;
Loading wsrep provider ... Loading wsrep provider ...
disconnect node_2;
connect node_2, 127.0.0.1, root, , test, $NODE_MYPORT_2;
connection node_2;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (26,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (27,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (28,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (29,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (30,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
COMMIT; COMMIT;
connection node_1; connection node_1;
INSERT INTO t1 VALUES (31,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (32,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (33,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (34,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (35,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
COMMIT; COMMIT;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (36,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (37,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (38,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (39,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (40,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
COMMIT; COMMIT;
connection node_1a_galera_st_disconnect_slave; connection node_1a_galera_st_disconnect_slave;
INSERT INTO t1 VALUES (41,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (42,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (43,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (44,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (45,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
ROLLBACK; ROLLBACK;
SET AUTOCOMMIT=ON; SELECT COUNT(*) = 35 FROM t1;
SET SESSION wsrep_sync_wait=15; COUNT(*) = 35
SELECT COUNT(*) AS EXPECT_35 FROM t1; 1
EXPECT_35
35
SELECT * FROM t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0 COUNT(*) = 0
1 1
connection node_1; COMMIT;
SET AUTOCOMMIT=ON; SET AUTOCOMMIT=ON;
SET SESSION wsrep_sync_wait=15; connection node_1;
SELECT COUNT(*) AS EXPECT_35 FROM t1; SELECT COUNT(*) = 35 FROM t1;
EXPECT_35 COUNT(*) = 35
35 1
SELECT * FROM t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0 COUNT(*) = 0
1 1
DROP TABLE t1; DROP TABLE t1;
COMMIT; COMMIT;
SET AUTOCOMMIT=ON;
Performing State Transfer on a server that has been shut down cleanly and restarted Performing State Transfer on a server that has been shut down cleanly and restarted
connection node_1; connection node_1;
CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB; CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (1,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (2,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (3,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (4,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (5,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
COMMIT; COMMIT;
connection node_2; connection node_2;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (6,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (7,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (8,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (9,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (10,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
COMMIT; COMMIT;
Shutting down server ... Shutting down server ...
connection node_1; connection node_1;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (11,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (12,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (13,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (14,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (15,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
COMMIT; COMMIT;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (16,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (17,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (18,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (19,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (20,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
connect node_1a_galera_st_shutdown_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1; connect node_1a_galera_st_shutdown_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (21,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (22,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (23,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (24,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (25,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
connection node_2; connection node_2;
Starting server ... Starting server ...
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (26,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (27,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (28,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (29,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (30,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
COMMIT; COMMIT;
connection node_1; connection node_1;
INSERT INTO t1 VALUES (31,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (32,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (33,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (34,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (35,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
COMMIT; COMMIT;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (36,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (37,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (38,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (39,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (40,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
COMMIT; COMMIT;
connection node_1a_galera_st_shutdown_slave; connection node_1a_galera_st_shutdown_slave;
INSERT INTO t1 VALUES (41,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (42,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (43,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (44,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (45,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
ROLLBACK; ROLLBACK;
SET AUTOCOMMIT=ON; SELECT COUNT(*) = 35 FROM t1;
SET SESSION wsrep_sync_wait=15; COUNT(*) = 35
SELECT COUNT(*) AS EXPECT_15 FROM t1; 1
EXPECT_15
35
SELECT * from t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0 COUNT(*) = 0
1 1
COMMIT; COMMIT;
connection node_1;
SET AUTOCOMMIT=ON; SET AUTOCOMMIT=ON;
SET SESSION wsrep_sync_wait=15; connection node_1;
SELECT COUNT(*) AS EXPECT_15 FROM t1; SELECT COUNT(*) = 35 FROM t1;
EXPECT_15 COUNT(*) = 35
35 1
SELECT * from t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0 COUNT(*) = 0
1 1
DROP TABLE t1; DROP TABLE t1;
COMMIT; COMMIT;
SET AUTOCOMMIT=ON;
Performing State Transfer on a server that has been killed and restarted Performing State Transfer on a server that has been killed and restarted
connection node_1; connection node_1;
CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB; CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (1,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (2,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (3,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (4,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (5,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
COMMIT; COMMIT;
connection node_2; connection node_2;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (6,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (7,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (8,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (9,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (10,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
COMMIT; COMMIT;
Killing server ... Killing server ...
connection node_1; connection node_1;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (11,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (12,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (13,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (14,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (15,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
COMMIT; COMMIT;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (16,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (17,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (18,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (19,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (20,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
connect node_1a_galera_st_kill_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1; connect node_1a_galera_st_kill_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (21,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (22,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (23,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (24,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (25,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
connection node_2; connection node_2;
Performing --wsrep-recover ... Performing --wsrep-recover ...
Starting server ... Starting server ...
Using --wsrep-start-position when starting mysqld ... Using --wsrep-start-position when starting mysqld ...
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (26,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (27,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (28,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (29,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (30,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
COMMIT; COMMIT;
connection node_1; connection node_1;
INSERT INTO t1 VALUES (31,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (32,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (33,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (34,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (35,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
COMMIT; COMMIT;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (36,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (37,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (38,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (39,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (40,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
COMMIT; COMMIT;
connection node_1a_galera_st_kill_slave; connection node_1a_galera_st_kill_slave;
INSERT INTO t1 VALUES (41,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (42,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (43,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (45,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (46,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
ROLLBACK; ROLLBACK;
SET AUTOCOMMIT=ON; SELECT COUNT(*) = 35 FROM t1;
SET SESSION wsrep_sync_wait=15; COUNT(*) = 35
SELECT COUNT(*) AS EXPECT_35 FROM t1; 1
EXPECT_35
35
SELECT * FROM t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0 COUNT(*) = 0
1 1
COMMIT; COMMIT;
connection node_1;
SET AUTOCOMMIT=ON; SET AUTOCOMMIT=ON;
SET SESSION wsrep_sync_wait=15; connection node_1;
SELECT COUNT(*) AS EXPECT_35 FROM t1; SELECT COUNT(*) = 35 FROM t1;
EXPECT_35 COUNT(*) = 35
35 1
SELECT * FROM t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0 COUNT(*) = 0
1 1
DROP TABLE t1; DROP TABLE t1;
COMMIT; COMMIT;
SET AUTOCOMMIT=ON;

View File

@ -1,27 +1,27 @@
--- r/galera_ist_MDEV-28583.result --- r/galera_ist_MDEV-28583.result
+++ r/galera_ist_MDEV-28583,debug.reject +++ r/galera_ist_MDEV-28583.reject
@@ -517,3 +517,187 @@ @@ -285,3 +285,111 @@
1
DROP TABLE t1; DROP TABLE t1;
COMMIT; COMMIT;
SET AUTOCOMMIT=ON;
+Performing State Transfer on a server that has been killed and restarted +Performing State Transfer on a server that has been killed and restarted
+while a DDL was in progress on it +while a DDL was in progress on it
+connection node_1; +connection node_1;
+CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB; +CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
+SET AUTOCOMMIT=OFF; +SET AUTOCOMMIT=OFF;
+START TRANSACTION; +START TRANSACTION;
+INSERT INTO t1 VALUES (1,'node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before');
+INSERT INTO t1 VALUES (2,'node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before');
+INSERT INTO t1 VALUES (3,'node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before');
+INSERT INTO t1 VALUES (4,'node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before');
+INSERT INTO t1 VALUES (5,'node1_committed_before'); +INSERT INTO t1 VALUES ('node1_committed_before');
+connection node_2; +connection node_2;
+START TRANSACTION; +START TRANSACTION;
+INSERT INTO t1 VALUES (6,'node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before');
+INSERT INTO t1 VALUES (7,'node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before');
+INSERT INTO t1 VALUES (8,'node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before');
+INSERT INTO t1 VALUES (9,'node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before');
+INSERT INTO t1 VALUES (10,'node2_committed_before'); +INSERT INTO t1 VALUES ('node2_committed_before');
+COMMIT; +COMMIT;
+SET GLOBAL debug_dbug = 'd,sync.alter_opened_table'; +SET GLOBAL debug_dbug = 'd,sync.alter_opened_table';
+connection node_1; +connection node_1;
@ -32,26 +32,26 @@
+connection node_1; +connection node_1;
+SET AUTOCOMMIT=OFF; +SET AUTOCOMMIT=OFF;
+START TRANSACTION; +START TRANSACTION;
+INSERT INTO t1 (id,f1) VALUES (11,'node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during');
+INSERT INTO t1 (id,f1) VALUES (12,'node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during');
+INSERT INTO t1 (id,f1) VALUES (13,'node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during');
+INSERT INTO t1 (id,f1) VALUES (14,'node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during');
+INSERT INTO t1 (id,f1) VALUES (15,'node1_committed_during'); +INSERT INTO t1 (f1) VALUES ('node1_committed_during');
+COMMIT; +COMMIT;
+START TRANSACTION; +START TRANSACTION;
+INSERT INTO t1 (id,f1) VALUES (16,'node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (17,'node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (18,'node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (19,'node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (20,'node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+connect node_1a_galera_st_kill_slave_ddl, 127.0.0.1, root, , test, $NODE_MYPORT_1; +connect node_1a_galera_st_kill_slave_ddl, 127.0.0.1, root, , test, $NODE_MYPORT_1;
+SET AUTOCOMMIT=OFF; +SET AUTOCOMMIT=OFF;
+START TRANSACTION; +START TRANSACTION;
+INSERT INTO t1 (id,f1) VALUES (21,'node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (22,'node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (23,'node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (24,'node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (25,'node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+connection node_2; +connection node_2;
+Performing --wsrep-recover ... +Performing --wsrep-recover ...
+connection node_2; +connection node_2;
@ -59,132 +59,56 @@
+Using --wsrep-start-position when starting mysqld ... +Using --wsrep-start-position when starting mysqld ...
+SET AUTOCOMMIT=OFF; +SET AUTOCOMMIT=OFF;
+START TRANSACTION; +START TRANSACTION;
+INSERT INTO t1 (id,f1) VALUES (26,'node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after');
+INSERT INTO t1 (id,f1) VALUES (27,'node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after');
+INSERT INTO t1 (id,f1) VALUES (28,'node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after');
+INSERT INTO t1 (id,f1) VALUES (29,'node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after');
+INSERT INTO t1 (id,f1) VALUES (30,'node2_committed_after'); +INSERT INTO t1 (f1) VALUES ('node2_committed_after');
+COMMIT; +COMMIT;
+connection node_1; +connection node_1;
+INSERT INTO t1 (id,f1) VALUES (31,'node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (32,'node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (33,'node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (34,'node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+INSERT INTO t1 (id,f1) VALUES (35,'node1_to_be_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_committed_after');
+COMMIT; +COMMIT;
+SET AUTOCOMMIT=OFF; +SET AUTOCOMMIT=OFF;
+START TRANSACTION; +START TRANSACTION;
+INSERT INTO t1 (id,f1) VALUES (36,'node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after');
+INSERT INTO t1 (id,f1) VALUES (37,'node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after');
+INSERT INTO t1 (id,f1) VALUES (38,'node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after');
+INSERT INTO t1 (id,f1) VALUES (39,'node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after');
+INSERT INTO t1 (id,f1) VALUES (40,'node1_committed_after'); +INSERT INTO t1 (f1) VALUES ('node1_committed_after');
+COMMIT; +COMMIT;
+connection node_1a_galera_st_kill_slave_ddl; +connection node_1a_galera_st_kill_slave_ddl;
+INSERT INTO t1 (id,f1) VALUES (41,'node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (42,'node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (43,'node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (44,'node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+INSERT INTO t1 (id,f1) VALUES (45,'node1_to_be_rollbacked_after'); +INSERT INTO t1 (f1) VALUES ('node1_to_be_rollbacked_after');
+ROLLBACK; +ROLLBACK;
+SET AUTOCOMMIT=ON; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
+SET SESSION wsrep_sync_wait=15; +COUNT(*) = 2
+SELECT COUNT(*) AS EXPECT_3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +1
+EXPECT_3 +SELECT COUNT(*) = 35 FROM t1;
+3 +COUNT(*) = 35
+SELECT COUNT(*) AS EXPECT_35 FROM t1; +1
+EXPECT_35
+35
+SELECT * FROM t1;
+id f1 f2
+1 node1_committed_before NULL
+2 node1_committed_before NULL
+3 node1_committed_before NULL
+4 node1_committed_before NULL
+5 node1_committed_before NULL
+6 node2_committed_before NULL
+7 node2_committed_before NULL
+8 node2_committed_before NULL
+9 node2_committed_before NULL
+10 node2_committed_before NULL
+11 node1_committed_during NULL
+12 node1_committed_during NULL
+13 node1_committed_during NULL
+14 node1_committed_during NULL
+15 node1_committed_during NULL
+16 node1_to_be_committed_after NULL
+17 node1_to_be_committed_after NULL
+18 node1_to_be_committed_after NULL
+19 node1_to_be_committed_after NULL
+20 node1_to_be_committed_after NULL
+26 node2_committed_after NULL
+27 node2_committed_after NULL
+28 node2_committed_after NULL
+29 node2_committed_after NULL
+30 node2_committed_after NULL
+31 node1_to_be_committed_after NULL
+32 node1_to_be_committed_after NULL
+33 node1_to_be_committed_after NULL
+34 node1_to_be_committed_after NULL
+35 node1_to_be_committed_after NULL
+36 node1_committed_after NULL
+37 node1_committed_after NULL
+38 node1_committed_after NULL
+39 node1_committed_after NULL
+40 node1_committed_after NULL
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
+COUNT(*) = 0 +COUNT(*) = 0
+1 +1
+COMMIT; +COMMIT;
+connection node_1;
+SET AUTOCOMMIT=ON; +SET AUTOCOMMIT=ON;
+SET SESSION wsrep_sync_wait=15; +connection node_1;
+SELECT COUNT(*) AS EXPECT_3 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1'; +SELECT COUNT(*) = 2 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't1';
+EXPECT_3 +COUNT(*) = 2
+3 +1
+SELECT COUNT(*) AS EXPECT_35 FROM t1; +SELECT COUNT(*) = 35 FROM t1;
+EXPECT_35 +COUNT(*) = 35
+35 +1
+SELECT * FROM t1;
+id f1 f2
+1 node1_committed_before NULL
+2 node1_committed_before NULL
+3 node1_committed_before NULL
+4 node1_committed_before NULL
+5 node1_committed_before NULL
+6 node2_committed_before NULL
+7 node2_committed_before NULL
+8 node2_committed_before NULL
+9 node2_committed_before NULL
+10 node2_committed_before NULL
+11 node1_committed_during NULL
+12 node1_committed_during NULL
+13 node1_committed_during NULL
+14 node1_committed_during NULL
+15 node1_committed_during NULL
+16 node1_to_be_committed_after NULL
+17 node1_to_be_committed_after NULL
+18 node1_to_be_committed_after NULL
+19 node1_to_be_committed_after NULL
+20 node1_to_be_committed_after NULL
+26 node2_committed_after NULL
+27 node2_committed_after NULL
+28 node2_committed_after NULL
+29 node2_committed_after NULL
+30 node2_committed_after NULL
+31 node1_to_be_committed_after NULL
+32 node1_to_be_committed_after NULL
+33 node1_to_be_committed_after NULL
+34 node1_to_be_committed_after NULL
+35 node1_to_be_committed_after NULL
+36 node1_committed_after NULL
+37 node1_committed_after NULL
+38 node1_committed_after NULL
+39 node1_committed_after NULL
+40 node1_committed_after NULL
+SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; +SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
+COUNT(*) = 0 +COUNT(*) = 0
+1 +1
+DROP TABLE t1; +DROP TABLE t1;
+COMMIT; +COMMIT;
+SET AUTOCOMMIT=ON;
+SET GLOBAL debug_dbug = $debug_orig; +SET GLOBAL debug_dbug = $debug_orig;

View File

@ -1,519 +1,287 @@
connection node_2;
connection node_1;
connection node_1; connection node_1;
connection node_2; connection node_2;
Performing State Transfer on a server that has been temporarily disconnected Performing State Transfer on a server that has been temporarily disconnected
connection node_1; connection node_1;
CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB; CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (1,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (2,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (3,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (4,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (5,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
COMMIT; COMMIT;
connection node_2; connection node_2;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (6,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (7,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (8,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (9,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (10,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
COMMIT; COMMIT;
Unloading wsrep provider ... Unloading wsrep provider ...
SET GLOBAL wsrep_cluster_address = ''; SET GLOBAL wsrep_cluster_address = '';
connection node_1; connection node_1;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (11,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (12,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (13,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (14,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (15,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
COMMIT; COMMIT;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (16,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (17,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (18,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (19,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (20,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
connect node_1a_galera_st_disconnect_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1; connect node_1a_galera_st_disconnect_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (21,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (22,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (23,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (24,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (25,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
connection node_2; connection node_2;
Loading wsrep provider ... Loading wsrep provider ...
disconnect node_2;
connect node_2, 127.0.0.1, root, , test, $NODE_MYPORT_2;
connection node_2;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (26,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (27,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (28,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (29,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (30,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
COMMIT; COMMIT;
connection node_1; connection node_1;
INSERT INTO t1 VALUES (31,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (32,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (33,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (34,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (35,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
COMMIT; COMMIT;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (36,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (37,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (38,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (39,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (40,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
COMMIT; COMMIT;
connection node_1a_galera_st_disconnect_slave; connection node_1a_galera_st_disconnect_slave;
INSERT INTO t1 VALUES (41,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (42,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (43,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (44,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (45,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
ROLLBACK; ROLLBACK;
SET AUTOCOMMIT=ON; SELECT COUNT(*) = 35 FROM t1;
SET SESSION wsrep_sync_wait=15; COUNT(*) = 35
SELECT COUNT(*) AS EXPECT_35 FROM t1; 1
EXPECT_35
35
SELECT * FROM t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0 COUNT(*) = 0
1 1
connection node_1; COMMIT;
SET AUTOCOMMIT=ON; SET AUTOCOMMIT=ON;
SET SESSION wsrep_sync_wait=15; connection node_1;
SELECT COUNT(*) AS EXPECT_35 FROM t1; SELECT COUNT(*) = 35 FROM t1;
EXPECT_35 COUNT(*) = 35
35 1
SELECT * FROM t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0 COUNT(*) = 0
1 1
DROP TABLE t1; DROP TABLE t1;
COMMIT; COMMIT;
SET AUTOCOMMIT=ON;
Performing State Transfer on a server that has been shut down cleanly and restarted Performing State Transfer on a server that has been shut down cleanly and restarted
connection node_1; connection node_1;
CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB; CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (1,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (2,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (3,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (4,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (5,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
COMMIT; COMMIT;
connection node_2; connection node_2;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (6,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (7,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (8,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (9,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (10,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
COMMIT; COMMIT;
Shutting down server ... Shutting down server ...
connection node_1; connection node_1;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (11,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (12,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (13,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (14,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (15,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
COMMIT; COMMIT;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (16,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (17,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (18,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (19,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (20,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
connect node_1a_galera_st_shutdown_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1; connect node_1a_galera_st_shutdown_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (21,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (22,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (23,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (24,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (25,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
connection node_2; connection node_2;
Starting server ... Starting server ...
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (26,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (27,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (28,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (29,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (30,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
COMMIT; COMMIT;
connection node_1; connection node_1;
INSERT INTO t1 VALUES (31,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (32,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (33,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (34,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (35,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
COMMIT; COMMIT;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (36,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (37,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (38,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (39,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (40,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
COMMIT; COMMIT;
connection node_1a_galera_st_shutdown_slave; connection node_1a_galera_st_shutdown_slave;
INSERT INTO t1 VALUES (41,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (42,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (43,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (44,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (45,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
ROLLBACK; ROLLBACK;
SET AUTOCOMMIT=ON; SELECT COUNT(*) = 35 FROM t1;
SET SESSION wsrep_sync_wait=15; COUNT(*) = 35
SELECT COUNT(*) AS EXPECT_15 FROM t1; 1
EXPECT_15
35
SELECT * from t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0 COUNT(*) = 0
1 1
COMMIT; COMMIT;
connection node_1;
SET AUTOCOMMIT=ON; SET AUTOCOMMIT=ON;
SET SESSION wsrep_sync_wait=15; connection node_1;
SELECT COUNT(*) AS EXPECT_15 FROM t1; SELECT COUNT(*) = 35 FROM t1;
EXPECT_15 COUNT(*) = 35
35 1
SELECT * from t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0 COUNT(*) = 0
1 1
DROP TABLE t1; DROP TABLE t1;
COMMIT; COMMIT;
SET AUTOCOMMIT=ON;
Performing State Transfer on a server that has been killed and restarted Performing State Transfer on a server that has been killed and restarted
connection node_1; connection node_1;
CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB; CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (1,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (2,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (3,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (4,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
INSERT INTO t1 VALUES (5,'node1_committed_before'); INSERT INTO t1 VALUES ('node1_committed_before');
COMMIT; COMMIT;
connection node_2; connection node_2;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (6,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (7,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (8,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (9,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
INSERT INTO t1 VALUES (10,'node2_committed_before'); INSERT INTO t1 VALUES ('node2_committed_before');
COMMIT; COMMIT;
Killing server ... Killing server ...
connection node_1; connection node_1;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (11,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (12,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (13,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (14,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
INSERT INTO t1 VALUES (15,'node1_committed_during'); INSERT INTO t1 VALUES ('node1_committed_during');
COMMIT; COMMIT;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (16,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (17,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (18,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (19,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (20,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
connect node_1a_galera_st_kill_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1; connect node_1a_galera_st_kill_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (21,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (22,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (23,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (24,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (25,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
connection node_2; connection node_2;
Performing --wsrep-recover ... Performing --wsrep-recover ...
Starting server ... Starting server ...
Using --wsrep-start-position when starting mysqld ... Using --wsrep-start-position when starting mysqld ...
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (26,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (27,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (28,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (29,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
INSERT INTO t1 VALUES (30,'node2_committed_after'); INSERT INTO t1 VALUES ('node2_committed_after');
COMMIT; COMMIT;
connection node_1; connection node_1;
INSERT INTO t1 VALUES (31,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (32,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (33,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (34,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
INSERT INTO t1 VALUES (35,'node1_to_be_committed_after'); INSERT INTO t1 VALUES ('node1_to_be_committed_after');
COMMIT; COMMIT;
SET AUTOCOMMIT=OFF; SET AUTOCOMMIT=OFF;
START TRANSACTION; START TRANSACTION;
INSERT INTO t1 VALUES (36,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (37,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (38,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (39,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
INSERT INTO t1 VALUES (40,'node1_committed_after'); INSERT INTO t1 VALUES ('node1_committed_after');
COMMIT; COMMIT;
connection node_1a_galera_st_kill_slave; connection node_1a_galera_st_kill_slave;
INSERT INTO t1 VALUES (41,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (42,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (43,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (45,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
INSERT INTO t1 VALUES (46,'node1_to_be_rollbacked_after'); INSERT INTO t1 VALUES ('node1_to_be_rollbacked_after');
ROLLBACK; ROLLBACK;
SET AUTOCOMMIT=ON; SELECT COUNT(*) = 35 FROM t1;
SET SESSION wsrep_sync_wait=15; COUNT(*) = 35
SELECT COUNT(*) AS EXPECT_35 FROM t1; 1
EXPECT_35
35
SELECT * FROM t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0 COUNT(*) = 0
1 1
COMMIT; COMMIT;
connection node_1;
SET AUTOCOMMIT=ON; SET AUTOCOMMIT=ON;
SET SESSION wsrep_sync_wait=15; connection node_1;
SELECT COUNT(*) AS EXPECT_35 FROM t1; SELECT COUNT(*) = 35 FROM t1;
EXPECT_35 COUNT(*) = 35
35 1
SELECT * FROM t1;
id f1
1 node1_committed_before
2 node1_committed_before
3 node1_committed_before
4 node1_committed_before
5 node1_committed_before
6 node2_committed_before
7 node2_committed_before
8 node2_committed_before
9 node2_committed_before
10 node2_committed_before
11 node1_committed_during
12 node1_committed_during
13 node1_committed_during
14 node1_committed_during
15 node1_committed_during
16 node1_to_be_committed_after
17 node1_to_be_committed_after
18 node1_to_be_committed_after
19 node1_to_be_committed_after
20 node1_to_be_committed_after
26 node2_committed_after
27 node2_committed_after
28 node2_committed_after
29 node2_committed_after
30 node2_committed_after
31 node1_to_be_committed_after
32 node1_to_be_committed_after
33 node1_to_be_committed_after
34 node1_to_be_committed_after
35 node1_to_be_committed_after
36 node1_committed_after
37 node1_committed_after
38 node1_committed_after
39 node1_committed_after
40 node1_committed_after
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1; SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
COUNT(*) = 0 COUNT(*) = 0
1 1
DROP TABLE t1; DROP TABLE t1;
COMMIT; COMMIT;
SET AUTOCOMMIT=ON;

View File

@ -44,6 +44,9 @@ Table Create Table
Seq1_1 CREATE SEQUENCE `Seq1_1` start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 1 cache 1000 nocycle ENGINE=InnoDB Seq1_1 CREATE SEQUENCE `Seq1_1` start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 1 cache 1000 nocycle ENGINE=InnoDB
select NEXT VALUE FOR Seq1_1; select NEXT VALUE FOR Seq1_1;
NEXT VALUE FOR Seq1_1 NEXT VALUE FOR Seq1_1
1 3001
connection node_1; connection node_1;
DROP SEQUENCE Seq1_1; DROP SEQUENCE Seq1_1;
CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster.");
connection node_2;
CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster.");

View File

@ -13,3 +13,11 @@ CREATE SEQUENCE Seq1_1 START WITH 1 INCREMENT BY 1;
INSERT INTO t1 VALUES (NEXT VALUE FOR Seq1_1); INSERT INTO t1 VALUES (NEXT VALUE FOR Seq1_1);
DROP SEQUENCE Seq1_1; DROP SEQUENCE Seq1_1;
DROP TABLE t1; DROP TABLE t1;
# Supress warning for SEQUENCES that are declared without `NOCACHE` introduced with MDEV-27862
CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster.");
--connection node_2
CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster.");

View File

@ -0,0 +1,4 @@
[binlogoff]
[binlogon]
log-bin

View File

@ -0,0 +1,67 @@
--source include/galera_cluster.inc
--source include/have_innodb.inc
# Report WARNING when SEQUENCE is created without `NOCACHE`
CREATE SEQUENCE seq_nocache ENGINE=InnoDB;
DROP SEQUENCE seq_nocache;
CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster.");
--connection node_2
CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster.");
# NEXTVAL
--connection node_1
CREATE SEQUENCE seq NOCACHE ENGINE=InnoDB;
SELECT NEXTVAL(seq) = 1;
--connection node_2
SELECT NEXTVAL(seq) = 2;
--connection node_1
SELECT NEXTVAL(seq) = 3;
# SETVAL
SELECT SETVAL(seq, 100);
--connection node_2
SELECT NEXTVAL(seq) = 101;
--connection node_1
SELECT NEXTVAL(seq) = 102;
DROP SEQUENCE seq;
# TRANSACTIONS
CREATE TABLE t1(f1 INT);
CREATE SEQUENCE seq_transaction NOCACHE ENGINE=InnoDB;
START TRANSACTION;
INSERT INTO t1 VALUES (0);
SELECT NEXTVAL(seq_transaction);
INSERT INTO t1 VALUES (NEXTVAL(seq_transaction));
COMMIT;
--connection node_2
SELECT COUNT(*) = 2 FROM t1;
SELECT NEXTVAL(seq_transaction) = 3;
--connection node_1
SELECT NEXTVAL(seq_transaction) = 4;
DROP SEQUENCE seq_transaction;
DROP TABLE t1;

View File

@ -44,3 +44,9 @@ select NEXT VALUE FOR Seq1_1;
--connection node_1 --connection node_1
DROP SEQUENCE Seq1_1; DROP SEQUENCE Seq1_1;
CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster.");
--connection node_2
CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster.");

View File

@ -716,4 +716,18 @@ t1 CREATE TABLE `t1` (
FULLTEXT KEY `a_2` (`a`) FULLTEXT KEY `a_2` (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
DROP TABLE t1; DROP TABLE t1;
#
# MDEV-25257 SEGV in fts_get_next_doc_id upon some INSERT
#
SET @save = @@global.innodb_file_per_table;
SET @@global.innodb_file_per_table = 0;
CREATE TABLE t1 (
col_int INTEGER, col_text TEXT,
col_int_g INTEGER GENERATED ALWAYS AS (col_int)
) ENGINE = InnoDB ROW_FORMAT = Redundant ;
ALTER TABLE t1 ADD FULLTEXT KEY `ftidx` ( col_text ) ;
ALTER TABLE t1 DROP KEY `ftidx` ;
INSERT INTO t1 (col_int, col_text) VALUES ( 1255, NULL);
DROP TABLE t1;
SET @@global.innodb_file_per_table = @save;
# End of 10.3 tests # End of 10.3 tests

View File

@ -743,4 +743,20 @@ SHOW CREATE TABLE t1;
DROP TABLE t1; DROP TABLE t1;
--enable_warnings --enable_warnings
--echo #
--echo # MDEV-25257 SEGV in fts_get_next_doc_id upon some INSERT
--echo #
SET @save = @@global.innodb_file_per_table;
SET @@global.innodb_file_per_table = 0;
CREATE TABLE t1 (
col_int INTEGER, col_text TEXT,
col_int_g INTEGER GENERATED ALWAYS AS (col_int)
) ENGINE = InnoDB ROW_FORMAT = Redundant ;
ALTER TABLE t1 ADD FULLTEXT KEY `ftidx` ( col_text ) ;
ALTER TABLE t1 DROP KEY `ftidx` ;
INSERT INTO t1 (col_int, col_text) VALUES ( 1255, NULL);
DROP TABLE t1;
SET @@global.innodb_file_per_table = @save;
--echo # End of 10.3 tests --echo # End of 10.3 tests

View File

@ -86,7 +86,6 @@ encrypt_threads=""
encrypt_chunk="" encrypt_chunk=""
readonly SECRET_TAG='secret' readonly SECRET_TAG='secret'
readonly TOTAL_TAG='secret /total'
# Required for backup locks # Required for backup locks
# For backup locks it is 1 sent by joiner # For backup locks it is 1 sent by joiner
@ -419,7 +418,7 @@ get_transfer()
get_footprint() get_footprint()
{ {
pushd "$WSREP_SST_OPT_DATA" 1>/dev/null cd "$DATA_DIR"
payload=$(find . -regex '.*\.ibd$\|.*\.MYI$\|.*\.MYD$\|.*ibdata1$' \ payload=$(find . -regex '.*\.ibd$\|.*\.MYI$\|.*\.MYD$\|.*ibdata1$' \
-type f -print0 | du --files0-from=- --block-size=1 -c -s | \ -type f -print0 | du --files0-from=- --block-size=1 -c -s | \
awk 'END { print $1 }') awk 'END { print $1 }')
@ -428,7 +427,7 @@ get_footprint()
# When compression/compaction used, the progress is only an approximate. # When compression/compaction used, the progress is only an approximate.
payload=$(( payload*1/2 )) payload=$(( payload*1/2 ))
fi fi
popd 1>/dev/null cd "$OLD_PWD"
pcmd="$pcmd -s $payload" pcmd="$pcmd -s $payload"
adjust_progress adjust_progress
} }

View File

@ -452,6 +452,9 @@ static int sequence_initialize(void *p)
HTON_HIDDEN | HTON_HIDDEN |
HTON_TEMPORARY_NOT_SUPPORTED | HTON_TEMPORARY_NOT_SUPPORTED |
HTON_ALTER_NOT_SUPPORTED | HTON_ALTER_NOT_SUPPORTED |
#ifdef WITH_WSREP
HTON_WSREP_REPLICATION |
#endif
HTON_NO_PARTITION); HTON_NO_PARTITION);
DBUG_RETURN(0); DBUG_RETURN(0);
} }

View File

@ -2147,7 +2147,13 @@ static int binlog_commit(handlerton *hton, THD *thd, bool all)
thd->backup_stage(&org_stage); thd->backup_stage(&org_stage);
THD_STAGE_INFO(thd, stage_binlog_write); THD_STAGE_INFO(thd, stage_binlog_write);
#ifdef WITH_WSREP
// DON'T clear stmt cache in case we are in transaction
if (!cache_mngr->stmt_cache.empty() &&
(!wsrep_on(thd) || ending_trans(thd, all)))
#else
if (!cache_mngr->stmt_cache.empty()) if (!cache_mngr->stmt_cache.empty())
#endif
{ {
error= binlog_commit_flush_stmt_cache(thd, all, cache_mngr); error= binlog_commit_flush_stmt_cache(thd, all, cache_mngr);
} }
@ -11013,13 +11019,13 @@ maria_declare_plugin_end;
#ifdef WITH_WSREP #ifdef WITH_WSREP
#include "wsrep_mysqld.h" #include "wsrep_mysqld.h"
IO_CACHE *wsrep_get_trans_cache(THD * thd) IO_CACHE *wsrep_get_cache(THD * thd, bool is_transactional)
{ {
DBUG_ASSERT(binlog_hton->slot != HA_SLOT_UNDEF); DBUG_ASSERT(binlog_hton->slot != HA_SLOT_UNDEF);
binlog_cache_mngr *cache_mngr = (binlog_cache_mngr*) binlog_cache_mngr *cache_mngr = (binlog_cache_mngr*)
thd_get_ha_data(thd, binlog_hton); thd_get_ha_data(thd, binlog_hton);
if (cache_mngr) if (cache_mngr)
return cache_mngr->get_binlog_cache_log(true); return cache_mngr->get_binlog_cache_log(is_transactional);
WSREP_DEBUG("binlog cache not initialized, conn: %llu", WSREP_DEBUG("binlog cache not initialized, conn: %llu",
thd->thread_id); thd->thread_id);

View File

@ -1247,7 +1247,7 @@ static inline TC_LOG *get_tc_log_implementation()
} }
#ifdef WITH_WSREP #ifdef WITH_WSREP
IO_CACHE* wsrep_get_trans_cache(THD *); IO_CACHE* wsrep_get_cache(THD *, bool);
void wsrep_thd_binlog_trx_reset(THD * thd); void wsrep_thd_binlog_trx_reset(THD * thd);
void wsrep_thd_binlog_stmt_rollback(THD * thd); void wsrep_thd_binlog_stmt_rollback(THD * thd);
#endif /* WITH_WSREP */ #endif /* WITH_WSREP */

View File

@ -884,10 +884,12 @@ void partition_info::vers_check_limit(THD *thd)
bitmap_set_all(), but this is not optimal since there can be quite a number bitmap_set_all(), but this is not optimal since there can be quite a number
of partitions. of partitions.
*/ */
#ifndef DBUG_OFF
const uint32 sub_factor= num_subparts ? num_subparts : 1; const uint32 sub_factor= num_subparts ? num_subparts : 1;
uint32 part_id= vers_info->hist_part->id * sub_factor; uint32 part_id= vers_info->hist_part->id * sub_factor;
const uint32 part_id_end= part_id + sub_factor; const uint32 part_id_end= part_id + sub_factor;
DBUG_ASSERT(part_id_end <= num_parts * sub_factor); DBUG_ASSERT(part_id_end <= num_parts * sub_factor);
#endif
ha_partition *hp= (ha_partition*)(table->file); ha_partition *hp= (ha_partition*)(table->file);
ha_rows hist_rows= hp->part_records(vers_info->hist_part); ha_rows hist_rows= hp->part_records(vers_info->hist_part);

View File

@ -568,6 +568,14 @@ bool Sql_cmd_alter_table_exchange_partition::
part_table= table_list->table; part_table= table_list->table;
swap_table= swap_table_list->table; swap_table= swap_table_list->table;
/* Don't allow to exchange with a VIEW */
if (unlikely(swap_table_list->view))
{
my_error(ER_WRONG_OBJECT, MYF(0), table_list->db.str,
swap_table_list->table_name.str, "BASE TABLE");
DBUG_RETURN(TRUE);
}
if (unlikely(check_exchange_partition(swap_table, part_table))) if (unlikely(check_exchange_partition(swap_table, part_table)))
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);

View File

@ -309,6 +309,11 @@ bool sequence_insert(THD *thd, LEX *lex, TABLE_LIST *org_table_list)
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
} }
#ifdef WITH_WSREP
if (WSREP_ON && seq->cache != 0)
WSREP_WARN("CREATE SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster.");
#endif
/* If not temporary table */ /* If not temporary table */
if (!temporary_table) if (!temporary_table)
{ {
@ -901,12 +906,18 @@ bool Sql_cmd_alter_sequence::execute(THD *thd)
No_such_table_error_handler no_such_table_handler; No_such_table_error_handler no_such_table_handler;
DBUG_ENTER("Sql_cmd_alter_sequence::execute"); DBUG_ENTER("Sql_cmd_alter_sequence::execute");
if (check_access(thd, ALTER_ACL, first_table->db.str, if (check_access(thd, ALTER_ACL, first_table->db.str,
&first_table->grant.privilege, &first_table->grant.privilege,
&first_table->grant.m_internal, &first_table->grant.m_internal,
0, 0)) 0, 0))
DBUG_RETURN(TRUE); /* purecov: inspected */ DBUG_RETURN(TRUE); /* purecov: inspected */
#ifdef WITH_WSREP
if (WSREP_ON && new_seq->cache != 0)
WSREP_WARN("ALTER SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster.");
#endif
if (check_grant(thd, ALTER_ACL, first_table, FALSE, 1, FALSE)) if (check_grant(thd, ALTER_ACL, first_table, FALSE, 1, FALSE))
DBUG_RETURN(TRUE); /* purecov: inspected */ DBUG_RETURN(TRUE); /* purecov: inspected */

View File

@ -1,7 +1,7 @@
#ifndef TABLE_INCLUDED #ifndef TABLE_INCLUDED
#define TABLE_INCLUDED #define TABLE_INCLUDED
/* Copyright (c) 2000, 2017, Oracle and/or its affiliates. /* Copyright (c) 2000, 2017, Oracle and/or its affiliates.
Copyright (c) 2009, 2021, MariaDB Copyright (c) 2009, 2022, 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
@ -3171,9 +3171,6 @@ enum open_frm_error open_table_from_share(THD *thd, TABLE_SHARE *share,
bool is_create_table, bool is_create_table,
List<String> *partitions_to_open= NULL); List<String> *partitions_to_open= NULL);
bool copy_keys_from_share(TABLE *outparam, MEM_ROOT *root); bool copy_keys_from_share(TABLE *outparam, MEM_ROOT *root);
bool fix_session_vcol_expr(THD *thd, Virtual_column_info *vcol);
bool fix_session_vcol_expr_for_read(THD *thd, Field *field,
Virtual_column_info *vcol);
bool parse_vcol_defs(THD *thd, MEM_ROOT *mem_root, TABLE *table, bool parse_vcol_defs(THD *thd, MEM_ROOT *mem_root, TABLE *table,
bool *error_reported, vcol_init_mode expr); bool *error_reported, vcol_init_mode expr);
TABLE_SHARE *alloc_table_share(const char *db, const char *table_name, TABLE_SHARE *alloc_table_share(const char *db, const char *table_name,

View File

@ -155,10 +155,10 @@ static int wsrep_write_cache_inc(THD* const thd,
goto cleanup; goto cleanup;
cache->read_pos= cache->read_end; cache->read_pos= cache->read_end;
} while ((cache->file >= 0) && (length= my_b_fill(cache))); } while ((cache->file >= 0) && (length= my_b_fill(cache)));
} if (ret == 0)
if (ret == 0) {
{ assert(total_length + thd->wsrep_sr().log_position() == saved_pos);
assert(total_length + thd->wsrep_sr().log_position() == saved_pos); }
} }
cleanup: cleanup:

View File

@ -85,18 +85,37 @@ int Wsrep_client_service::prepare_data_for_replication()
DBUG_ASSERT(m_thd == current_thd); DBUG_ASSERT(m_thd == current_thd);
DBUG_ENTER("Wsrep_client_service::prepare_data_for_replication"); DBUG_ENTER("Wsrep_client_service::prepare_data_for_replication");
size_t data_len= 0; size_t data_len= 0;
IO_CACHE* cache= wsrep_get_trans_cache(m_thd); IO_CACHE* transactional_cache= wsrep_get_cache(m_thd, true);
IO_CACHE* stmt_cache= wsrep_get_cache(m_thd, false);
if (cache) if (transactional_cache || stmt_cache)
{ {
m_thd->binlog_flush_pending_rows_event(true); m_thd->binlog_flush_pending_rows_event(true);
if (wsrep_write_cache(m_thd, cache, &data_len))
size_t transactional_data_len= 0;
size_t stmt_data_len= 0;
// Write transactional cache
if (transactional_cache &&
wsrep_write_cache(m_thd, transactional_cache, &transactional_data_len))
{ {
WSREP_ERROR("rbr write fail, data_len: %zu", WSREP_ERROR("rbr write fail, data_len: %zu",
data_len); data_len);
// wsrep_override_error(m_thd, ER_ERROR_DURING_COMMIT); // wsrep_override_error(m_thd, ER_ERROR_DURING_COMMIT);
DBUG_RETURN(1); DBUG_RETURN(1);
} }
// Write stmt cache
if (stmt_cache && wsrep_write_cache(m_thd, stmt_cache, &stmt_data_len))
{
WSREP_ERROR("rbr write fail, data_len: %zu",
data_len);
// wsrep_override_error(m_thd, ER_ERROR_DURING_COMMIT);
DBUG_RETURN(1);
}
// Complete data written from both caches
data_len = transactional_data_len + stmt_data_len;
} }
if (data_len == 0) if (data_len == 0)
@ -138,7 +157,7 @@ int Wsrep_client_service::prepare_fragment_for_replication(
DBUG_ASSERT(m_thd == current_thd); DBUG_ASSERT(m_thd == current_thd);
THD* thd= m_thd; THD* thd= m_thd;
DBUG_ENTER("Wsrep_client_service::prepare_fragment_for_replication"); DBUG_ENTER("Wsrep_client_service::prepare_fragment_for_replication");
IO_CACHE* cache= wsrep_get_trans_cache(thd); IO_CACHE* cache= wsrep_get_cache(thd, true);
thd->binlog_flush_pending_rows_event(true); thd->binlog_flush_pending_rows_event(true);
if (!cache) if (!cache)
@ -220,7 +239,7 @@ bool Wsrep_client_service::statement_allowed_for_streaming() const
size_t Wsrep_client_service::bytes_generated() const size_t Wsrep_client_service::bytes_generated() const
{ {
IO_CACHE* cache= wsrep_get_trans_cache(m_thd); IO_CACHE* cache= wsrep_get_cache(m_thd, true);
if (cache) if (cache)
{ {
size_t pending_rows_event_length= 0; size_t pending_rows_event_length= 0;

View File

@ -650,7 +650,7 @@ static std::string wsrep_server_incoming_address()
bool is_ipv6= false; bool is_ipv6= false;
unsigned int my_bind_ip= INADDR_ANY; // default if not set unsigned int my_bind_ip= INADDR_ANY; // default if not set
if (my_bind_addr_str && strlen(my_bind_addr_str) && if (my_bind_addr_str && strlen(my_bind_addr_str) &&
strcmp(my_bind_addr_str, "*") != 0) strcmp(my_bind_addr_str, "*") != 0)
{ {
my_bind_ip= wsrep_check_ip(my_bind_addr_str, &is_ipv6); my_bind_ip= wsrep_check_ip(my_bind_addr_str, &is_ipv6);
@ -715,9 +715,13 @@ static std::string wsrep_server_incoming_address()
snprintf(inc_addr, inc_addr_max, fmt, addr.get_address(), port); snprintf(inc_addr, inc_addr_max, fmt, addr.get_address(), port);
} }
done: done:
ret= wsrep_node_incoming_address; if (!strlen(inc_addr))
ret= wsrep_node_incoming_address;
else
ret= inc_addr;
WSREP_DEBUG("wsrep_incoming_address = %s", ret.c_str());
return ret; return ret;
} }

View File

@ -946,15 +946,6 @@ bool TDBMYSQL::OpenDB(PGLOBAL g)
} // endif MakeInsert } // endif MakeInsert
if (m_Rc != RC_FX) {
char cmd[64];
int w;
sprintf(cmd, "ALTER TABLE `%s` DISABLE KEYS", TableName);
m_Rc = Myc.ExecSQL(g, cmd, &w); // may fail for some engines
} // endif m_Rc
} else } else
// m_Rc = (Mode == MODE_DELETE) ? MakeDelete(g) : MakeUpdate(g); // m_Rc = (Mode == MODE_DELETE) ? MakeDelete(g) : MakeUpdate(g);
m_Rc = (MakeCommand(g)) ? RC_FX : RC_OK; m_Rc = (MakeCommand(g)) ? RC_FX : RC_OK;
@ -1216,16 +1207,6 @@ int TDBMYSQL::DeleteDB(PGLOBAL g, int irc)
void TDBMYSQL::CloseDB(PGLOBAL g) void TDBMYSQL::CloseDB(PGLOBAL g)
{ {
if (Myc.Connected()) { if (Myc.Connected()) {
if (Mode == MODE_INSERT) {
char cmd[64];
int w;
PDBUSER dup = PlgGetUser(g);
dup->Step = "Enabling indexes";
sprintf(cmd, "ALTER TABLE `%s` ENABLE KEYS", TableName);
Myc.m_Rows = -1; // To execute the query
m_Rc = Myc.ExecSQL(g, cmd, &w); // May fail for some engines
} // endif m_Rc
Myc.Close(); Myc.Close();
} // endif Myc } // endif Myc

View File

@ -1842,6 +1842,7 @@ dict_load_columns(
the flag is set before the table is created. */ the flag is set before the table is created. */
if (table->fts == NULL) { if (table->fts == NULL) {
table->fts = fts_create(table); table->fts = fts_create(table);
table->fts->cache = fts_cache_create(table);
} }
ut_a(table->fts->doc_col == ULINT_UNDEFINED); ut_a(table->fts->doc_col == ULINT_UNDEFINED);

View File

@ -858,6 +858,7 @@ os_file_get_last_error_low(
case EXDEV: case EXDEV:
case ENOTDIR: case ENOTDIR:
case EISDIR: case EISDIR:
case EPERM:
return(OS_FILE_PATH_ERROR); return(OS_FILE_PATH_ERROR);
case EAGAIN: case EAGAIN:
if (srv_use_native_aio) { if (srv_use_native_aio) {

View File

@ -7996,22 +7996,14 @@ void translog_flush_buffers(TRANSLOG_ADDRESS *lsn,
} }
else else
{ {
if (log_descriptor.bc.buffer->last_lsn == LSN_IMPOSSIBLE) if (log_descriptor.bc.buffer->last_lsn == LSN_IMPOSSIBLE &&
log_descriptor.bc.buffer->prev_last_lsn == LSN_IMPOSSIBLE)
{ {
/*
In this case both last_lsn & prev_last_lsn are LSN_IMPOSSIBLE
otherwise it will go in the first IF because LSN_IMPOSSIBLE less
then any real LSN and cmp_translog_addr(*lsn,
log_descriptor.bc.buffer->prev_last_lsn) will be TRUE
*/
DBUG_ASSERT(log_descriptor.bc.buffer->prev_last_lsn ==
LSN_IMPOSSIBLE);
DBUG_PRINT("info", ("There is no LSNs yet generated => do nothing")); DBUG_PRINT("info", ("There is no LSNs yet generated => do nothing"));
translog_unlock(); translog_unlock();
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
DBUG_ASSERT(log_descriptor.bc.buffer->prev_last_lsn != LSN_IMPOSSIBLE);
/* fix lsn if it was horizon */ /* fix lsn if it was horizon */
*lsn= log_descriptor.bc.buffer->prev_last_lsn; *lsn= log_descriptor.bc.buffer->prev_last_lsn;
DBUG_PRINT("info", ("LSN to flush fixed to prev last lsn: " LSN_FMT, DBUG_PRINT("info", ("LSN to flush fixed to prev last lsn: " LSN_FMT,