Repository: incubator-hawq Updated Branches: refs/heads/master 1d914de51 -> 1bbd1e969 (forced update)
HAWQ-1417. Fixed crash when ANALYZE after COPY because of invalid resource owner Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/1bbd1e96 Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/1bbd1e96 Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/1bbd1e96 Branch: refs/heads/master Commit: 1bbd1e96981306bf721276f1934d44f27e847981 Parents: 8595cdb Author: Ming LI <[email protected]> Authored: Tue Mar 28 15:52:02 2017 +0800 Committer: Ming LI <[email protected]> Committed: Fri Apr 7 14:49:25 2017 +0800 ---------------------------------------------------------------------- src/backend/commands/analyze.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/1bbd1e96/src/backend/commands/analyze.c ---------------------------------------------------------------------- diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index 65d9bd3..be1f3f7 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -308,6 +308,7 @@ void analyzeStmt(VacuumStmt *stmt, List *relids, int preferred_seg_num) ListCell *le1 = NULL; int successCount = 0, failCount = 0; StringInfoData failNames; + ResourceOwner owner, oldOwner; /** * Ensure that an ANALYZE is requested. @@ -477,6 +478,13 @@ void analyzeStmt(VacuumStmt *stmt, List *relids, int preferred_seg_num) } /** + * Create a resource owner to keep track of our resources even not in trasaction block + */ + owner = ResourceOwnerCreate(CurrentResourceOwner, "analyzeStmt"); + oldOwner = CurrentResourceOwner; + CurrentResourceOwner = owner; + + /** * we use preferred_seg_num as default and * compute target_seg_num based on data size and distributed type * if there is no preferred_seg_num. @@ -773,6 +781,12 @@ void analyzeStmt(VacuumStmt *stmt, List *relids, int preferred_seg_num) resource = NULL; UnsetActiveQueryResource(); SetActiveQueryResource(savedResource); + + ResourceOwnerRelease(owner, + RESOURCE_RELEASE_BEFORE_LOCKS, + false, true); + CurrentResourceOwner = oldOwner; + ResourceOwnerDelete(owner); /* Carry on with error handling. */ PG_RE_THROW(); @@ -787,6 +801,12 @@ void analyzeStmt(VacuumStmt *stmt, List *relids, int preferred_seg_num) UnsetActiveQueryResource(); SetActiveQueryResource(savedResource); + ResourceOwnerRelease(owner, + RESOURCE_RELEASE_BEFORE_LOCKS, + false, true); + CurrentResourceOwner = oldOwner; + ResourceOwnerDelete(owner); + if (bUseOwnXacts) { /**
