Commit cc15d246 authored by Luis Soares's avatar Luis Soares

BUG#54144: ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE is hard coded

      
The error message for ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE was
hard coded. Additionally, the same error was used in three
separate error symptoms: 1. when heartbeat period exceeds the
value of slave_net_timeout, 2. when it is smaller than 1
milisecond and 3. when it was not in range, ie, either negative
or greater than the maximum allowed.
      
We fix this by splitting into three distinct errors and by
removing the message from the source code and moving it to the
errmsg-utf8.txt file.
parent d6ee2ecf
...@@ -6,19 +6,19 @@ show status like 'Slave_heartbeat_period';; ...@@ -6,19 +6,19 @@ show status like 'Slave_heartbeat_period';;
Variable_name Slave_heartbeat_period Variable_name Slave_heartbeat_period
Value 5.000 Value 5.000
change master to master_host='127.0.0.1',master_port=MASTER_PORT, master_user='root', master_heartbeat_period= 4294968; change master to master_host='127.0.0.1',master_port=MASTER_PORT, master_user='root', master_heartbeat_period= 4294968;
ERROR HY000: The requested value for the heartbeat period is negative or exceeds the maximum 4294967 seconds ERROR HY000: The requested value for the heartbeat period is either negative or exceeds the maximum allowed (4294967 seconds).
show status like 'Slave_heartbeat_period';; show status like 'Slave_heartbeat_period';;
Variable_name Slave_heartbeat_period Variable_name Slave_heartbeat_period
Value 5.000 Value 5.000
change master to master_host='127.0.0.1',master_port=MASTER_PORT, master_user='root', master_heartbeat_period= 0.0009999; change master to master_host='127.0.0.1',master_port=MASTER_PORT, master_user='root', master_heartbeat_period= 0.0009999;
Warnings: Warnings:
Warning 1624 The requested value for the heartbeat period is less than 1 msec. The period is reset to zero which means no heartbeats will be sending Warning 1701 The requested value for the heartbeat period is less than 1 millisecond. The value is reset to 0, meaning that heartbeating will effectively be disabled.
show status like 'Slave_heartbeat_period';; show status like 'Slave_heartbeat_period';;
Variable_name Slave_heartbeat_period Variable_name Slave_heartbeat_period
Value 0.000 Value 0.000
change master to master_host='127.0.0.1',master_port=MASTER_PORT, master_user='root', master_heartbeat_period= 4294967; change master to master_host='127.0.0.1',master_port=MASTER_PORT, master_user='root', master_heartbeat_period= 4294967;
Warnings: Warnings:
Warning 1624 The requested value for the heartbeat period exceeds the value of `slave_net_timeout' sec. A sensible value for the period should be less than the timeout. Warning 1702 The requested value for the heartbeat period exceeds the value of `slave_net_timeout' seconds. A sensible value for the period should be less than the timeout.
show status like 'Slave_heartbeat_period';; show status like 'Slave_heartbeat_period';;
Variable_name Slave_heartbeat_period Variable_name Slave_heartbeat_period
Value 4294967.000 Value 4294967.000
...@@ -30,7 +30,7 @@ reset slave; ...@@ -30,7 +30,7 @@ reset slave;
set @@global.slave_net_timeout= 5; set @@global.slave_net_timeout= 5;
change master to master_host='127.0.0.1',master_port=MASTER_PORT, master_user='root', master_heartbeat_period= 5.001; change master to master_host='127.0.0.1',master_port=MASTER_PORT, master_user='root', master_heartbeat_period= 5.001;
Warnings: Warnings:
Warning 1624 The requested value for the heartbeat period exceeds the value of `slave_net_timeout' sec. A sensible value for the period should be less than the timeout. Warning 1702 The requested value for the heartbeat period exceeds the value of `slave_net_timeout' seconds. A sensible value for the period should be less than the timeout.
show status like 'Slave_heartbeat_period';; show status like 'Slave_heartbeat_period';;
Variable_name Slave_heartbeat_period Variable_name Slave_heartbeat_period
Value 5.001 Value 5.001
...@@ -42,7 +42,7 @@ Variable_name Slave_heartbeat_period ...@@ -42,7 +42,7 @@ Variable_name Slave_heartbeat_period
Value 4.000 Value 4.000
set @@global.slave_net_timeout= 3 /* must be a warning */; set @@global.slave_net_timeout= 3 /* must be a warning */;
Warnings: Warnings:
Warning 1624 The current value for master_heartbeat_period exceeds the new value of `slave_net_timeout' sec. A sensible value for the period should be less than the timeout. Warning 1702 The requested value for the heartbeat period exceeds the value of `slave_net_timeout' seconds. A sensible value for the period should be less than the timeout.
reset slave; reset slave;
drop table if exists t1; drop table if exists t1;
set @@global.slave_net_timeout= 10; set @@global.slave_net_timeout= 10;
......
...@@ -38,14 +38,14 @@ RESET SLAVE; ...@@ -38,14 +38,14 @@ RESET SLAVE;
*** Warning if updated slave_net_timeout < slave_heartbeat_timeout *** *** Warning if updated slave_net_timeout < slave_heartbeat_timeout ***
SET @@global.slave_net_timeout=FLOOR(SLAVE_HEARTBEAT_TIMEOUT)-1; SET @@global.slave_net_timeout=FLOOR(SLAVE_HEARTBEAT_TIMEOUT)-1;
Warnings: Warnings:
Warning 1624 The current value for master_heartbeat_period exceeds the new value of `slave_net_timeout' sec. A sensible value for the period should be less than the timeout. Warning 1702 The requested value for the heartbeat period exceeds the value of `slave_net_timeout' seconds. A sensible value for the period should be less than the timeout.
SET @@global.slave_net_timeout=@restore_slave_net_timeout; SET @@global.slave_net_timeout=@restore_slave_net_timeout;
RESET SLAVE; RESET SLAVE;
*** Warning if updated slave_heartbeat_timeout > slave_net_timeout *** *** Warning if updated slave_heartbeat_timeout > slave_net_timeout ***
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_USER='root', MASTER_HEARTBEAT_PERIOD=SLAVE_NET_TIMEOUT; CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_USER='root', MASTER_HEARTBEAT_PERIOD=SLAVE_NET_TIMEOUT;
Warnings: Warnings:
Warning 1624 The requested value for the heartbeat period exceeds the value of `slave_net_timeout' sec. A sensible value for the period should be less than the timeout. Warning 1702 The requested value for the heartbeat period exceeds the value of `slave_net_timeout' seconds. A sensible value for the period should be less than the timeout.
RESET SLAVE; RESET SLAVE;
*** CHANGE MASTER statement only updates slave_heartbeat_period *** *** CHANGE MASTER statement only updates slave_heartbeat_period ***
...@@ -140,7 +140,7 @@ Slave_heartbeat_period 0.001 ...@@ -140,7 +140,7 @@ Slave_heartbeat_period 0.001
RESET SLAVE; RESET SLAVE;
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_USER='root', MASTER_HEARTBEAT_PERIOD=0.0009; CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_USER='root', MASTER_HEARTBEAT_PERIOD=0.0009;
Warnings: Warnings:
Warning 1624 The requested value for the heartbeat period is less than 1 msec. The period is reset to zero which means no heartbeats will be sending Warning 1701 The requested value for the heartbeat period is less than 1 millisecond. The period is reset to 0, meaning that heartbeating will effectively be disabled.
SHOW GLOBAL STATUS LIKE 'slave_heartbeat_period'; SHOW GLOBAL STATUS LIKE 'slave_heartbeat_period';
Variable_name Value Variable_name Value
Slave_heartbeat_period 0.000 Slave_heartbeat_period 0.000
...@@ -149,19 +149,19 @@ RESET SLAVE; ...@@ -149,19 +149,19 @@ RESET SLAVE;
*** Max slave_heartbeat_timeout *** *** Max slave_heartbeat_timeout ***
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_USER='root', MASTER_HEARTBEAT_PERIOD=4294967; CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_USER='root', MASTER_HEARTBEAT_PERIOD=4294967;
Warnings: Warnings:
Warning 1624 The requested value for the heartbeat period exceeds the value of `slave_net_timeout' sec. A sensible value for the period should be less than the timeout. Warning 1702 The requested value for the heartbeat period exceeds the value of `slave_net_timeout' seconds. A sensible value for the period should be less than the timeout.
SHOW GLOBAL STATUS LIKE 'slave_heartbeat_period'; SHOW GLOBAL STATUS LIKE 'slave_heartbeat_period';
Variable_name Value Variable_name Value
Slave_heartbeat_period 4294967.000 Slave_heartbeat_period 4294967.000
RESET SLAVE; RESET SLAVE;
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_USER='root', MASTER_HEARTBEAT_PERIOD=4294968; CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_USER='root', MASTER_HEARTBEAT_PERIOD=4294968;
ERROR HY000: The requested value for the heartbeat period is negative or exceeds the maximum 4294967 seconds ERROR HY000: The requested value for the heartbeat period is either negative or exceeds the maximum allowed (4294967 seconds).
RESET SLAVE; RESET SLAVE;
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_USER='root', MASTER_HEARTBEAT_PERIOD=8589935; CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_USER='root', MASTER_HEARTBEAT_PERIOD=8589935;
ERROR HY000: The requested value for the heartbeat period is negative or exceeds the maximum 4294967 seconds ERROR HY000: The requested value for the heartbeat period is either negative or exceeds the maximum allowed (4294967 seconds).
RESET SLAVE; RESET SLAVE;
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_USER='root', MASTER_HEARTBEAT_PERIOD=4294967296; CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_PORT, MASTER_USER='root', MASTER_HEARTBEAT_PERIOD=4294967296;
ERROR HY000: The requested value for the heartbeat period is negative or exceeds the maximum 4294967 seconds ERROR HY000: The requested value for the heartbeat period is either negative or exceeds the maximum allowed (4294967 seconds).
RESET SLAVE; RESET SLAVE;
*** Misc incorrect values *** *** Misc incorrect values ***
......
...@@ -6152,7 +6152,7 @@ ER_WARN_ENGINE_TRANSACTION_ROLLBACK ...@@ -6152,7 +6152,7 @@ ER_WARN_ENGINE_TRANSACTION_ROLLBACK
ER_SLAVE_HEARTBEAT_FAILURE ER_SLAVE_HEARTBEAT_FAILURE
eng "Unexpected master's heartbeat data: %s" eng "Unexpected master's heartbeat data: %s"
ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE
eng "The requested value for the heartbeat period %s %s" eng "The requested value for the heartbeat period is either negative or exceeds the maximum allowed (%s seconds)."
ER_NDB_REPLICATION_SCHEMA_ERROR ER_NDB_REPLICATION_SCHEMA_ERROR
eng "Bad schema for mysql.ndb_replication table. Message: %-.64s" eng "Bad schema for mysql.ndb_replication table. Message: %-.64s"
...@@ -6379,3 +6379,10 @@ ER_SET_PASSWORD_AUTH_PLUGIN ...@@ -6379,3 +6379,10 @@ ER_SET_PASSWORD_AUTH_PLUGIN
ER_GRANT_PLUGIN_USER_EXISTS ER_GRANT_PLUGIN_USER_EXISTS
eng "GRANT with IDENTIFIED WITH is illegal because the user %-.*s already exists" eng "GRANT with IDENTIFIED WITH is illegal because the user %-.*s already exists"
ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN
eng "The requested value for the heartbeat period is less than 1 millisecond. The value is reset to 0, meaning that heartbeating will effectively be disabled."
ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX
eng "The requested value for the heartbeat period exceeds the value of `slave_net_timeout' seconds. A sensible value for the period should be less than the timeout."
...@@ -1933,35 +1933,28 @@ master_def: ...@@ -1933,35 +1933,28 @@ master_def:
| MASTER_HEARTBEAT_PERIOD_SYM EQ NUM_literal | MASTER_HEARTBEAT_PERIOD_SYM EQ NUM_literal
{ {
Lex->mi.heartbeat_period= (float) $3->val_real(); Lex->mi.heartbeat_period= (float) $3->val_real();
if (Lex->mi.heartbeat_period > SLAVE_MAX_HEARTBEAT_PERIOD || if (Lex->mi.heartbeat_period > SLAVE_MAX_HEARTBEAT_PERIOD ||
Lex->mi.heartbeat_period < 0.0) Lex->mi.heartbeat_period < 0.0)
{ {
const char format[]= "%d seconds"; const char format[]= "%d";
char buf[4*sizeof(SLAVE_MAX_HEARTBEAT_PERIOD) + sizeof(format)]; char buf[4*sizeof(SLAVE_MAX_HEARTBEAT_PERIOD) + sizeof(format)];
sprintf(buf, format, SLAVE_MAX_HEARTBEAT_PERIOD); sprintf(buf, format, SLAVE_MAX_HEARTBEAT_PERIOD);
my_error(ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE, my_error(ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE, MYF(0), buf);
MYF(0), " is negative or exceeds the maximum ", buf); MYSQL_YYABORT;
MYSQL_YYABORT;
} }
if (Lex->mi.heartbeat_period > slave_net_timeout) if (Lex->mi.heartbeat_period > slave_net_timeout)
{ {
push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN, push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE, ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX,
ER(ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE), ER(ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX));
" exceeds the value of `slave_net_timeout' sec.",
" A sensible value for the period should be"
" less than the timeout.");
} }
if (Lex->mi.heartbeat_period < 0.001) if (Lex->mi.heartbeat_period < 0.001)
{ {
if (Lex->mi.heartbeat_period != 0.0) if (Lex->mi.heartbeat_period != 0.0)
{ {
push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN, push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE, ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN,
ER(ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE), ER(ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN));
" is less than 1 msec.",
" The period is reset to zero which means"
" no heartbeats will be sending");
Lex->mi.heartbeat_period= 0.0; Lex->mi.heartbeat_period= 0.0;
} }
Lex->mi.heartbeat_opt= LEX_MASTER_INFO::LEX_MI_DISABLE; Lex->mi.heartbeat_opt= LEX_MASTER_INFO::LEX_MI_DISABLE;
......
...@@ -2943,11 +2943,8 @@ static bool fix_slave_net_timeout(sys_var *self, THD *thd, enum_var_type type) ...@@ -2943,11 +2943,8 @@ static bool fix_slave_net_timeout(sys_var *self, THD *thd, enum_var_type type)
(active_mi? active_mi->heartbeat_period : 0.0))); (active_mi? active_mi->heartbeat_period : 0.0)));
if (active_mi && slave_net_timeout < active_mi->heartbeat_period) if (active_mi && slave_net_timeout < active_mi->heartbeat_period)
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN, push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE, ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX,
"The current value for master_heartbeat_period" ER(ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX));
" exceeds the new value of `slave_net_timeout' sec."
" A sensible value for the period should be"
" less than the timeout.");
mysql_mutex_unlock(&LOCK_active_mi); mysql_mutex_unlock(&LOCK_active_mi);
return false; return false;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment