Bug #40407 MyODBC takes 15 minutes to time out on network connection failure

Submitted: 29 Oct 2008 20:07 Modified: 5 Jan 2009 18:05
Reporter: Kyle Joiner Email Updates:
Status: Closed Impact on me:
None 
Category:Connector / ODBC Severity:S2 (Serious)
Version:3.51, 5.1 OS:Linux (Linux 2.6.9-67.ELsmp )
Assigned to: Jess Balint CPU Architecture:Any

[29 Oct 2008 20:07] Kyle Joiner
Description:
Client hangs when network connection to the server is interrupted.  

gdb trace from client:

Thread 4 (Thread -1396245600 (LWP 3032)):
#0 0x00ad07a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
#1 0x00c9f69b in __read_nocancel () from /lib/tls/libpthread.so.0
#2 0x006c1a19 in vio_read () from /usr/lib/libmyodbc3-3.51.19.so
#3 0x006c1a80 in vio_read_buff () from /usr/lib/libmyodbc3-3.51.19.so
#4 0x006c333e in my_net_set_write_timeout () from /usr/lib/libmyodbc3-3.51.19.so
#5 0x006c312a in my_net_read () from /usr/lib/libmyodbc3-3.51.19.so
#6 0x006bc159 in cli_safe_read () from /usr/lib/libmyodbc3-3.51.19.so
#7 0x006bec9c in mysql_close () from /usr/lib/libmyodbc3-3.51.19.so
#8 0x006bef0c in mysql_real_query () from /usr/lib/libmyodbc3-3.51.19.so
#9 0x006a06d2 in mysql_query () from /usr/lib/libmyodbc3-3.51.19.so
#10 0x00694b9a in do_query () from /usr/lib/libmyodbc3-3.51.19.so
#11 0x00695940 in my_SQLExecute () from /usr/lib/libmyodbc3-3.51.19.so
#12 0x0069575b in SQLExecute () from /usr/lib/libmyodbc3-3.51.19.so
#13 0x0807723f in otl_sel::first (this=0x87c8510, cur=@0x87c84b8, cur_row=@0x87c8500,
cur_size=@0x87c8504, row_count=@0x87c8508, eof_data=@0x87c84ec, array_size=50)
at /software/src/common/OTL/otlv4.h:11321
#14 0x080770b9 in otl_tmpl_select_cursor<otl_exc, otl_conn, otl_cur, otl_var, otl_sel>::first (
this=0x87c84a8) at /software/src/common/OTL/otlv4.h:5036
#15 0x08073850 in otl_tmpl_select_stream<otl_exc, otl_conn, otl_cur, otl_var, otl_sel, tagTIMESTAMP_STRUCT>::rewind (this=0x87c84a8) at /software/src/common/OTL/otlv4.h:5262
#16 0x0807397d in otl_stream::rewind (this=0xacc6f078) at /software/src/common/OTL/otlv4.h:12562
#17 0x0807255f in otl_stream::open (this=0xacc6f078, arr_size=50,
sqlstm=0x5bf518 "select id, TABLE_NAME, MODIFIED_TIME,now() from DB_CHANGES where id=(select max(id) from DB_CHANGES)", db=@0x87928d8, implicit_select=0, sqlstm_label=0x0)
at /software/src/common/OTL/otlv4.h:12624
#18 0x080711ee in DbQueryProcessor<DBQueryDbChanges>::prepare (this=0xacc6f020, match1=@0x808e680,
match2=@0x808e680, match3=@0x808e680)
at /software/src/common/platformservices/api/include/database/DbQueryProcessor.h:150
#19 0x08067898 in DbProxy_i::checkForDbChanges () at DbProxyMiddlewareInterface.cpp:337
#20 0x00917396 in PsTimerHdlr::handle_timeout (this=0x87ac580, curTime=@0xacc6f218)
at PsTimerHdlr.cpp:237
#21 0x0016816e in ACE_Event_Handler_Handle_Timeout_Upcall<ACE_Recursive_Thread_Mutex>::timeout (
this=0x876d718, timer_queue=@0x876ee10, event_handler=0x87ac580, act=0x0, recurring_timer=1,
cur_time=@0xacc6f218) at /software/src/common/ACE/ACE_wrappers/ace/Timer_Queue_T.cpp:408
#22 0x0016810c in ACE_Timer_Queue_T<ACE_Event_Handler*, ACE_Event_Handler_Handle_Timeout_Upcall<ACE_Recursive_Thread_Mutex>, ACE_Recursive_Thread_Mutex>::upcall (this=0x876ee10, info=@0xacc6f200,
#23 0x00325394 in ACE_TP_Reactor::handle_timer_events (this=0x876e630, guard=@0xacc6f290)
at TP_Reactor.cpp:395
#24 0x003251e8 in ACE_TP_Reactor::dispatch_i (this=0x876e630, max_wait_time=0x0, guard=@0xacc6f290)
at TP_Reactor.cpp:288
#25 0x0032500a in ACE_TP_Reactor::handle_events (this=0x876e630, max_wait_time=0x0) at TP_Reactor.cpp:173
#26 0x002fca36 in ACE_Reactor::run_reactor_event_loop (this=0x876ed54, eh=0) at Reactor.cpp:233
#27 0x0090b827 in PlatformServiceSingleton_i::ioEventLoop () at PlatformService.cpp:376
#28 0x00319950 in ACE_Thread_Adapter::invoke_i (this=0x879ad50) at Thread_Adapter.cpp:151
#29 0x00319889 in ACE_Thread_Adapter::invoke (this=0x879ad50) at Thread_Adapter.cpp:95
#30 0x0028841a in ace_thread_adapter (args=0x879ad50) at Base_Thread_Adapter.cpp:137
#31 0x00c9a3cc in start_thread () from /lib/tls/libpthread.so.0
#32 0x00bb31ae in clone () from /lib/tls/libc.so.6

