Re: MySQL clients hang when network to server is disrupted!

2002-03-21 Thread Sinisa Milivojevic

On Wed, 20 Mar 2002 16:00:15 -0800
Lance Welsh <[EMAIL PROTECTED]> wrote:

> It is a big problem for us, and I can only imagine for anyone using
> MySQL, when a mysql client hangs on an established connection to
> the mysql server because the network to the server is disrupted
> (such as someone pulling power to a network hub or many other
> scenarios).  We have changed the source code to fix this, but
> I'd sure like to hear comments from people that know MySQL.
> 
> The mysql client can respond with an error if the server dies or is
> shutdown because the network will cleanup the broken connection.
> The mysql client can also respond with an error if the server is not
> available for a connection.  But if the connection is already
> established and the network connection is disrupted, the client simply
> hangs.
> 
> Someone please tell me if I am wrong, or if I am doing something
> wrong.  Perhaps there is a feature or option I am overlooking (the
> option to set a timeout when connecting does not affect existing
> connections).  
> 
> Perhaps my change here could be incorporated into the source code
> control if someone will guide me.  What we have done to get around
> this problem is to use poll with a timeout before blindly hanging on
> a read.  I had to alter the vio_read method in the violite.c file:
> 

Hi!

In some cases you can have a connection to timeout by setting network read and write 
timeouts on the server. 

For all other cases, network read and write timeouts will have to be established on 
the client side too.


--

Regards,

--
For technical support contracts, go to https://order.mysql.com/
   __  ___ ___   __
  /  |/  /_ __/ __/ __ \/ /Mr. Sinisa Milivojevic <[EMAIL PROTECTED]>
 / /|_/ / // /\ \/ /_/ / /__   MySQL AB, FullTime Developer
/_/  /_/\_, /___/\___\_\___/   Larnaca, Cyprus
   <___/   www.mysql.com

-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php




MySQL clients hang when network to server is disrupted!

2002-03-20 Thread Lance Welsh

It is a big problem for us, and I can only imagine for anyone using
MySQL, when a mysql client hangs on an established connection to
the mysql server because the network to the server is disrupted
(such as someone pulling power to a network hub or many other
scenarios).  We have changed the source code to fix this, but
I'd sure like to hear comments from people that know MySQL.

The mysql client can respond with an error if the server dies or is
shutdown because the network will cleanup the broken connection.
The mysql client can also respond with an error if the server is not
available for a connection.  But if the connection is already established
and the network connection is disrupted, the client simply hangs.

Someone please tell me if I am wrong, or if I am doing something
wrong.  Perhaps there is a feature or option I am overlooking (the
option to set a timeout when connecting does not affect existing
connections).  

Perhaps my change here could be incorporated into the source code
control if someone will guide me.  What we have done to get around
this problem is to use poll with a timeout before blindly hanging on
a read.  I had to alter the vio_read method in the violite.c file:

int vio_read(Vio * vio, gptr buf, int size)
{

   ...orig code still here  

// don't read before checking with
// new function new_poll_read
// to avoid read hangs!
   if (new_poll_read(vio, 1))
   {
   r = read(vio->sd, buf, size);
   }
   else
   {
   r = -1;
   }
}

// New method that uses poll
my_bool new_poll_read(Vio *vio,uint timeout)
{
   struct pollfd fds;
   int res = 0 ;
   bool is_blocking=vio_is_blocking(vio);

   DBUG_ENTER("new_poll_read");

   fds.fd=vio->sd;
   fds.events=POLLIN;
   fds.revents=0;

   if(is_blocking)
   {
   timeout *= 1000;
   }
   else
   {
   timeout = 0;
   }

   res = poll(&fds,1,(int) timeout);

   return res > 0 && fds.revents & POLLIN ;

   if(0)
   {
   ;
   }
   else if( res <= 0)// error or timeout
   {
   return res;
   }
   else if(res > 0)  // ready
   {
 if(!(fds.revents & POLLIN))
 {
 return fds.revents & POLLIN;
 }
   }
   else  // impossible
   {
   assert(0) ;
}
}

-- 
-=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=-
Lance Welsh  [EMAIL PROTECTED]
Seascape Communications  (650) 327-6890
-=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=--=+=-



-
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/   (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php