Re: [Sqlrelay-discussion] setConnectTimeout() not working correctly?
Brought to you by:
mused
|
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
>>
|