oldmoe / mysqlplus

An enhanced mysql driver with an async interface and threaded access support
176 stars 37 forks source link

'mysqlplus' blocks the entire Ruby process when connecting to DB #3

Open ibc opened 14 years ago

ibc commented 14 years ago

Hi, "mysqlplus" (and of course also "mysql") driver blocks totally the Ruby process when it's trying to connect to a MySQL server. In case the server doesn't respond then we get our Tuby application stopped forever.

Please check the following code which shows the issue: http://gist.github.com/264866

Is it possible to make MySQL connection non-blocking?

Regards.

ibc commented 14 years ago

I've reported same bug for 'pg' driver and it's fixed now (it already implemented non-blocking connection):

http://bitbucket.org/ged/ruby-pg/issue/14/pgconnconnect-blocks-forever-if-the-db-host-is#comment-100487 http://bitbucket.org/ged/ruby-pg/changeset/f5af71167dea/

skiz commented 14 years ago

To create a non-blocking connection you need to provide a timeout (works in all mysql libs) as by default there is no connect timeout defined. con = Mysql.init con.options(Mysql::OPT_CONNECT_TIMEOUT, 5) # 5 second timeout

ibc commented 14 years ago

Great, I didn't know such option. I will report to Sequel developer to include it. Thanks.