You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by en...@apache.org on 2015/10/29 05:57:39 UTC

incubator-hawq git commit: Revert "HAWQ-80. Support dynamic relation distribution type in gpopt"

Repository: incubator-hawq
Updated Branches:
  refs/heads/master ff1a62a0d -> fb215ffb1


Revert "HAWQ-80. Support dynamic relation distribution type in gpopt"

This reverts commit ff1a62a0d037eaf700efd1fde40183f3438af074.


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

Branch: refs/heads/master
Commit: fb215ffb17a9a45680e50dadc296888837911205
Parents: ff1a62a
Author: Entong Shen <sh...@gmail.com>
Authored: Wed Oct 28 21:57:17 2015 -0700
Committer: Entong Shen <sh...@gmail.com>
Committed: Wed Oct 28 21:57:17 2015 -0700

----------------------------------------------------------------------
 src/backend/cdb/cdbdatalocality.c               |  7 ++-
 src/backend/gpopt/gpdbwrappers.cpp              | 26 ---------
 .../translate/CTranslatorRelcacheToDXL.cpp      | 58 ++------------------
 src/backend/optimizer/plan/planner.c            |  3 +-
 src/include/cdb/cdbdatalocality.h               |  2 +
 src/include/gpopt/gpdbwrappers.h                |  7 ---
 .../gpopt/translate/CTranslatorRelcacheToDXL.h  |  4 --
 7 files changed, 13 insertions(+), 94 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/fb215ffb/src/backend/cdb/cdbdatalocality.c
----------------------------------------------------------------------
diff --git a/src/backend/cdb/cdbdatalocality.c b/src/backend/cdb/cdbdatalocality.c
index 5b7e490..c429b33 100644
--- a/src/backend/cdb/cdbdatalocality.c
+++ b/src/backend/cdb/cdbdatalocality.c
@@ -2531,8 +2531,9 @@ static bool allocate_hash_relation(Relation_Data* rel_data,
 			return true;
 		}
 	}
