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 commite9baa5e9fa
, the slightly incorrect check didn't matter, but now it does. A test case added by commit1804284042
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:
@ -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;
|
||||
|
Reference in New Issue
Block a user