Browse Source

MDEV-29775 : Assertion `0' failed in void Protocol::end_statement() when adding data to the MyISAM table after setting wsrep_mode=replicate_myisam

If wsrep_mode=BINLOG_ROW_FORMAT_ONLY wsrep_forced_binlog_format
can be DEFAULT (UNSPECIFIED) or ROW.

Finally, if wsrep_mode=[REPLICATE_MYISAM|REPLICATE_ARIA] or
wsrep_replicate_myisam=ON we allow wsrep_forced_binlog_format
to be [DEFAULT|ROW].

Signed-off-by: Julius Goryavsky <julius.goryavsky@mariadb.com>
bb-10.6-mdev-35959
Jan Lindström 3 years ago
committed by Julius Goryavsky
parent
commit
0784dd32b1
  1. 68
      mysql-test/suite/galera/r/mdev-29775.result
  2. 58
      mysql-test/suite/galera/t/mdev-29775.test
  3. 37
      sql/wsrep_var.cc

68
mysql-test/suite/galera/r/mdev-29775.result

@ -1,6 +1,6 @@
connection node_2;
connection node_1;
SET GLOBAL wsrep_replicate_myisam=ON;
SET GLOBAL wsrep_mode=REPLICATE_MYISAM;
CREATE TABLE t (f0 CHAR(0)) ENGINE=MyISAM;
INSERT INTO t VALUES();
SELECT * FROM t;
@ -12,7 +12,7 @@ f0
NULL
DROP TABLE t;
connection node_1;
SET GLOBAL wsrep_replicate_myisam=ON;
SET GLOBAL wsrep_mode=REPLICATE_MYISAM;
SET GLOBAL wsrep_forced_binlog_format=ROW;
CREATE TABLE t (f0 CHAR(0)) ENGINE=MyISAM;
INSERT INTO t VALUES();
@ -25,20 +25,60 @@ f0
NULL
DROP TABLE t;
connection node_1;
SET GLOBAL wsrep_mode=REPLICATE_ARIA;
CREATE TABLE t (f0 CHAR(0)) ENGINE=Aria;
INSERT INTO t VALUES();
SELECT * FROM t;
f0
NULL
connection node_2;
SELECT * FROM t;
f0
NULL
DROP TABLE t;
connection node_1;
SET GLOBAL wsrep_mode=REPLICATE_ARIA;
SET GLOBAL wsrep_forced_binlog_format=ROW;
CREATE TABLE t (f0 CHAR(0)) ENGINE=Aria;
INSERT INTO t VALUES();
SELECT * FROM t;
f0
NULL
connection node_2;
SELECT * FROM t;
f0
NULL
DROP TABLE t;
connection node_1;
SET GLOBAL wsrep_mode=REPLICATE_MYISAM;
SET GLOBAL wsrep_forced_binlog_format=MIXED;
ERROR HY000: wsrep_forced_binlog_format=[MIXED|STATEMENT] can't be set if wsrep_mode=[REPLICATE_MYISAM|REPLICATE_ARIA]
SET GLOBAL wsrep_forced_binlog_format=STATEMENT;
ERROR HY000: wsrep_forced_binlog_format=[MIXED|STATEMENT] can't be set if wsrep_mode=[REPLICATE_MYISAM|REPLICATE_ARIA]
SET GLOBAL wsrep_mode=REPLICATE_ARIA;
SET GLOBAL wsrep_forced_binlog_format=MIXED;
ERROR HY000: wsrep_forced_binlog_format=[MIXED|STATEMENT] can't be set if wsrep_mode=[REPLICATE_MYISAM|REPLICATE_ARIA]
SET GLOBAL wsrep_forced_binlog_format=STATEMENT;
ERROR HY000: wsrep_forced_binlog_format=[MIXED|STATEMENT] can't be set if wsrep_mode=[REPLICATE_MYISAM|REPLICATE_ARIA]
SET GLOBAL wsrep_mode=DEFAULT;
SET GLOBAL wsrep_forced_binlog_format=MIXED;
SET GLOBAL wsrep_mode = REPLICATE_MYISAM;
ERROR HY000: wsrep_mode=[REPLICATE_MYISAM|REPLICATE_ARIA] can't be enabled if wsrep_forced_binlog != [NONE|ROW]
SET GLOBAL wsrep_mode = REPLICATE_ARIA;
ERROR HY000: wsrep_mode=[REPLICATE_MYISAM|REPLICATE_ARIA] can't be enabled if wsrep_forced_binlog != [NONE|ROW]
SET GLOBAL wsrep_mode=DEFAULT;
SET GLOBAL wsrep_forced_binlog_format=STATEMENT;
SET GLOBAL wsrep_mode = REPLICATE_MYISAM;
ERROR HY000: wsrep_mode=[REPLICATE_MYISAM|REPLICATE_ARIA] can't be enabled if wsrep_forced_binlog != [NONE|ROW]
SET GLOBAL wsrep_mode = REPLICATE_ARIA;
ERROR HY000: wsrep_mode=[REPLICATE_MYISAM|REPLICATE_ARIA] can't be enabled if wsrep_forced_binlog != [NONE|ROW]
SET GLOBAL wsrep_forced_binlog_format=DEFAULT;
SET GLOBAL wsrep_replicate_myisam=OFF;
SET GLOBAL wsrep_mode=DEFAULT;
SET GLOBAL wsrep_forced_binlog_format=MIXED;
SET GLOBAL wsrep_replicate_myisam=ON;
ERROR HY000: wsrep_replicate_myisam=ON can't be enabled if wsrep_forced_binlog != [NONE|ROW]
ERROR HY000: wsrep_mode=REPLICATE_MYISAM can't be enabled if wsrep_forced_binlog != [NONE|ROW]
SET GLOBAL wsrep_forced_binlog_format=STATEMENT;
SET GLOBAL wsrep_replicate_myisam=ON;
ERROR HY000: wsrep_replicate_myisam=ON can't be enabled if wsrep_forced_binlog != [NONE|ROW]
SET GLOBAL wsrep_forced_binlog_format=NONE;
SET GLOBAL wsrep_replicate_myisam=OFF;
SET GLOBAL wsrep_replicate_myisam=ON;
SET GLOBAL wsrep_forced_binlog_format=MIXED;
ERROR HY000: wsrep_forced_binlog_format=[MIXED|STATEMENT] can't be set if wsrep_replicate_myisam=ON
SET GLOBAL wsrep_forced_binlog_format=STATEMENT;
ERROR HY000: wsrep_forced_binlog_format=[MIXED|STATEMENT] can't be set if wsrep_replicate_myisam=ON
SET GLOBAL wsrep_forced_binlog_format=NONE;
SET GLOBAL wsrep_replicate_myisam=OFF;
ERROR HY000: wsrep_mode=REPLICATE_MYISAM can't be enabled if wsrep_forced_binlog != [NONE|ROW]
SET GLOBAL wsrep_forced_binlog_format=DEFAULT;
SET GLOBAL wsrep_mode=DEFAULT;

58
mysql-test/suite/galera/t/mdev-29775.test

@ -1,9 +1,10 @@
--source include/galera_cluster.inc
--source include/have_aria.inc
#
# MDEV-29775 : Assertion `0' failed in void Protocol::end_statement() when adding data to the MyISAM table after setting wsrep_mode=replicate_myisam
#
SET GLOBAL wsrep_replicate_myisam=ON;
SET GLOBAL wsrep_mode=REPLICATE_MYISAM;
CREATE TABLE t (f0 CHAR(0)) ENGINE=MyISAM;
INSERT INTO t VALUES();
SELECT * FROM t;
@ -12,7 +13,7 @@ SELECT * FROM t;
DROP TABLE t;
--connection node_1
SET GLOBAL wsrep_replicate_myisam=ON;
SET GLOBAL wsrep_mode=REPLICATE_MYISAM;
SET GLOBAL wsrep_forced_binlog_format=ROW;
CREATE TABLE t (f0 CHAR(0)) ENGINE=MyISAM;
INSERT INTO t VALUES();
@ -22,24 +23,59 @@ SELECT * FROM t;
DROP TABLE t;
--connection node_1
SET GLOBAL wsrep_forced_binlog_format=DEFAULT;
SET GLOBAL wsrep_replicate_myisam=OFF;
SET GLOBAL wsrep_mode=REPLICATE_ARIA;
CREATE TABLE t (f0 CHAR(0)) ENGINE=Aria;
INSERT INTO t VALUES();
SELECT * FROM t;
--connection node_2
SELECT * FROM t;
DROP TABLE t;
--connection node_1
SET GLOBAL wsrep_mode=REPLICATE_ARIA;
SET GLOBAL wsrep_forced_binlog_format=ROW;
CREATE TABLE t (f0 CHAR(0)) ENGINE=Aria;
INSERT INTO t VALUES();
SELECT * FROM t;
--connection node_2
SELECT * FROM t;
DROP TABLE t;
--connection node_1
SET GLOBAL wsrep_mode=REPLICATE_MYISAM;
--error ER_WRONG_ARGUMENTS
SET GLOBAL wsrep_forced_binlog_format=MIXED;
--error ER_WRONG_ARGUMENTS
SET GLOBAL wsrep_replicate_myisam=ON;
SET GLOBAL wsrep_forced_binlog_format=STATEMENT;
SET GLOBAL wsrep_mode=REPLICATE_ARIA;
--error ER_WRONG_ARGUMENTS
SET GLOBAL wsrep_replicate_myisam=ON;
SET GLOBAL wsrep_forced_binlog_format=MIXED;
--error ER_WRONG_ARGUMENTS
SET GLOBAL wsrep_forced_binlog_format=STATEMENT;
SET GLOBAL wsrep_forced_binlog_format=NONE;
SET GLOBAL wsrep_replicate_myisam=OFF;
SET GLOBAL wsrep_mode=DEFAULT;
SET GLOBAL wsrep_forced_binlog_format=MIXED;
--error ER_WRONG_ARGUMENTS
SET GLOBAL wsrep_mode = REPLICATE_MYISAM;
--error ER_WRONG_ARGUMENTS
SET GLOBAL wsrep_mode = REPLICATE_ARIA;
SET GLOBAL wsrep_replicate_myisam=ON;
SET GLOBAL wsrep_mode=DEFAULT;
SET GLOBAL wsrep_forced_binlog_format=STATEMENT;
--error ER_WRONG_ARGUMENTS
SET GLOBAL wsrep_mode = REPLICATE_MYISAM;
--error ER_WRONG_ARGUMENTS
SET GLOBAL wsrep_mode = REPLICATE_ARIA;
SET GLOBAL wsrep_forced_binlog_format=DEFAULT;
SET GLOBAL wsrep_mode=DEFAULT;
SET GLOBAL wsrep_forced_binlog_format=MIXED;
--error ER_WRONG_ARGUMENTS
SET GLOBAL wsrep_replicate_myisam=ON;
SET GLOBAL wsrep_forced_binlog_format=STATEMENT;
--error ER_WRONG_ARGUMENTS
SET GLOBAL wsrep_replicate_myisam=ON;
SET GLOBAL wsrep_forced_binlog_format=NONE;
SET GLOBAL wsrep_replicate_myisam=OFF;
SET GLOBAL wsrep_forced_binlog_format=DEFAULT;
SET GLOBAL wsrep_mode=DEFAULT;

