On Mon, Jul 2, 2018 at 6:02 PM, Robert Haas <robertmhaas@gmail.com> wrote:
>
> I think the core problem here is this hunk from gather_readnext:
>
> {
> Assert(!tup);
> - DestroyTupleQueueReader(reader);
> --gatherstate->nreaders;
> if (gatherstate->nreaders == 0)
> - {
> - ExecShutdownGatherWorkers(gatherstate);
> return NULL;
> - }
> memmove(&gatherstate->reader[gatherstate->nextreader],
> &gatherstate->reader[gatherstate->nextreader + 1],
> sizeof(TupleQueueReader *)
>
> Since ExecShutdownGatherWorkers() is no longer called there, the
> instrumentation data isn't accumulated into the Gather node when the
> workers are shut down. I think that's a bug and we should fix it.
>
Yeah, previously, I have also pointed out the same code [1]. However,
I have not done any testing to prove it.
> To fix the problem with Limit that you mention, we could just modify
> nodeLimit.c so that when the state is changed from LIMIT_INWINDOW to
> LIMIT_WINDOWEND, we also call ExecShutdownNode on the child plan.
>
It should work.
> We can fix other cases as we find them.
>
I think we have a similar problem with GatherMerge, but that also
appears to be fixable.
Are you planning to work on it? If not, then I can look into it.
[1] - https://www.postgresql.org/message-id/CAA4eK1KZEbYKj9HHP-6WqqjAXuoB%2BWJu-w1s9uovj%3DeeBxC48Q%40mail.gmail.com
--
With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com