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) >=
|
BackgroundWorkerData->parallel_terminate_count) >=
|
||||||
max_parallel_workers)
|
max_parallel_workers)
|
||||||
{
|
{
|
||||||
|
Assert(BackgroundWorkerData->parallel_register_count -
|
||||||
|
BackgroundWorkerData->parallel_terminate_count <=
|
||||||
|
MAX_PARALLEL_WORKER_LIMIT);
|
||||||
LWLockRelease(BackgroundWorkerLock);
|
LWLockRelease(BackgroundWorkerLock);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,7 @@
|
||||||
#include "parser/scansup.h"
|
#include "parser/scansup.h"
|
||||||
#include "pgstat.h"
|
#include "pgstat.h"
|
||||||
#include "postmaster/autovacuum.h"
|
#include "postmaster/autovacuum.h"
|
||||||
#include "postmaster/bgworker.h"
|
#include "postmaster/bgworker_internals.h"
|
||||||
#include "postmaster/bgwriter.h"
|
#include "postmaster/bgwriter.h"
|
||||||
#include "postmaster/postmaster.h"
|
#include "postmaster/postmaster.h"
|
||||||
#include "postmaster/syslogger.h"
|
#include "postmaster/syslogger.h"
|
||||||
|
@ -2713,7 +2713,7 @@ static struct config_int ConfigureNamesInt[] =
|
||||||
NULL
|
NULL
|
||||||
},
|
},
|
||||||
&max_parallel_workers_per_gather,
|
&max_parallel_workers_per_gather,
|
||||||
2, 0, 1024,
|
2, 0, MAX_PARALLEL_WORKER_LIMIT,
|
||||||
NULL, NULL, NULL
|
NULL, NULL, NULL
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -2723,7 +2723,7 @@ static struct config_int ConfigureNamesInt[] =
|
||||||
NULL
|
NULL
|
||||||
},
|
},
|
||||||
&max_parallel_workers,
|
&max_parallel_workers,
|
||||||
8, 0, 1024,
|
8, 0, MAX_PARALLEL_WORKER_LIMIT,
|
||||||
NULL, NULL, NULL
|
NULL, NULL, NULL
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,13 @@
|
||||||
#include "lib/ilist.h"
|
#include "lib/ilist.h"
|
||||||
#include "postmaster/bgworker.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.
|
* List of background workers, private to postmaster.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue