Thread: Simple connection failover support

Simple connection failover support

From
Mikko Tiihonen
Date:
Hi,

Here are two patches that add simple failover support to the jdbc driver.

Patch 1 converts all references to pair of host+port variables to single InetSocketAddress
Patch 2 rewrites the url parsing to support multiple host:port pairs and modifies the low level connection opening to
retryonce all listed addresses 
I also added more cases to the unit tests to verify that I did not break any functionality.

* The connection url and connection parameters stay backwards compatible
* If there are commas in the hostname part of the url the new code will use them to split the addresses and keep them
inthe defined priority order 
* If there is any IOException or login failure during the connection phase the code will try another listed address
* I tried to keep the code still Java 1.4 compatible

-Mikko

Simple connection fail-over documentation patch

From
Mikko Tiihonen
Date:
Here is a patch that updates the documentation to show include information about the connection fail-over url syntax
andfunctionality. 

Attachment

Re: Simple connection failover support

From
Dave Cramer
Date:
Mikko,

I get compile errors

getHostString() is not public in java.net.InetSocketAddress; cannot be
accessed from outside package

compiling with java 6

Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca


On Tue, May 22, 2012 at 9:37 AM, Mikko Tiihonen
<mikko.tiihonen@nitorcreations.com> wrote:
> Hi,
>
> Here are two patches that add simple failover support to the jdbc driver.
>
> Patch 1 converts all references to pair of host+port variables to single
> InetSocketAddress
> Patch 2 rewrites the url parsing to support multiple host:port pairs and
> modifies the low level connection opening to retry once all listed addresses
> I also added more cases to the unit tests to verify that I did not break any
> functionality.
>
> * The connection url and connection parameters stay backwards compatible
> * If there are commas in the hostname part of the url the new code will use
> them to split the addresses and keep them in the defined priority order
> * If there is any IOException or login failure during the connection phase
> the code will try another listed address
> * I tried to keep the code still Java 1.4 compatible
>
> -Mikko
>
>
> --
> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-jdbc
>

Re: Simple connection failover support

From
Mikko Tiihonen
Date:
On 06/02/2012 01:00 AM, Dave Cramer wrote:
> Mikko,
>
> I get compile errors
>
> getHostString() is not public in java.net.InetSocketAddress; cannot be
> accessed from outside package
>
> compiling with java 6

Seems I slipped one Java7 method call in. Comparing the implementations it seems
in this case the InetSocketAddress.getHostName() will result in exactly the same
result.

I had selected the getHostString method because it tried to avoid dns lookups.
But the few places where I used it we were either opening the socket or initiating
ssl on already open socket so the lookup is either needed any way or already done
respectively.

Can change the method to getHostName? Or should I send a revised patch?

-Mikko
> >
> On Tue, May 22, 2012 at 9:37 AM, Mikko Tiihonen
> <mikko.tiihonen@nitorcreations.com>  wrote:
>> Hi,
>>
>> Here are two patches that add simple failover support to the jdbc driver.
>>
>> Patch 1 converts all references to pair of host+port variables to single
>> InetSocketAddress
>> Patch 2 rewrites the url parsing to support multiple host:port pairs and
>> modifies the low level connection opening to retry once all listed addresses
>> I also added more cases to the unit tests to verify that I did not break any
>> functionality.
>>
>> * The connection url and connection parameters stay backwards compatible
>> * If there are commas in the hostname part of the url the new code will use
>> them to split the addresses and keep them in the defined priority order
>> * If there is any IOException or login failure during the connection phase
>> the code will try another listed address
>> * I tried to keep the code still Java 1.4 compatible
>>
>> -Mikko

Re: Simple connection failover support

From
Dave Cramer
Date:
Mikko,

I'll change the method,

Thanks

Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca


