Hi all As a result of some recent work on Windows I have a list of PGDLLIMPORTs I'd like to add to existing exported globals.
All affected variables are already extern, so this doesn't expose any new API not already available to non-Windows extensions. I've split the patch up for clarity: * v1-0001: PGDLLIMPORTs for xlog.c's XactLastRecEnd, ProcLastRecPtr and reachedConsistency . I only really need XactLastRecEnd but think it's sensible to expose all of them. * v1-0002: PGDLLIMPORT for struct WalRecv . Allows extensions to observe WAL receiver state and behaviour. * v1-0003: PGDLLIMPORT criticalSharedRelcachesBuilt and criticalRelcachesBuilt . I only really need criticalSharedRelcachesBuilt but it seems sensible to export both. Useful when extension code may run during early startup (_PG_init in shared_preload_libraries, shmem init, etc) and later during normal running. * v1-0004: PGDLLIMPORT a set of useful GUCs and vars containing GUC-derived state in xlog.h and walreceiver.h I will follow up soon with a patch that marks every GUC as PGDLLIMPORT including any vars derived from the GUC by hooks. I don't see much point doing this piecemeal since they're all externs anyway. That patch will replace patch 4 above, but not patches 1-3. I'd love to see these PGDLLIMPORTs backported to pg13.
From f4c1abfbfc33ad95b5c216f1fcf132938c6377bc Mon Sep 17 00:00:00 2001 From: Craig Ringer <craig.rin...@2ndquadrant.com> Date: Thu, 17 Jun 2021 11:46:17 +0800 Subject: [PATCH v1 1/5] Make xlog.c vars PGDLLIMPORT Allow extensions to see XactLastRecEnd, ProcLastRecPtr and reachedConsistency. --- src/include/access/xlog.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index 77187c12be..e0b3a75d4d 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -97,11 +97,11 @@ typedef enum RECOVERY_TARGET_TIMELINE_NUMERIC } RecoveryTargetTimeLineGoal; -extern XLogRecPtr ProcLastRecPtr; -extern XLogRecPtr XactLastRecEnd; +extern PGDLLIMPORT XLogRecPtr ProcLastRecPtr; +extern PGDLLIMPORT XLogRecPtr XactLastRecEnd; extern PGDLLIMPORT XLogRecPtr XactLastCommitEnd; -extern bool reachedConsistency; +extern PGDLLIMPORT bool reachedConsistency; /* these variables are GUC parameters related to XLOG */ extern int wal_segment_size; -- 2.31.1
From 9284627abdcee2b851531a55f82288a73285c9fd Mon Sep 17 00:00:00 2001 From: Craig Ringer <craig.rin...@2ndquadrant.com> Date: Thu, 17 Jun 2021 11:47:18 +0800 Subject: [PATCH v1 2/5] Make struct WalRecv PGDLLIMPORT for extensions This allows extensions on a standby to observe the state of the wal receiver. --- src/include/replication/walreceiver.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/include/replication/walreceiver.h b/src/include/replication/walreceiver.h index 4fd7c25ea7..016814658e 100644 --- a/src/include/replication/walreceiver.h +++ b/src/include/replication/walreceiver.h @@ -160,7 +160,7 @@ typedef struct sig_atomic_t force_reply; /* used as a bool */ } WalRcvData; -extern WalRcvData *WalRcv; +extern PGDLLIMPORT WalRcvData *WalRcv; typedef struct { -- 2.31.1
From 6ef9e486e829b9e96a622bf60d2fe6a7044a6321 Mon Sep 17 00:00:00 2001 From: Craig Ringer <craig.rin...@2ndquadrant.com> Date: Thu, 17 Jun 2021 11:50:11 +0800 Subject: [PATCH v1 3/5] PGDLLIMPORT criticalSharedRelcachesBuilt and criticalRelcachesBuilt Allow extensions to see the state of relcache init so they can tell if relcache access is safe. Useful for extensions that register at shared_preload_libraries time. --- src/include/utils/relcache.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/include/utils/relcache.h b/src/include/utils/relcache.h index f772855ac6..202f2b10d9 100644 --- a/src/include/utils/relcache.h +++ b/src/include/utils/relcache.h @@ -145,9 +145,9 @@ extern void RelationCacheInitFilePostInvalidate(void); extern void RelationCacheInitFileRemove(void); /* should be used only by relcache.c and catcache.c */ -extern bool criticalRelcachesBuilt; +extern PGDLLIMPORT bool criticalRelcachesBuilt; /* should be used only by relcache.c and postinit.c */ -extern bool criticalSharedRelcachesBuilt; +extern PGDLLIMPORT bool criticalSharedRelcachesBuilt; #endif /* RELCACHE_H */ -- 2.31.1
From f5bc0d2fc74eb2855196f7aa02295d29059f742f Mon Sep 17 00:00:00 2001 From: Craig Ringer <craig.rin...@2ndquadrant.com> Date: Thu, 17 Jun 2021 11:53:21 +0800 Subject: [PATCH v1 4/5] PGDLLIMPORT a set of useful GUCs and derived variables --- src/include/access/xlog.h | 76 +++++++++++++-------------- src/include/replication/walreceiver.h | 6 +-- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index e0b3a75d4d..3a6dbbaef4 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -104,47 +104,47 @@ extern PGDLLIMPORT XLogRecPtr XactLastCommitEnd; extern PGDLLIMPORT bool reachedConsistency; /* these variables are GUC parameters related to XLOG */ -extern int wal_segment_size; -extern int min_wal_size_mb; -extern int max_wal_size_mb; -extern int wal_keep_size_mb; -extern int max_slot_wal_keep_size_mb; -extern int XLOGbuffers; -extern int XLogArchiveTimeout; -extern int wal_retrieve_retry_interval; -extern char *XLogArchiveCommand; -extern bool EnableHotStandby; -extern bool fullPageWrites; -extern bool wal_log_hints; -extern bool wal_compression; -extern bool wal_init_zero; -extern bool wal_recycle; -extern bool *wal_consistency_checking; -extern char *wal_consistency_checking_string; -extern bool log_checkpoints; -extern char *recoveryRestoreCommand; -extern char *recoveryEndCommand; -extern char *archiveCleanupCommand; -extern bool recoveryTargetInclusive; -extern int recoveryTargetAction; -extern int recovery_min_apply_delay; -extern char *PrimaryConnInfo; -extern char *PrimarySlotName; -extern bool wal_receiver_create_temp_slot; -extern bool track_wal_io_timing; +extern PGDLLIMPORT int wal_segment_size; +extern PGDLLIMPORT int min_wal_size_mb; +extern PGDLLIMPORT int max_wal_size_mb; +extern PGDLLIMPORT int wal_keep_size_mb; +extern PGDLLIMPORT int max_slot_wal_keep_size_mb; +extern PGDLLIMPORT int XLOGbuffers; +extern PGDLLIMPORT int XLogArchiveTimeout; +extern PGDLLIMPORT int wal_retrieve_retry_interval; +extern PGDLLIMPORT char *XLogArchiveCommand; +extern PGDLLIMPORT bool EnableHotStandby; +extern PGDLLIMPORT bool fullPageWrites; +extern PGDLLIMPORT bool wal_log_hints; +extern PGDLLIMPORT bool wal_compression; +extern PGDLLIMPORT bool wal_init_zero; +extern PGDLLIMPORT bool wal_recycle; +extern PGDLLIMPORT bool *wal_consistency_checking; +extern PGDLLIMPORT char *wal_consistency_checking_string; +extern PGDLLIMPORT bool log_checkpoints; +extern PGDLLIMPORT char *recoveryRestoreCommand; +extern PGDLLIMPORT char *recoveryEndCommand; +extern PGDLLIMPORT char *archiveCleanupCommand; +extern PGDLLIMPORT bool recoveryTargetInclusive; +extern PGDLLIMPORT int recoveryTargetAction; +extern PGDLLIMPORT int recovery_min_apply_delay; +extern PGDLLIMPORT char *PrimaryConnInfo; +extern PGDLLIMPORT char *PrimarySlotName; +extern PGDLLIMPORT bool wal_receiver_create_temp_slot; +extern PGDLLIMPORT bool track_wal_io_timing; /* indirectly set via GUC system */ -extern TransactionId recoveryTargetXid; -extern char *recovery_target_time_string; -extern const char *recoveryTargetName; -extern XLogRecPtr recoveryTargetLSN; -extern RecoveryTargetType recoveryTarget; -extern char *PromoteTriggerFile; -extern RecoveryTargetTimeLineGoal recoveryTargetTimeLineGoal; -extern TimeLineID recoveryTargetTLIRequested; -extern TimeLineID recoveryTargetTLI; +extern PGDLLIMPORT TransactionId recoveryTargetXid; +extern PGDLLIMPORT char *recovery_target_time_string; +extern PGDLLIMPORT const char *recoveryTargetName; +extern PGDLLIMPORT XLogRecPtr recoveryTargetLSN; +extern PGDLLIMPORT RecoveryTargetType recoveryTarget; +extern PGDLLIMPORT char *PromoteTriggerFile; +extern PGDLLIMPORT RecoveryTargetTimeLineGoal recoveryTargetTimeLineGoal; +extern PGDLLIMPORT TimeLineID recoveryTargetTLIRequested; +extern PGDLLIMPORT TimeLineID recoveryTargetTLI; -extern int CheckPointSegments; +extern PGDLLIMPORT int CheckPointSegments; /* option set locally in startup process only when signal files exist */ extern bool StandbyModeRequested; diff --git a/src/include/replication/walreceiver.h b/src/include/replication/walreceiver.h index 016814658e..cb71eaed09 100644 --- a/src/include/replication/walreceiver.h +++ b/src/include/replication/walreceiver.h @@ -25,9 +25,9 @@ #include "utils/tuplestore.h" /* user-settable parameters */ -extern int wal_receiver_status_interval; -extern int wal_receiver_timeout; -extern bool hot_standby_feedback; +extern PGDLLIMPORT int wal_receiver_status_interval; +extern PGDLLIMPORT int wal_receiver_timeout; +extern PGDLLIMPORT bool hot_standby_feedback; /* * MAXCONNINFO: maximum size of a connection string. -- 2.31.1