SOURCES: mysql-bug-14057.patch (NEW) - new

arekm arekm at pld-linux.org
Wed Feb 15 18:07:18 CET 2006


Author: arekm                        Date: Wed Feb 15 17:07:18 2006 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- new

---- Files affected:
SOURCES:
   mysql-bug-14057.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/mysql-bug-14057.patch
diff -u /dev/null SOURCES/mysql-bug-14057.patch:1.1
--- /dev/null	Wed Feb 15 18:07:18 2006
+++ SOURCES/mysql-bug-14057.patch	Wed Feb 15 18:07:12 2006
@@ -0,0 +1,220 @@
+From: msvensson at mysql dot com
+Date: February 9 2006 2:19pm
+Subject: bk commit into 4.1 tree (msvensson:1.2474) BUG#14057
+
+Below is the list of changes that have just been committed into a local
+4.1 repository of msvensson. When msvensson 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
+  1.2474 06/02/09 14:19:44 msvensson at neptunus.(none) +5 -0
+  Bug#14057 mysql_ping() handles TCP and UNIX socket connections in different ways
+   - Detect that connection to server has been broken in "net_clear". Since 
+  net_clear is always called before we send command to server, we can be sure
+  that server has not received to command.   
+
+  sql/net_serv.cc
+    1.76 06/02/09 14:19:42 msvensson at neptunus.(none) +36 -11
+    Make "net_clear" detect if connection with server has been broken by 
+    performing a select. If the select returns that there are data to read but
+    no data can be read, that means the connection is broken. Signal disconnected
+    to "write" functions by setting error to 2. 
+
+  mysql-test/t/wait_timeout.test
+    1.2 06/02/09 14:19:42 msvensson at neptunus.(none) +41 -2
+    Decease sleep times
+    Add test for wait_timeout also on a TCP connection
+    Add test for mysql_ping on socket and TCP connection.
+
+  mysql-test/t/wait_timeout-master.opt
+    1.2 06/02/09 14:19:42 msvensson at neptunus.(none) +1 -1
+    Decrease wait-timeout so the sleeps in test can be minimized
+
+  mysql-test/r/wait_timeout.result
+    1.2 06/02/09 14:19:42 msvensson at neptunus.(none) +9 -0
+    Update test result
+
+  client/mysqltest.c
+    1.190 06/02/09 14:19:41 msvensson at neptunus.(none) +12 -1
+    Make ping detect if mysql_ping commadn fails.
+
+# 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:	msvensson
+# Host:	neptunus.(none)
+# Root:	/home/msvensson/mysql/bug14057/my41-bug14057
+
+--- 1.75/sql/net_serv.cc	2005-09-07 12:59:02 +02:00
++++ 1.76/sql/net_serv.cc	2006-02-09 14:19:42 +01:00
+@@ -191,25 +191,50 @@
+   DBUG_RETURN(0);
+ }
+ 
+-	/* Remove unwanted characters from connection */
++
++static my_bool net_data_is_ready(my_socket fd)
++{
++  fd_set sfds;
++  struct timeval tv;
++  int res;
++
++  FD_ZERO(&sfds);
++  FD_SET(fd, &sfds);
++
++  tv.tv_sec= tv.tv_usec= 0;
++
++  if ((res= select(fd+1, &sfds, NULL, NULL, &tv)) < 0)
++    return FALSE;
++  else
++    return test(res ? FD_ISSET(fd, &sfds) : 0);
++}
++
++
++/* Remove unwanted characters from connection
++   and check if disconnected */
+ 
+ void net_clear(NET *net)
+ {
++  int count;
+   DBUG_ENTER("net_clear");
+-#if !defined(EXTRA_DEBUG) && !defined(EMBEDDED_LIBRARY)
++#if !defined(EMBEDDED_LIBRARY)
++  while(net_data_is_ready(net->vio->sd))
+   {
+-    int count;					/* One may get 'unused' warn */
+-    my_bool old_mode;
+-    if (!vio_blocking(net->vio, FALSE, &old_mode))
++    /* The socket is ready */
++    if ((count= vio_read(net->vio, (char*) (net->buff),
++                         (uint32) net->max_packet)) > 0)
++    {
++      DBUG_PRINT("info",("skipped %d bytes from file: %s",
++                         count, vio_description(net->vio)));
++    }
++    else
+     {
+-      while ((count = vio_read(net->vio, (char*) (net->buff),
+-			       (uint32) net->max_packet)) > 0)
+-	DBUG_PRINT("info",("skipped %d bytes from file: %s",
+-			   count, vio_description(net->vio)));
+-      vio_blocking(net->vio, TRUE, &old_mode);
++      DBUG_PRINT("info",("socket ready but no data to read - disconnected"));
++      net->error= 2;
++      break;
+     }
+   }
+-#endif /* EXTRA_DEBUG */
++#endif
+   net->pkt_nr=net->compress_pkt_nr=0;		/* Ready for new command */
+   net->write_pos=net->buff;
+   DBUG_VOID_RETURN;
+
+--- 1.1/mysql-test/r/wait_timeout.result	2005-10-11 18:12:10 +02:00
++++ 1.2/mysql-test/r/wait_timeout.result	2006-02-09 14:19:42 +01:00
+@@ -6,3 +6,12 @@
+ select 3;
+ 3
+ 3
++select 1;
++1
++1
++select 2;
++ERROR HY000: MySQL server has gone away
++select 3;
++3
++3
++test of bug14057 completed
+
+--- 1.1/mysql-test/t/wait_timeout-master.opt	2005-10-11 18:12:10 +02:00
++++ 1.2/mysql-test/t/wait_timeout-master.opt	2006-02-09 14:19:42 +01:00
+@@ -1 +1 @@
+---wait-timeout=2
++--wait-timeout=1
+
+--- 1.1/mysql-test/t/wait_timeout.test	2005-10-11 18:12:10 +02:00
++++ 1.2/mysql-test/t/wait_timeout.test	2006-02-09 14:19:42 +01:00
+@@ -3,9 +3,48 @@
+ #
+ --disable_reconnect
+ select 1;
+-# wait_timeout is 2, so we should get disconnected now
+---sleep 5
++# wait_timeout is 1, so we should get disconnected now
++--sleep 2
++# When the connection is lost the error code will depend on
++# the type of the connection(socket, TCP) used between the client and server
++# see bug#2845 for an explanation
+ --error 2006
+ select 2;
+ --enable_reconnect
+ select 3;
++
++# Do the same test as above on a TCP connection
++connect (con1,127.0.0.1,root,,test,$MASTER_MYPORT,);
++--disable_reconnect
++select 1;
++# wait_timeout is 1, so we should get disconnected now
++--sleep 2
++--error 2006
++select 2;
++--enable_reconnect
++select 3;
++disconnect con1;
++
++#
++# Bug #14057 mysql_ping() handles TCP and UNIX socket connections
++# in different ways
++#
++# Connect with socket
++connect (con2,localhost,root,,);
++--sleep 2
++--ping
++--ping
++--ping
++disconnect con2;
++
++# Connect with TCP
++connect (con3,127.0.0.1,root,,test,$MASTER_MYPORT,);
++--sleep 2
++--ping
++--ping
++--ping
++
++disconnect con3;
++connection default;
++
++echo test of bug14057 completed;
+
+--- 1.189/client/mysqltest.c	2005-10-31 13:23:52 +01:00
++++ 1.190/client/mysqltest.c	2006-02-09 14:19:41 +01:00
+@@ -1301,6 +1301,17 @@
+   return 0;
+ }
+ 
++int do_ping(struct st_query *command)
++{
++  MYSQL* mysql= &cur_con->mysql;
++  if (mysql_ping(mysql))
++    die("mysql_ping failed: %d: %s",
++        mysql_errno(mysql), mysql_error(mysql));
++
++  command->last_argument= command->end;
++  return 0;
++}
++
+ 
+ /*
+   Print the content between echo and <delimiter> to result file.
+@@ -4005,7 +4016,7 @@
+         q->last_argument= q->end;
+ 	break;
+       case Q_PING:
+-	(void) mysql_ping(&cur_con->mysql);
++        do_ping(q);
+ 	break;
+       case Q_EXEC:
+ 	do_exec(q);
================================================================


More information about the pld-cvs-commit mailing list