+	/*for now orca doesn't support convert hash to random*/
 	else if((hash_to_random_flag == ENFORCE_HASH_TO_RANDOM ||
-			(relationDatalocality < hash2RandomDatalocalityThreshold && relationDatalocality >= 0 ))
+			(relationDatalocality < hash2RandomDatalocalityThreshold && relationDatalocality >= 0 && !optimizer))
 			&& hash_to_random_flag != ENFORCE_KEEP_HASH){
 		log_context->totalDataSizePerRelation =0;
 		log_context->localDataSizePerRelation =0;
@@ -3715,6 +3716,7 @@ run_allocation_algorithm(SplitAllocResult *result, List *virtual_segments, Query
 				result->relsType = lappend(result->relsType, relType);
 				MemoryContextSwitchTo(cur_memorycontext);
 				if (needToChangeHash2Random) {
+					result->forbid_optimizer = true;
 					allocate_random_relation(rel_data, &log_context, &idMap, 	&assignment_context, context);
 				}
 			}
@@ -3728,6 +3730,7 @@ run_allocation_algorithm(SplitAllocResult *result, List *virtual_segments, Query
 				relType->isHash = false;
 				result->relsType = lappend(result->relsType, relType);
 				MemoryContextSwitchTo(cur_memorycontext);
+				result->forbid_optimizer = true;
 				allocate_random_relation(rel_data, &log_context,&idMap, &assignment_context, context);
 			}
 
@@ -3834,7 +3837,7 @@ calculate_planner_segment_num(Query *query, QueryResourceLife resourceLife,
 	result = (SplitAllocResult *) palloc(sizeof(SplitAllocResult));
 	result->relsType = NIL;
 	result->datalocalityInfo = makeStringInfo();
-
+	result->forbid_optimizer = false;
 	/* fake data locality */
 	if (debug_fake_datalocality) {
 		fp = fopen("/tmp/cdbdatalocality.result", "w+");

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/fb215ffb/src/backend/gpopt/gpdbwrappers.cpp
----------------------------------------------------------------------
diff --git a/src/backend/gpopt/gpdbwrappers.cpp b/src/backend/gpopt/gpdbwrappers.cpp
index 1f6a549..23d984b 100644
--- a/src/backend/gpopt/gpdbwrappers.cpp
+++ b/src/backend/gpopt/gpdbwrappers.cpp
@@ -199,8 +199,6 @@
 #define ALLOW_isMotionGather
 #define ALLOW_estimate_rel_size
 #define ALLOW_rel_partitioning_is_uniform
-#define ALLOW_GetActiveRelType
-#define ALLOW_GetActiveQueryResource
 
 #define ALLOW_mdver_request_version
 #define ALLOW_mdver_enabled
@@ -2366,30 +2364,6 @@ gpdb::Pdistrpolicy
     return NULL;
 }
 
-
-List *
-gpdb::PlActiveRelTypes(void)
-{
-	GP_WRAP_START;
-	{
-		return GetActiveRelType();
-	}
-	GP_WRAP_END;
-	return NULL;
-}
-
-QueryResource *
-gpdb::PqrActiveQueryResource(void)
-{
-	GP_WRAP_START;
-	{
-		return GetActiveQueryResource();
-	}
-	GP_WRAP_END;
-	return NULL;
-}
-
-
 BOOL
 gpdb::FChildPartDistributionMismatch
 	(

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/fb215ffb/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp
----------------------------------------------------------------------
diff --git a/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp b/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp
index 2800e8b..5e5580d 100644
--- a/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp
+++ b/src/backend/gpopt/translate/CTranslatorRelcacheToDXL.cpp
@@ -58,7 +58,6 @@
 #include "catalog/pg_exttable.h"
 
 #include "cdb/cdbpartition.h"
-#include "cdb/cdbdatalocality.h"
 #include "catalog/namespace.h"
 #include "catalog/pg_statistic.h"
 
@@ -505,52 +504,6 @@ CTranslatorRelcacheToDXL::CheckUnsupportedRelation
 
 //---------------------------------------------------------------------------
 //	@function:
-//		CTranslatorRelcacheToDXL::FTreatAsRandom
-//
-//	@doc:
-//		Whether we need to treat a hash distributed table as random distributed
-//
-//---------------------------------------------------------------------------
-BOOL
-CTranslatorRelcacheToDXL::FTreatAsRandom
-	(
-	OID oid,
-	GpPolicy *pgppolicy
-	)
-{
-	QueryResource *resource = gpdb::PqrActiveQueryResource();
-	if (NULL == resource)
-	{
-		// no resource has been allocated. In this case we are inside an 'explain',
-		// no hash to random conversion will happen
-		return false;
-	}
-
-	List *lRelsType = gpdb::PlActiveRelTypes();
-	ListCell *lc = NULL;
-	foreach(lc, lRelsType)
-	{
-		CurrentRelType *relType = (CurrentRelType *) lfirst(lc);
-		if (relType->relid == oid)
-		{
-			/* a hash distributed table can be considered as hash if
-			 * 1. The active relation type is hash
-			 * 2. The bucketnum of this relation matches the number of vSegs allocated
-			 */
-			if (relType->isHash && pgppolicy->bucketnum == list_length(resource->segments))
-			{
-				return false; // keep hash distributed
-			}
-			break;
-		}
-	}
-
-	return true;
-}
-
-
-//---------------------------------------------------------------------------
-//	@function:
 //		CTranslatorRelcacheToDXL::Pmdrel
 //
 //	@doc:
@@ -585,7 +538,7 @@ CTranslatorRelcacheToDXL::Pmdrel
 	DrgPmdid *pdrgpmdidIndexes = NULL;
 	DrgPmdid *pdrgpmdidTriggers = NULL;
 	DrgPul *pdrgpulPartKeys = NULL;
-	BOOL fConvertHashToRandom = false;
+	BOOL fChildDistributionMismatch = false;
 	DrgPdrgPul *pdrgpdrgpulKeys = NULL;
 	DrgPmdid *pdrgpmdidCheckConstraints = NULL;
 	BOOL fTemporary = false;
@@ -609,16 +562,14 @@ CTranslatorRelcacheToDXL::Pmdrel
 		// get distribution policy
 		GpPolicy *pgppolicy = gpdb::Pdistrpolicy(rel);
 		ereldistribution = Ereldistribution(pgppolicy);
+		fChildDistributionMismatch = gpdb::FChildPartDistributionMismatch(rel);
 
-		// determine if table should be treated as randomly distributed, otherwise get distribution columns
+		// get distribution columns
 		if (IMDRelation::EreldistrHash == ereldistribution)
 		{
-			fConvertHashToRandom = FTreatAsRandom(oid, pgppolicy);
 			pdrpulDistrCols = PdrpulDistrCols(pmp, pgppolicy, pdrgpmdcol, ulMaxCols);
 		}
 
-		fConvertHashToRandom = fConvertHashToRandom || gpdb::FChildPartDistributionMismatch(rel);
-
 		// collect relation indexes
 		pdrgpmdidIndexes = PdrgpmdidRelIndexes(pmp, rel);
 
@@ -684,7 +635,6 @@ CTranslatorRelcacheToDXL::Pmdrel
 							ereldistribution,
 							pdrgpmdcol,
 							pdrpulDistrCols,
-							fConvertHashToRandom,
 							pdrgpdrgpulKeys,
 							pdrgpmdidIndexes,
 							pdrgpmdidTriggers,
@@ -710,7 +660,7 @@ CTranslatorRelcacheToDXL::Pmdrel
 							pdrgpmdcol,
 							pdrpulDistrCols,
 							pdrgpulPartKeys,
-							fConvertHashToRandom,
+							fChildDistributionMismatch,
 							pdrgpdrgpulKeys,
 							pdrgpmdidIndexes,
 							pdrgpmdidTriggers,

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/fb215ffb/src/backend/optimizer/plan/planner.c
----------------------------------------------------------------------
diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c
index c74840a..ae81adf 100644
--- a/src/backend/optimizer/plan/planner.c
+++ b/src/backend/optimizer/plan/planner.c
@@ -340,7 +340,8 @@ planner(Query *parse, int cursorOptions,
 		* then fall back to the planner.
 		* TODO: caragg 11/08/2013: Enable ORCA when running in utility mode (MPP-21841)
 		*/
-    	if (optimizer && AmIMaster() && (GP_ROLE_UTILITY != Gp_role))
+		if (!ppResult->saResult.forbid_optimizer && optimizer
+				&& AmIMaster() && (GP_ROLE_UTILITY != Gp_role))
 		{
 			if (gp_log_optimization_time)
 			{

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/fb215ffb/src/include/cdb/cdbdatalocality.h
----------------------------------------------------------------------
diff --git a/src/include/cdb/cdbdatalocality.h b/src/include/cdb/cdbdatalocality.h
index 25d1ada..09c02fb 100644
--- a/src/include/cdb/cdbdatalocality.h
+++ b/src/include/cdb/cdbdatalocality.h
@@ -28,6 +28,8 @@ typedef struct SplitAllocResult
   int planner_segments;
   List *relsType;// relation type after datalocality changing
   StringInfo datalocalityInfo;
+  //orca currently doesn't support hash table to be processed as random table.
+  bool forbid_optimizer;
 } SplitAllocResult;
 
 /*

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/fb215ffb/src/include/gpopt/gpdbwrappers.h
----------------------------------------------------------------------
diff --git a/src/include/gpopt/gpdbwrappers.h b/src/include/gpopt/gpdbwrappers.h
index 552f71d..490a4d7 100644
--- a/src/include/gpopt/gpdbwrappers.h
+++ b/src/include/gpopt/gpdbwrappers.h
@@ -55,7 +55,6 @@ struct GpPolicy;
 struct PartitionSelector;
 struct SelectedParts;
 struct Motion;
-struct QueryResource;
 
 namespace gpdb {
 
@@ -489,12 +488,6 @@ namespace gpdb {
     // and the parts are distributed differently, return Random distribution
     GpPolicy *Pdistrpolicy(Relation rel);
     
-    // return active relation distribution types
-    List *PlActiveRelTypes(void);
-
-    // return active query resource
-    QueryResource *PqrActiveQueryResource(void);
-
     // return true if the table is partitioned and hash-distributed, and one of  
     // the child partitions is randomly distributed
     BOOL FChildPartDistributionMismatch(Relation rel);

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/fb215ffb/src/include/gpopt/translate/CTranslatorRelcacheToDXL.h
----------------------------------------------------------------------
diff --git a/src/include/gpopt/translate/CTranslatorRelcacheToDXL.h b/src/include/gpopt/translate/CTranslatorRelcacheToDXL.h
index 89a7ccd..5d789b5 100644
--- a/src/include/gpopt/translate/CTranslatorRelcacheToDXL.h
+++ b/src/include/gpopt/translate/CTranslatorRelcacheToDXL.h
@@ -307,10 +307,6 @@ namespace gpdxl
 			static 
 			BOOL FDefaultPartition(List *plDefaultLevels, ULONG ulLevel);
 			
-			// treat a hash distributed table as random distributed
-			static
-			BOOL FTreatAsRandom(OID oid, GpPolicy *pgppolicy);
-
 			// retrieve part constraint for index
 			static
 			CMDPartConstraintGPDB *PmdpartcnstrIndex