mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
After-merge fixes for 5.5 merge.
Fix typo causing too low timeout value for wait_for_slave_param.inc. Fix binlog checksums following 5.5 merge. Make sure the rpl suite can run with --mysqld=--binlog-checksum=CRC32 Fix a number of problems in the code when checksums are enabled.
This commit is contained in:
@ -79,7 +79,7 @@ if ($_slave_check_configured == 'No such row')
|
|||||||
|
|
||||||
# mysqltest doesn't provide any better way to multiply by 10
|
# mysqltest doesn't provide any better way to multiply by 10
|
||||||
--let $_wait_for_slave_param_zero= 0
|
--let $_wait_for_slave_param_zero= 0
|
||||||
--let $_slave_timeout_counter= $_slave_timeout$zero
|
--let $_slave_timeout_counter= $_slave_timeout$_wait_for_slave_param_zero
|
||||||
--let $_slave_continue= 1
|
--let $_slave_continue= 1
|
||||||
while ($_slave_continue)
|
while ($_slave_continue)
|
||||||
{
|
{
|
||||||
|
@ -98,10 +98,9 @@ count(*)
|
|||||||
1
|
1
|
||||||
### check that the incident event is written to the current log
|
### check that the incident event is written to the current log
|
||||||
SET GLOBAL debug="-d,error_unique_log_filename";
|
SET GLOBAL debug="-d,error_unique_log_filename";
|
||||||
FLUSH LOGS;
|
show binlog events from <binlog_start> limit 4,1;
|
||||||
SHOW BINLOG EVENTS IN 'BINLOG_FILE' FROM <binlog_start> LIMIT 1;
|
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
BINLOG_FILE # Incident # # #1 (LOST_EVENTS)
|
master-bin.000001 # Incident # # #1 (LOST_EVENTS)
|
||||||
DELETE FROM t4;
|
DELETE FROM t4;
|
||||||
RESET MASTER;
|
RESET MASTER;
|
||||||
###################### TEST #8
|
###################### TEST #8
|
||||||
|
@ -5,7 +5,6 @@ CREATE TABLE t1(c1 INT);
|
|||||||
FLUSH LOGS;
|
FLUSH LOGS;
|
||||||
call mtr.add_suppression('Got fatal error 1236 from master when reading data from binary log: .*could not find next log');
|
call mtr.add_suppression('Got fatal error 1236 from master when reading data from binary log: .*could not find next log');
|
||||||
include/wait_for_slave_io_error.inc [errno=1236]
|
include/wait_for_slave_io_error.inc [errno=1236]
|
||||||
Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'could not find next log; the last event was read from 'master-bin.000002' at 375, the last byte read was read from 'master-bin.000002' at 375.''
|
|
||||||
CREATE TABLE t2(c1 INT);
|
CREATE TABLE t2(c1 INT);
|
||||||
FLUSH LOGS;
|
FLUSH LOGS;
|
||||||
CREATE TABLE t3(c1 INT);
|
CREATE TABLE t3(c1 INT);
|
||||||
|
@ -37,7 +37,6 @@ DROP TABLE t1;
|
|||||||
CREATE TABLE t1 (f1 int PRIMARY KEY, f2 LONGTEXT, f3 LONGTEXT) ENGINE=MyISAM;
|
CREATE TABLE t1 (f1 int PRIMARY KEY, f2 LONGTEXT, f3 LONGTEXT) ENGINE=MyISAM;
|
||||||
INSERT INTO t1(f1, f2, f3) VALUES(1, REPEAT('a', @@global.max_allowed_packet), REPEAT('b', @@global.max_allowed_packet));
|
INSERT INTO t1(f1, f2, f3) VALUES(1, REPEAT('a', @@global.max_allowed_packet), REPEAT('b', @@global.max_allowed_packet));
|
||||||
include/wait_for_slave_io_error.inc [errno=1236]
|
include/wait_for_slave_io_error.inc [errno=1236]
|
||||||
Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master; the last event was read from 'master-bin.000001' at 601, the last byte read was read from 'master-bin.000001' at 620.''
|
|
||||||
STOP SLAVE;
|
STOP SLAVE;
|
||||||
RESET SLAVE;
|
RESET SLAVE;
|
||||||
RESET MASTER;
|
RESET MASTER;
|
||||||
|
@ -186,16 +186,8 @@ SELECT count(*) FROM t4;
|
|||||||
|
|
||||||
-- echo ### check that the incident event is written to the current log
|
-- echo ### check that the incident event is written to the current log
|
||||||
SET GLOBAL debug="-d,error_unique_log_filename";
|
SET GLOBAL debug="-d,error_unique_log_filename";
|
||||||
-- let $binlog_start= query_get_value(SHOW MASTER STATUS, Position, 1)
|
-- let $binlog_limit= 4,1
|
||||||
-- let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
|
-- source include/show_binlog_events.inc
|
||||||
|
|
||||||
# 53 is the size of the incident event, so we start from 22 bytes before the
|
|
||||||
# current position
|
|
||||||
-- let $binlog_start = `SELECT $binlog_start - 53`
|
|
||||||
FLUSH LOGS;
|
|
||||||
-- replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $binlog_start <binlog_start> $binlog_file BINLOG_FILE
|
|
||||||
-- replace_column 2 # 4 # 5 #
|
|
||||||
-- eval SHOW BINLOG EVENTS IN '$binlog_file' FROM $binlog_start LIMIT 1
|
|
||||||
|
|
||||||
# clean up and move to next test
|
# clean up and move to next test
|
||||||
DELETE FROM t4;
|
DELETE FROM t4;
|
||||||
|
@ -60,7 +60,7 @@ call mtr.add_suppression('Got fatal error 1236 from master when reading data fro
|
|||||||
connection slave;
|
connection slave;
|
||||||
# 1236 = ER_MASTER_FATAL_ERROR_READING_BINLOG
|
# 1236 = ER_MASTER_FATAL_ERROR_READING_BINLOG
|
||||||
--let $slave_io_errno= 1236
|
--let $slave_io_errno= 1236
|
||||||
--let $show_slave_io_error= 1
|
--let $show_slave_io_error= 0
|
||||||
--source include/wait_for_slave_io_error.inc
|
--source include/wait_for_slave_io_error.inc
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
|
@ -125,7 +125,12 @@ connection slave;
|
|||||||
# The slave I/O thread must stop after receiving
|
# The slave I/O thread must stop after receiving
|
||||||
# 1236=ER_MASTER_FATAL_ERROR_READING_BINLOG error message from master.
|
# 1236=ER_MASTER_FATAL_ERROR_READING_BINLOG error message from master.
|
||||||
--let $slave_io_errno= 1236
|
--let $slave_io_errno= 1236
|
||||||
--let $show_slave_io_error= 1
|
#
|
||||||
|
# Win and Unix path is printed differently: BUG#13055685. So
|
||||||
|
# show_slave_io_error is made 0 until the bug fixes provide necessary
|
||||||
|
# facilities
|
||||||
|
#
|
||||||
|
--let $show_slave_io_error= 0
|
||||||
--source include/wait_for_slave_io_error.inc
|
--source include/wait_for_slave_io_error.inc
|
||||||
|
|
||||||
# Remove the bad binlog and clear error status on slave.
|
# Remove the bad binlog and clear error status on slave.
|
||||||
|
30
sql/log.cc
30
sql/log.cc
@ -4821,7 +4821,7 @@ int THD::binlog_write_table_map(TABLE *table, bool is_transactional,
|
|||||||
cache_mngr->get_binlog_cache_log(use_trans_cache(this, is_transactional));
|
cache_mngr->get_binlog_cache_log(use_trans_cache(this, is_transactional));
|
||||||
if (with_annotate && *with_annotate)
|
if (with_annotate && *with_annotate)
|
||||||
{
|
{
|
||||||
Annotate_rows_log_event anno(current_thd, is_transactional);
|
Annotate_rows_log_event anno(current_thd, is_transactional, false);
|
||||||
/* Annotate event should be written not more than once */
|
/* Annotate event should be written not more than once */
|
||||||
*with_annotate= 0;
|
*with_annotate= 0;
|
||||||
if ((error= anno.write(file)))
|
if ((error= anno.write(file)))
|
||||||
@ -4993,6 +4993,8 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info, my_bool *with_annotate)
|
|||||||
DBUG_ENTER("MYSQL_BIN_LOG::write(Log_event *)");
|
DBUG_ENTER("MYSQL_BIN_LOG::write(Log_event *)");
|
||||||
binlog_cache_data *cache_data= 0;
|
binlog_cache_data *cache_data= 0;
|
||||||
bool is_trans_cache= FALSE;
|
bool is_trans_cache= FALSE;
|
||||||
|
bool using_trans= event_info->use_trans_cache();
|
||||||
|
bool direct= event_info->use_direct_logging();
|
||||||
|
|
||||||
if (thd->binlog_evt_union.do_union)
|
if (thd->binlog_evt_union.do_union)
|
||||||
{
|
{
|
||||||
@ -5001,8 +5003,7 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info, my_bool *with_annotate)
|
|||||||
We will log the function call to the binary log on function exit
|
We will log the function call to the binary log on function exit
|
||||||
*/
|
*/
|
||||||
thd->binlog_evt_union.unioned_events= TRUE;
|
thd->binlog_evt_union.unioned_events= TRUE;
|
||||||
thd->binlog_evt_union.unioned_events_trans |=
|
thd->binlog_evt_union.unioned_events_trans |= using_trans;
|
||||||
event_info->use_trans_cache();
|
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5013,8 +5014,7 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info, my_bool *with_annotate)
|
|||||||
*/
|
*/
|
||||||
bool const end_stmt=
|
bool const end_stmt=
|
||||||
thd->locked_tables_mode && thd->lex->requires_prelocking();
|
thd->locked_tables_mode && thd->lex->requires_prelocking();
|
||||||
if (thd->binlog_flush_pending_rows_event(end_stmt,
|
if (thd->binlog_flush_pending_rows_event(end_stmt, using_trans))
|
||||||
event_info->use_trans_cache()))
|
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -5041,7 +5041,7 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info, my_bool *with_annotate)
|
|||||||
|
|
||||||
IO_CACHE *file= NULL;
|
IO_CACHE *file= NULL;
|
||||||
|
|
||||||
if (event_info->use_direct_logging())
|
if (direct)
|
||||||
{
|
{
|
||||||
file= &log_file;
|
file= &log_file;
|
||||||
my_org_b_tell= my_b_tell(file);
|
my_org_b_tell= my_b_tell(file);
|
||||||
@ -5055,7 +5055,7 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info, my_bool *with_annotate)
|
|||||||
binlog_cache_mngr *const cache_mngr=
|
binlog_cache_mngr *const cache_mngr=
|
||||||
(binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton);
|
(binlog_cache_mngr*) thd_get_ha_data(thd, binlog_hton);
|
||||||
|
|
||||||
is_trans_cache= use_trans_cache(thd, event_info->use_trans_cache());
|
is_trans_cache= use_trans_cache(thd, using_trans);
|
||||||
file= cache_mngr->get_binlog_cache_log(is_trans_cache);
|
file= cache_mngr->get_binlog_cache_log(is_trans_cache);
|
||||||
cache_data= cache_mngr->get_binlog_cache_data(is_trans_cache);
|
cache_data= cache_mngr->get_binlog_cache_data(is_trans_cache);
|
||||||
|
|
||||||
@ -5078,7 +5078,7 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info, my_bool *with_annotate)
|
|||||||
if (with_annotate && *with_annotate)
|
if (with_annotate && *with_annotate)
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(event_info->get_type_code() == TABLE_MAP_EVENT);
|
DBUG_ASSERT(event_info->get_type_code() == TABLE_MAP_EVENT);
|
||||||
Annotate_rows_log_event anno(thd, event_info->cache_type);
|
Annotate_rows_log_event anno(thd, using_trans, direct);
|
||||||
/* Annotate event should be written not more than once */
|
/* Annotate event should be written not more than once */
|
||||||
*with_annotate= 0;
|
*with_annotate= 0;
|
||||||
if (anno.write(file))
|
if (anno.write(file))
|
||||||
@ -5093,7 +5093,8 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info, my_bool *with_annotate)
|
|||||||
if (thd->stmt_depends_on_first_successful_insert_id_in_prev_stmt)
|
if (thd->stmt_depends_on_first_successful_insert_id_in_prev_stmt)
|
||||||
{
|
{
|
||||||
Intvar_log_event e(thd,(uchar) LAST_INSERT_ID_EVENT,
|
Intvar_log_event e(thd,(uchar) LAST_INSERT_ID_EVENT,
|
||||||
thd->first_successful_insert_id_in_prev_stmt_for_binlog);
|
thd->first_successful_insert_id_in_prev_stmt_for_binlog,
|
||||||
|
using_trans, direct);
|
||||||
if (e.write(file))
|
if (e.write(file))
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
@ -5104,13 +5105,14 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info, my_bool *with_annotate)
|
|||||||
nb_elements()));
|
nb_elements()));
|
||||||
Intvar_log_event e(thd, (uchar) INSERT_ID_EVENT,
|
Intvar_log_event e(thd, (uchar) INSERT_ID_EVENT,
|
||||||
thd->auto_inc_intervals_in_cur_stmt_for_binlog.
|
thd->auto_inc_intervals_in_cur_stmt_for_binlog.
|
||||||
minimum());
|
minimum(), using_trans, direct);
|
||||||
if (e.write(file))
|
if (e.write(file))
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
if (thd->rand_used)
|
if (thd->rand_used)
|
||||||
{
|
{
|
||||||
Rand_log_event e(thd,thd->rand_saved_seed1,thd->rand_saved_seed2);
|
Rand_log_event e(thd,thd->rand_saved_seed1,thd->rand_saved_seed2,
|
||||||
|
using_trans, direct);
|
||||||
if (e.write(file))
|
if (e.write(file))
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
@ -5132,7 +5134,9 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info, my_bool *with_annotate)
|
|||||||
user_var_event->length,
|
user_var_event->length,
|
||||||
user_var_event->type,
|
user_var_event->type,
|
||||||
user_var_event->charset_number,
|
user_var_event->charset_number,
|
||||||
flags);
|
flags,
|
||||||
|
using_trans,
|
||||||
|
direct);
|
||||||
if (e.write(file))
|
if (e.write(file))
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
@ -5149,7 +5153,7 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info, my_bool *with_annotate)
|
|||||||
|
|
||||||
error= 0;
|
error= 0;
|
||||||
err:
|
err:
|
||||||
if (event_info->use_direct_logging())
|
if (direct)
|
||||||
{
|
{
|
||||||
my_off_t offset= my_b_tell(file);
|
my_off_t offset= my_b_tell(file);
|
||||||
|
|
||||||
|
@ -8575,14 +8575,16 @@ void Rows_log_event::print_helper(FILE *file,
|
|||||||
|
|
||||||
#ifndef MYSQL_CLIENT
|
#ifndef MYSQL_CLIENT
|
||||||
Annotate_rows_log_event::Annotate_rows_log_event(THD *thd,
|
Annotate_rows_log_event::Annotate_rows_log_event(THD *thd,
|
||||||
uint16 cache_type_arg)
|
bool using_trans,
|
||||||
: Log_event(thd, 0, true),
|
bool direct)
|
||||||
|
: Log_event(thd, 0, using_trans),
|
||||||
m_save_thd_query_txt(0),
|
m_save_thd_query_txt(0),
|
||||||
m_save_thd_query_len(0)
|
m_save_thd_query_len(0)
|
||||||
{
|
{
|
||||||
m_query_txt= thd->query();
|
m_query_txt= thd->query();
|
||||||
m_query_len= thd->query_length();
|
m_query_len= thd->query_length();
|
||||||
cache_type= cache_type_arg;
|
if (direct)
|
||||||
|
cache_type= Log_event::EVENT_NO_CACHE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -2462,9 +2462,13 @@ public:
|
|||||||
uchar type;
|
uchar type;
|
||||||
|
|
||||||
#ifdef MYSQL_SERVER
|
#ifdef MYSQL_SERVER
|
||||||
Intvar_log_event(THD* thd_arg,uchar type_arg, ulonglong val_arg)
|
Intvar_log_event(THD* thd_arg,uchar type_arg, ulonglong val_arg,
|
||||||
:Log_event(thd_arg,0,0),val(val_arg),type(type_arg)
|
bool using_trans, bool direct)
|
||||||
{}
|
:Log_event(thd_arg,0,using_trans),val(val_arg),type(type_arg)
|
||||||
|
{
|
||||||
|
if (direct)
|
||||||
|
cache_type= Log_event::EVENT_NO_CACHE;
|
||||||
|
}
|
||||||
#ifdef HAVE_REPLICATION
|
#ifdef HAVE_REPLICATION
|
||||||
void pack_info(Protocol* protocol);
|
void pack_info(Protocol* protocol);
|
||||||
#endif /* HAVE_REPLICATION */
|
#endif /* HAVE_REPLICATION */
|
||||||
@ -2538,9 +2542,13 @@ class Rand_log_event: public Log_event
|
|||||||
ulonglong seed2;
|
ulonglong seed2;
|
||||||
|
|
||||||
#ifdef MYSQL_SERVER
|
#ifdef MYSQL_SERVER
|
||||||
Rand_log_event(THD* thd_arg, ulonglong seed1_arg, ulonglong seed2_arg)
|
Rand_log_event(THD* thd_arg, ulonglong seed1_arg, ulonglong seed2_arg,
|
||||||
:Log_event(thd_arg,0,0),seed1(seed1_arg),seed2(seed2_arg)
|
bool using_trans, bool direct)
|
||||||
{}
|
:Log_event(thd_arg,0,using_trans),seed1(seed1_arg),seed2(seed2_arg)
|
||||||
|
{
|
||||||
|
if (direct)
|
||||||
|
cache_type= Log_event::EVENT_NO_CACHE;
|
||||||
|
}
|
||||||
#ifdef HAVE_REPLICATION
|
#ifdef HAVE_REPLICATION
|
||||||
void pack_info(Protocol* protocol);
|
void pack_info(Protocol* protocol);
|
||||||
#endif /* HAVE_REPLICATION */
|
#endif /* HAVE_REPLICATION */
|
||||||
@ -2641,11 +2649,17 @@ public:
|
|||||||
#ifdef MYSQL_SERVER
|
#ifdef MYSQL_SERVER
|
||||||
User_var_log_event(THD* thd_arg, char *name_arg, uint name_len_arg,
|
User_var_log_event(THD* thd_arg, char *name_arg, uint name_len_arg,
|
||||||
char *val_arg, ulong val_len_arg, Item_result type_arg,
|
char *val_arg, ulong val_len_arg, Item_result type_arg,
|
||||||
uint charset_number_arg, uchar flags_arg)
|
uint charset_number_arg, uchar flags_arg,
|
||||||
:Log_event(), name(name_arg), name_len(name_len_arg), val(val_arg),
|
bool using_trans, bool direct)
|
||||||
|
:Log_event(thd_arg, 0, using_trans),
|
||||||
|
name(name_arg), name_len(name_len_arg), val(val_arg),
|
||||||
val_len(val_len_arg), type(type_arg), charset_number(charset_number_arg),
|
val_len(val_len_arg), type(type_arg), charset_number(charset_number_arg),
|
||||||
flags(flags_arg)
|
flags(flags_arg)
|
||||||
{ is_null= !val; }
|
{
|
||||||
|
is_null= !val;
|
||||||
|
if (direct)
|
||||||
|
cache_type= Log_event::EVENT_NO_CACHE;
|
||||||
|
}
|
||||||
void pack_info(Protocol* protocol);
|
void pack_info(Protocol* protocol);
|
||||||
#else
|
#else
|
||||||
void print(FILE* file, PRINT_EVENT_INFO* print_event_info);
|
void print(FILE* file, PRINT_EVENT_INFO* print_event_info);
|
||||||
@ -3158,7 +3172,7 @@ class Annotate_rows_log_event: public Log_event
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
#ifndef MYSQL_CLIENT
|
#ifndef MYSQL_CLIENT
|
||||||
Annotate_rows_log_event(THD*, uint16 cache_type_arg);
|
Annotate_rows_log_event(THD*, bool using_trans, bool direct);
|
||||||
#endif
|
#endif
|
||||||
Annotate_rows_log_event(const char *buf, uint event_len,
|
Annotate_rows_log_event(const char *buf, uint event_len,
|
||||||
const Format_description_log_event*);
|
const Format_description_log_event*);
|
||||||
|
@ -4274,7 +4274,11 @@ static int queue_event(Master_info* mi,const char* buf, ulong event_len)
|
|||||||
HB (heartbeat) cannot come before RL (Relay)
|
HB (heartbeat) cannot come before RL (Relay)
|
||||||
*/
|
*/
|
||||||
char llbuf[22];
|
char llbuf[22];
|
||||||
Heartbeat_log_event hb(buf, event_len, mi->rli.relay_log.description_event_for_queue);
|
Heartbeat_log_event hb(buf,
|
||||||
|
mi->rli.relay_log.relay_log_checksum_alg
|
||||||
|
!= BINLOG_CHECKSUM_ALG_OFF ?
|
||||||
|
event_len - BINLOG_CHECKSUM_LEN : event_len,
|
||||||
|
mi->rli.relay_log.description_event_for_queue);
|
||||||
if (!hb.is_valid())
|
if (!hb.is_valid())
|
||||||
{
|
{
|
||||||
error= ER_SLAVE_HEARTBEAT_FAILURE;
|
error= ER_SLAVE_HEARTBEAT_FAILURE;
|
||||||
|
@ -506,10 +506,13 @@ static ulonglong get_heartbeat_period(THD * thd)
|
|||||||
the dump thread.
|
the dump thread.
|
||||||
*/
|
*/
|
||||||
static int send_heartbeat_event(NET* net, String* packet,
|
static int send_heartbeat_event(NET* net, String* packet,
|
||||||
const struct event_coordinates *coord)
|
const struct event_coordinates *coord,
|
||||||
|
uint8 checksum_alg_arg)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("send_heartbeat_event");
|
DBUG_ENTER("send_heartbeat_event");
|
||||||
char header[LOG_EVENT_HEADER_LEN];
|
char header[LOG_EVENT_HEADER_LEN];
|
||||||
|
my_bool do_checksum= checksum_alg_arg != BINLOG_CHECKSUM_ALG_OFF &&
|
||||||
|
checksum_alg_arg != BINLOG_CHECKSUM_ALG_UNDEF;
|
||||||
/*
|
/*
|
||||||
'when' (the timestamp) is set to 0 so that slave could distinguish between
|
'when' (the timestamp) is set to 0 so that slave could distinguish between
|
||||||
real and fake Rotate events (if necessary)
|
real and fake Rotate events (if necessary)
|
||||||
@ -521,7 +524,8 @@ static int send_heartbeat_event(NET* net, String* packet,
|
|||||||
char* p= coord->file_name + dirname_length(coord->file_name);
|
char* p= coord->file_name + dirname_length(coord->file_name);
|
||||||
|
|
||||||
uint ident_len = strlen(p);
|
uint ident_len = strlen(p);
|
||||||
ulong event_len = ident_len + LOG_EVENT_HEADER_LEN;
|
ulong event_len = ident_len + LOG_EVENT_HEADER_LEN +
|
||||||
|
(do_checksum ? BINLOG_CHECKSUM_LEN : 0);
|
||||||
int4store(header + SERVER_ID_OFFSET, server_id);
|
int4store(header + SERVER_ID_OFFSET, server_id);
|
||||||
int4store(header + EVENT_LEN_OFFSET, event_len);
|
int4store(header + EVENT_LEN_OFFSET, event_len);
|
||||||
int2store(header + FLAGS_OFFSET, 0);
|
int2store(header + FLAGS_OFFSET, 0);
|
||||||
@ -531,6 +535,16 @@ static int send_heartbeat_event(NET* net, String* packet,
|
|||||||
packet->append(header, sizeof(header));
|
packet->append(header, sizeof(header));
|
||||||
packet->append(p, ident_len); // log_file_name
|
packet->append(p, ident_len); // log_file_name
|
||||||
|
|
||||||
|
if (do_checksum)
|
||||||
|
{
|
||||||
|
char b[BINLOG_CHECKSUM_LEN];
|
||||||
|
ha_checksum crc= my_checksum(0L, NULL, 0);
|
||||||
|
crc= my_checksum(crc, (uchar*) header, sizeof(header));
|
||||||
|
crc= my_checksum(crc, (uchar*) p, ident_len);
|
||||||
|
int4store(b, crc);
|
||||||
|
packet->append(b, sizeof(b));
|
||||||
|
}
|
||||||
|
|
||||||
if (my_net_write(net, (uchar*) packet->ptr(), packet->length()) ||
|
if (my_net_write(net, (uchar*) packet->ptr(), packet->length()) ||
|
||||||
net_flush(net))
|
net_flush(net))
|
||||||
{
|
{
|
||||||
@ -1046,7 +1060,7 @@ impossible position";
|
|||||||
thd->exit_cond(old_msg);
|
thd->exit_cond(old_msg);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
if (send_heartbeat_event(net, packet, coord))
|
if (send_heartbeat_event(net, packet, coord, current_checksum_alg))
|
||||||
{
|
{
|
||||||
errmsg = "Failed on my_net_write()";
|
errmsg = "Failed on my_net_write()";
|
||||||
my_errno= ER_UNKNOWN_ERROR;
|
my_errno= ER_UNKNOWN_ERROR;
|
||||||
|
Reference in New Issue
Block a user