示例#1
0
 StringBuffer &errorMessage(StringBuffer &str) const
 {
     if (!origin.length() || 0 != stricmp("user", origin.get())) // don't report slave in user message
     {
         if (graphId)
             str.append("Graph[").append(graphId).append("], ");
         if (kind)
             str.append(activityKindStr(kind));
         if (id)
         {
             if (kind) str.append('[');
             str.append(id);
             if (kind) str.append(']');
             str.append(": ");
         }
         if (node)
         {
             str.appendf("SLAVE #%d [", node);
             queryClusterGroup().queryNode(node).endpoint().getUrlStr(str);
             str.append("]: ");
         }
     }
     str.append(msg);
     return str;
 }
示例#2
0
 StringBuffer &errorMessage(StringBuffer &str) const
 {
     if (!origin.length() || 0 != stricmp("user", origin.get())) // don't report slave in user message
     {
         if (graphId)
             str.append("Graph ").append(graphName).append("[").append(graphId).append("], ");
         if (kind)
             str.append(activityKindStr(kind));
         if (id)
         {
             if (kind) str.append('[');
             str.append(id);
             if (kind) str.append(']');
             str.append(": ");
         }
         if (slave)
         {
             str.appendf("SLAVE #%d [", slave);
             queryClusterGroup().queryNode(slave).endpoint().getUrlStr(str);
             str.append("]: ");
         }
     }
     str.append(msg);
     if (originalException)
     {
         if (msg.length())
             str.append(" - ");
         str.append("caused by (");
         str.append(originalException->errorCode());
         str.append(", ");
         originalException->errorMessage(str);
         str.append(")");
     }
     return str;
 }
示例#3
0
CDiskPartHandlerBase::CDiskPartHandlerBase(CDiskReadSlaveActivityBase &_activity) 
    : activity(_activity)
{
    checkFileCrc = activity.checkFileCrc;
    which = 0;
    eoi = false;
    kindStr = activityKindStr(activity.queryContainer().getKind());
}
示例#4
0
 virtual void init(MemoryBuffer &data, MemoryBuffer &slaveData)
 {
     helper = static_cast <IHThorCatchArg *> (queryHelper());
     kindStr.append(activityKindStr(container.getKind()));
     kindStr.toUpperCase();
     eos = false;
     appendOutputLinked(this);
 }
示例#5
0
CDiskPartHandlerBase::CDiskPartHandlerBase(CDiskReadSlaveActivityBase &_activity) 
    : activity(_activity)
{
    checkFileCrc = activity.checkFileCrc;
    which = 0;
    eoi = false;
    kindStr = activityKindStr(activity.queryContainer().getKind());
    compressed = blockCompressed = firstInGroup = checkFileCrc = false;

}
 void start()
 {
     ActivityTimer s(totalCycles, timeActivities, NULL);
     dataLinkStart(activityKindStr(queryContainer().getKind()), container.queryId());
     input = inputs.item(0);
     unsigned spillPriority = container.queryGrouped() ? SPILL_PRIORITY_GROUPSORT : SPILL_PRIORITY_LARGESORT;
     iLoader.setown(createThorRowLoader(*this, queryRowInterfaces(input), iCompare, !unstable, rc_mixed, spillPriority));
     startInput(input);
     eoi = false;
     if (container.queryGrouped())
         out.setown(iLoader->loadGroup(input, abortSoon));
     else
         out.setown(iLoader->load(input, abortSoon));
     if (0 == iLoader->numRows())
         eoi = true;
 }
