]> granicus.if.org Git - postgresql/commitdiff
Add an Assert() to max_parallel_workers enforcement.
authorRobert Haas <rhaas@postgresql.org>
Tue, 11 Apr 2017 17:03:44 +0000 (13:03 -0400)
committerRobert Haas <rhaas@postgresql.org>
Tue, 11 Apr 2017 17:03:44 +0000 (13:03 -0400)
To prevent future bugs along the lines of the one corrected by commit
8ff518699f19dd0a5076f5090bac8400b8233f7f, 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

src/backend/postmaster/bgworker.c
src/backend/utils/misc/guc.c
src/include/postmaster/bgworker_internals.h

index 6b2385c4711edabd65beafac8f9ef0d85be12b0b..9ad3e915db30efb5645be3f315fb585612a6a04d 100644 (file)
@@ -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;
        }
index 6e39a676094c8402865fb306179ff18187344f14..9ad8361a9bd6a81bd2ea82c35992946b932528a1 100644 (file)
@@ -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
        },
 
index 9a2de4f4d04a991d73cce38c247501add2e5e800..9e0b0621cf4794ed25d1827a41b2586862b5b4be 100644 (file)
 #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.
  *