Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions mysql-test/main/change_master_default.result
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,14 @@ master_ssl_crlpath
using_gtid Slave_Pos
master_retry_count 100000
slave_heartbeat_period 60.000
#
# MDEV-40122: `+DEFAULT` is not a valid value for master_heartbeat_period
#
CHANGE MASTER TO master_heartbeat_period= +DEFAULT;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DEFAULT' at line 1
CHANGE MASTER 'mdev40122' TO master_heartbeat_period= +45;
CHANGE MASTER 'mdev40122' TO master_heartbeat_period= DEFAULT;
RESET SLAVE 'mdev40122' ALL;
# Clean-up
DROP PROCEDURE show_defaultable_fields;
RESET SLAVE 'unset' ALL;
Expand Down
14 changes: 14 additions & 0 deletions mysql-test/main/change_master_default.test
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,20 @@ FROM information_schema.slave_status ORDER BY connection_name;
--query_vertical CALL show_defaultable_fields()


--echo #
--echo # MDEV-40122: `+DEFAULT` is not a valid value for master_heartbeat_period
--echo #

# The `+` prefix may only precede a numeric literal, not `DEFAULT`
--error ER_PARSE_ERROR
CHANGE MASTER TO master_heartbeat_period= +DEFAULT;

# `+` with a number and `DEFAULT` itself remain valid
CHANGE MASTER 'mdev40122' TO master_heartbeat_period= +45;
CHANGE MASTER 'mdev40122' TO master_heartbeat_period= DEFAULT;
RESET SLAVE 'mdev40122' ALL;


--echo # Clean-up

DROP PROCEDURE show_defaultable_fields;
Expand Down
55 changes: 27 additions & 28 deletions sql/sql_yacc.yy
Original file line number Diff line number Diff line change
Expand Up @@ -2423,34 +2423,33 @@ master_def:
{ mi->master_ssl_crlpath= path; };
}

| MASTER_HEARTBEAT_PERIOD_SYM '=' opt_plus num_or_default
{
if ($4)
{
uint32_t milliseconds;
bool overprecise;
auto decimal_buf= my_decimal(),
*decimal= $4->val_decimal(&decimal_buf);
DBUG_ASSERT(decimal);
if (Master_info_file::Heartbeat_period_value::from_decimal(
milliseconds, *decimal, overprecise
))
my_yyabort_error((ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE, MYF(0),
Master_info_file::Heartbeat_period_value::MAX));
if (unlikely(milliseconds > slave_net_timeout*1000ULL))
push_warning(thd, Sql_condition::WARN_LEVEL_WARN,
ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX,
ER_THD(thd, ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX));
else if (unlikely(!milliseconds && overprecise))
push_warning(thd, Sql_condition::WARN_LEVEL_WARN,
ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN,
ER_THD(thd, ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN));
Lex->mi.heartbeat_period= [milliseconds](Master_info_file *mi)
{ mi->master_heartbeat_period= milliseconds; };
}
else
Lex->mi.heartbeat_period= [](Master_info_file *mi)
{ mi->master_heartbeat_period.set_default(); };
| MASTER_HEARTBEAT_PERIOD_SYM '=' opt_plus NUM_literal
{
uint32_t milliseconds;
bool overprecise;
auto decimal_buf= my_decimal(),
*decimal= $4->val_decimal(&decimal_buf);
DBUG_ASSERT(decimal);
if (Master_info_file::Heartbeat_period_value::from_decimal(
milliseconds, *decimal, overprecise
))
my_yyabort_error((ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE, MYF(0),
Master_info_file::Heartbeat_period_value::MAX));
if (unlikely(milliseconds > slave_net_timeout*1000ULL))
push_warning(thd, Sql_condition::WARN_LEVEL_WARN,
ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX,
ER_THD(thd, ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX));
else if (unlikely(!milliseconds && overprecise))
push_warning(thd, Sql_condition::WARN_LEVEL_WARN,
ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN,
ER_THD(thd, ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN));
Lex->mi.heartbeat_period= [milliseconds](Master_info_file *mi)
{ mi->master_heartbeat_period= milliseconds; };
}
| MASTER_HEARTBEAT_PERIOD_SYM '=' DEFAULT
{
Lex->mi.heartbeat_period= [](Master_info_file *mi)
{ mi->master_heartbeat_period.set_default(); };
}
| IGNORE_SERVER_IDS_SYM '=' '(' ignore_server_id_list ')'
{
Expand Down