Distinguish GetFastPathCachedPlan and GetLocalShardQueryForCache

We do this because we do not want to expose FastPathPlanCache to the local executor as much as possible
remote_prepared_txes
Onder Kalaci 2022-11-16 09:38:47 +01:00
parent 91530ebe30
commit bafd0c00f6
3 changed files with 31 additions and 8 deletions

View File

@ -274,7 +274,7 @@ ExecuteLocalTaskListExtended(List *taskList,
continue;
}
PlannedStmt *planCache = GetFastPathLocalPlan(task, distributedPlan);
PlannedStmt *planCache = GetCachedFastPathLocalPlan(task, distributedPlan);
/*
* If the plan is already cached, don't need to re-plan, just

View File

@ -24,6 +24,8 @@
#include "optimizer/clauses.h"
static FastPathPlanCache * GetFastPathCachedPlan(Task *task,
DistributedPlan *distributedPlan);
static Query * GetLocalShardQueryForCache(Query *jobQuery, Task *task,
ParamListInfo paramListInfo);
static char * DeparseLocalShardQuery(Query *jobQuery, List *relationShardList,
@ -40,7 +42,7 @@ void
CacheFastPathPlanForShardQuery(Task *task, DistributedPlan *originalDistributedPlan,
ParamListInfo paramListInfo)
{
PlannedStmt *planCache = GetFastPathLocalPlan(task, originalDistributedPlan);
FastPathPlanCache *planCache = GetFastPathCachedPlan(task, originalDistributedPlan);
if (planCache != NULL)
{
/* we already have a local plan */
@ -88,8 +90,8 @@ CacheFastPathPlanForShardQuery(Task *task, DistributedPlan *originalDistributedP
LockRelationOid(rangeTableEntry->relid, lockMode);
FastPathPlanCache *fastPathPlanCache = CitusMakeNode(FastPathPlanCache);
planCache = planner(localShardQuery, NULL, 0, NULL);
fastPathPlanCache->localPlan = planCache;
PlannedStmt *localPlan = planner(localShardQuery, NULL, 0, NULL);
fastPathPlanCache->localPlan = localPlan;
fastPathPlanCache->shardId = task->anchorShardId;
fastPathPlanCache->placementGroupIds = TaskGroupIdAccesses(task);
@ -226,13 +228,33 @@ ExtractParameterTypesForParamListInfo(ParamListInfo originalParamListInfo,
/*
* GetCachedLocalPlan is a helper function which return the cached
* GetCachedFastPathLocalPlan is a helper function which return the cached
* plan in the distributedPlan for the given task if exists.
*
* Otherwise, the function returns NULL.
*/
PlannedStmt *
GetFastPathLocalPlan(Task *task, DistributedPlan *distributedPlan)
GetCachedFastPathLocalPlan(Task *task, DistributedPlan *distributedPlan)
{
FastPathPlanCache *fastPathPlanCache = GetFastPathCachedPlan(task, distributedPlan);
if (fastPathPlanCache != NULL)
{
return fastPathPlanCache->localPlan;
}
return NULL;
}
/*
* GetFastPathCachedPlan is a helper function which return the cached
* plan in the distributedPlan for the given task if exists.
*
* Otherwise, the function returns NULL.
*/
static FastPathPlanCache *
GetFastPathCachedPlan(Task *task, DistributedPlan *distributedPlan)
{
if (distributedPlan == NULL || distributedPlan->workerJob == NULL)
{
@ -250,7 +272,7 @@ GetFastPathLocalPlan(Task *task, DistributedPlan *distributedPlan)
fastPathPlanCache->placementGroupIds) == NIL)
{
/* already have a cached plan, no need to continue */
return fastPathPlanCache->localPlan;
return fastPathPlanCache;
}
}

View File

@ -3,7 +3,8 @@
extern bool IsFastPathPlanCachingSupported(Job *currentJob,
DistributedPlan *originalDistributedPlan);
extern PlannedStmt * GetFastPathLocalPlan(Task *task, DistributedPlan *distributedPlan);
extern PlannedStmt * GetCachedFastPathLocalPlan(Task *task,
DistributedPlan *distributedPlan);
extern void CacheFastPathPlanForShardQuery(Task *task,
DistributedPlan *originalDistributedPlan,
ParamListInfo paramListInfo);