示例#7
0
StringBuffer &ActPrintLogArgsPrep(StringBuffer &res, const CGraphElementBase *container, const ActLogEnum flags, const char *format, va_list args)
{
    if (format)
        res.valist_appendf(format, args).append(" - ");
    res.appendf("activity(%s, %" ACTPF "d)",activityKindStr(container->getKind()), container->queryId());
    if (0 != (flags & thorlog_ecl))
    {
        StringBuffer ecltext;
        container->getEclText(ecltext);
        ecltext.trim();
        if (ecltext.length() > 0)
            res.append(" [ecl=").append(ecltext.str()).append(']');
    }
#ifdef _WIN32
#ifdef MEMLOG
    MEMORYSTATUS mS;
    GlobalMemoryStatus(&mS);
    res.appendf(", mem=%ld",mS.dwAvailPhys);
#endif
#endif
    return res;
}
    virtual CActivityBase *factory(ThorActivityKind kind)
    {
        CActivityBase *ret = NULL;
        switch (kind)
        {
            case TAKfiltergroup:
            case TAKlocalresultread:
            case TAKchildif:
            case TAKchildcase:
            case TAKdegroup:
            case TAKsplit:
            case TAKproject:
            case TAKprefetchproject:
            case TAKprefetchcountproject:
            case TAKxmlparse:
            case TAKchilditerator:
            case TAKlinkedrawiterator:
            case TAKcatch:
            case TAKsample:
            case TAKnormalize:
            case TAKnormalizechild:
            case TAKnormalizelinkedchild:
            case TAKinlinetable:
            case TAKpull:
            case TAKnull:
            case TAKpiperead:
            case TAKpipethrough:
            case TAKparse:
            case TAKchildaggregate:
            case TAKchildgroupaggregate:
            case TAKchildthroughnormalize:
            case TAKchildnormalize:
            case TAKapply:
            case TAKfunnel:
            case TAKcombine:
            case TAKregroup:
            case TAKsorted:
            case TAKnwayinput:
            case TAKnwayselect:
            case TAKnwaymerge:
            case TAKnwaymergejoin:
            case TAKnwayjoin:
            case TAKgraphloopresultread:
            case TAKstreamediterator:
            case TAKsoap_rowdataset:
            case TAKsoap_rowaction:
            case TAKsoap_datasetdataset:
            case TAKsoap_datasetaction:
            case TAKhttp_rowdataset:
            case TAKdistributed:
                ret = new CMasterActivity(this);
                break;
            case TAKskipcatch:
            case TAKcreaterowcatch:
                ret = createSkipCatchActivityMaster(this);
                break;
            case TAKdiskread:
            case TAKdisknormalize:
                ret = createDiskReadActivityMaster(this);
                break;
            case TAKdiskaggregate:
                ret = createDiskAggregateActivityMaster(this);
                break;
            case TAKdiskcount:
                ret = createDiskCountActivityMaster(this);
                break;
            case TAKdiskgroupaggregate:
                ret = createDiskGroupAggregateActivityMaster(this);
                break;  
            case TAKindexread:
                ret = createIndexReadActivityMaster(this);
                break;
            case TAKindexcount:
                ret = createIndexCountActivityMaster(this);
                break;
            case TAKindexnormalize:
                ret = createIndexNormalizeActivityMaster(this);
                break;
            case TAKindexaggregate:
                ret = createIndexAggregateActivityMaster(this);
                break;
            case TAKindexgroupaggregate:
            case TAKindexgroupexists:
            case TAKindexgroupcount:
                ret = createIndexGroupAggregateActivityMaster(this);
                break;
            case TAKdiskwrite:
                ret = createDiskWriteActivityMaster(this);
                break;
            case TAKcsvwrite:
                ret = createCsvWriteActivityMaster(this);
                break;
            case TAKspill:
                ret = createSpillActivityMaster(this);
                break;
            case TAKdedup:
            case TAKrollup:
            case TAKrollupgroup:
                ret = createDedupRollupActivityMaster(this);
                break;
            case TAKfilter:
            case TAKfilterproject:
                ret = createFilterActivityMaster(this);
                break;
            case TAKnonempty:
                ret = createNonEmptyActivityMaster(this);
                break;
            case TAKsort:
                ret = createSortActivityMaster(this);
                break;
            case TAKgroup:
                ret = createGroupActivityMaster(this);
                break;
            case TAKprocess:
            case TAKiterate:
                ret = createIterateActivityMaster(this);
                break;
            case TAKthroughaggregate:
                ret = createThroughAggregateActivityMaster(this);
                break;
            case TAKaggregate:
            case TAKexistsaggregate:
            case TAKcountaggregate:
                ret = createAggregateActivityMaster(this);
                break;
            case TAKhashdistribute:
            case TAKpartition:
                ret = createHashDistributeActivityMaster(this);
                break;
            case TAKhashaggregate:
                ret = createHashAggregateActivityMaster(this);
                break;
            case TAKhashjoin:
            case TAKhashdenormalize:
            case TAKhashdenormalizegroup:
                ret= createHashJoinActivityMaster(this);
                break;
            case TAKkeyeddistribute:
                ret = createKeyedDistributeActivityMaster(this);
                break;
            case TAKhashdistributemerge: 
                ret = createDistributeMergeActivityMaster(this);
                break;
            case TAKhashdedup:
                ret = createHashDedupMergeActivityMaster(this);
                break;
            case TAKfirstn:
                ret = createFirstNActivityMaster(this);
                break;
            case TAKjoin:
            case TAKselfjoin:
            case TAKselfjoinlight:
            case TAKdenormalize:
            case TAKdenormalizegroup:
                ret = createJoinActivityMaster(this);
                break;

            case TAKlookupjoin:
            case TAKalljoin:
            case TAKlookupdenormalize:
            case TAKlookupdenormalizegroup:
            case TAKsmartjoin:
            case TAKsmartdenormalize:
            case TAKsmartdenormalizegroup:
            case TAKalldenormalize:
            case TAKalldenormalizegroup:
                ret = createLookupJoinActivityMaster(this);
                break;
            case TAKkeyedjoin:
            case TAKkeyeddenormalize:
            case TAKkeyeddenormalizegroup:
                ret = createKeyedJoinActivityMaster(this);
                break;
            case TAKworkunitwrite:
                ret = createWorkUnitWriteActivityMaster(this);
                break;
            case TAKdictionaryworkunitwrite:
                ret = createDictionaryWorkunitWriteMaster(this);
                break;
            case TAKdictionaryresultwrite:
                if (!queryOwner().queryOwner() || queryOwner().isGlobal()) // don't need dictionary in master if in local child query
                    ret = createDictionaryResultActivityMaster(this);
                else
                    ret = new CMasterActivity(this);
                break;
                break;
            case TAKremoteresult:
                ret = createResultActivityMaster(this);
                break;
            case TAKselectn:
                ret = createSelectNthActivityMaster(this);
                break;
            case TAKenth:
                ret = createEnthActivityMaster(this);
                break;
            case TAKdistribution:
                ret = createDistributionActivityMaster(this);
                break;
            case TAKcountproject:
                ret = createCountProjectActivityMaster(this);
                break;
            case TAKchoosesets:
                ret = createChooseSetsActivityMaster(this);
                break;
            case TAKchoosesetsenth:
            case TAKchoosesetslast:
                ret = createChooseSetsPlusActivityMaster(this);
                break;
            case TAKpipewrite:
                ret = createPipeWriteActivityMaster(this);
                break;
            case TAKcsvread:
                ret = createCCsvReadActivityMaster(this);
                break;
            case TAKindexwrite:
                ret = createIndexWriteActivityMaster(this);
                break;
            case TAKfetch:
                ret = createFetchActivityMaster(this);
                break;
            case TAKcsvfetch:
                ret = createCsvFetchActivityMaster(this);
                break;
            case TAKxmlfetch:
                ret = createXmlFetchActivityMaster(this);
                break;
            case TAKworkunitread:
                ret = createWorkUnitActivityMaster(this);
                break;
            case TAKsideeffect:
                ret = createNullActionActivityMaster(this);
                break;
            case TAKsimpleaction:
                ret = createActionActivityMaster(this);
                break;
            case TAKtopn:
                ret = createTopNActivityMaster(this);
                break;
            case TAKxmlread:
                ret = createXmlReadActivityMaster(this);
                break;
            case TAKxmlwrite:
            case TAKjsonwrite:
                ret = createXmlWriteActivityMaster(this, kind);
                break;
            case TAKmerge:
                ret = createMergeActivityMaster(this);
                break;
            case TAKkeydiff:
                ret = createKeyDiffActivityMaster(this);
                break;
            case TAKkeypatch:
                ret = createKeyPatchActivityMaster(this);
                break;
            case TAKlimit:
            case TAKskiplimit:
            case TAKcreaterowlimit:
                ret = createLimitActivityMaster(this);
                break;
            case TAKlooprow:
            case TAKloopcount:
            case TAKloopdataset:
                ret = createLoopActivityMaster(this);
                break;
            case TAKgraphloop:
            case TAKparallelgraphloop:
                ret = createGraphLoopActivityMaster(this);
                break;
            case TAKlocalresultspill:
            case TAKlocalresultwrite:
                if (!queryOwner().queryOwner() || queryOwner().isGlobal()) // don't need result in master if in local child query
                    ret = createLocalResultActivityMaster(this);
                else
                    ret = new CMasterActivity(this);
                break;
            case TAKgraphloopresultwrite:
                ret = createGraphLoopResultActivityMaster(this);
                break;
            case TAKchilddataset:
                UNIMPLEMENTED;
            case TAKcase:           // gen. time.
            case TAKif:
            case TAKifaction:
                throwUnexpected();
            case TAKwhen_dataset:
                ret = createWhenActivityMaster(this);
                break;
            default:
                throw MakeActivityException(this, TE_UnsupportedActivityKind, "Unsupported activity kind: %s", activityKindStr(kind));
        }
        return ret;
    }
