From d054027c4bfabdfa1cdbb58ee9aa34557eacbb45 Mon Sep 17 00:00:00 2001 From: Sujatha Sivakumar Date: Thu, 28 Mar 2013 14:14:39 +0530 Subject: Bug#14324766:PARTIALLY WRITTEN INSERT STATEMENT IN BINLOG NO ERRORS REPORTED Problem: ======= Errors from my_b_fill are ignored. MYSQL_BIN_LOG::write_cache code assumes that 0 returned from my_b_fill always means end-of-cache, but that is incorrect. It can result in error and the error is ignored. Other callers of my_b_fill don't check for error: my_b_copy_to_file, maybe my_b_gets. Fix: === An error handler is already present to check the "cache" error that is reported during "MYSQL_BIN_LOG::write_cache" call. Hence error handlers are added for "my_b_copy_to_file" and "my_b_gets". During my_b_fill() function call, when the cache read fails info->error= -1 is set. Hence a check for "info->error" is added for the above to callers upon their return. mysys/mf_iocache2.c: Added a check for "cache->error" and simulation of cache read failure mysys/my_read.c: Simulation of read failure sql/log_event.cc: Added debug simulation sql/sql_repl.cc: Added a check for cache error --- sql/sql_repl.cc | 2 ++ 1 file changed, 2 insertions(+) (limited to 'sql/sql_repl.cc') diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index 6894eaa48b5..06c25c324c7 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -1732,6 +1732,8 @@ bool show_binlogs(THD* thd) if (protocol->write()) goto err; } + if(index_file->error == -1) + goto err; mysql_bin_log.unlock_index(); my_eof(thd); DBUG_RETURN(FALSE); -- cgit v1.2.1