Hi Alexy,
The patch correctly aborts I/O thread when OOM error is detected. Good to push.
Rafal
Alexey Kopytov wrote:
> Below is the list of changes that have just been committed into a local
> 5.0 repository of kaa. When kaa does a push these changes will
> be propagated to the main repository and, within 24 hours after the
> push, to the public repository.
> For information on how to access the public repository
> see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
>
> ChangeSet@stripped, 2007-06-22 14:08:22+04:00, kaa@stripped +1 -0
> 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.
>
> sql/slave.cc@stripped, 2007-06-22 14:08:12+04:00, kaa@stripped +17 -13
> 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.
>
> # This is a BitKeeper patch. What follows are the unified diffs for the
> # set of deltas contained in the patch. The rest of the patch, the part
> # that BitKeeper cares about, is below these diffs.
> # User: kaa
> # Host: polly.local
> # Root: /home/kaa/src/maint/bug24192/my50-bug24192
>
> --- 1.298/sql/slave.cc 2007-04-20 12:35:22 +04:00
> +++ 1.299/sql/slave.cc 2007-06-22 14:08:12 +04:00
> @@ -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;
> @@ -3610,22 +3611,25 @@ after reconnect");
>
> if (event_len == packet_error)
> {
> - uint mysql_error_number= mysql_errno(mysql);
> - if (mysql_error_number == CR_NET_PACKET_TOO_LARGE)
> - {
> - sql_print_error("\
> + uint mysql_error_number= mysql_errno(mysql);
> + 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)
> - {
> - sql_print_error(ER(mysql_error_number), mysql_error_number,
> - mysql_error(mysql));
> - goto err;
> - }
> + thd->variables.max_allowed_packet);
> + goto err;
> + 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";
> #ifdef SIGNAL_WITH_VIO_CLOSE
>