示例#9
0
 virtual CActivityBase *factory(ThorActivityKind kind)
 {
     CActivityBase *ret = NULL;
     switch (kind)
     {
         case TAKdiskread:
             ret = createDiskReadSlave(this);
             break;
         case TAKdisknormalize:
             ret = createDiskNormalizeSlave(this);
             break;
         case TAKdiskaggregate:
             ret = createDiskAggregateSlave(this);
             break;
         case TAKdiskcount:
             ret = createDiskCountSlave(this);
             break;
         case TAKdiskgroupaggregate:
             ret = createDiskGroupAggregateSlave(this);
             break;  
         case TAKindexread:
             ret = createIndexReadSlave(this);
             break;
         case TAKindexcount:
             ret = createIndexCountSlave(this);
             break;
         case TAKindexnormalize:
             ret = createIndexNormalizeSlave(this);
             break;
         case TAKindexaggregate:
             ret = createIndexAggregateSlave(this);
             break;
         case TAKindexgroupaggregate:
         case TAKindexgroupexists:
         case TAKindexgroupcount:
             ret = createIndexGroupAggregateSlave(this);
             break;
         case TAKchildaggregate:
             ret = createChildAggregateSlave(this);
             break;
         case TAKchildgroupaggregate:
             ret = createChildGroupAggregateSlave(this);
             break;
         case TAKchildthroughnormalize:
             ret = createChildThroughNormalizeSlave(this);
             break;
         case TAKchildnormalize:
             ret = createChildNormalizeSlave(this);
             break;
         case TAKspill:
             ret = createSpillSlave(this);
             break;
         case TAKdiskwrite:
             ret = createDiskWriteSlave(this);
             break;
         case TAKsort:
             if (queryGrouped())
                 ret = createGroupSortSlave(this);
             else if (queryLocal())
                 ret = createLocalSortSlave(this);
             else
                 ret = createMSortSlave(this);
             break;
         case TAKsorted:
             ret = createSortedSlave(this);
             break;
         case TAKdedup:
             if (queryGrouped())
                 ret = createGroupDedupSlave(this);
             else if (queryLocal())
                 ret = createLocalDedupSlave(this);
             else
                 ret = createDedupSlave(this);
             break;
         case TAKrollupgroup:
             ret = createRollupGroupSlave(this);
             break;
         case TAKrollup:
             if (queryGrouped())
                 ret = createGroupRollupSlave(this);
             else if (queryLocal())
                 ret = createLocalRollupSlave(this);
             else
                 ret = createRollupSlave(this);
             break;
         case TAKprocess:
             if (queryGrouped())
                 ret = createGroupProcessSlave(this);
             else if (queryLocal())
                 ret = createLocalProcessSlave(this);
             else
                 ret = createProcessSlave(this);
             break;
         case TAKfilter:
             ret = createFilterSlave(this);
             break;
         case TAKfilterproject:
             ret = createFilterProjectSlave(this);
             break;
         case TAKfiltergroup:
             ret = createFilterGroupSlave(this);
             break;
         case TAKsplit:
             ret = createNSplitterSlave(this);
             break;
         case TAKproject:
             ret = createProjectSlave(this);
             break;
         case TAKprefetchproject:
             ret = createPrefetchProjectSlave(this);
             break;
         case TAKprefetchcountproject:
             break;
         case TAKiterate:
             if (queryGrouped())
                 ret = createGroupIterateSlave(this);
             else if (queryLocal())
                 ret = createLocalIterateSlave(this);
             else
                 ret = createIterateSlave(this);
             break;
         case TAKaggregate:
         case TAKexistsaggregate:
         case TAKcountaggregate:
             if (queryLocalOrGrouped())
                 ret = createGroupAggregateSlave(this);
             else
                 ret = createAggregateSlave(this);
             break;
         case TAKhashaggregate:
             ret = createHashAggregateSlave(this);
             break;
         case TAKfirstn:
             ret = createFirstNSlave(this);
             break;
         case TAKsample:
             ret = createSampleSlave(this);
             break;
         case TAKdegroup:
             ret = createDegroupSlave(this);
             break;
         case TAKjoin:
             if (queryLocalOrGrouped())
                 ret = createLocalJoinSlave(this);
             else
                 ret = createJoinSlave(this);
             break;
         case TAKhashjoin:
         case TAKhashdenormalize:
         case TAKhashdenormalizegroup:
             ret = createHashJoinSlave(this);
             break;
         case TAKlookupjoin:
             ret = createLookupJoinSlave(this);
             break;
         case TAKalljoin:
             ret = createAllJoinSlave(this);
             break;
         case TAKselfjoin:
             if (queryLocalOrGrouped())
                 ret = createLocalSelfJoinSlave(this);
             else
                 ret = createSelfJoinSlave(this);
             break;
         case TAKselfjoinlight:
             ret = createLightweightSelfJoinSlave(this);
             break;
         case TAKkeyedjoin:
         case TAKkeyeddenormalize:
         case TAKkeyeddenormalizegroup:
             ret = createKeyedJoinSlave(this);
             break;
         case TAKgroup:
             if (queryLocalOrGrouped())
                 ret = createLocalGroupSlave(this);
             else
                 ret = createGroupSlave(this);
             break;
         case TAKworkunitwrite:
             ret = createWorkUnitWriteSlave(this);
             break;
         case TAKfunnel:
             ret = createFunnelSlave(this);
             break;
         case TAKcombine:
             ret = createCombineSlave(this);
             break;
         case TAKregroup:
             ret = createRegroupSlave(this);
             break;
         case TAKapply:
             ret = createApplySlave(this);
             break;
         case TAKtemptable:
         case TAKtemprow:
             ret = createTempTableSlave(this);
             break;
         case TAKkeyeddistribute:
             ret = createIndexDistributeSlave(this);
             break;
         case TAKhashdistribute:
             ret = createHashDistributeSlave(this);
             break;
         case TAKhashdistributemerge:
             ret = createHashDistributeMergeSlave(this);
             break;
         case TAKhashdedup:
             if (queryLocalOrGrouped())
                 ret = createHashLocalDedupSlave(this);
             else
                 ret = createHashDedupSlave(this);
             break;
         case TAKnormalize:
             ret = createNormalizeSlave(this);
             break;
         case TAKnormalizechild:
             ret = createNormalizeChildSlave(this);
             break;
         case TAKnormalizelinkedchild:
             ret = createNormalizeLinkedChildSlave(this);
             break;
         case TAKremoteresult:
             ret = createResultSlave(this);
             break;
         case TAKpull:
             ret = createPullSlave(this);
             break;
         case TAKdenormalize:
         case TAKdenormalizegroup:
             if (queryLocalOrGrouped())
                 ret = createLocalDenormalizeSlave(this);
             else
                 ret = createDenormalizeSlave(this);
             break;
         case TAKnwayinput:
             ret = createNWayInputSlave(this);
             break;
         case TAKnwayselect:
             ret = createNWaySelectSlave(this);
             break;
         case TAKnwaymerge:
             ret = createNWayMergeActivity(this);
             break;
         case TAKnwaymergejoin:
         case TAKnwayjoin:
             ret = createNWayMergeJoinActivity(this);
             break;
         case TAKalldenormalize:
         case TAKalldenormalizegroup:
             ret = createAllDenormalizeSlave(this);
             break;
         case TAKlookupdenormalize:
         case TAKlookupdenormalizegroup:
             ret = createLookupDenormalizeSlave(this);
             break;
         case TAKchilddataset:
             UNIMPLEMENTED;
         case TAKchilditerator:
             ret = createChildIteratorSlave(this);
             break;
         case TAKrawiterator:
             ret = createRawIteratorSlave(this);
             break;
         case TAKlinkedrawiterator:
             ret = createLinkedRawIteratorSlave(this);
             break;
         case TAKselectn:
             if (queryLocalOrGrouped())
                 ret = createLocalSelectNthSlave(this);
             else
                 ret = createSelectNthSlave(this);
             break;
         case TAKenth:
             if (queryLocalOrGrouped())
                 ret = createLocalEnthSlave(this);
             else
                 ret = createEnthSlave(this);
             break;
         case TAKnull:
             ret = createNullSlave(this);
             break;
         case TAKdistribution:
             ret = createDistributionSlave(this);
             break;
         case TAKcountproject:
             if (queryLocalOrGrouped())
                 ret = createLocalCountProjectSlave(this);
             else
                 ret = createCountProjectSlave(this);
             break;
         case TAKchoosesets:
             if (queryLocalOrGrouped())
                 ret = createLocalChooseSetsSlave(this);
             else
                 ret = createChooseSetsSlave(this);
             break;
         case TAKpiperead:
             ret = createPipeReadSlave(this);
             break;
         case TAKpipewrite:
             ret = createPipeWriteSlave(this);
             break;
         case TAKcsvread:
             ret = createCsvReadSlave(this);
             break;
         case TAKcsvwrite:
             ret = createCsvWriteSlave(this);
             break;
         case TAKpipethrough:
             ret = createPipeThroughSlave(this);
             break;
         case TAKindexwrite:
             ret = createIndexWriteSlave(this);
             break;
         case TAKchoosesetsenth:
             ret = createChooseSetsEnthSlave(this);
             break;
         case TAKchoosesetslast:
             ret = createChooseSetsLastSlave(this);
             break;
         case TAKfetch:
             ret = createFetchSlave(this);
             break;
         case TAKcsvfetch:
             ret = createCsvFetchSlave(this);
             break;
         case TAKxmlfetch:
             ret = createXmlFetchSlave(this);
             break;
         case TAKthroughaggregate:
             ret = createThroughAggregateSlave(this);
             break;
         case TAKcase:
         case TAKif:
             throwUnexpected();
             break;
         case TAKwhen_dataset:
             ret = createWhenSlave(this);
             break;
         case TAKworkunitread:
         {
             if (wuidread2diskread)
             {
                 Owned<IHThorDiskReadArg> diskReadHelper = createWorkUnitReadArg(wuidreadFilename, (IHThorWorkunitReadArg *)LINK(baseHelper));
                 Owned<CActivityBase> retAct = createDiskReadSlave(this, diskReadHelper);
                 return retAct.getClear();
             }
             else
                 ret = createWuidReadSlave(this);
             break;
         }
         case TAKparse:
             ret = createParseSlave(this);
             break;
         case TAKsideeffect:
             ret = createNullActionSlave(this);
             break;
         case TAKsimpleaction:
             ret = createNullSlave(this);
             break;
         case TAKtopn:
             if (queryGrouped())
                 ret = createGroupedTopNSlave(this);
             else if (queryLocal())
                 ret = createLocalTopNSlave(this);
             else
                 ret = createGlobalTopNSlave(this);
             break;
         case TAKxmlparse:
             ret = createXmlParseSlave(this);
             break;
         case TAKxmlread:
             ret = createXmlReadSlave(this);
             break;
         case TAKxmlwrite:
             ret = createXmlWriteSlave(this);
             break;
         case TAKmerge:
             if (queryLocalOrGrouped())
                 ret = createLocalMergeSlave(this);
             else
                 ret = createGlobalMergeSlave(this);
             break;
         case TAKsoap_rowdataset:
             ret = createSoapRowCallSlave(this);
             break;
         case TAKsoap_rowaction:
             ret = createSoapRowActionSlave(this);
             break;
         case TAKsoap_datasetdataset:
             ret = createSoapDatasetCallSlave(this);
             break;
         case TAKsoap_datasetaction:
             ret = createSoapDatasetActionSlave(this);
             break;
         case TAKcountdisk:
             return new CSlaveActivity(this); 
         case TAKkeydiff:
             ret = createKeyDiffSlave(this);
             break;
         case TAKkeypatch:
             ret = createKeyPatchSlave(this);
             break;
         case TAKlimit:
             ret = createLimitSlave(this);
             break;
         case TAKskiplimit:
             ret = createSkipLimitSlave(this);
             break;
         case TAKcreaterowlimit:
             ret = createRowLimitSlave(this);
             break;
         case TAKnonempty:
             ret = createNonEmptySlave(this);
             break;
         case TAKlocalresultread:
             ret = createLocalResultReadSlave(this);
             break;
         case TAKlocalresultwrite:
             ret = createLocalResultWriteSlave(this);
             break;
         case TAKlocalresultspill:
             ret = createLocalResultSpillSlave(this);
             break;
         case TAKchildif:
             ret = createIfSlave(this);
             break;
         case TAKcatch:
         case TAKskipcatch:
         case TAKcreaterowcatch:
             ret = createCatchSlave(this);
             break;
         case TAKlooprow:
         case TAKloopcount:
         case TAKloopdataset:
             ret = createLoopSlave(this);
             break;
         case TAKgraphloop:
         case TAKparallelgraphloop:
             ret = createGraphLoopSlave(this);
             break;
         case TAKgraphloopresultread:
             ret = createGraphLoopResultReadSlave(this);
             break;
         case TAKgraphloopresultwrite:
             ret = createGraphLoopResultWriteSlave(this);
             break;
         case TAKstreamediterator:
             ret = createStreamedIteratorSlave(this);
             break;
         case TAKifaction:
             ret = createIfActionSlave(this);
             break;
         default:
             throw MakeStringException(TE_UnsupportedActivityKind, "Unsupported activity kind: %s", activityKindStr(kind));
     }
     return ret;
 }