diff --git a/src/backend/postmaster/bgworker.c b/src/backend/postmaster/bgworker.c index 6b2385c471..9ad3e915db 100644 --- a/src/backend/postmaster/bgworker.c +++ b/src/backend/postmaster/bgworker.c @@ -971,6 +971,9 @@ RegisterDynamicBackgroundWorker(BackgroundWorker *worker, BackgroundWorkerData->parallel_terminate_count) >= max_parallel_workers) { + Assert(BackgroundWorkerData->parallel_register_count - + BackgroundWorkerData->parallel_terminate_count <= + MAX_PARALLEL_WORKER_LIMIT); LWLockRelease(BackgroundWorkerLock); return false; } diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 6e39a67609..9ad8361a9b 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -57,7 +57,7 @@ #include "parser/scansup.h" #include "pgstat.h" #include "postmaster/autovacuum.h" -#include "postmaster/bgworker.h" +#include "postmaster/bgworker_internals.h" #include "postmaster/bgwriter.h" #include "postmaster/postmaster.h" #include "postmaster/syslogger.h" @@ -2713,7 +2713,7 @@ static struct config_int ConfigureNamesInt[] = NULL }, &max_parallel_workers_per_gather, - 2, 0, 1024, + 2, 0, MAX_PARALLEL_WORKER_LIMIT, NULL, NULL, NULL }, @@ -2723,7 +2723,7 @@ static struct config_int ConfigureNamesInt[] = NULL }, &max_parallel_workers, - 8, 0, 1024, + 8, 0, MAX_PARALLEL_WORKER_LIMIT, NULL, NULL, NULL }, diff --git a/src/include/postmaster/bgworker_internals.h b/src/include/postmaster/bgworker_internals.h index 9a2de4f4d0..9e0b0621cf 100644 --- a/src/include/postmaster/bgworker_internals.h +++ b/src/include/postmaster/bgworker_internals.h @@ -16,6 +16,13 @@ #include "lib/ilist.h" #include "postmaster/bgworker.h" +/* GUC options */ + +/* + * Maximum possible value of parallel workers. + */ +#define MAX_PARALLEL_WORKER_LIMIT 1024 + /* * List of background workers, private to postmaster. *