How to repeat:
Here is the test scenario: Client is on node1 and using ODBC/OTL 4.0 to connect to MySQL server, which is running on node2. Now when a network cable is pulled out from node2, the client on node1 hangs for 15 minutes. It doesn't get the socket timeout network failure and fails to return immediately.
[30 Oct 2008 10:36] Tonci Grgin
Hey Kyle.

I think you rushed too fast and disregarded possible regression related to Bug #9678.

My test:
  o MySQL server version: 5.0.67-community-nt MySQL Community Edition (GPL) on Vista x64 remote host.
  o MySQL client 5.0.67 on localhost.

Connection id:    5
Current database: information_schema

mysql> select sleep(5), 1+1;
+----------+-----+
| sleep(5) | 1+1 |
+----------+-----+
|        0 |   2 |
+----------+-----+
1 row in set (5.22 sec)

mysql> select sleep(10), 1+1;

--<server network cable disconnected>--

Query aborted by Ctrl+C (after 30 minutes waiting)
^C

I fail to see how this is related to ODBC...
[30 Oct 2008 10:37] Tonci Grgin
Client screen shoot after disconnecting server from network.

Attachment: Bug9678.JPG (image/jpeg, text), 133.01 KiB.

[31 Oct 2008 19:43] Tonci Grgin
Sveta, I need to know if *Linux* client fails. Please retest once again.
[31 Oct 2008 22:09] Sveta Smirnova
With Linux client connection fails as well: C API behavior is correct
[31 Oct 2008 22:17] Tonci Grgin
Thanks Sveta for checking client library for regression.
	mysql_options(&conn, MYSQL_OPT_READ_TIMEOUT, (void *)&timeout);
	mysql_options(&conn, MYSQL_OPT_WRITE_TIMEOUT, (void *)&timeout);
work as expected but, unfortunately, we do not implement those in c/ODBC...
[4 Nov 2008 23:19] Jess Balint
Fix pushed to

https://code.launchpad.net/~myodbc-developers/myodbc/bug40407_351
[11 Nov 2008 17:54] Jess Balint
Pushed as rev 689.
[12 Nov 2008 16:09] Jess Balint
Will be released in 3.51.27.
[3 Dec 2008 17:06] Jess Balint
Added READTIMEOUT and WRITETIMEOUT connection options that correspond to the MYSQL_OPT_READ_TIMEOUT and MYSQL_OPT_WRITE_TIMEOUT options of libmysql.
[5 Jan 2009 18:05] Tony Bedford
An entry was added to the 3.51.27 changelog:

The client program hung when the network connection to the server was interrupted. 

Also, information was added to the main documentation for the options READTIMEOUT and WRITETIMEOUT.
[27 Sep 2010 10:06] Bonny Gijzen
I don't see if this bug was/is also present in 5.1, is it?
Can someone confirm that this bug isn't present in 5.1?
Can someone confirm the READTIMEOUT and WRITETIMEOUT options are available in 5.1 ?

Bonny,

Portions of this website are copyright © 2001, 2002 The PHP Group

Page generated in 0.066 sec. using MySQL 8.4.7-u6-cloud

Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.