37
sql/wsrep_var.cc

@ -984,6 +984,28 @@ bool wsrep_max_ws_size_update(sys_var *self, THD *thd, enum_var_type)
bool wsrep_mode_check(sys_var *self, THD* thd, set_var* var)
{
ulonglong new_wsrep_mode= var->save_result.ulonglong_value;
if (new_wsrep_mode && !WSREP_ON)
{
my_message(ER_WRONG_ARGUMENTS, "wsrep_mode can't be set "
"if wsrep_on=OFF", MYF(0));
return true;
}
ulonglong old_wsrep_mode= wsrep_mode;
wsrep_mode= new_wsrep_mode;
if (wsrep_check_mode(WSREP_MODE_REPLICATE_MYISAM) ||
wsrep_check_mode(WSREP_MODE_REPLICATE_ARIA))
{
if (!(wsrep_forced_binlog_format == BINLOG_FORMAT_UNSPEC ||
wsrep_forced_binlog_format == BINLOG_FORMAT_ROW))
{
my_message(ER_WRONG_ARGUMENTS, "wsrep_mode=[REPLICATE_MYISAM|REPLICATE_ARIA] "
"can't be enabled if wsrep_forced_binlog != [NONE|ROW]", MYF(0));
wsrep_mode= old_wsrep_mode;
return true;
}
}
wsrep_mode= old_wsrep_mode;
return false;
}
@ -1157,7 +1179,7 @@ bool wsrep_replicate_myisam_check(sys_var *self, THD* thd, set_var* var)
!(wsrep_forced_binlog_format == BINLOG_FORMAT_UNSPEC ||
wsrep_forced_binlog_format == BINLOG_FORMAT_ROW))
{
my_message(ER_WRONG_ARGUMENTS, "wsrep_replicate_myisam=ON can't be enabled "
my_message(ER_WRONG_ARGUMENTS, "wsrep_mode=REPLICATE_MYISAM can't be enabled "
"if wsrep_forced_binlog != [NONE|ROW]", MYF(0));
return true;
}
@ -1167,13 +1189,22 @@ bool wsrep_replicate_myisam_check(sys_var *self, THD* thd, set_var* var)
bool wsrep_forced_binlog_format_check(sys_var *self, THD* thd, set_var* var)
{
ulonglong new_forced_binlog_format= var->save_result.ulonglong_value;
if (!(new_forced_binlog_format == BINLOG_FORMAT_UNSPEC ||
new_forced_binlog_format == BINLOG_FORMAT_ROW))
{
if (wsrep_replicate_myisam)
if (wsrep_check_mode(WSREP_MODE_BINLOG_ROW_FORMAT_ONLY))
{
my_message(ER_WRONG_ARGUMENTS, "wsrep_forced_binlog_format=[MIXED|STATEMENT] can't be set "
"if wsrep_mode=BINLOG_ROW_FORMAT_ONLY", MYF(0));
return true;
}
if (wsrep_check_mode(WSREP_MODE_REPLICATE_MYISAM) ||
wsrep_check_mode(WSREP_MODE_REPLICATE_ARIA))
{
my_message(ER_WRONG_ARGUMENTS, "wsrep_forced_binlog_format=[MIXED|STATEMENT] can't be set "
"if wsrep_replicate_myisam=ON", MYF(0));
"if wsrep_mode=[REPLICATE_MYISAM|REPLICATE_ARIA]", MYF(0));
return true;
}
}

Loading…
Cancel
Save