aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>1999-06-04 21:14:46 +0000
committerTom Lane <tgl@sss.pgh.pa.us>1999-06-04 21:14:46 +0000
commit8f19603d6c9c5eba386bac4f021bc76407c84d0c (patch)
treed7d2323bacd3e14b4d2dd0c2877d014cb6e69e48
parent4cd4a54c80fc1ed7b16039a71706dc80ce5d422e (diff)
downloadpostgresql-8f19603d6c9c5eba386bac4f021bc76407c84d0c.tar.gz
postgresql-8f19603d6c9c5eba386bac4f021bc76407c84d0c.zip
Add startup-time check that -B is not unreasonably small for
given number of backends (-N), per recent discussion in pghackers list.
-rw-r--r--src/backend/postmaster/postmaster.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 46e224385ba..7a88385e491 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.105 1999/05/25 16:10:40 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.106 1999/06/04 21:14:46 tgl Exp $
*
* NOTES
*
@@ -427,7 +427,7 @@ PostmasterMain(int argc, char *argv[])
* means we have to start each backend with a -B # to make
* sure they know how many buffers were allocated.
*/
- NBuffers = atol(optarg);
+ NBuffers = atoi(optarg);
strcat(ExtraOptions, " -B ");
strcat(ExtraOptions, optarg);
break;
@@ -530,9 +530,26 @@ PostmasterMain(int argc, char *argv[])
break;
}
}
+
+ /*
+ * Select default values for switches where needed
+ */
if (PostPortName == -1)
PostPortName = pq_getport();
+ /*
+ * Check for invalid combinations of switches
+ */
+ if (NBuffers < 2 * MaxBackends || NBuffers < 16)
+ {
+ /* Do not accept -B so small that backends are likely to starve for
+ * lack of buffers. The specific choices here are somewhat arbitrary.
+ */
+ fprintf(stderr, "%s: -B must be at least twice -N and at least 16.\n",
+ progname);
+ exit(1);
+ }
+
checkDataDir(DataDir, &DataDirOK); /* issues error messages */
if (!DataDirOK)
{