diff options
author | rowanbeentje <rowan@beent.je> | 2009-02-18 21:47:29 +0000 |
---|---|---|
committer | rowanbeentje <rowan@beent.je> | 2009-02-18 21:47:29 +0000 |
commit | 3ca168863ddbdc3ac3bba0cfd9a64ce262cbfea8 (patch) | |
tree | 19639d2095efd7c3d48ac2dedf893653f8a60c2e /Source/MainController.m | |
parent | 2525366dbfed3aef78beaed89630ea543389cec1 (diff) | |
download | sequelpro-3ca168863ddbdc3ac3bba0cfd9a64ce262cbfea8.tar.gz sequelpro-3ca168863ddbdc3ac3bba0cfd9a64ce262cbfea8.tar.bz2 sequelpro-3ca168863ddbdc3ac3bba0cfd9a64ce262cbfea8.zip |
Sets and enforces a connection timeout, and handles connection timeouts appropriately - offering to retry, reconnect, or disconnect. This fixes Issue #93, Issue #69, and Issue #77.
The gory details:
Previously, MCPKit was correctly running mysql_ping to ensure a connection still existed before running a query, and aborted the query if the connection was no longer active.However the code very rarely checked the response of this, so if a query failed subsequent queries would continue to be run and the program would end up checking non-existent results, throwing Cocoa exceptions and generally breaking. However, mysql_ping would also use the default timeout (30 seconds) for each check - when running the (previous to r333) 14 queries to switch tables, this resulted in a long hang before the program even broke.
To exacerbate the issue, certain situations triggered a bug present in mysql_ping in the old client binaries we're using (http://bugs.mysql.com/bug.php?id=9678), causing mysql_ping to never return despite the presence of a timeout, and so causing an indefinite hang.
This issue has been fixed by:
- Setting a new 10 second connection timeout for both new connections (Issue #69) and for mysql_pings. Once preferences have been redesigned we'll probably make this value editable.
- Enforce the 10 second timeout even if mysql_ping hangs by using interrupts.
- Wrap mysql_ping in a new method to do the above and also catch re-established connections without reporting false failures.
- When a connection has failed, prompt the user to Retry, Reconnect, or Disconnect. Reconnect uses the original details for the old connection to establish a new connection, also attempting to preserve the current encoding.
- Do not return control to the main loop until a connection has been reestablished (or disconnected) - this ensures the program is never in a broken state without having to rewrite all query usage.
Much of the above patches the MCPKit connection methods as necessary.
Diffstat (limited to 'Source/MainController.m')
0 files changed, 0 insertions, 0 deletions