Commit 6599c9ac authored by Robert Haas's avatar Robert Haas

Add an Assert() to max_parallel_workers enforcement.

To prevent future bugs along the lines of the one corrected by commit
8ff51869, or find any that remain
in the current code, add an Assert() that the difference between
parallel_register_count and parallel_terminate_count is in a sane
range.

Kuntal Ghosh, with considerable tidying-up by me, per a suggestion
from Neha Khatri.  Reviewed by Tomas Vondra.

Discussion: http://postgr.es/m/CAFO0U+-E8yzchwVnvn5BeRDPgX2z9vZUxQ8dxx9c0XFGBC7N1Q@mail.gmail.com
parent 8ff51869
......@@ -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;
}
......
......@@ -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
},
......
......@@ -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.
*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment