MCPcopy Create free account
hub / github.com/apache/cloudberry / FillSliceGangInfo

Function FillSliceGangInfo

src/backend/executor/execUtils.c:1591–1653  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1589
1590
1591static void
1592FillSliceGangInfo(ExecSlice *slice, PlanSlice *ps)
1593{
1594 int factor = ps->parallel_workers ? ps->parallel_workers : 1;
1595 int numsegments = ps->numsegments;
1596
1597 DirectDispatchInfo *dd = &ps->directDispatch;
1598
1599 slice->useMppParallelMode = (ps->parallel_workers != 0);
1600 slice->parallel_workers = factor;
1601 switch (slice->gangType)
1602 {
1603 case GANGTYPE_UNALLOCATED:
1604 /*
1605 * It's either the root slice or an InitPlan slice that runs in
1606 * the QD process, or really unused slice.
1607 */
1608 /* CBDB_PARALLEL_FIXME: QD process should never be parallel, do we need to plus factor? */
1609 slice->planNumSegments = 1;
1610 break;
1611 case GANGTYPE_PRIMARY_WRITER:
1612 case GANGTYPE_PRIMARY_READER:
1613 slice->planNumSegments = numsegments * factor;
1614 if (dd->isDirectDispatch)
1615 {
1616 int i;
1617 ListCell *lc;
1618
1619 foreach(lc, dd->contentIds)
1620 {
1621 int segment = lfirst_int(lc);
1622 for (i = 0; i < factor; i++)
1623 slice->segments = lappend_int(slice->segments, segment);
1624 }
1625 }
1626 else
1627 {
1628 int i, j;
1629 slice->segments = NIL;
1630 for (i = 0; i < numsegments; i++)
1631 for (j = 0; j < factor; j++)
1632 slice->segments = lappend_int(slice->segments, i % getgpsegmentCount());
1633 }
1634 break;
1635 case GANGTYPE_ENTRYDB_READER:
1636 /* CBDB_PARALLEL_FIXME: QD parallel is disabled */
1637 slice->planNumSegments = 1;
1638 slice->segments = list_make1_int(-1);
1639 break;
1640 case GANGTYPE_SINGLETON_READER:
1641 /*
1642 * CBDB_PARALLEL_FIXME:
1643 * Could be parallel, parallel scan on replica tables.
1644 */
1645 slice->planNumSegments = 1 * factor;
1646 int i;
1647 for (i = 0; i < factor; i++)
1648 slice->segments = lappend_int(slice->segments, ps->segindex);

Callers 1

InitSliceTableFunction · 0.85

Calls 3

lappend_intFunction · 0.85
getgpsegmentCountFunction · 0.85
foreachFunction · 0.50

Tested by

no test coverage detected