mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
One-line fix for bug 576 (DBUG_ASSERT failure when using CHANGE MASTER TO RELAY_LOG_POS=4).
Plus a changeset which I had committed but forgot to push (and this changeset is lost on another computer, so I recreate it here). This changeset is "user-friendly SHOW BINLOG EVENTS and CHANGE MASTER TO when log positions < 4 are used.
This commit is contained in:
@@ -269,7 +269,7 @@ int init_relay_log_pos(RELAY_LOG_INFO* rli,const char* log,
|
||||
goto err;
|
||||
rli->cur_log = &rli->cache_buf;
|
||||
}
|
||||
if (pos > BIN_LOG_HEADER_SIZE)
|
||||
if (pos >= BIN_LOG_HEADER_SIZE)
|
||||
my_b_seek(rli->cur_log,(off_t)pos);
|
||||
|
||||
err:
|
||||
|
@@ -961,7 +961,7 @@ int show_binlog_events(THD* thd)
|
||||
{
|
||||
LEX_MASTER_INFO *lex_mi = &thd->lex.mi;
|
||||
ha_rows event_count, limit_start, limit_end;
|
||||
my_off_t pos = lex_mi->pos;
|
||||
my_off_t pos = max(BIN_LOG_HEADER_SIZE, lex_mi->pos); // user-friendly
|
||||
char search_file_name[FN_REFLEN], *name;
|
||||
const char *log_file_name = lex_mi->log_file_name;
|
||||
pthread_mutex_t *log_lock = mysql_bin_log.get_log_lock();
|
||||
@@ -989,12 +989,6 @@ int show_binlog_events(THD* thd)
|
||||
if ((file=open_binlog(&log, linfo.log_file_name, &errmsg)) < 0)
|
||||
goto err;
|
||||
|
||||
if (pos < 4)
|
||||
{
|
||||
errmsg = "Invalid log position";
|
||||
goto err;
|
||||
}
|
||||
|
||||
pthread_mutex_lock(log_lock);
|
||||
my_b_seek(&log, pos);
|
||||
|
||||
|
@@ -706,6 +706,18 @@ master_def:
|
||||
MASTER_LOG_POS_SYM EQ ulonglong_num
|
||||
{
|
||||
Lex->mi.pos = $3;
|
||||
/*
|
||||
If the user specified a value < BIN_LOG_HEADER_SIZE, adjust it
|
||||
instead of causing subsequent errors.
|
||||
We need to do it in this file, because only there we know that
|
||||
MASTER_LOG_POS has been explicitely specified. On the contrary
|
||||
in change_master() (sql_repl.cc) we cannot distinguish between 0
|
||||
(MASTER_LOG_POS explicitely specified as 0) and 0 (unspecified),
|
||||
whereas we want to distinguish (specified 0 means "read the binlog
|
||||
from 0" (4 in fact), unspecified means "don't change the position
|
||||
(keep the preceding value)").
|
||||
*/
|
||||
Lex->mi.pos = max(BIN_LOG_HEADER_SIZE, Lex->mi.pos);
|
||||
}
|
||||
|
|
||||
MASTER_CONNECT_RETRY_SYM EQ ULONG_NUM
|
||||
@@ -721,6 +733,8 @@ master_def:
|
||||
RELAY_LOG_POS_SYM EQ ULONG_NUM
|
||||
{
|
||||
Lex->mi.relay_log_pos = $3;
|
||||
/* Adjust if < BIN_LOG_HEADER_SIZE (same comment as Lex->mi.pos) */
|
||||
Lex->mi.relay_log_pos = max(BIN_LOG_HEADER_SIZE, Lex->mi.relay_log_pos);
|
||||
};
|
||||
|
||||
|
||||
|
@@ -130,9 +130,13 @@ bfill((A)->null_flags,(A)->null_bytes,255);\
|
||||
*/
|
||||
#define MIN_TURBOBM_PATTERN_LEN 3
|
||||
|
||||
/* Defines for binary logging */
|
||||
/*
|
||||
Defines for binary logging.
|
||||
Do not decrease the value of BIN_LOG_HEADER_SIZE.
|
||||
Do not even increase it before checking code.
|
||||
*/
|
||||
|
||||
#define BIN_LOG_HEADER_SIZE 4
|
||||
#define BIN_LOG_HEADER_SIZE 4
|
||||
|
||||
/* Include prototypes for unireg */
|
||||
|
||||
|
Reference in New Issue
Block a user