You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by ml...@apache.org on 2017/04/07 03:05:38 UTC

incubator-hawq git commit: HAWQ-1417. Fixed crash when ANALYZE after COPY because of invalid resource owner [Forced Update!]

Repository: incubator-hawq
Updated Branches:
  refs/heads/master 47dd8f6c4 -> db5568488 (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/db556848
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/db556848
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/db556848

Branch: refs/heads/master
Commit: db55684886508c3e5e0ba1b9cd603e797996109b
Parents: 8595cdb
Author: Ming LI <ml...@apache.org>
Authored: Tue Mar 28 15:52:02 2017 +0800
Committer: Ming LI <ml...@apache.org>
Committed: Fri Apr 7 11:05:11 2017 +0800

----------------------------------------------------------------------
 src/backend/commands/analyze.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/db556848/src/backend/commands/analyze.c
----------------------------------------------------------------------
diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c
index 65d9bd3..f5e8a47 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.
@@ -808,6 +816,12 @@ void analyzeStmt(VacuumStmt *stmt, List *relids, int preferred_seg_num)
 	elog(failCount > 0 ? INFO : elevel, "ANALYZE completed. Success: %d, Failure: %d %s", successCount, failCount, failNames.data);
 	pfree(failNames.data);
 
+	ResourceOwnerRelease(owner,
+						 RESOURCE_RELEASE_BEFORE_LOCKS,
+						 false, true);							
+	ResourceOwnerDelete(owner);
+	CurrentResourceOwner = oldOwner;
+
 	Assert(analyzeStatementContext == CurrentMemoryContext);
 	MemoryContextSwitchTo(callerContext);
 	MemoryContextDelete(analyzeStatementContext);