Skip to content

Commit

Permalink
Merge pull request hpcc-systems#1986 from ghalliday/hthorallocator
Browse files Browse the repository at this point in the history
Fix problems with hthor not caching allocators

Reviewed-By: Richard Chapman <rchapman@hpccsystems.com>
  • Loading branch information
richardkchapman committed Mar 27, 2012
2 parents 0e49e7e + b19674f commit c347d0b
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 6 deletions.
2 changes: 2 additions & 0 deletions ecl/eclagent/eclagent.ipp
Expand Up @@ -717,6 +717,8 @@ protected:
IAgentContext & agent; IAgentContext & agent;
Linked<IOutputMetaData> resultMeta; Linked<IOutputMetaData> resultMeta;
Linked<IOutputMetaData> counterMeta; Linked<IOutputMetaData> counterMeta;
Owned<IEngineRowAllocator> inputAllocator;
Owned<IEngineRowAllocator> counterAllocator;
unsigned activityId; unsigned activityId;
}; };


Expand Down
12 changes: 9 additions & 3 deletions ecl/eclagent/eclgraph.cpp
Expand Up @@ -1812,15 +1812,19 @@ IHThorGraphResults * EclBoundLoopGraph::execute(void * counterRow, ConstPointerA
{ {
Owned<GraphResults> results = new GraphResults(3); Owned<GraphResults> results = new GraphResults(3);


IHThorGraphResult * inputResult = results->createResult(1, agent.queryCodeContext()->getRowAllocator(resultMeta, activityId)); if (!inputAllocator)
inputAllocator.setown(agent.queryCodeContext()->getRowAllocator(resultMeta, activityId));
IHThorGraphResult * inputResult = results->createResult(1, LINK(inputAllocator));
ForEachItemIn(i, rows) ForEachItemIn(i, rows)
inputResult->addRowOwn(rows.item(i)); inputResult->addRowOwn(rows.item(i));
rows.kill(); rows.kill();


if (counterRow) if (counterRow)
{ {
counterMeta.setown(new EclCounterMeta); counterMeta.setown(new EclCounterMeta);
IHThorGraphResult * counterResult = results->createResult(2, agent.queryCodeContext()->getRowAllocator(counterMeta, activityId)); if (!counterAllocator)
counterAllocator.setown(agent.queryCodeContext()->getRowAllocator(counterMeta, activityId));
IHThorGraphResult * counterResult = results->createResult(2, LINK(counterAllocator));
counterResult->addRowOwn(counterRow); counterResult->addRowOwn(counterRow);
} }


Expand All @@ -1835,7 +1839,9 @@ void EclBoundLoopGraph::execute(void * counterRow, IHThorGraphResults * graphLoo
if (counterRow) if (counterRow)
{ {
counterMeta.setown(new EclCounterMeta); counterMeta.setown(new EclCounterMeta);
IHThorGraphResult * counterResult = results->createResult(0, agent.queryCodeContext()->getRowAllocator(counterMeta, activityId)); if (!counterAllocator)
counterAllocator.setown(agent.queryCodeContext()->getRowAllocator(counterMeta, activityId));
IHThorGraphResult * counterResult = results->createResult(0, LINK(counterAllocator));
counterResult->addRowOwn(counterRow); counterResult->addRowOwn(counterRow);
} }


Expand Down
6 changes: 3 additions & 3 deletions ecl/hthor/hthor.cpp
Expand Up @@ -8742,7 +8742,7 @@ CHThorLocalResultWriteActivity::CHThorLocalResultWriteActivity(IAgentContext &_a


void CHThorLocalResultWriteActivity::execute() void CHThorLocalResultWriteActivity::execute()
{ {
IHThorGraphResult * result = graph->createResult(helper.querySequence(), agent.queryCodeContext()->getRowAllocator(input->queryOutputMeta(), activityId)); IHThorGraphResult * result = graph->createResult(helper.querySequence(), LINK(rowAllocator));
loop loop
{ {
const void *nextrec = input->nextInGroup(); const void *nextrec = input->nextInGroup();
Expand Down Expand Up @@ -8771,7 +8771,7 @@ CHThorLocalResultSpillActivity::CHThorLocalResultSpillActivity(IAgentContext &_a
void CHThorLocalResultSpillActivity::ready() void CHThorLocalResultSpillActivity::ready()
{ {
CHThorSimpleActivityBase::ready(); CHThorSimpleActivityBase::ready();
result = graph->createResult(helper.querySequence(), agent.queryCodeContext()->getRowAllocator(outputMeta.queryOriginal(), activityId)); result = graph->createResult(helper.querySequence(), LINK(rowAllocator));
nullPending = false; nullPending = false;
} }


Expand Down Expand Up @@ -9023,7 +9023,7 @@ CHThorGraphLoopResultWriteActivity::CHThorGraphLoopResultWriteActivity(IAgentCon


void CHThorGraphLoopResultWriteActivity::execute() void CHThorGraphLoopResultWriteActivity::execute()
{ {
IHThorGraphResult * result = graph->createGraphLoopResult(agent.queryCodeContext()->getRowAllocator(input->queryOutputMeta(), activityId)); IHThorGraphResult * result = graph->createGraphLoopResult(LINK(rowAllocator));
loop loop
{ {
const void *nextrec = input->nextInGroup(); const void *nextrec = input->nextInGroup();
Expand Down
2 changes: 2 additions & 0 deletions ecl/hthor/hthor.ipp
Expand Up @@ -2444,6 +2444,7 @@ public:


CHThorLocalResultWriteActivity (IAgentContext &agent, unsigned _activityId, unsigned _subgraphId, IHThorLocalResultWriteArg &_arg, ThorActivityKind _kind, __int64 graphId); CHThorLocalResultWriteActivity (IAgentContext &agent, unsigned _activityId, unsigned _subgraphId, IHThorLocalResultWriteArg &_arg, ThorActivityKind _kind, __int64 graphId);
virtual void execute(); virtual void execute();
virtual bool needsAllocator() const { return true; }
}; };




Expand Down Expand Up @@ -2568,6 +2569,7 @@ public:


CHThorGraphLoopResultWriteActivity (IAgentContext &agent, unsigned _activityId, unsigned _subgraphId, IHThorGraphLoopResultWriteArg &_arg, ThorActivityKind _kind, __int64 graphId); CHThorGraphLoopResultWriteActivity (IAgentContext &agent, unsigned _activityId, unsigned _subgraphId, IHThorGraphLoopResultWriteArg &_arg, ThorActivityKind _kind, __int64 graphId);
virtual void execute(); virtual void execute();
virtual bool needsAllocator() const { return true; }
}; };




Expand Down

0 comments on commit c347d0b

Please sign in to comment.