Commit b270fa67 authored by kaa@polly.local's avatar kaa@polly.local
Browse files

Fix for bug #24192 "MySQL replication does not exit server when running out of memory"

In case of out-of-memory error received from the master, print the corresponding message to the error log and stop slave I/O thread to avoid reconnecting with a wrong binary log position.
parent 90468a72
Loading
Loading
Loading
Loading
+17 −13
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
#include <my_dir.h>
#include <sql_common.h>
#include <errmsg.h>
#include <mysys_err.h>

#define MAX_SLAVE_RETRY_PAUSE 5
bool use_slave_mask = 0;
@@ -3611,20 +3612,23 @@ after reconnect");
      if (event_len == packet_error)
      {
        uint mysql_error_number= mysql_errno(mysql);
	if (mysql_error_number == CR_NET_PACKET_TOO_LARGE)
	{
        switch (mysql_error_number) {
        case CR_NET_PACKET_TOO_LARGE:
          sql_print_error("\
Log entry on master is longer than max_allowed_packet (%ld) on \
slave. If the entry is correct, restart the server with a higher value of \
max_allowed_packet",
                          thd->variables.max_allowed_packet);
          goto err;
	}
	if (mysql_error_number == ER_MASTER_FATAL_ERROR_READING_BINLOG)
	{
        case ER_MASTER_FATAL_ERROR_READING_BINLOG:
          sql_print_error(ER(mysql_error_number), mysql_error_number,
                          mysql_error(mysql));
          goto err;
        case EE_OUTOFMEMORY:
        case ER_OUTOFMEMORY:
          sql_print_error("\
Stopping slave I/O thread due to out-of-memory error from master");
          goto err;
        }
        mi->slave_running= MYSQL_SLAVE_RUN_NOT_CONNECT;
	thd->proc_info = "Waiting to reconnect after a failed master event read";