[Serusers] [Serdev] mysql timeout in ser 2.0

Greger V. Teigre greger at teigre.com
Thu Dec 13 12:14:49 CET 2007


I'm not sure what the conclusion to this thread was.
SIP: could you verify your mysql version?
Jan: I haven't seen a ticket on that. Will we say that we don't support 
mysql version >=5.0.3 and <5.0.19?
g-)

Jan Janak wrote:
> Some more information:
>
> mysql_options(ptr->con, MYSQL_OPT_RECONNECT,(char*)&my_auto_reconnect)
>
> is internally implemented as:
>
> case MYSQL_OPT_RECONNECT:
>   mysql->reconnect= *(my_bool *) arg;
>   break;
>
> and that code is already present in 2.0:
>
> if (!mysql_real_connect(ptr->con, id->host, id->username, id->password,
> id->database, id->port, 0, 0)) {
>         LOG(L_ERR, "new_connection: %s\n", mysql_error(ptr->con));
>         mysql_close(ptr->con);
>         goto err;
>     }
>
> /* Enable reconnection explicitly */
> ptr->con->reconnect = 1;
>
> This is the old way of enabling automatic reconnects in mysql but it
> does the same.
>
>    Jan.
>
>
> Andrei Pelinescu-Onciul wrote:
>   
>> On Dec 10, 2007 at 07:20, Greger V. Teigre <greger at teigre.com> wrote:
>>     
>>> [removed sems and semsdev from cc]
>>>
>>>
>>> SIP wrote:
>>>       
>>>>>> Secondary (but no less important) items that are a must-have:
>>>>>> -MySQL (I'm voting for 5 series here, but that will require my patch for 
>>>>>> the mysql code in SER 2.0)
>>>>>>    
>>>>>>      
>>>>>>             
>>>>> why the patch?
>>>>>  
>>>>>    
>>>>>           
>>>> MySQL 5.0.X automatically times out its sockets after a hardcoded period 
>>>> of time. Unless you have configured the socket to auto reconnect (see 
>>>> http://www.ideasip.com/support/utils/my_con.c.SER2 ), after a little 
>>>> while, the socket will just time out and you will have to restart SER in 
>>>> order to connect to the database (it will throw errors).
>>>>  
>>>>         
>>> I thought that issue was resolved. Can you check the tracker ticket and 
>>> verify that it is scheduled for ser 2.0 release?
>>>       
>> It is fixed in a different way in 2.1, but it was not backported to 2.0
>> (see http://lists.iptel.org/pipermail/serdev/2007-June/010460.html).
>>
>> Jan, have you forgotten to backport it or is there some other reason?
>>
>> (patch for 2.0  attached)
>>
>>
>> Andrei
>>
>>
>> ------------------------------------------------------------------------
>>
>> ? modules/mysql/.db_mod.c.swp
>> Index: modules/mysql/db_mod.c
>> ===================================================================
>> RCS file: /cvsroot/ser/sip_router/modules/mysql/Attic/db_mod.c,v
>> retrieving revision 1.29
>> diff -u -r1.29 db_mod.c
>> --- modules/mysql/db_mod.c	8 Jan 2006 22:43:17 -0000	1.29
>> +++ modules/mysql/db_mod.c	22 Jun 2007 14:33:02 -0000
>> @@ -41,6 +41,14 @@
>>  
>>  int ping_interval = 5 * 60; /* Default is 5 minutes */
>>  int auto_reconnect = 1;     /* Default is enabled */
>> +unsigned int my_connect_to=2; /* 2 s by default */
>> +unsigned int my_send_to=0; /*  enabled only for mysql >= 5.25  */
>> +unsigned int my_recv_to=0; /* enabled only for mysql >= 5.25 */
>> +
>> +unsigned long my_client_ver=0;
>> +
>> +#define DEFAULT_MY_SEND_TO  2   /* s */
>> +#define DEFAULT_MY_RECV_TO  4   /* s */
>>  
>>  static int mysql_mod_init(void);
>>  
>> @@ -71,6 +79,9 @@
>>  static param_export_t params[] = {
>>  	{"ping_interval", PARAM_INT, &ping_interval},
>>  	{"auto_reconnect", PARAM_INT, &auto_reconnect},
>> +	{"connect_timeout", PARAM_INT, &my_connect_to},
>> +	{"send_timeout", PARAM_INT, &my_send_to},
>> +	{"receive_timeout", PARAM_INT, &my_recv_to},
>>  	{0, 0, 0}
>>  };
>>  
>> @@ -90,6 +101,28 @@
>>  
>>  static int mysql_mod_init(void)
>>  {
>> +#if MYSQL_VERSION_ID >= 40101
>> +	my_client_ver=mysql_get_client_version();
>> +	if ((my_client_ver>=50025) || ((my_client_ver >= 40122) && 
>> +			(my_client_ver < 50000))){
>> +		if (my_send_to==0)
>> +			my_send_to= DEFAULT_MY_SEND_TO;
>> +		if (my_recv_to==0)
>> +			my_recv_to= DEFAULT_MY_RECV_TO;
>> +	}else if (my_recv_to || my_send_to){
>> +		LOG(L_WARN, "WARNING: mysql send or received timeout set, but "
>> +				" not supported by the installed mysql client library"
>> +				" (needed at least 4.1.22 or 5.0.25, but installed %ld)\n",
>> +				my_client_ver);
>> +	}
>> +#else
>> +	if (my_recv_to || my_send_to){
>> +		LOG(L_WARN, "WARNING: mysql send or received timeout set, but "
>> +				" not supported by the mysql client library used to compile"
>> +				" the mysql module (needed at least 4.1.1 but "
>> +				" compiled against %ld)\n", MYSQL_VERSION_ID);
>> +	}
>> +#endif
>>  	DBG("mysql: MySQL client version is %s\n", mysql_get_client_info());
>>  	return 0;
>>  }
>> Index: modules/mysql/db_mod.h
>> ===================================================================
>> RCS file: /cvsroot/ser/sip_router/modules/mysql/Attic/db_mod.h,v
>> retrieving revision 1.3
>> diff -u -r1.3 db_mod.h
>> --- modules/mysql/db_mod.h	28 Oct 2004 23:36:14 -0000	1.3
>> +++ modules/mysql/db_mod.h	22 Jun 2007 14:33:02 -0000
>> @@ -38,5 +38,10 @@
>>  
>>  extern int ping_interval;
>>  extern int auto_reconnect;
>> +extern unsigned int my_connect_to; /* 2 s by default */
>> +extern unsigned int my_send_to; /*  enabled only for mysql >= 5.25  */
>> +extern unsigned int my_recv_to; /* enabled only for mysql >= 5.25 */
>> +
>> +extern unsigned long my_client_ver;
>>  
>>  #endif /* DB_MOD_H */
>> Index: modules/mysql/dbase.c
>> ===================================================================
>> RCS file: /cvsroot/ser/sip_router/modules/mysql/Attic/dbase.c,v
>> retrieving revision 1.48.2.1
>> diff -u -r1.48.2.1 dbase.c
>> --- modules/mysql/dbase.c	23 Feb 2007 21:19:31 -0000	1.48.2.1
>> +++ modules/mysql/dbase.c	22 Jun 2007 14:33:02 -0000
>> @@ -68,7 +68,7 @@
>>  		t = time(0);
>>  		if ((t - CON_TIMESTAMP(_h)) > ping_interval) {
>>  			if (mysql_ping(CON_CONNECTION(_h))) {
>> -				DBG("submit_query: mysql_ping failed\n");
>> +				ERR("mysql: submit_query: mysql_ping failed\n");
>>  			}
>>  		}
>>  		CON_TIMESTAMP(_h) = t;
>> Index: modules/mysql/my_con.c
>> ===================================================================
>> RCS file: /cvsroot/ser/sip_router/modules/mysql/my_con.c,v
>> retrieving revision 1.7
>> diff -u -r1.7 my_con.c
>> --- modules/mysql/my_con.c	30 Jan 2006 16:49:51 -0000	1.7
>> +++ modules/mysql/my_con.c	22 Jun 2007 14:33:02 -0000
>> @@ -26,6 +26,7 @@
>>   */
>>  
>>  #include "my_con.h"
>> +#include "db_mod.h"
>>  #include "../../mem/mem.h"
>>  #include "../../dprint.h"
>>  #include "../../ut.h"
>> @@ -41,6 +42,9 @@
>>  struct my_con* new_connection(struct db_id* id)
>>  {
>>  	struct my_con* ptr;
>> +#if MYSQL_VERSION_ID >= 50013 
>> +	my_bool my_auto_reconnect;
>> +#endif
>>  
>>  	if (!id) {
>>  		LOG(L_ERR, "new_connection: Invalid parameter value\n");
>> @@ -82,6 +86,34 @@
>>  		    ZSW(id->database)
>>  		    );
>>  	}
>> +#if MYSQL_VERSION_ID >= 50013 
>> +	my_auto_reconnect=1;
>> +	if (my_client_ver>=50013){
>> +		if (mysql_options(ptr->con, MYSQL_OPT_RECONNECT , 
>> +					(char*)&my_auto_reconnect))
>> +				WARN("mysql: failed to set MYSQL_OPT_RECONNECT\n");
>> +	}
>> +#endif
>> +	if (my_connect_to){
>> +		if (mysql_options(ptr->con, MYSQL_OPT_CONNECT_TIMEOUT, 
>> +					(char*)&my_connect_to))
>> +				WARN("mysql: failed to set MYSQL_OPT_CONNECT_TIMEOUT\n");
>> +	}
>> +#if MYSQL_VERSION_ID >= 40101 
>> +	if ((my_client_ver>=50025) || ((my_client_ver >= 40122) && 
>> +			(my_client_ver < 50000))){
>> +		if (my_send_to){
>> +			if (mysql_options(ptr->con, MYSQL_OPT_WRITE_TIMEOUT , 
>> +						(char*)&my_send_to))
>> +				WARN("mysql: failed to set MYSQL_OPT_WRITE_TIMEOUT\n");
>> +		}
>> +		if (my_recv_to){
>> +			if (mysql_options(ptr->con, MYSQL_OPT_READ_TIMEOUT , 
>> +						(char*)&my_recv_to))
>> +				WARN("mysql: failed to set MYSQL_OPT_READ_TIMEOUT\n");
>> +		}
>> +	}
>> +#endif
>>  
>>  	if (!mysql_real_connect(ptr->con, id->host, id->username, id->password, id->database, id->port, 0, 0)) {
>>  		LOG(L_ERR, "new_connection: %s\n", mysql_error(ptr->con));
>>     
>
> _______________________________________________
> Serdev mailing list
> Serdev at lists.iptel.org
> http://lists.iptel.org/mailman/listinfo/serdev
>
>
>   
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20071213/1b0ff869/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 2844 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20071213/1b0ff869/attachment.bin>


More information about the sr-users mailing list