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
pull/21/merge
Robert Haas 8 years ago
parent 8ff518699f
commit 6599c9ac33
  1. 3
      src/backend/postmaster/bgworker.c
  2. 6
      src/backend/utils/misc/guc.c
  3. 7
      src/include/postmaster/bgworker_internals.h

@ -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…
Cancel
Save