Add an Assert() to max_parallel_workers enforcement.
To prevent future bugs along the lines of the one corrected by commit
8ff518699f
, 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
This commit is contained in:
parent
8ff518699f
commit
6599c9ac33
|
@ -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.
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue