summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Elkin <andrei.elkin@oracle.com>2012-07-10 13:00:03 +0300
committerAndrei Elkin <andrei.elkin@oracle.com>2012-07-10 13:00:03 +0300
commiteca29d5f333265ae6609a941b2b954c3d81b402f (patch)
tree0d62d6242d9ecee58c7105f824ce1c5548cae02e
parent5be435dee37bdf31519981a457ad2c748e3e1bc6 (diff)
parent13f7f002886c18fc911f6cf6d5bd672f8c96d844 (diff)
downloadmariadb-git-eca29d5f333265ae6609a941b2b954c3d81b402f.tar.gz
merge from 5.1 repo.
-rw-r--r--client/mysqlbinlog.cc13
-rw-r--r--mysys/mf_iocache2.c6
-rw-r--r--sql/log.cc5
-rw-r--r--sql/log_event.cc24
-rw-r--r--sql/rpl_utility.h2
5 files changed, 41 insertions, 9 deletions
diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc
index e7840865a58..b5acfc5c169 100644
--- a/client/mysqlbinlog.cc
+++ b/client/mysqlbinlog.cc
@@ -784,8 +784,11 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
goto end;
}
else
+ {
ce->print(result_file, print_event_info, TRUE);
-
+ if (head->error == -1)
+ goto err;
+ }
// If this binlog is not 3.23 ; why this test??
if (glob_description_event->binlog_version >= 3)
{
@@ -836,6 +839,8 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
ce->print(result_file, print_event_info, TRUE);
my_free((char*)ce->fname,MYF(MY_WME));
delete ce;
+ if (head->error == -1)
+ goto err;
}
else
warning("Ignoring Execute_load_log_event as there is no "
@@ -890,6 +895,12 @@ Exit_status process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
{
convert_path_to_forward_slashes(fname);
exlq->print(result_file, print_event_info, fname);
+ if (head->error == -1)
+ {
+ if (fname)
+ my_free(fname, MYF(MY_WME));
+ goto err;
+ }
}
else
warning("Ignoring Execute_load_query since there is no "
diff --git a/mysys/mf_iocache2.c b/mysys/mf_iocache2.c
index 828145b7931..dd56e332433 100644
--- a/mysys/mf_iocache2.c
+++ b/mysys/mf_iocache2.c
@@ -430,7 +430,11 @@ process_flags:
memset(buffz, '0', minimum_width - length2);
else
memset(buffz, ' ', minimum_width - length2);
- my_b_write(info, buffz, minimum_width - length2);
+ if (my_b_write(info, buffz, minimum_width - length2))
+ {
+ my_afree(buffz);
+ goto err;
+ }
my_afree(buffz);
}
diff --git a/sql/log.cc b/sql/log.cc
index 3714f1190be..57c14b24782 100644
--- a/sql/log.cc
+++ b/sql/log.cc
@@ -2388,7 +2388,10 @@ bool MYSQL_QUERY_LOG::write(THD *thd, time_t current_time,
{
end= strxmov(buff, "# administrator command: ", NullS);
buff_len= (ulong) (end - buff);
- my_b_write(&log_file, (uchar*) buff, buff_len);
+ DBUG_EXECUTE_IF("simulate_slow_log_write_error",
+ {DBUG_SET("+d,simulate_file_write_error");});
+ if(my_b_write(&log_file, (uchar*) buff, buff_len))
+ tmp_errno= errno;
}
if (my_b_write(&log_file, (uchar*) sql_text, sql_text_len) ||
my_b_write(&log_file, (uchar*) ";\n",2) ||
diff --git a/sql/log_event.cc b/sql/log_event.cc
index 1822951cccf..2f27efa8b4e 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -6320,11 +6320,18 @@ void Create_file_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info
{
Load_log_event::print(file, print_event_info,
!check_fname_outside_temp_buf());
- /*
- That one is for "file_id: etc" below: in mysqlbinlog we want the #, in
- SHOW BINLOG EVENTS we don't.
- */
- my_b_printf(&cache, "#");
+ /**
+ reduce the size of io cache so that the write function is called
+ for every call to my_b_printf().
+ */
+ DBUG_EXECUTE_IF ("simulate_create_event_write_error",
+ {(&cache)->write_pos= (&cache)->write_end;
+ DBUG_SET("+d,simulate_file_write_error");});
+ /*
+ That one is for "file_id: etc" below: in mysqlbinlog we want the #, in
+ SHOW BINLOG EVENTS we don't.
+ */
+ my_b_printf(&cache, "#");
}
my_b_printf(&cache, " file_id: %d block_len: %d\n", file_id, block_len);
@@ -7000,6 +7007,13 @@ void Execute_load_query_log_event::print(FILE* file,
Write_on_release_cache cache(&print_event_info->head_cache, file);
print_query_header(&cache, print_event_info);
+ /**
+ reduce the size of io cache so that the write function is called
+ for every call to my_b_printf().
+ */
+ DBUG_EXECUTE_IF ("simulate_execute_event_write_error",
+ {(&cache)->write_pos= (&cache)->write_end;
+ DBUG_SET("+d,simulate_file_write_error");});
if (local_fname)
{
diff --git a/sql/rpl_utility.h b/sql/rpl_utility.h
index 81a10cca814..b2577643add 100644
--- a/sql/rpl_utility.h
+++ b/sql/rpl_utility.h
@@ -300,7 +300,7 @@ private:
public:
Deferred_log_events(Relay_log_info *rli);
~Deferred_log_events();
- /* queue for exection at Query-log-event time prior the Query */;
+ /* queue for exection at Query-log-event time prior the Query */
int add(Log_event *ev);
bool is_empty();
bool execute(Relay_log_info *rli);