Fix a couple of bugs in recent parallelism-related commits.
Commit 816e336f12ecabdc834d4cc31bcf966b2dd323dc added the wrong error check to async.c; sending restrictions is restricted to the leader, not altogether unsafe. Commit 3bd909b220930f21d6e15833a17947be749e7fde added ExecShutdownNode to traverse the planstate tree and call shutdown functions, but made a Gather node, the only node that actually has such a function, abort the tree traversal, which is wrong.
This commit is contained in:
parent
1a219fa15b
commit
bde39eed0c
@ -117,6 +117,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
|
#include "access/parallel.h"
|
||||||
#include "access/slru.h"
|
#include "access/slru.h"
|
||||||
#include "access/transam.h"
|
#include "access/transam.h"
|
||||||
#include "access/xact.h"
|
#include "access/xact.h"
|
||||||
@ -544,8 +545,8 @@ Async_Notify(const char *channel, const char *payload)
|
|||||||
Notification *n;
|
Notification *n;
|
||||||
MemoryContext oldcontext;
|
MemoryContext oldcontext;
|
||||||
|
|
||||||
if (IsInParallelMode())
|
if (IsParallelWorker())
|
||||||
elog(ERROR, "cannot send notifications during a parallel operation");
|
elog(ERROR, "cannot send notifications from a parallel worker");
|
||||||
|
|
||||||
if (Trace_notify)
|
if (Trace_notify)
|
||||||
elog(DEBUG1, "Async_Notify(%s)", channel);
|
elog(DEBUG1, "Async_Notify(%s)", channel);
|
||||||
|
@ -804,10 +804,7 @@ ExecShutdownNode(PlanState *node)
|
|||||||
switch (nodeTag(node))
|
switch (nodeTag(node))
|
||||||
{
|
{
|
||||||
case T_GatherState:
|
case T_GatherState:
|
||||||
{
|
|
||||||
ExecShutdownGather((GatherState *) node);
|
ExecShutdownGather((GatherState *) node);
|
||||||
return true;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user