1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-28 23:42:10 +03:00

Adjust assertion in GetCurrentCommandId.

currentCommandIdUsed is only used to skip redundant increments of the
command counter, and CommandCounterIncrement() is categorically denied
under parallelism anyway.  Therefore, it's OK for
GetCurrentCommandId() to mark the counter value used, as long as it
happens in the leader, not a worker.

Prior to commit e9baa5e9fa, the slightly
incorrect check didn't matter, but now it does.  A test case added by
commit 1804284042 uncovered the problem
by accident; it caused failures with force_parallel_mode=on/regress.

Report and review by Andres Freund.  Patch by me.

Discussion: http://postgr.es/m/20171221143106.5lhtygohvmazli3x@alap3.anarazel.de
This commit is contained in:
Robert Haas
2017-12-21 13:10:51 -05:00
parent 6719b238e8
commit cce1ecfc77

View File

@ -683,12 +683,12 @@ GetCurrentCommandId(bool used)
if (used)
{
/*
* Forbid setting currentCommandIdUsed in parallel mode, because we
* have no provision for communicating this back to the master. We
* Forbid setting currentCommandIdUsed in a parallel worker, because
* we have no provision for communicating this back to the master. We
* could relax this restriction when currentCommandIdUsed was already
* true at the start of the parallel operation.
*/
Assert(CurrentTransactionState->parallelModeLevel == 0);
Assert(!IsParallelWorker());
currentCommandIdUsed = true;
}
return currentCommandId;