mirror of https://github.com/citusdata/citus.git
CreateDistributedInsertSelectPlan: avoid calling GetCitusTableCacheEntry in a way that would invalidate live ShardInterval pointers
parent
1d0f4bdcd2
commit
c00d57a955
|
@ -53,6 +53,7 @@ static DistributedPlan * CreateDistributedInsertSelectPlan(Query *originalQuery,
|
||||||
PlannerRestrictionContext *
|
PlannerRestrictionContext *
|
||||||
plannerRestrictionContext);
|
plannerRestrictionContext);
|
||||||
static Task * RouterModifyTaskForShardInterval(Query *originalQuery,
|
static Task * RouterModifyTaskForShardInterval(Query *originalQuery,
|
||||||
|
CitusTableCacheEntry *targetTableCacheEntry,
|
||||||
ShardInterval *shardInterval,
|
ShardInterval *shardInterval,
|
||||||
PlannerRestrictionContext *
|
PlannerRestrictionContext *
|
||||||
plannerRestrictionContext,
|
plannerRestrictionContext,
|
||||||
|
@ -259,6 +260,7 @@ CreateDistributedInsertSelectPlan(Query *originalQuery,
|
||||||
targetCacheEntry->sortedShardIntervalArray[shardOffset];
|
targetCacheEntry->sortedShardIntervalArray[shardOffset];
|
||||||
|
|
||||||
Task *modifyTask = RouterModifyTaskForShardInterval(originalQuery,
|
Task *modifyTask = RouterModifyTaskForShardInterval(originalQuery,
|
||||||
|
targetCacheEntry,
|
||||||
targetShardInterval,
|
targetShardInterval,
|
||||||
plannerRestrictionContext,
|
plannerRestrictionContext,
|
||||||
taskIdIndex,
|
taskIdIndex,
|
||||||
|
@ -415,7 +417,9 @@ DistributedInsertSelectSupported(Query *queryTree, RangeTblEntry *insertRte,
|
||||||
* subqueries with non equi-joins.).
|
* subqueries with non equi-joins.).
|
||||||
*/
|
*/
|
||||||
static Task *
|
static Task *
|
||||||
RouterModifyTaskForShardInterval(Query *originalQuery, ShardInterval *shardInterval,
|
RouterModifyTaskForShardInterval(Query *originalQuery,
|
||||||
|
CitusTableCacheEntry *targetTableCacheEntry,
|
||||||
|
ShardInterval *shardInterval,
|
||||||
PlannerRestrictionContext *plannerRestrictionContext,
|
PlannerRestrictionContext *plannerRestrictionContext,
|
||||||
uint32 taskIdIndex,
|
uint32 taskIdIndex,
|
||||||
bool safeToPushdownSubquery,
|
bool safeToPushdownSubquery,
|
||||||
|
@ -428,7 +432,6 @@ RouterModifyTaskForShardInterval(Query *originalQuery, ShardInterval *shardInter
|
||||||
|
|
||||||
uint64 shardId = shardInterval->shardId;
|
uint64 shardId = shardInterval->shardId;
|
||||||
Oid distributedTableId = shardInterval->relationId;
|
Oid distributedTableId = shardInterval->relationId;
|
||||||
CitusTableCacheEntry *cacheEntry = GetCitusTableCacheEntry(distributedTableId);
|
|
||||||
|
|
||||||
PlannerRestrictionContext *copyOfPlannerRestrictionContext = palloc0(
|
PlannerRestrictionContext *copyOfPlannerRestrictionContext = palloc0(
|
||||||
sizeof(PlannerRestrictionContext));
|
sizeof(PlannerRestrictionContext));
|
||||||
|
@ -584,7 +587,7 @@ RouterModifyTaskForShardInterval(Query *originalQuery, ShardInterval *shardInter
|
||||||
modifyTask->anchorShardId = shardId;
|
modifyTask->anchorShardId = shardId;
|
||||||
modifyTask->taskPlacementList = insertShardPlacementList;
|
modifyTask->taskPlacementList = insertShardPlacementList;
|
||||||
modifyTask->relationShardList = relationShardList;
|
modifyTask->relationShardList = relationShardList;
|
||||||
modifyTask->replicationModel = cacheEntry->replicationModel;
|
modifyTask->replicationModel = targetTableCacheEntry->replicationModel;
|
||||||
|
|
||||||
return modifyTask;
|
return modifyTask;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue