bug#19402 SQL close to the size of the max_allowed_packet fails on the slave

comments are fixed as was suggested in reviews.
parent fe5de9f5
...@@ -147,8 +147,10 @@ struct sql_ex_info ...@@ -147,8 +147,10 @@ struct sql_ex_info
#define EXEC_LOAD_HEADER_LEN 4 #define EXEC_LOAD_HEADER_LEN 4
#define DELETE_FILE_HEADER_LEN 4 #define DELETE_FILE_HEADER_LEN 4
/* amount of byte is contribution of replicaton protocol to a query /*
received from user when the query goes to binlog */ Max number of possible extra bytes in a replication event compared to a
packet (i.e. a query) sent from client to master.
*/
#define MAX_LOG_EVENT_HEADER (LOG_EVENT_HEADER_LEN + /* write_header */ \ #define MAX_LOG_EVENT_HEADER (LOG_EVENT_HEADER_LEN + /* write_header */ \
QUERY_HEADER_LEN + /* write_data */ \ QUERY_HEADER_LEN + /* write_data */ \
NAME_LEN + 1) NAME_LEN + 1)
......
...@@ -2618,8 +2618,13 @@ static int init_slave_thread(THD* thd, SLAVE_THD_TYPE thd_type) ...@@ -2618,8 +2618,13 @@ static int init_slave_thread(THD* thd, SLAVE_THD_TYPE thd_type)
SYSTEM_THREAD_SLAVE_SQL : SYSTEM_THREAD_SLAVE_IO; SYSTEM_THREAD_SLAVE_SQL : SYSTEM_THREAD_SLAVE_IO;
thd->host_or_ip= ""; thd->host_or_ip= "";
my_net_init(&thd->net, 0); my_net_init(&thd->net, 0);
/*
Adding MAX_LOG_EVENT_HEADER_LEN to the max_allowed_packet on all
slave threads, since a replication event can become this much larger
than the corresponding packet (query) sent from client to master.
*/
thd->variables.max_allowed_packet= global_system_variables.max_allowed_packet thd->variables.max_allowed_packet= global_system_variables.max_allowed_packet
+ MAX_LOG_EVENT_HEADER; /* reentering secured through using global */ + MAX_LOG_EVENT_HEADER; /* note, incr over the global not session var */
thd->net.read_timeout = slave_net_timeout; thd->net.read_timeout = slave_net_timeout;
thd->master_access= ~(ulong)0; thd->master_access= ~(ulong)0;
thd->priv_user = 0; thd->priv_user = 0;
...@@ -3156,7 +3161,11 @@ extern "C" pthread_handler_decl(handle_slave_io,arg) ...@@ -3156,7 +3161,11 @@ extern "C" pthread_handler_decl(handle_slave_io,arg)
mi->host, mi->port, mi->host, mi->port,
IO_RPL_LOG_NAME, IO_RPL_LOG_NAME,
llstr(mi->master_log_pos,llbuff)); llstr(mi->master_log_pos,llbuff));
/* post-net-init for slave */ /*
Adding MAX_LOG_EVENT_HEADER_LEN to the max_packet_size on the I/O
thread, since a replication event can become this much larger than
the corresponding packet (query) sent from client to master.
*/
mysql->net.max_packet_size= thd->net.max_packet_size+= MAX_LOG_EVENT_HEADER; mysql->net.max_packet_size= thd->net.max_packet_size+= MAX_LOG_EVENT_HEADER;
} }
else else
......
...@@ -420,7 +420,11 @@ impossible position"; ...@@ -420,7 +420,11 @@ impossible position";
goto err; goto err;
} }
packet->set("\0", 1, &my_charset_bin); packet->set("\0", 1, &my_charset_bin);
/* dump thread the whole header size of query_log_event */ /*
Adding MAX_LOG_EVENT_HEADER_LEN, since a binlog event can become
this larger than the corresponding packet (query) sent
from client to master.
*/
thd->variables.max_allowed_packet+= MAX_LOG_EVENT_HEADER; thd->variables.max_allowed_packet+= MAX_LOG_EVENT_HEADER;
while (!net->error && net->vio != 0 && !thd->killed) while (!net->error && net->vio != 0 && !thd->killed)
......
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