summaryrefslogtreecommitdiff
path: root/mysys
diff options
context:
space:
mode:
authorRohit Kalhans <rohit.kalhans@oracle.com>2012-05-29 12:11:30 +0530
committerRohit Kalhans <rohit.kalhans@oracle.com>2012-05-29 12:11:30 +0530
commitd8b2d4a0694156848db0862a230d248653f8ebe5 (patch)
treeb8cc09e4196ef3f0d060ffca61b5cb6e6f4d5907 /mysys
parent01748ce128ae4c29cfb63e88cd68918e7d48e946 (diff)
downloadmariadb-git-d8b2d4a0694156848db0862a230d248653f8ebe5.tar.gz
Bug#11762667: MYSQLBINLOG IGNORES ERRORS WHILE WRITING OUTPUT
Problem: mysqlbinlog exits without any error code in case of file write error. It is because of the fact that the calls to Log_event::print() method does not return a value and the thus any error were being ignored. Resolution: We resolve this problem by checking for the IO_CACHE::error == -1 after every call to Log_event:: print() and terminating the further execution. client/mysqlbinlog.cc: - handled error conditions during event->print() calls - added check for error in end_io_cache() mysys/my_write.c: Added debug code to simulate file write error. error returned will be ENOSPC=> error no space on the disk sql/log_event.cc: Added debug code to simulate file write error, by reducing the size of io cache.
Diffstat (limited to 'mysys')
-rw-r--r--mysys/my_write.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/mysys/my_write.c b/mysys/my_write.c
index f261c768dcb..b545ab776b0 100644
--- a/mysys/my_write.c
+++ b/mysys/my_write.c
@@ -38,7 +38,17 @@ size_t my_write(int Filedes, const uchar *Buffer, size_t Count, myf MyFlags)
for (;;)
{
- if ((writenbytes= write(Filedes, Buffer, Count)) == Count)
+ writenbytes= write(Filedes, Buffer, Count);
+ /**
+ To simulate the write error set the errno = error code
+ and the number pf written bytes to -1.
+ */
+ DBUG_EXECUTE_IF ("simulate_file_write_error",
+ {
+ errno= ENOSPC;
+ writenbytes= (size_t) -1;
+ });
+ if (writenbytes == Count)
break;
if (writenbytes != (size_t) -1)
{ /* Safeguard */