Re: Splitting up guc.c

From: Andres Freund <andres(at)anarazel(dot)de>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: Splitting up guc.c
Date: 2022-09-10 19:15:33
Message-ID: 20220910191533.4d7xib46m62sf2mv@awork3.anarazel.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

On 2022-09-10 15:04:59 -0400, Tom Lane wrote:
> Here's a WIP stab at the project Andres mentioned [1] of splitting up
> guc.c into smaller files.

Cool!

> As things stand here, we have:
>
> 1. guc.c: the core GUC machinery.
> 2. guc_tables.c: the data arrays, and some previously-exposed constant
> tables. guc_tables.h can now be considered the associated header.
> 3. guc_hooks.c: (most of) the per-variable check/assign/show hooks
> that had been in guc.c. guc_hooks.h declares these.
>
> File sizes are like so:
>
> $ wc guc*c
> 2629 9372 69467 guc-file.c
> 7422 25136 202284 guc.c
> 939 2693 22915 guc_hooks.c
> 4877 13163 126769 guc_tables.c
> 15867 50364 421435 total
> $ size guc*o
> text data bss dec hex filename
> 13653 4 112 13769 35c9 guc-file.o
> 54953 0 564 55517 d8dd guc.o
> 6951 0 112 7063 1b97 guc_hooks.o
> 43570 62998 216 106784 1a120 guc_tables.o

A tad surprised by the text size of guc_tables.o - not that it is a problem,
just seems a bit odd.

> I'm fairly happy with the way things turned out in guc.c and
> guc_tables.c, but I don't much like guc_hooks.c. I think instead of
> creating such a file, what we should do is to shove most of those
> functions into whatever module the GUC variable is associated with.

+1. I think our associated habit of declaring externs in multiple .c files
isn't great either.

> Before proceeding further, I wanted to ask for comments on a design
> choice that might be controversial. Even though I don't want to
> invent guc_hooks.c, I think we *should* invent guc_hooks.h, and
> consolidate all the GUC hook function declarations there. The
> point would be to not have to #include guc.h in headers of unrelated
> modules. This is similar to what we've done with utils/fmgrprotos.h,
> though the motivation is different. I already moved a few declarations
> from guc.h to there (and in consequence had to adjust #includes in
> the modules defining those hooks), but there's a lot more to be done
> if we apply that policy across the board. Does anybody think that's
> a bad approach, or have a better one?

Hm, I'm not opposed, the reasoning makes sense to me. How would this interact
with the declaration of the variables underlying GUCs?

Greetings,

Andres Freund

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2022-09-10 19:23:40 Re: Splitting up guc.c
Previous Message andrey.arapov 2022-09-10 19:14:59 Re: [PATCH] initdb: do not exit after warn_on_mount_point