8000 pg_restore: Don't allow non-positive number of jobs · hackingwu/postgres@2c72d9c · GitHub
[go: up one dir, main page]

Skip to content

Commit 2c72d9c

Browse files
committed
pg_restore: Don't allow non-positive number of jobs
pg_restore will currently accept invalid values for the number of parallel jobs to run (eg: -1), unlike pg_dump which does check that the value provided is reasonable. Worse, '-1' is actually a valid, independent, parameter (as an alias for --single-transaction), leading to potentially completely unexpected results from a command line such as: -> pg_restore -j -1 Where a user would get neither parallel jobs nor a single-transaction. Add in validity checking of the parallel jobs option, as we already have in pg_dump, before we try to open up the archive. Also move the check that we haven't been asked to run more parallel jobs than possible on Windows to the same place, so we do all the option validity checking before opening the archive. Back-patch all the way, though for 9.2 we're adding the Windows-specific check against MAXIMUM_WAIT_OBJECTS as that check wasn't back-patched originally. Discussion: https://www.postgresql.org/message-id/20170110044815.GC18360%40tamriel.snowman.net
1 parent 499606c commit 2c72d9c

File tree

1 file changed

+16
-10
lines changed

1 file changed

+16
-10
lines changed

src/bin/pg_dump/pg_restore.c

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,22 @@ main(int argc, char **argv)
324324
exit_nicely(1);
325325
}
326326

327+
if (numWorkers <= 0)
328+
{
329+
fprintf(stderr, _("%s: invalid number of parallel jobs\n"), progname);
330+
exit(1);
331+
}
332+
333+
/* See comments in pg_dump.c */
334+
#ifdef WIN32
335+
if (numWorkers > MAXIMUM_WAIT_OBJECTS)
336+
{
337+
fprintf(stderr, _("%s: maximum number of parallel jobs is %d\n"),
338+
progname, MAXIMUM_WAIT_OBJECTS);
339+
exit(1);
340+
}
341+
#endif
342+
327343
/* Can't do single-txn mode with multiple connections */
328344
if (opts->single_txn && numWorkers > 1)
329345
{
@@ -392,16 +408,6 @@ main(int argc, char **argv)
392408
if (opts->tocFile)
393409
SortTocFromFile(AH, opts);
394410

395-
/* See comments in pg_dump.c */
396-
#ifdef WIN32
397-
if (numWorkers > MAXIMUM_WAIT_OBJECTS)
398-
{
399-
fprintf(stderr, _("%s: maximum number of parallel jobs is %d\n"),
400-
progname, MAXIMUM_WAIT_OBJECTS);
401-
exit(1);
402-
}
403-
#endif
404-
405411
AH->numWorkers = numWorkers;
406412

407413
if (opts->tocSummary)

0 commit comments

Comments
 (0)
0