Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5b50e78

Browse files
committed
Fix compatibility with pg15 new shmem_request_hook.
Hook added upstream in 4f2400cb3f10aa79f99fba680c198237da28dd38.
1 parent1a8aa64 commit5b50e78

File tree

1 file changed

+58
-17
lines changed

1 file changed

+58
-17
lines changed

‎pg_wait_sampling.c

Lines changed: 58 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ shm_mq *recv_mq = NULL;
5858
shm_mq_handle*recv_mqh=NULL;
5959
LOCKTAGqueueTag;
6060

61+
#ifPG_VERSION_NUM >=150000
62+
staticshmem_request_hook_typeprev_shmem_request_hook=NULL;
63+
#endif
6164
staticshmem_startup_hook_typeprev_shmem_startup_hook=NULL;
6265
staticPGPROC*search_proc(intbackendPid);
6366
staticPlannedStmt*pgws_planner_hook(Query*parse,
@@ -73,28 +76,40 @@ static void pgws_ExecutorEnd(QueryDesc *queryDesc);
7376
* The value has to be in sync with ProcGlobal->allProcCount, initialized in
7477
* InitProcGlobal() (proc.c).
7578
*
76-
* We calculate the value here as it won't initialized when we need it during
77-
* _PG_init().
78-
*
79-
* Note that the value returned during _PG_init() might be different from the
80-
* value returned later if some third-party modules change one of the
81-
* underlying GUC. This isn't ideal but can't lead to a crash, as the value
82-
* returned during _PG_init() is only used to ask for additional shmem with
83-
* RequestAddinShmemSpace(), and postgres has an extra 100kB of shmem to
84-
* compensate some small unaccounted usage. So if the value later changes, we
85-
* will allocate and initialize the new (and correct) memory size, which
86-
* will either work thanks for the extra 100kB of shmem, of fail (and prevent
87-
* postgres startup) due to an out of shared memory error.
8879
*/
8980
staticint
9081
get_max_procs_count(void)
9182
{
9283
intcount=0;
9384

85+
/* First, add the maximum number of backends (MaxBackends). */
86+
#ifPG_VERSION_NUM >=150000
87+
/*
88+
* On pg15+, we can directly access the MaxBackends variable, as it will
89+
* have already been initialized in shmem_request_hook.
90+
*/
91+
Assert(MaxBackends>0);
92+
count+=MaxBackends;
93+
#else
9494
/*
95-
* MaxBackends: bgworkers, autovacuum workers and launcher.
95+
* On older versions, we need to compute MaxBackends: bgworkers, autovacuum
96+
* workers and launcher.
9697
* This has to be in sync with the value computed in
9798
* InitializeMaxBackends() (postinit.c)
99+
*
100+
* Note that we need to calculate the value as it won't initialized when we
101+
* need it during _PG_init().
102+
*
103+
* Note also that the value returned during _PG_init() might be different
104+
* from the value returned later if some third-party modules change one of
105+
* the underlying GUC. This isn't ideal but can't lead to a crash, as the
106+
* value returned during _PG_init() is only used to ask for additional
107+
* shmem with RequestAddinShmemSpace(), and postgres has an extra 100kB of
108+
* shmem to compensate some small unaccounted usage. So if the value later
109+
* changes, we will allocate and initialize the new (and correct) memory
110+
* size, which will either work thanks for the extra 100kB of shmem, of
111+
* fail (and prevent postgres startup) due to an out of shared memory
112+
* error.
98113
*/
99114
count+=MaxConnections+autovacuum_max_workers+1
100115
+max_worker_processes;
@@ -105,9 +120,11 @@ get_max_procs_count(void)
105120
*/
106121
#ifPG_VERSION_NUM >=120000
107122
count+=max_wal_senders;
108-
#endif
123+
#endif/* pg 12+ */
124+
#endif/* pg 15- */
125+
/* End of MaxBackends calculation. */
109126

110-
/* AuxiliaryProcs */
127+
/*AddAuxiliaryProcs */
111128
count+=NUM_AUXILIARY_PROCS;
112129

113130
returncount;
@@ -265,6 +282,23 @@ setup_gucs()
265282
}
266283
}
267284

285+
#ifPG_VERSION_NUM >=150000
286+
/*
287+
* shmem_request hook: request additional shared memory resources.
288+
*
289+
* If you change code here, don't forget to also report the modifications in
290+
* _PG_init() for pg14 and below.
291+
*/
292+
staticvoid
293+
pgws_shmem_request(void)
294+
{
295+
if (prev_shmem_request_hook)
296+
prev_shmem_request_hook();
297+
298+
RequestAddinShmemSpace(pgws_shmem_size());
299+
}
300+
#endif
301+
268302
/*
269303
* Distribute shared memory.
270304
*/
@@ -344,20 +378,27 @@ _PG_init(void)
344378
if (!process_shared_preload_libraries_in_progress)
345379
return;
346380

381+
#ifPG_VERSION_NUM<150000
347382
/*
348383
* Request additional shared resources. (These are no-ops if we're not in
349384
* the postmaster process.) We'll allocate or attach to the shared
350385
* resources in pgws_shmem_startup().
386+
*
387+
* If you change code here, don't forget to also report the modifications
388+
* in pgsp_shmem_request() for pg15 and later.
351389
*/
352390
RequestAddinShmemSpace(pgws_shmem_size());
391+
#endif
353392

354393
register_wait_collector();
355394

356395
/*
357396
* Install hooks.
358397
*/
359-
prev_shmem_startup_hook=shmem_startup_hook;
360-
shmem_startup_hook=pgws_shmem_startup;
398+
#ifPG_VERSION_NUM >=150000
399+
prev_shmem_request_hook=shmem_request_hook;
400+
shmem_request_hook=pgws_shmem_request;
401+
#endif
361402
prev_shmem_startup_hook=shmem_startup_hook;
362403
shmem_startup_hook=pgws_shmem_startup;
363404
planner_hook_next=planner_hook;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp