Thread: [Sqlrelay-discussion] setConnectTimeout() not working correctly?
Brought to you by:
mused
From: Cal H. <ca...@fb...> - 2013-12-31 20:09:12
|
Hi David, I'm attempting to write a weighted round-robin connection method for an easy failover mechanism on multiple SQL Relay servers. It appears that the C++ sqlrconnection::setConnectTimeout() function isn't behaving like I'd expect. It seems that no matter what values I pass to it, the connection *always* fails. Here's the general idea I'm doing: bool success = false; do { /* select random sql relay server */ tmpconn = new sqlrconnection(hostname, port, NULL, user, pass, 0, 1); tmpconn->debugOn(); tmpconn->setConnectTimeout(10, 5000000); const char *version = tmpconn->serverVersion(); printf("version: '%s'\n", version); if ( version ) success = true; /* Breaking out after a few tries */ } while ( success == false ); Running that, I get something like this: <pre> Connecting to listener... </pre> <pre> Inet socket: 127.0.0.1:9000 </pre> <pre> Setting Error </pre> <pre> Couldn't connect to the listener. </pre> version: '(null)' But when I comment out the setConnectTimeout() call, it works just fine: <pre> Connecting to listener... </pre> <pre> Inet socket: 127.0.0.1:9000 </pre> <pre> Authenticating : ... </pre> <pre> Server Version... </pre> <pre> Checking for error </pre> <pre> No error occurred </pre> <pre> 0.53.1 </pre> version: '0.53.1' I've played around with different values for seconds and microseconds. (I want a timeout of 5 seconds, however that can be accomplished) Thanks for any help! --Cal |
From: David M. <dav...@fi...> - 2014-01-01 23:23:55
|
Hi Cal, Interesting... I'll do some tests here, figure out what's happening and let you know what I find. Dave On 12/31/2013 3:08 PM, Cal Heldenbrand wrote: > Hi David, > > I'm attempting to write a weighted round-robin connection method for an > easy failover mechanism on multiple SQL Relay servers. It appears that > the C++ sqlrconnection::setConnectTimeout() function isn't behaving like > I'd expect. It seems that no matter what values I pass to it, the > connection *always* fails. > > Here's the general idea I'm doing: > > bool success = false; > do > { > /* > select random sql relay server > */ > > tmpconn = new sqlrconnection(hostname, port, NULL, > user, pass, 0, 1); > tmpconn->debugOn(); > tmpconn->setConnectTimeout(10, 5000000); > > const char *version = tmpconn->serverVersion(); > printf("version: '%s'\n", version); > if ( version ) > success = true; > > /* Breaking out after a few tries */ > } > while ( success == false ); > > Running that, I get something like this: > > <pre> > Connecting to listener... > </pre> > <pre> > Inet socket: 127.0.0.1:9000 <http://127.0.0.1:9000> > </pre> > <pre> > Setting Error > </pre> > <pre> > Couldn't connect to the listener. > </pre> > version: '(null)' > > But when I comment out the setConnectTimeout() call, it works just fine: > > <pre> > Connecting to listener... > </pre> > <pre> > Inet socket: 127.0.0.1:9000 <http://127.0.0.1:9000> > </pre> > <pre> > Authenticating : ... > </pre> > <pre> > Server Version... > </pre> > <pre> > Checking for error > </pre> > <pre> > No error occurred > </pre> > <pre> > 0.53.1 > </pre> > version: '0.53.1' > > I've played around with different values for seconds and microseconds. > (I want a timeout of 5 seconds, however that can be accomplished) > > Thanks for any help! > > --Cal > > > ------------------------------------------------------------------------------ > Rapidly troubleshoot problems before they affect your business. Most IT > organizations don't have a clear picture of how application performance > affects their revenue. With AppDynamics, you get 100% visibility into your > Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro! > http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk > > _______________________________________________________ > Unlimited Disk, Data Transfer, PHP/MySQL Domain Hosting > http://www.doteasy.com > > > > _______________________________________________ > Sqlrelay-discussion mailing list > Sql...@li... > https://lists.sourceforge.net/lists/listinfo/sqlrelay-discussion > > > _______________________________________________________ > Unlimited Disk, Data Transfer, PHP/MySQL Domain Hosting > http://www.doteasy.com > |
From: Cal H. <ca...@fb...> - 2014-01-06 21:09:16
|
Hi David, Yes, that appears to work as expected. Thanks for the quick fix! --Cal On Wed, Jan 1, 2014 at 5:41 PM, David Muse <dav...@fi...>wrote: > Hi Cal, > > It looks like I forgot to flip the sense of an if when I un-nested its > contents. > > It'll be fixed in the next release of sqlrelay/rudiments, but for a > quick fix... > > In the rudiments library, edit src/socketclient.cpp (or if you're using > an older version, src/clientsocket.cpp) and look for an if statement > like this, near line 235: > > if (error::getErrorNumber()==EINPROGRESS || > error::getErrorNumber()==EWOULDBLOCK) { > retval=RESULT_ERROR; > goto cleanup; > } > > Change it to: > > if (error::getErrorNumber()!=EINPROGRESS && > error::getErrorNumber()!=EWOULDBLOCK) { > retval=RESULT_ERROR; > goto cleanup; > } > > Note the !='s rather than =='s and && rather than ||. > > Recompile and reinstall rudiments: > > make > sudo make install > > And it should work. > > Let me know if you run into any more problems. > > And thanks for finding that bug! > > Dave > dav...@fi... > > On 1/1/2014 6:23 PM, David Muse wrote: > > Hi Cal, > > > > Interesting... I'll do some tests here, figure out what's happening and > > let you know what I find. > > > > Dave > > > > On 12/31/2013 3:08 PM, Cal Heldenbrand wrote: > >> Hi David, > >> > >> I'm attempting to write a weighted round-robin connection method for an > >> easy failover mechanism on multiple SQL Relay servers. It appears that > >> the C++ sqlrconnection::setConnectTimeout() function isn't behaving like > >> I'd expect. It seems that no matter what values I pass to it, the > >> connection *always* fails. > >> > >> Here's the general idea I'm doing: > >> > >> bool success = false; > >> do > >> { > >> /* > >> select random sql relay server > >> */ > >> > >> tmpconn = new sqlrconnection(hostname, port, NULL, > >> user, pass, 0, 1); > >> tmpconn->debugOn(); > >> tmpconn->setConnectTimeout(10, 5000000); > >> > >> const char *version = tmpconn->serverVersion(); > >> printf("version: '%s'\n", version); > >> if ( version ) > >> success = true; > >> > >> /* Breaking out after a few tries */ > >> } > >> while ( success == false ); > >> > >> Running that, I get something like this: > >> > >> <pre> > >> Connecting to listener... > >> </pre> > >> <pre> > >> Inet socket: 127.0.0.1:9000 <http://127.0.0.1:9000> > >> </pre> > >> <pre> > >> Setting Error > >> </pre> > >> <pre> > >> Couldn't connect to the listener. > >> </pre> > >> version: '(null)' > >> > >> But when I comment out the setConnectTimeout() call, it works just fine: > >> > >> <pre> > >> Connecting to listener... > >> </pre> > >> <pre> > >> Inet socket: 127.0.0.1:9000 <http://127.0.0.1:9000> > >> </pre> > >> <pre> > >> Authenticating : ... > >> </pre> > >> <pre> > >> Server Version... > >> </pre> > >> <pre> > >> Checking for error > >> </pre> > >> <pre> > >> No error occurred > >> </pre> > >> <pre> > >> 0.53.1 > >> </pre> > >> version: '0.53.1' > >> > >> I've played around with different values for seconds and microseconds. > >> (I want a timeout of 5 seconds, however that can be accomplished) > >> > >> Thanks for any help! > >> > >> --Cal > >> > >> > >> > ------------------------------------------------------------------------------ > >> > >> Rapidly troubleshoot problems before they affect your business. Most IT > >> organizations don't have a clear picture of how application performance > >> affects their revenue. With AppDynamics, you get 100% visibility into > >> your > >> Java,.NET, & PHP application. Start your 15-day FREE TRIAL of > >> AppDynamics Pro! > >> > http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk > >> > >> > >> _______________________________________________________ > >> Unlimited Disk, Data Transfer, PHP/MySQL Domain Hosting > >> http://www.doteasy.com > >> > >> > >> > >> _______________________________________________ > >> Sqlrelay-discussion mailing list > >> Sql...@li... > >> https://lists.sourceforge.net/lists/listinfo/sqlrelay-discussion > >> > >> > >> _______________________________________________________ > >> Unlimited Disk, Data Transfer, PHP/MySQL Domain Hosting > >> http://www.doteasy.com > >> > > > ------------------------------------------------------------------------------ > Rapidly troubleshoot problems before they affect your business. Most IT > organizations don't have a clear picture of how application performance > affects their revenue. With AppDynamics, you get 100% visibility into your > Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics > Pro! > http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk > _______________________________________________ > Sqlrelay-discussion mailing list > Sql...@li... > https://lists.sourceforge.net/lists/listinfo/sqlrelay-discussion > |
From: David M. <dav...@fi...> - 2014-01-07 01:10:14
|
Woohoo! No problem. On 1/6/2014 4:08 PM, Cal Heldenbrand wrote: > Hi David, > > Yes, that appears to work as expected. Thanks for the quick fix! > > --Cal > > > On Wed, Jan 1, 2014 at 5:41 PM, David Muse <dav...@fi... > <mailto:dav...@fi...>> wrote: > > Hi Cal, > > It looks like I forgot to flip the sense of an if when I un-nested its > contents. > > It'll be fixed in the next release of sqlrelay/rudiments, but for a > quick fix... > > In the rudiments library, edit src/socketclient.cpp (or if you're using > an older version, src/clientsocket.cpp) and look for an if statement > like this, near line 235: > > if (error::getErrorNumber()==EINPROGRESS || > error::getErrorNumber()==EWOULDBLOCK) { > retval=RESULT_ERROR; > goto cleanup; > } > > Change it to: > > if (error::getErrorNumber()!=EINPROGRESS && > error::getErrorNumber()!=EWOULDBLOCK) { > retval=RESULT_ERROR; > goto cleanup; > } > > Note the !='s rather than =='s and && rather than ||. > > Recompile and reinstall rudiments: > > make > sudo make install > > And it should work. > > Let me know if you run into any more problems. > > And thanks for finding that bug! > > Dave > dav...@fi... <mailto:dav...@fi...> > > On 1/1/2014 6:23 PM, David Muse wrote: > > Hi Cal, > > > > Interesting... I'll do some tests here, figure out what's > happening and > > let you know what I find. > > > > Dave > > > > On 12/31/2013 3:08 PM, Cal Heldenbrand wrote: > >> Hi David, > >> > >> I'm attempting to write a weighted round-robin connection method > for an > >> easy failover mechanism on multiple SQL Relay servers. It > appears that > >> the C++ sqlrconnection::setConnectTimeout() function isn't > behaving like > >> I'd expect. It seems that no matter what values I pass to it, the > >> connection *always* fails. > >> > >> Here's the general idea I'm doing: > >> > >> bool success = false; > >> do > >> { > >> /* > >> select random sql relay server > >> */ > >> > >> tmpconn = new sqlrconnection(hostname, port, NULL, > >> user, pass, 0, 1); > >> tmpconn->debugOn(); > >> tmpconn->setConnectTimeout(10, 5000000); > >> > >> const char *version = tmpconn->serverVersion(); > >> printf("version: '%s'\n", version); > >> if ( version ) > >> success = true; > >> > >> /* Breaking out after a few tries */ > >> } > >> while ( success == false ); > >> > >> Running that, I get something like this: > >> > >> <pre> > >> Connecting to listener... > >> </pre> > >> <pre> > >> Inet socket: 127.0.0.1:9000 <http://127.0.0.1:9000> > <http://127.0.0.1:9000> > >> </pre> > >> <pre> > >> Setting Error > >> </pre> > >> <pre> > >> Couldn't connect to the listener. > >> </pre> > >> version: '(null)' > >> > >> But when I comment out the setConnectTimeout() call, it works > just fine: > >> > >> <pre> > >> Connecting to listener... > >> </pre> > >> <pre> > >> Inet socket: 127.0.0.1:9000 <http://127.0.0.1:9000> > <http://127.0.0.1:9000> > >> </pre> > >> <pre> > >> Authenticating : ... > >> </pre> > >> <pre> > >> Server Version... > >> </pre> > >> <pre> > >> Checking for error > >> </pre> > >> <pre> > >> No error occurred > >> </pre> > >> <pre> > >> 0.53.1 > >> </pre> > >> version: '0.53.1' > >> > >> I've played around with different values for seconds and > microseconds. > >> (I want a timeout of 5 seconds, however that can be accomplished) > >> > >> Thanks for any help! > >> > >> --Cal > >> > >> > >> > ------------------------------------------------------------------------------ > >> > >> Rapidly troubleshoot problems before they affect your business. > Most IT > >> organizations don't have a clear picture of how application > performance > >> affects their revenue. With AppDynamics, you get 100% visibility > into > >> your > >> Java,.NET, & PHP application. Start your 15-day FREE TRIAL of > >> AppDynamics Pro! > >> > http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk > >> > >> > >> _______________________________________________________ > >> Unlimited Disk, Data Transfer, PHP/MySQL Domain Hosting > >> http://www.doteasy.com > >> > >> > >> > >> _______________________________________________ > >> Sqlrelay-discussion mailing list > >> Sql...@li... > <mailto:Sql...@li...> > >> https://lists.sourceforge.net/lists/listinfo/sqlrelay-discussion > >> > >> > >> _______________________________________________________ > >> Unlimited Disk, Data Transfer, PHP/MySQL Domain Hosting > >> http://www.doteasy.com > >> > > ------------------------------------------------------------------------------ > Rapidly troubleshoot problems before they affect your business. Most IT > organizations don't have a clear picture of how application performance > affects their revenue. With AppDynamics, you get 100% visibility > into your > Java,.NET, & PHP application. Start your 15-day FREE TRIAL of > AppDynamics Pro! > http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk > _______________________________________________ > Sqlrelay-discussion mailing list > Sql...@li... > <mailto:Sql...@li...> > https://lists.sourceforge.net/lists/listinfo/sqlrelay-discussion > > > > > ------------------------------------------------------------------------------ > Rapidly troubleshoot problems before they affect your business. Most IT > organizations don't have a clear picture of how application performance > affects their revenue. With AppDynamics, you get 100% visibility into your > Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro! > http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk > > _______________________________________________________ > Unlimited Disk, Data Transfer, PHP/MySQL Domain Hosting > http://www.doteasy.com > > > > _______________________________________________ > Sqlrelay-discussion mailing list > Sql...@li... > https://lists.sourceforge.net/lists/listinfo/sqlrelay-discussion > > > _______________________________________________________ > Unlimited Disk, Data Transfer, PHP/MySQL Domain Hosting > http://www.doteasy.com > |
From: David M. <dav...@fi...> - 2014-01-01 23:42:05
|
Hi Cal, It looks like I forgot to flip the sense of an if when I un-nested its contents. It'll be fixed in the next release of sqlrelay/rudiments, but for a quick fix... In the rudiments library, edit src/socketclient.cpp (or if you're using an older version, src/clientsocket.cpp) and look for an if statement like this, near line 235: if (error::getErrorNumber()==EINPROGRESS || error::getErrorNumber()==EWOULDBLOCK) { retval=RESULT_ERROR; goto cleanup; } Change it to: if (error::getErrorNumber()!=EINPROGRESS && error::getErrorNumber()!=EWOULDBLOCK) { retval=RESULT_ERROR; goto cleanup; } Note the !='s rather than =='s and && rather than ||. Recompile and reinstall rudiments: make sudo make install And it should work. Let me know if you run into any more problems. And thanks for finding that bug! Dave dav...@fi... On 1/1/2014 6:23 PM, David Muse wrote: > Hi Cal, > > Interesting... I'll do some tests here, figure out what's happening and > let you know what I find. > > Dave > > On 12/31/2013 3:08 PM, Cal Heldenbrand wrote: >> Hi David, >> >> I'm attempting to write a weighted round-robin connection method for an >> easy failover mechanism on multiple SQL Relay servers. It appears that >> the C++ sqlrconnection::setConnectTimeout() function isn't behaving like >> I'd expect. It seems that no matter what values I pass to it, the >> connection *always* fails. >> >> Here's the general idea I'm doing: >> >> bool success = false; >> do >> { >> /* >> select random sql relay server >> */ >> >> tmpconn = new sqlrconnection(hostname, port, NULL, >> user, pass, 0, 1); >> tmpconn->debugOn(); >> tmpconn->setConnectTimeout(10, 5000000); >> >> const char *version = tmpconn->serverVersion(); >> printf("version: '%s'\n", version); >> if ( version ) >> success = true; >> >> /* Breaking out after a few tries */ >> } >> while ( success == false ); >> >> Running that, I get something like this: >> >> <pre> >> Connecting to listener... >> </pre> >> <pre> >> Inet socket: 127.0.0.1:9000 <http://127.0.0.1:9000> >> </pre> >> <pre> >> Setting Error >> </pre> >> <pre> >> Couldn't connect to the listener. >> </pre> >> version: '(null)' >> >> But when I comment out the setConnectTimeout() call, it works just fine: >> >> <pre> >> Connecting to listener... >> </pre> >> <pre> >> Inet socket: 127.0.0.1:9000 <http://127.0.0.1:9000> >> </pre> >> <pre> >> Authenticating : ... >> </pre> >> <pre> >> Server Version... >> </pre> >> <pre> >> Checking for error >> </pre> >> <pre> >> No error occurred >> </pre> >> <pre> >> 0.53.1 >> </pre> >> version: '0.53.1' >> >> I've played around with different values for seconds and microseconds. >> (I want a timeout of 5 seconds, however that can be accomplished) >> >> Thanks for any help! >> >> --Cal >> >> >> ------------------------------------------------------------------------------ >> >> Rapidly troubleshoot problems before they affect your business. Most IT >> organizations don't have a clear picture of how application performance >> affects their revenue. With AppDynamics, you get 100% visibility into >> your >> Java,.NET, & PHP application. Start your 15-day FREE TRIAL of >> AppDynamics Pro! >> http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk >> >> >> _______________________________________________________ >> Unlimited Disk, Data Transfer, PHP/MySQL Domain Hosting >> http://www.doteasy.com >> >> >> >> _______________________________________________ >> Sqlrelay-discussion mailing list >> Sql...@li... >> https://lists.sourceforge.net/lists/listinfo/sqlrelay-discussion >> >> >> _______________________________________________________ >> Unlimited Disk, Data Transfer, PHP/MySQL Domain Hosting >> http://www.doteasy.com >> |