Re: Re: Proposal for Allow postgresql.conf values to be changed via SQL [review] - Mailing list pgsql-hackers

From Greg Smith
Subject Re: Re: Proposal for Allow postgresql.conf values to be changed via SQL [review]
Date
Msg-id 5133F3E4.4030107@2ndQuadrant.com
Whole thread Raw
In response to Re: Re: Proposal for Allow postgresql.conf values to be changed via SQL [review]  (Amit Kapila <amit.kapila@huawei.com>)
Responses Re: Re: Proposal for Allow postgresql.conf values to be changed via SQL [review]  (Josh Berkus <josh@agliodbs.com>)
Re: Re: Proposal for Allow postgresql.conf values to be changed via SQL [review]  (Amit Kapila <amit.kapila@huawei.com>)
Re: Re: Proposal for Allow postgresql.conf values to be changed via SQL [review]  (Craig Ringer <craig@2ndquadrant.com>)
List pgsql-hackers
This submission didn't have any listed reviewers in the CF app.  I added 
Zoltan and Andres since both of you went through the usual review steps 
and have given lots of feedback.

There are two main sets of issues that keep popping up with this feature:

-The implementation seems too long, at around 2189 lines of diff.  I 
have a few ideas for how things might be trimmed below.  I do appreciate 
that a good part of the length is a long set of regression tests, 
relative to what a feature like this normally gets.

-It might be possible to get a simpler implementation with a file per 
setting.

I can make a pass over cleaning up the wording in your comments and 
documentation.  There are enough coding issues that I think that should 
wait until another rev of the patch first.

= Directory vs. single file =

The main reason I've advocated a configuration file directory is to try 
and suggest a standard for tool generated config files to co-exist in. 
This particular feature doesn't *need* that.  But in the long term I was 
hoping to have more tools that can write out .conf files without having 
to read and understand every existing file that's in there.  It doesn't 
make that big of a difference whether this particular one lives in 
$PGDATA/postgresql.auto.conf or $PGDATA/postgresql.auto.conf.  The main 
reason for the directory is to make the second such tool not further 
clutter the main $PGDATA directory.

I would like to see the name of the directory be conf.d instead of 
auto.conf.d though.  What's "auto" about it?  Using that word just adds 
a source of confusion.  The same problem exists with the file name 
itself.  I was hoping for conf.d/persistent.conf here, and no use of the 
word "auto" in the code itself.

What I don't see a lot of value in is the config file per setting idea.  I was hoping SET PERSISTENT put all of its
changesinto once place. 
 
It should be obvious where they came from, and that people can't edit 
that file manually without breaking the feature.  To me something like 
persistent.conf gives that impression, while postgresql.auto.conf sounds 
like the output from some auto-tuning tool.

= Length reduction =

I'm not sure why you are opening the old auto config file with 
ParseConfigFp.  Can't you just navigate the existing GUCs in memory and 
directly write the new one out?  If someone is going to manually edit 
this file and use SET PERSISTENT, they're going to end up in trouble 
regardless.  I don't think it's really worth the extra complexity needed 
to try and handle that case.

It sounds like you've thought a good bit about how to eliminate all the 
code in the validate_conf_option function.  I think that idea may take 
some more thinking to try and be creative about it.  Have you looked at 
whether there's any way to refactor this to be smaller by modifying 
guc.c to break out parts of its implementation needed here?

Is it possible to modify your changes to src/backend/parser/gram.y to 
produce a smaller diff?  There looks to be a good amount of code (~25 
lines) that aren't really changed that I can see.  I suspect they might 
have been hit with an editor whitespace change.

= General code issues =

There is some trivial bit rot on your v10 here:

1 out of 8 hunks FAILED -- saving rejects to file 
src/backend/parser/gram.y.rej
1 out of 3 hunks FAILED -- saving rejects to file 
src/bin/initdb/initdb.c.rej

Your change to gram.y was broken by PROGRAM being added.  I'm not sure 
why the initdb.c one doesn't apply; whitespace issue maybe?  As written 
right now, even with fixing those two, I'm getting this compiler error:

gram.y:12694.27-36: warning: type clash on default action: <keyword> != <>
gram.y:1306.31-40: symbol PERSISTENT is used, but is not defined as a 
token and has no rules

This combination in src/test/regress/sql/persistent.sql a few times 
makes me nervous:

+ select pg_reload_conf();
+ select pg_sleep(1);

Why the pause?  There are some regression tests with sleeps in them, 
such as the stats collector and the timezone tests.  I would expect 
pg_reload_conf would not return until its configuration is stable, so 
this is a bit of a surprise.

-- 
Greg Smith   2ndQuadrant US    greg@2ndQuadrant.com   Baltimore, MD
PostgreSQL Training, Services, and 24x7 Support www.2ndQuadrant.com



pgsql-hackers by date:

Previous
From: Steve Singer
Date:
Subject: Re: transforms
Next
From: Josh Berkus
Date:
Subject: Re: transforms