Thread: Simple connection failover support
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
Here is a patch that updates the documentation to show include information about the connection fail-over url syntax andfunctionality.
Attachment
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 >
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
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
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