From: | "Tristan Partin" <tristan(at)neon(dot)tech> |
---|---|
To: | "Matthias van de Meent" <boekewurm+postgres(at)gmail(dot)com>, "PostgreSQL Hackers" <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Extensible storage manager API - SMGR hook Redux |
Date: | 2023-07-11 20:57:34 |
Message-ID: | CTZN6R9A57SL.25NQGHTWUO7EA@gonk |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
> Subject: [PATCH v1 1/2] Expose f_smgr to extensions for manual implementation
From what I can see, all the md* APIs that were exposed in md.h can now
be made static in md.c. The only other references to those APIs were in
smgr.c.
> Subject: [PATCH v1 2/2] Prototype: Allow tablespaces to specify which SMGR
> they use
> -typedef uint8 SMgrId;
> +/*
> + * volatile ID of the smgr. Across various configurations IDs may vary,
> + * true identity is the name of each smgr.
> + */
> +typedef int SMgrId;
>
> -#define MaxSMgrId UINT8_MAX
> +#define MaxSMgrId INT_MAX
In a future revision of this patch, seems worthwhile to just start as
int instead of a uint8 to avoid this song and dance. Maybe int8 instead
of int?
> +static SMgrId recent_smgrid = -1;
You could use InvalidSmgrId here.
> +void smgrvalidatetspopts(const char *smgrname, List *opts)
> +{
> + SMgrId smgrid = get_smgr_by_name(smgrname, false);
> +
> + smgrsw[smgrid].smgr_validate_tspopts(opts);
> +}
> +
> +void smgrcreatetsp(const char *smgrname, Oid tsp, List *opts, bool isredo)
> +{
> + SMgrId smgrid = get_smgr_by_name(smgrname, false);
> +
> + smgrsw[smgrid].smgr_create_tsp(tsp, opts, isredo);
> +}
> +
> +void smgrdroptsp(const char *smgrname, Oid tsp, bool isredo)
> +{
> + SMgrId smgrid = get_smgr_by_name(smgrname, false);
> +
> + smgrsw[smgrid].smgr_drop_tsp(tsp, isredo);
> +}
Do you not need to check if smgrid is the InvalidSmgrId? I didn't see
any other validation anywhere.
> + char *smgr;
> + List *smgropts; /* list of DefElem nodes */
smgrname would probably work better alongside tablespacename in that
struct.
> @@ -221,7 +229,7 @@ mdexists(SMgrRelation reln, ForkNumber forknum)
> if (!InRecovery)
> mdclose(reln, forknum);
>
> - return (mdopenfork(reln, forknum, EXTENSION_RETURN_NULL) != NULL);
> + return (mdopenfork(mdreln, forknum, EXTENSION_RETURN_NULL) != NULL);
> }
Was this a victim of a bad rebase? Seems like it belongs in the previous
patch.
> +void mddroptsp(Oid tsp, bool isredo)
> +{
> +
> +}
Some functions in this file have the return type on the previous line.
This is a pretty slick patchset. Excited to read more dicussion and how
it evolves.
--
Tristan Partin
Neon (https://neon.tech)
From | Date | Subject | |
---|---|---|---|
Next Message | Gurjeet Singh | 2023-07-11 20:58:20 | Re: MERGE ... RETURNING |
Previous Message | Tom Lane | 2023-07-11 20:45:56 | Re: unrecognized node type while displaying a Path due to dangling pointer |