From: | Thom Brown <thom(at)linux(dot)com> |
---|---|
To: | Victor Wagner <vitus(at)wagner(dot)pp(dot)ru> |
Cc: | PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Patch: Implement failover on libpq connect level. |
Date: | 2016-01-24 20:17:46 |
Message-ID: | CAA-aLv6HQUngc3Z5hkQmLVP-E-v0hQC5TYDyD_ggu-RhZ0et8w@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers pgsql-jdbc |
On 24 January 2016 at 20:11, Thom Brown <thom(at)linux(dot)com> wrote:
> On 24 January 2016 at 19:53, Victor Wagner <vitus(at)wagner(dot)pp(dot)ru> wrote:
>> On Sun, 24 Jan 2016 15:58:10 +0000
>> Thom Brown <thom(at)linux(dot)com> wrote:
>>
>>
>>>
>>> Output of \set variables without patch:
>>>
>>> HOST = '127.0.0.1'
>>> PORT =
>>> '5530,127.0.0.1:5531,127.0.0.1:5532,127.0.0.1:5533,127.0.0.1:5534,127.0.0.1:5535'
>>>
>>> And with patch:
>>>
>>> HOST =
>>> '127.0.0.1:5530,127.0.0.1:5531,127.0.0.1:5532,127.0.0.1:5533,127.0.0.1:5534,127.0.0.1:5535'
>>> PORT = '5488'
>>>
>>> They're both wrong, but I'm hoping we can just show the right
>>> information here.
>>
>> I think we should show right information here, but it is not so simple.
>>
>> Problem is that I never keep symbolic representation of individual
>> host/port pair. And when we connect successfully, we have only struct
>> sockaddr representation of the it, which contain right IP
>> address, but doesn't contain symbolic host name.
>>
>> Moreover, one hostname from connect string can produce more than one
>> addrinfo structures. For example, on the machines with IPv6 support,
>> 'localhost' hostname is resolved into both 127.0.0.1 IPv4 address and
>> [::1] IPv6, and produces two records.
>>
>> So would do any name, which have both A and AAAA records in DNS. And
>> nothing prevent domain administrator to put more than one A record for
>> same hostname into DNS zone.
>>
>>
>> So, it is just same information which can be retrieved from the backend
>> via
>>
>> select inet_client_addr();
>> select inet_client_port();
>
> I think you mean:
>
> select inet_server_addr();
> select inet_server_port();
>
>> What is really interesting for HOST and PORT variable - it is the name
>> of host and port number used to make actual connection, as they were
>> specified in the connect string or service file.
>
> And this is probably not the correct thing for it to report. The
> documentation says "The database server host you are currently
> connected to." and "The database server port to which you are
> currently connected.", so yeah, I'd expect to see those set to
> whatever those 2 functions resolve to. That being said, if one
> connects via a domain socket, those appear to come back blank with
> those functions, yet HOST and PORT report the correct information in
> those cases (without passing in multiple hosts). Is that a
> pre-existing bug?
I've just checked, and can see that this doesn't appear to be a bug.
As per network.c:
/*
* IP address that the server accepted the connection on (NULL if Unix socket)
*/
and
/*
* port that the server accepted the connection on (NULL if Unix socket)
*/
Thom
From | Date | Subject | |
---|---|---|---|
Next Message | David Rowley | 2016-01-24 20:53:27 | Re: Removing Functionally Dependent GROUP BY Columns |
Previous Message | Thom Brown | 2016-01-24 20:11:02 | Re: Patch: Implement failover on libpq connect level. |
From | Date | Subject | |
---|---|---|---|
Next Message | Vladimir Sitnikov | 2016-01-24 20:55:22 | Re: Merge pgjdbc-parent-poms project into pgjdbc please |
Previous Message | Thom Brown | 2016-01-24 20:11:02 | Re: Patch: Implement failover on libpq connect level. |