Re: es_query_dsa is broken
Thomas Munro <thomas.munro@enterprisedb.com>
From: Thomas Munro <thomas.munro@enterprisedb.com>
To: Amit Kapila <amit.kapila16@gmail.com>
Cc: Robert Haas <robertmhaas@gmail.com>,
Pg Hackers <pgsql-hackers@postgresql.org>
Date: 2017-12-18T00:35:38Z
Lists: pgsql-hackers
Attachments
- fix-es_query_dsa-pg10-v3.patch (application/octet-stream) patch v3
- fix-es_query_dsa-pg11-v3.patch (application/octet-stream) patch v3
On Thu, Dec 7, 2017 at 12:51 PM, Thomas Munro <thomas.munro@enterprisedb.com> wrote: > On Wed, Dec 6, 2017 at 10:16 PM, Amit Kapila <amit.kapila16@gmail.com> wrote: >> On Wed, Dec 6, 2017 at 1:14 AM, Robert Haas <robertmhaas@gmail.com> wrote: >>> On Tue, Dec 5, 2017 at 7:24 AM, Amit Kapila <amit.kapila16@gmail.com> wrote: >>>> + EState *estate = gatherstate->ps.state; >>>> + >>>> + /* Install our DSA area while executing the plan. */ >>>> + estate->es_query_dsa = gatherstate->pei->area; >>>> outerTupleSlot = ExecProcNode(outerPlan); >>>> + estate->es_query_dsa = NULL; >>>> >>>> Won't the above coding pattern create a problem, if ExecProcNode >>>> throws an error and outer block catches it and continues execution >>>> (consider the case of execution inside PL blocks)? >>> >>> I don't see what the problem is. The query that got aborted by the >>> error wouldn't be sharing an EState with one that didn't. >> >> That's right. Ignore my comment, I got confused. Other than that, I >> don't see any problem with the code as such apart from that it looks >> slightly hacky. I think Thomas or someone needs to develop a patch on >> the lines you have mentioned or what Thomas was trying to describe in >> his email and see how it comes out. Andreas Seltenreich found a query[1] that suffers from this bug (thanks!), and Amit confirmed that this patch fixes it, but further sqlsmith fuzz testing with the patch applied also revealed that it failed to handle the case where pei is NULL because parallelism was inhibited. Here's a new version to fix that. Someone might prefer a coding with "if" rather than the ternary operator, but I didn't have a strong preference. [1] https://www.postgresql.org/message-id/flat/CAEepm%3D2tfz1XNDcyU_a5ZiEaopz6%2BbBo9vQY%2BiJVLTtUVNztcQ%40mail.gmail.com -- Thomas Munro http://www.enterprisedb.com
Commits
-
Fix crashes on plans with multiple Gather (Merge) nodes.
- b70ea4c75e5f 10.2 landed
- fd7c0fa732d9 11.0 landed
-
Teach bitmap heap scan to cope with absence of a DSA.
- c6755e233be1 11.0 cited
-
Provide a DSA area for all parallel queries.
- e13029a5ce35 10.0 cited