On Sun, Jun 3, 2012 at 1:10 PM, Mikko Tiihonen
<mikko.tiihonen@nitorcreations.com> wrote:
> On 06/02/2012 01:00 AM, Dave Cramer wrote:
>>
>> Mikko,
>>
>> I get compile errors
>>
>> getHostString() is not public in java.net.InetSocketAddress; cannot be
>> accessed from outside package
>>
>> compiling with java 6
>
>
> Seems I slipped one Java7 method call in. Comparing the implementations it
> seems
> in this case the InetSocketAddress.getHostName() will result in exactly the
> same
> result.
>
> I had selected the getHostString method because it tried to avoid dns
> lookups.
> But the few places where I used it we were either opening the socket or
> initiating
> ssl on already open socket so the lookup is either needed any way or already
> done
> respectively.
>
> Can change the method to getHostName? Or should I send a revised patch?
>
> -Mikko
>
>> >
>> On Tue, May 22, 2012 at 9:37 AM, Mikko Tiihonen
>> <mikko.tiihonen@nitorcreations.com>  wrote:
>>>
>>> Hi,
>>>
>>> Here are two patches that add simple failover support to the jdbc driver.
>>>
>>> Patch 1 converts all references to pair of host+port variables to single
>>> InetSocketAddress
>>> Patch 2 rewrites the url parsing to support multiple host:port pairs and
>>> modifies the low level connection opening to retry once all listed
>>> addresses
>>> I also added more cases to the unit tests to verify that I did not break
>>> any
>>> functionality.
>>>
>>> * The connection url and connection parameters stay backwards compatible
>>> * If there are commas in the hostname part of the url the new code will
>>> use
>>> them to split the addresses and keep them in the defined priority order
>>> * If there is any IOException or login failure during the connection
>>> phase
>>> the code will try another listed address
>>> * I tried to keep the code still Java 1.4 compatible
>>>
>>> -Mikko
>
>
> --
> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-jdbc

Re: Simple connection failover support

From
Dave Cramer
Date:
Mikko,

I've committed and pushed this.

Thanks

Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca


On Sun, Jun 3, 2012 at 1:51 PM, Dave Cramer <pg@fastcrypt.com> wrote:
> Mikko,
>
> I'll change the method,
>
> Thanks
>
> Dave Cramer
>
> dave.cramer(at)credativ(dot)ca
> http://www.credativ.ca
>
>
> On Sun, Jun 3, 2012 at 1:10 PM, Mikko Tiihonen
> <mikko.tiihonen@nitorcreations.com> wrote:
>> On 06/02/2012 01:00 AM, Dave Cramer wrote:
>>>
>>> Mikko,
>>>
>>> I get compile errors
>>>
>>> getHostString() is not public in java.net.InetSocketAddress; cannot be
>>> accessed from outside package
>>>
>>> compiling with java 6
>>
>>
>> Seems I slipped one Java7 method call in. Comparing the implementations it
>> seems
>> in this case the InetSocketAddress.getHostName() will result in exactly the
>> same
>> result.
>>
>> I had selected the getHostString method because it tried to avoid dns
>> lookups.
>> But the few places where I used it we were either opening the socket or
>> initiating
>> ssl on already open socket so the lookup is either needed any way or already
>> done
>> respectively.
>>
>> Can change the method to getHostName? Or should I send a revised patch?
>>
>> -Mikko
>>
>>> >
>>> On Tue, May 22, 2012 at 9:37 AM, Mikko Tiihonen
>>> <mikko.tiihonen@nitorcreations.com>  wrote:
>>>>
>>>> Hi,
>>>>
>>>> Here are two patches that add simple failover support to the jdbc driver.
>>>>
>>>> Patch 1 converts all references to pair of host+port variables to single
>>>> InetSocketAddress
>>>> Patch 2 rewrites the url parsing to support multiple host:port pairs and
>>>> modifies the low level connection opening to retry once all listed
>>>> addresses
>>>> I also added more cases to the unit tests to verify that I did not break
>>>> any
>>>> functionality.
>>>>
>>>> * The connection url and connection parameters stay backwards compatible
>>>> * If there are commas in the hostname part of the url the new code will
>>>> use
>>>> them to split the addresses and keep them in the defined priority order
>>>> * If there is any IOException or login failure during the connection
>>>> phase
>>>> the code will try another listed address
>>>> * I tried to keep the code still Java 1.4 compatible
>>>>
>>>> -Mikko
>>
>>
>> --
>> Sent via pgsql-jdbc mailing list (pgsql-jdbc@postgresql.org)
>> To make changes to your subscription:
>> http://www.postgresql.org/mailpref/pgsql-jdbc