Re: PQconninfo function for libpq - Mailing list pgsql-hackers

From Boszormenyi Zoltan
Subject Re: PQconninfo function for libpq
Date
Msg-id 50ADED5A.70906@cybertec.at
Whole thread Raw
In response to Re: PQconninfo function for libpq  (Boszormenyi Zoltan <zb@cybertec.at>)
Responses Re: PQconninfo function for libpq  (Magnus Hagander <magnus@hagander.net>)
List pgsql-hackers
2012-11-22 08:35 keltezéssel, Boszormenyi Zoltan írta:
> 2012-11-21 22:15 keltezéssel, Magnus Hagander írta:
>> On Wed, Nov 21, 2012 at 10:01 PM, Boszormenyi Zoltan <zb@cybertec.at> wrote:
>>> Hi,
>>>
>>> 2012-11-21 19:19 keltezéssel, Magnus Hagander írta:
>>>
>>>> I'm breaking this out into it's own thread, for my own sanity if
>>>> nothing else :) And it's an isolated feature after all.
>>>>
>>>> I still agree with the previous review at
>>>>
>>>> http://archives.postgresql.org/message-id/1349321071.23971.0.camel@vanquo.pezone.net
>>>> about keeping the data in more than one place.
>>>
>>> OK, it seems I completely missed that comment.
>>> (Or forgot about it if I happened to answer it.)
>>>
>>>
>>>> Based on that, I've created a different version of this patch,
>>>> attached. This way we keep all the data in one struct.
>>>
>>> I like this single structure but not the way you handle the
>>> options' classes. In your patch, each option belongs to only
>>> one class. These classes are:
>>>
>>> PG_CONNINFO_REPLICATION = "replication" only
>>> PG_CONNINFO_PASSWORD = "password" only
>>> PG_CONNINFO_NORMAL = everything else
>>>
>>> How does it help pg_basebackup to filter out e.g. dbname and replication?
>> PG_CONNINFO_ALL should give pg_basebackup all it needs, no? Or
>> actually, it shouldn't have the replication=1 part, right? So it
>> should just use PG_CONNINFO_NORMAL|PG_CONNINFO_PASSWORD?
>>
>>
>>> These are added by the walreceiver module anyway and adding them
>>> to the primary_conninfo line should even be discouraged by the
>>> documentation.
>> Hmm. I wasn't actually thinking about the dbname part here, I admit that.
>
> And not only the dbname, libpqwalreceiver adds these three:
>
> [zozo@localhost libpqwalreceiver]$ grep dbname *
> libpqwalreceiver.c:             "%s dbname=replication replication=true
> fallback_application_name=walreceiver",
>
> I also excluded "application_name" from PG_CONNINFO_REPLICATION
> by this reasoning:
>
> - for async replication or single standby, it doesn't matter,
>   the connection will show up as "walreceiver"
> - for sync replication, the administrator has to add the node name
>   manually via application_name.
>
>>
>>> In my view, the classes should be inclusive:
>>>
>>> PG_CONNINFO_NORMAL = Everything that's usable for a regular client
>>> connection. This mean everything, maybe including "password" but
>>> excluding "replication".
>>>
>>> PG_CONNINFO_PASSWORD = "password" only.
>>>
>>> PG_CONNINFO_REPLICATION = Everything usable for a replication client
>>> not added by walreceiver. Maybe including/excluding "password".
>>>
>>> Maybe there should be two flags for replication usage:
>>>
>>> PG_CONNINFO_WALRECEIVER = everything except those not added
>>> by walreceiver (and maybe "password" too)
>>>
>>> PG_CONNINFO_REPLICATION = "replication" only
>>>
>>> And every option can belong to more than one class, just as in my patch.
>> Hmm. I kind of liked having each option in just one class, but I see
>> the problem. Looking at the ones you suggest, all the non-password
>> ones *have* to be without password, otherwise there i no way to get
>> the conninfo without password - which is the whole reason for that
>> parameter to exist. So the PASSWORD one has to be additional - which
>> means that not making the other ones additional makes them
>> inconsistent. But maybe we don't really have a choice there.
>
> Yes, the PASSWORD part can be on its own, this is what I meant above
> but wanted a different opinion about having it completely separate
> is better or not.
>
> But the NORMAL and REPLICATION (or WALRECEIVER) classes
> need to overlap.
>
>>>> At this point, the patch is untested beyond compiling and a trivial
>>>> psql check, because I ran out of time :) But I figured I'd throw it
>>>> out there for comments on which version people prefer. (And yes, it's
>>>> quite possible I've made a big think-mistake in it somewhere, but
>>>> again, better to get some eyes on it early)
>>>>
>>>> My version also contains a fixed version of the docs that should be
>>>> moved back into Zoltans version if that's the one we end up
>>>> preferring.
>>>
>>> I also liked your version of the documentation better,
>>> I am not too good at writing docs.
>> np.
>>
>>
>>>> Also, a question was buried in the other review which is - are we OK
>>>> to remove the requiressl parameter. Both these patches do so, because
>>>> the code becomes much simpler if we can do that. It has been
>>>> deprecated since 7.2. Is it OK to remove it, or do we need to put back
>>>> in the more complex code to deal with both?
>> Just going to highlight that we're looking for at least one third
>> party to comment on this :)
>
> Yes, me too. A +1 for removing wouldn't count from me. ;-)
>
>>
>>>> Attached is both Zoltans latest patch (v16) and my slightly different
>>>> approach.
>>>>
>>>> Comments on which approach is best?
>>>>
>>>> Test results from somebody who has the time to look at it? :)
>> Do you happen to have a set of tests you've been running on your
>> patches? Can you try them again this one?
>
> My set of tests are:
>
> 1. initdb the master
> 2. pg_basebackup -R the first standby from the master
> 3. pg_basebackup -R the second standby from the master
> 4. pg_basebackup -R the third standby from the first standby
>
> and diff -durpN the different data directories while there is no load on either.
>
> I will test it today after fixing the classes in your patch. ;-)

Attached is my v17 patch based on your version with the classes fixed.

I introduced 2 new classes: PG_CONNINFO_REPLICATION_HIDDEN
which contains "dbname" and "fallback_application_name, and
PG_CONNINFO_REPLICATION_USER which contains everything else
except "replication".

Since pg_basebackup sets fallback_application_name and not
application_name, this latter can be part of PG_CONNINFO_REPLICATION_USER.

The REPLICATION and REPLICATION_HIDDEN options may be united,
I don't have a strong opinion on it.

I also flipped the "ignoreMissing" argument to conninfo_storeval()
from false to true in PQconninfo() since we don't want error
reporting there.

This patch works with my pg_basebackup patch after fixing the flags value.

Best regards,
Zoltán Böszörményi

--
----------------------------------
Zoltán Böszörményi
Cybertec Schönig & Schönig GmbH
Gröhrmühlgasse 26
A-2700 Wiener Neustadt, Austria
Web: http://www.postgresql-support.de
      http://www.postgresql.at/


Attachment

pgsql-hackers by date:

Previous
From: Amit Kapila
Date:
Subject: Re: [WIP PATCH] for Performance Improvement in Buffer Management
Next
From: Shigeru Hanada
Date:
Subject: Re: FDW for PostgreSQL