You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by rl...@apache.org on 2017/09/14 06:40:27 UTC

incubator-hawq git commit: HAWQ-1525. Segmentation fault occurs if reindex database when loading data from Hive to HAWQ using hcatalog

Repository: incubator-hawq
Updated Branches:
  refs/heads/master 4cd0c565b -> 9f76faa70


HAWQ-1525. Segmentation fault occurs if reindex database when loading data from Hive to HAWQ using hcatalog


Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/9f76faa7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/9f76faa7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/9f76faa7

Branch: refs/heads/master
Commit: 9f76faa70545f0aefa38b6b1b4506f13dd16cdb4
Parents: 4cd0c56
Author: wcl14 <wa...@126.com>
Authored: Thu Sep 14 14:35:24 2017 +0800
Committer: wcl14 <wa...@126.com>
Committed: Thu Sep 14 14:35:24 2017 +0800

----------------------------------------------------------------------
 src/backend/cdb/cdbinmemheapam.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/9f76faa7/src/backend/cdb/cdbinmemheapam.c
----------------------------------------------------------------------
diff --git a/src/backend/cdb/cdbinmemheapam.c b/src/backend/cdb/cdbinmemheapam.c
index 7f15790..db08bbf 100644
--- a/src/backend/cdb/cdbinmemheapam.c
+++ b/src/backend/cdb/cdbinmemheapam.c
@@ -310,6 +310,16 @@ InMemHeap_BeginScan(InMemHeapRelation memheap, int nkeys,
     InMemHeapScanDesc scan = palloc0(sizeof (InMemHeapScanDescData));
     Assert(NULL != scan);
 
+    /*
+     * HAWQ-1525
+     *
+     * The rel in InMemHeapRelation is a pointer, which is the address of heap relation
+     * in relcache. When the heap relation in relcache is clear for some reason,
+     * the value of rel in InMemHeapRelation is wrong. So we should reopen this relation
+     * to make sure it's correct.
+     */
+    memheap->rel = RelationIdGetRelation(memheap->relid);
+
     scan->rs_rd = memheap;
     scan->rs_nkeys = nkeys;
     scan->rs_index = -1;
@@ -408,6 +418,8 @@ InMemHeap_EndScan(InMemHeapScanDesc scan)
 {
     Assert(NULL != scan);
 
+    RelationClose(scan->rs_rd->rel);
+
     if (NULL != scan->rs_key)
     {
         pfree(scan->rs_key);