mirror of https://github.com/citusdata/citus.git
Stray depended to dependent tidy up
parent
0b71697d88
commit
5fcc169a3a
|
@ -254,9 +254,9 @@ ExplainJob(Job *job, ExplainState *es)
|
|||
}
|
||||
else
|
||||
{
|
||||
ExplainOpenGroup("Depended Jobs", "Depended Jobs", false, es);
|
||||
ExplainOpenGroup("Dependent Jobs", "Dependent Jobs", false, es);
|
||||
|
||||
/* show explain output for depended jobs, if any */
|
||||
/* show explain output for dependent jobs, if any */
|
||||
foreach(dependentJobCell, dependentJobList)
|
||||
{
|
||||
Job *dependentJob = (Job *) lfirst(dependentJobCell);
|
||||
|
@ -267,7 +267,7 @@ ExplainJob(Job *job, ExplainState *es)
|
|||
}
|
||||
}
|
||||
|
||||
ExplainCloseGroup("Depended Jobs", "Depended Jobs", false, es);
|
||||
ExplainCloseGroup("Dependent Jobs", "Dependent Jobs", false, es);
|
||||
}
|
||||
|
||||
ExplainCloseGroup("Job", "Job", true, es);
|
||||
|
@ -302,7 +302,7 @@ ExplainMapMergeJob(MapMergeJob *mapMergeJob, ExplainState *es)
|
|||
|
||||
if (dependentJobCount > 0)
|
||||
{
|
||||
ExplainOpenGroup("Depended Jobs", "Depended Jobs", false, es);
|
||||
ExplainOpenGroup("Dependent Jobs", "Dependent Jobs", false, es);
|
||||
|
||||
foreach(dependentJobCell, dependentJobList)
|
||||
{
|
||||
|
@ -314,7 +314,7 @@ ExplainMapMergeJob(MapMergeJob *mapMergeJob, ExplainState *es)
|
|||
}
|
||||
}
|
||||
|
||||
ExplainCloseGroup("Depended Jobs", "Depended Jobs", false, es);
|
||||
ExplainCloseGroup("Dependent Jobs", "Dependent Jobs", false, es);
|
||||
}
|
||||
|
||||
ExplainCloseGroup("MapMergeJob", NULL, true, es);
|
||||
|
|
|
@ -188,7 +188,7 @@ static int CompareTasksByShardId(const void *leftElement, const void *rightEleme
|
|||
static List * ActiveShardPlacementLists(List *taskList);
|
||||
static List * ActivePlacementList(List *placementList);
|
||||
static List * LeftRotateList(List *list, uint32 rotateCount);
|
||||
static List * FindDependedMergeTaskList(Task *sqlTask);
|
||||
static List * FindDependentMergeTaskList(Task *sqlTask);
|
||||
static List * AssignDualHashTaskList(List *taskList);
|
||||
static void AssignDataFetchDependencies(List *taskList);
|
||||
static uint32 TaskListHighestTaskId(List *taskList);
|
||||
|
@ -218,7 +218,7 @@ DistributedPlan *
|
|||
CreatePhysicalDistributedPlan(MultiTreeRoot *multiTree,
|
||||
PlannerRestrictionContext *plannerRestrictionContext)
|
||||
{
|
||||
/* build the worker job tree and check that we only one job in the tree */
|
||||
/* build the worker job tree and check that we only have one job in the tree */
|
||||
Job *workerJob = BuildJobTree(multiTree);
|
||||
|
||||
/* create the tree of executable tasks for the worker job */
|
||||
|
@ -384,7 +384,7 @@ BuildJobTree(MultiTreeRoot *multiTree)
|
|||
baseRelationId,
|
||||
JOIN_MAP_MERGE_JOB);
|
||||
|
||||
/* reset depended job list */
|
||||
/* reset dependent job list */
|
||||
loopDependentJobList = NIL;
|
||||
loopDependentJobList = list_make1(mapMergeJob);
|
||||
}
|
||||
|
@ -405,7 +405,7 @@ BuildJobTree(MultiTreeRoot *multiTree)
|
|||
baseRelationId,
|
||||
JOIN_MAP_MERGE_JOB);
|
||||
|
||||
/* append to the depended job list for on-going dependencies */
|
||||
/* append to the dependent job list for on-going dependencies */
|
||||
loopDependentJobList = lappend(loopDependentJobList, mapMergeJob);
|
||||
}
|
||||
}
|
||||
|
@ -429,7 +429,7 @@ BuildJobTree(MultiTreeRoot *multiTree)
|
|||
list_make1(mapMergeJob));
|
||||
mapMergeJob->reduceQuery = reduceQuery;
|
||||
|
||||
/* reset depended job list */
|
||||
/* reset dependent job list */
|
||||
loopDependentJobList = NIL;
|
||||
loopDependentJobList = list_make1(mapMergeJob);
|
||||
}
|
||||
|
@ -566,7 +566,7 @@ FindTableNode(MultiNode *multiNode, int rangeTableId)
|
|||
/*
|
||||
* BuildJobQuery traverses the given logical plan tree, determines the job that
|
||||
* corresponds to this part of the tree, and builds the query structure for that
|
||||
* particular job. The function assumes that jobs, this particular job depends on,
|
||||
* particular job. The function assumes that jobs this particular job depends on
|
||||
* have already been built, as their output is needed to build the query.
|
||||
*/
|
||||
static Query *
|
||||
|
@ -736,8 +736,8 @@ BuildReduceQuery(MultiExtendedOp *extendedOpNode, List *dependentJobList)
|
|||
List *columnNameList = NIL;
|
||||
|
||||
Job *dependentJob = linitial(dependentJobList);
|
||||
List *dependedTargetList = dependentJob->jobQuery->targetList;
|
||||
uint32 columnCount = (uint32) list_length(dependedTargetList);
|
||||
List *dependentTargetList = dependentJob->jobQuery->targetList;
|
||||
uint32 columnCount = (uint32) list_length(dependentTargetList);
|
||||
|
||||
for (uint32 columnIndex = 0; columnIndex < columnCount; columnIndex++)
|
||||
{
|
||||
|
@ -1146,7 +1146,7 @@ QueryJoinTree(MultiNode *multiNode, List *dependentJobList, List **rangeTableLis
|
|||
|
||||
/*
|
||||
* PostgreSQL's optimizer may mark left joins as anti-joins, when there
|
||||
* is an right-hand-join-key-is-null restriction, but there is no logic
|
||||
* is a right-hand-join-key-is-null restriction, but there is no logic
|
||||
* in ruleutils to deparse anti-joins, so we cannot construct a task
|
||||
* query containing anti-joins. We therefore translate anti-joins back
|
||||
* into left-joins. At some point, we may also want to use different
|
||||
|
@ -1211,10 +1211,10 @@ QueryJoinTree(MultiNode *multiNode, List *dependentJobList, List **rangeTableLis
|
|||
{
|
||||
List *tableIdList = OutputTableIdList(multiNode);
|
||||
Job *dependentJob = JobForTableIdList(dependentJobList, tableIdList);
|
||||
List *dependedTargetList = dependentJob->jobQuery->targetList;
|
||||
List *dependentTargetList = dependentJob->jobQuery->targetList;
|
||||
|
||||
/* compute column names for the derived table */
|
||||
uint32 columnCount = (uint32) list_length(dependedTargetList);
|
||||
uint32 columnCount = (uint32) list_length(dependentTargetList);
|
||||
List *columnNameList = DerivedColumnNameList(columnCount,
|
||||
dependentJob->jobId);
|
||||
|
||||
|
@ -1645,7 +1645,7 @@ NewTableId(Index originalTableId, List *rangeTableList)
|
|||
* built. In this query, the original columnId corresponds to the column in base
|
||||
* tables. When the current query is a partition job and generates intermediate
|
||||
* tables, the columns have a different order and the new columnId corresponds
|
||||
* to this order. Please note that this function assumes columnIds for depended
|
||||
* to this order. Please note that this function assumes columnIds for dependent
|
||||
* jobs have already been updated.
|
||||
*/
|
||||
static AttrNumber
|
||||
|
@ -1852,7 +1852,7 @@ UniqueJobId(void)
|
|||
}
|
||||
|
||||
|
||||
/* Builds a job from the given job query and depended job list. */
|
||||
/* Builds a job from the given job query and dependent job list. */
|
||||
static Job *
|
||||
BuildJob(Query *jobQuery, List *dependentJobList)
|
||||
{
|
||||
|
@ -1867,7 +1867,7 @@ BuildJob(Query *jobQuery, List *dependentJobList)
|
|||
|
||||
|
||||
/*
|
||||
* BuildMapMergeJob builds a MapMerge job from the given query and depended job
|
||||
* BuildMapMergeJob builds a MapMerge job from the given query and dependent job
|
||||
* list. The function then copies and updates the logical plan's partition
|
||||
* column, and uses the join rule type to determine the physical repartitioning
|
||||
* method to apply.
|
||||
|
@ -2065,7 +2065,7 @@ BuildJobTreeTaskList(Job *jobTree, PlannerRestrictionContext *plannerRestriction
|
|||
foreach(assignedSqlTaskCell, assignedSqlTaskList)
|
||||
{
|
||||
Task *assignedSqlTask = (Task *) lfirst(assignedSqlTaskCell);
|
||||
List *assignedMergeTaskList = FindDependedMergeTaskList(assignedSqlTask);
|
||||
List *assignedMergeTaskList = FindDependentMergeTaskList(assignedSqlTask);
|
||||
|
||||
AssignDataFetchDependencies(assignedMergeTaskList);
|
||||
}
|
||||
|
@ -2980,10 +2980,10 @@ RangeTableFragmentsList(List *rangeTableList, List *whereClauseList,
|
|||
Job *dependentJob = JobForRangeTable(dependentJobList, rangeTableEntry);
|
||||
Assert(CitusIsA(dependentJob, MapMergeJob));
|
||||
|
||||
MapMergeJob *dependedMapMergeJob = (MapMergeJob *) dependentJob;
|
||||
List *mergeTaskList = dependedMapMergeJob->mergeTaskList;
|
||||
MapMergeJob *dependentMapMergeJob = (MapMergeJob *) dependentJob;
|
||||
List *mergeTaskList = dependentMapMergeJob->mergeTaskList;
|
||||
|
||||
/* if there are no tasks for the depended job, just return NIL */
|
||||
/* if there are no tasks for the dependent job, just return NIL */
|
||||
if (mergeTaskList == NIL)
|
||||
{
|
||||
return NIL;
|
||||
|
@ -4624,7 +4624,7 @@ AssignTaskList(List *sqlTaskList)
|
|||
foreach(sqlTaskCell, sqlTaskList)
|
||||
{
|
||||
Task *sqlTask = (Task *) lfirst(sqlTaskCell);
|
||||
List *mergeTaskList = FindDependedMergeTaskList(sqlTask);
|
||||
List *mergeTaskList = FindDependentMergeTaskList(sqlTask);
|
||||
|
||||
Task *firstMergeTask = (Task *) linitial(mergeTaskList);
|
||||
if (!firstMergeTask->assignmentConstrained)
|
||||
|
@ -4648,7 +4648,7 @@ AssignTaskList(List *sqlTaskList)
|
|||
foreach(primarySqlTaskCell, primarySqlTaskList)
|
||||
{
|
||||
Task *sqlTask = (Task *) lfirst(primarySqlTaskCell);
|
||||
List *mergeTaskList = FindDependedMergeTaskList(sqlTask);
|
||||
List *mergeTaskList = FindDependentMergeTaskList(sqlTask);
|
||||
|
||||
ListCell *mergeTaskCell = NULL;
|
||||
foreach(mergeTaskCell, mergeTaskList)
|
||||
|
@ -4674,7 +4674,7 @@ AssignTaskList(List *sqlTaskList)
|
|||
foreach(constrainedSqlTaskCell, constrainedSqlTaskList)
|
||||
{
|
||||
Task *sqlTask = (Task *) lfirst(constrainedSqlTaskCell);
|
||||
List *mergeTaskList = FindDependedMergeTaskList(sqlTask);
|
||||
List *mergeTaskList = FindDependentMergeTaskList(sqlTask);
|
||||
List *mergeTaskPlacementList = NIL;
|
||||
|
||||
ListCell *mergeTaskCell = NULL;
|
||||
|
@ -5285,14 +5285,14 @@ LeftRotateList(List *list, uint32 rotateCount)
|
|||
|
||||
|
||||
/*
|
||||
* FindDependedMergeTaskList walks over the given task's depended task list,
|
||||
* FindDependentMergeTaskList walks over the given task's dependent task list,
|
||||
* finds the merge tasks in the list, and returns those found tasks in a new
|
||||
* list.
|
||||
*/
|
||||
static List *
|
||||
FindDependedMergeTaskList(Task *sqlTask)
|
||||
FindDependentMergeTaskList(Task *sqlTask)
|
||||
{
|
||||
List *dependedMergeTaskList = NIL;
|
||||
List *dependentMergeTaskList = NIL;
|
||||
List *dependentTaskList = sqlTask->dependentTaskList;
|
||||
|
||||
ListCell *dependentTaskCell = NULL;
|
||||
|
@ -5301,11 +5301,11 @@ FindDependedMergeTaskList(Task *sqlTask)
|
|||
Task *dependentTask = (Task *) lfirst(dependentTaskCell);
|
||||
if (dependentTask->taskType == MERGE_TASK)
|
||||
{
|
||||
dependedMergeTaskList = lappend(dependedMergeTaskList, dependentTask);
|
||||
dependentMergeTaskList = lappend(dependentMergeTaskList, dependentTask);
|
||||
}
|
||||
}
|
||||
|
||||
return dependedMergeTaskList;
|
||||
return dependentMergeTaskList;
|
||||
}
|
||||
|
||||
|
||||
|
@ -5422,7 +5422,7 @@ AssignDataFetchDependencies(List *taskList)
|
|||
* TaskListHighestTaskId walks over tasks in the given task list, finds the task
|
||||
* that has the largest taskId, and returns that taskId.
|
||||
*
|
||||
* Note: This function assumes that the depended taskId's are set before the
|
||||
* Note: This function assumes that the dependent taskId's are set before the
|
||||
* taskId's for the given task list.
|
||||
*/
|
||||
static uint32
|
||||
|
|
|
@ -995,11 +995,11 @@ EXPLAIN (COSTS FALSE, FORMAT JSON)
|
|||
"Job": {
|
||||
"Task Count": 1,
|
||||
"Tasks Shown": "None, not supported for re-partition queries",
|
||||
"Depended Jobs": [
|
||||
"Dependent Jobs": [
|
||||
{
|
||||
"Map Task Count": 1,
|
||||
"Merge Task Count": 1,
|
||||
"Depended Jobs": [
|
||||
"Dependent Jobs": [
|
||||
{
|
||||
"Map Task Count": 2,
|
||||
"Merge Task Count": 1
|
||||
|
@ -1044,18 +1044,18 @@ EXPLAIN (COSTS FALSE, FORMAT XML)
|
|||
<Job>
|
||||
<Task-Count>1</Task-Count>
|
||||
<Tasks-Shown>None, not supported for re-partition queries</Tasks-Shown>
|
||||
<Depended-Jobs>
|
||||
<Dependent-Jobs>
|
||||
<MapMergeJob>
|
||||
<Map-Task-Count>1</Map-Task-Count>
|
||||
<Merge-Task-Count>1</Merge-Task-Count>
|
||||
<Depended-Jobs>
|
||||
<Dependent-Jobs>
|
||||
<MapMergeJob>
|
||||
<Map-Task-Count>2</Map-Task-Count>
|
||||
<Merge-Task-Count>1</Merge-Task-Count>
|
||||
</MapMergeJob>
|
||||
</Depended-Jobs>
|
||||
</Dependent-Jobs>
|
||||
</MapMergeJob>
|
||||
</Depended-Jobs>
|
||||
</Dependent-Jobs>
|
||||
</Job>
|
||||
</Distributed-Query>
|
||||
</Plan>
|
||||
|
@ -1103,7 +1103,7 @@ EXPLAIN (COSTS FALSE, FORMAT YAML)
|
|||
Job:
|
||||
Task Count: 1
|
||||
Tasks Shown: "None, not supported for re-partition queries"
|
||||
Depended Jobs:
|
||||
Dependent Jobs:
|
||||
- Map Task Count: 2
|
||||
Merge Task Count: 1
|
||||
-- test parallel aggregates
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
--
|
||||
-- Tests which cover task assignment for MapMerge jobs for single range repartition
|
||||
-- and dual hash repartition joins. The tests also cover task assignment propagation
|
||||
-- from a sql task to its depended tasks. Note that we set the executor type to task
|
||||
-- from a sql task to its dependent tasks. Note that we set the executor type to task
|
||||
-- tracker executor here, as we cannot run repartition jobs with real time executor.
|
||||
SET citus.next_shard_id TO 710000;
|
||||
BEGIN;
|
||||
|
|
|
@ -174,7 +174,7 @@ test: multi_outer_join
|
|||
# functionality related to metadata, shard creation, shard pruning and
|
||||
# "hacky" copy script for hash partitioned tables.
|
||||
# Note that the order of the following tests are important. multi_complex_count_distinct
|
||||
# is independed from the rest of the group, it is added to increase parallelism.
|
||||
# is independent from the rest of the group, it is added to increase parallelism.
|
||||
# ---
|
||||
test: multi_create_fdw
|
||||
test: multi_complex_count_distinct multi_select_distinct
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
--
|
||||
-- Tests which cover task assignment for MapMerge jobs for single range repartition
|
||||
-- and dual hash repartition joins. The tests also cover task assignment propagation
|
||||
-- from a sql task to its depended tasks. Note that we set the executor type to task
|
||||
-- from a sql task to its dependent tasks. Note that we set the executor type to task
|
||||
-- tracker executor here, as we cannot run repartition jobs with real time executor.
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue