|
@@ -87,8 +87,16 @@ interface IRoxieServerActivity;
|
|
|
interface IRoxieServerChildGraph;
|
|
|
interface IRoxieServerContext;
|
|
|
interface IRoxieSlaveContext;
|
|
|
+interface IStrandJunction;
|
|
|
+
|
|
|
class ClusterWriteHandler;
|
|
|
|
|
|
+enum StrandFlags
|
|
|
+{
|
|
|
+ SFforceSingle = 0x0001, // Force entire subtree to be single-stranded - eg when debugging or smart-stepping
|
|
|
+ SFpreserveOrder = 0x0002, // Order must be preserved by any multistranding - returns a suitable M:1 junction object to restore the order
|
|
|
+};
|
|
|
+
|
|
|
interface IFinalRoxieInput : extends IInputBase
|
|
|
{
|
|
|
virtual void start(unsigned parentExtractSize, const byte *parentExtract, bool paused) = 0;
|
|
@@ -100,8 +108,12 @@ interface IFinalRoxieInput : extends IInputBase
|
|
|
virtual IFinalRoxieInput * queryConcreteInput(unsigned idx) { assertex(idx==0); return this; }
|
|
|
virtual IRoxieServerActivity *queryActivity() = 0;
|
|
|
virtual IIndexReadActivityInfo *queryIndexReadActivity() = 0;
|
|
|
+
|
|
|
+ virtual IStrandJunction *getOutputStreams(IRoxieSlaveContext *ctx, unsigned idx, PointerArrayOf<IEngineRowStream> &streams, bool multiOk, unsigned flags) = 0; // Use StrandFlags values for flags
|
|
|
};
|
|
|
|
|
|
+extern IEngineRowStream *connectSingleStream(IRoxieSlaveContext *ctx, IFinalRoxieInput *input, unsigned idx, Owned<IStrandJunction> &junction, unsigned flags);
|
|
|
+
|
|
|
interface ISteppedConjunctionCollector;
|
|
|
|
|
|
interface IIndexReadActivityInfo
|
|
@@ -132,12 +144,14 @@ interface IRoxiePackage;
|
|
|
|
|
|
interface IRoxieServerActivity : extends IActivityBase
|
|
|
{
|
|
|
- virtual void setInput(unsigned idx, IFinalRoxieInput *in) = 0;
|
|
|
+ virtual void setInput(unsigned idx, unsigned sourceIdx, IFinalRoxieInput *in) = 0;
|
|
|
virtual IFinalRoxieInput *queryOutput(unsigned idx) = 0;
|
|
|
virtual IFinalRoxieInput *queryInput(unsigned idx) const = 0;
|
|
|
virtual void execute(unsigned parentExtractSize, const byte *parentExtract) = 0;
|
|
|
- virtual void onCreate(IRoxieSlaveContext *ctx, IHThorArg *colocalArg) = 0;
|
|
|
+ virtual void onCreate(IHThorArg *colocalArg) = 0;
|
|
|
virtual void start(unsigned parentExtractSize, const byte *parentExtract, bool paused) = 0;
|
|
|
+ virtual IStrandJunction *getOutputStreams(IRoxieSlaveContext *ctx, unsigned idx, PointerArrayOf<IEngineRowStream> &streams, bool multiOk, unsigned flags) = 0; // Use StrandFlags values for flags
|
|
|
+
|
|
|
virtual void stop() = 0;
|
|
|
virtual void abort() = 0;
|
|
|
virtual void reset() = 0;
|
|
@@ -150,9 +164,11 @@ interface IRoxieServerActivity : extends IActivityBase
|
|
|
virtual void serializeCreateStartContext(MemoryBuffer &out) = 0;
|
|
|
virtual void serializeExtra(MemoryBuffer &out) = 0;
|
|
|
virtual void stopSink(unsigned idx) = 0;
|
|
|
-//Functions to support result streaming between parallel loop/graphloop/library implementations
|
|
|
+ virtual void connectOutputStreams(unsigned flags) = 0;
|
|
|
+
|
|
|
+ //Functions to support result streaming between parallel loop/graphloop/library implementations
|
|
|
virtual IFinalRoxieInput * querySelectOutput(unsigned id) = 0;
|
|
|
- virtual bool querySetStreamInput(unsigned id, IFinalRoxieInput * _input) = 0;
|
|
|
+ virtual bool querySetStreamInput(unsigned id, unsigned _sourceIdx, IFinalRoxieInput * _input) = 0;
|
|
|
virtual void gatherIterationUsage(IRoxieServerLoopResultProcessor & processor, unsigned parentExtractSize, const byte * parentExtract) = 0;
|
|
|
virtual void associateIterationOutputs(IRoxieServerLoopResultProcessor & processor, unsigned parentExtractSize, const byte * parentExtract, IProbeManager *probeManager, IArrayOf<IRoxieProbe> &probes) = 0;
|
|
|
virtual void resetOutputsUsed() = 0; // use for adjusting correct number of uses for a splitter
|
|
@@ -173,7 +189,7 @@ interface IRoxieServerActivity : extends IActivityBase
|
|
|
|
|
|
interface IRoxieServerActivityFactory : extends IActivityFactory
|
|
|
{
|
|
|
- virtual IRoxieServerActivity *createActivity(IProbeManager *_probemanager) const = 0;
|
|
|
+ virtual IRoxieServerActivity *createActivity(IRoxieSlaveContext *_ctx, IProbeManager *_probemanager) const = 0;
|
|
|
virtual void setInput(unsigned idx, unsigned source, unsigned sourceidx) = 0;
|
|
|
virtual bool isSink() const = 0;
|
|
|
virtual bool isFunction() const = 0;
|
|
@@ -192,7 +208,7 @@ interface IRoxieServerActivityFactory : extends IActivityFactory
|
|
|
virtual void noteProcessed(unsigned idx, unsigned processed) const = 0;
|
|
|
virtual void mergeActivityStats(const CRuntimeStatisticCollection &fromStats, const ActivityTimeAccumulator &totalCycles, cycle_t localCycles) const = 0;
|
|
|
virtual void onCreateChildQueries(IRoxieSlaveContext *ctx, IHThorArg *colocalArg, IArrayOf<IActivityGraph> &childGraphs) const = 0;
|
|
|
- virtual void createChildQueries(IArrayOf<IActivityGraph> &childGraphs, IRoxieServerActivity *parentActivity, IProbeManager *_probeManager, const IRoxieContextLogger &_logctx) const = 0;
|
|
|
+ virtual void createChildQueries(IRoxieSlaveContext *ctx, IArrayOf<IActivityGraph> &childGraphs, IRoxieServerActivity *parentActivity, IProbeManager *_probeManager, const IRoxieContextLogger &_logctx) const = 0;
|
|
|
virtual void noteStarted() const = 0;
|
|
|
virtual void noteStarted(unsigned idx) const = 0;
|
|
|
virtual void noteDependent(unsigned target) = 0;
|
|
@@ -231,7 +247,7 @@ interface IRoxieServerChildGraph : public IInterface
|
|
|
virtual IFinalRoxieInput * startOutput(unsigned id, unsigned parentExtractSize, const byte *parentExtract, bool paused) = 0;
|
|
|
virtual IFinalRoxieInput * selectOutput(unsigned id) = 0;
|
|
|
virtual void setInputResult(unsigned id, IGraphResult * result) = 0;
|
|
|
- virtual bool querySetInputResult(unsigned id, IFinalRoxieInput * result) = 0;
|
|
|
+ virtual bool querySetInputResult(unsigned id, unsigned _sourceIdx, IFinalRoxieInput * result) = 0;
|
|
|
virtual void stopUnusedOutputs() = 0;
|
|
|
virtual IRoxieGraphResults * execute(size32_t parentExtractSize, const byte *parentExtract) = 0;
|
|
|
virtual void afterExecute() = 0;
|
|
@@ -248,7 +264,7 @@ interface IRoxieServerChildGraph : public IInterface
|
|
|
|
|
|
interface IQueryFactory;
|
|
|
|
|
|
-extern IActivityGraph *createActivityGraph(const char *graphName, unsigned id, ActivityArray &x, IRoxieServerActivity *parent, IProbeManager *probeManager, const IRoxieContextLogger &logctx);
|
|
|
+extern IActivityGraph *createActivityGraph(IRoxieSlaveContext *ctx, const char *graphName, unsigned id, ActivityArray &x, IRoxieServerActivity *parent, IProbeManager *probeManager, const IRoxieContextLogger &logctx);
|
|
|
|
|
|
extern ruid_t getNextRuid();
|
|
|
extern void setStartRuid(unsigned restarts);
|
|
@@ -361,7 +377,7 @@ extern IRoxieServerActivityFactory *createRoxieServerRegroupActivityFactory(unsi
|
|
|
extern IRoxieServerActivityFactory *createRoxieServerCombineActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind);
|
|
|
extern IRoxieServerActivityFactory *createRoxieServerCombineGroupActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind);
|
|
|
extern IRoxieServerActivityFactory *createRoxieServerRollupGroupActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind);
|
|
|
-extern IRoxieServerActivityFactory *createRoxieServerProjectActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind);
|
|
|
+extern IRoxieServerActivityFactory *createRoxieServerProjectActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind, IPropertyTree &_graphNode);
|
|
|
extern IRoxieServerActivityFactory *createRoxieServerFilterProjectActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind);
|
|
|
extern IRoxieServerActivityFactory *createRoxieServerLoopActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind, unsigned _loopId);
|
|
|
extern IRoxieServerActivityFactory *createRoxieServerGraphLoopActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind, unsigned _loopId);
|
|
@@ -380,7 +396,7 @@ extern IRoxieServerActivityFactory *createRoxieServerSkipLimitActivityFactory(un
|
|
|
extern IRoxieServerActivityFactory *createRoxieServerCatchActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind);
|
|
|
extern IRoxieServerActivityFactory *createRoxieServerCaseActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind, bool _graphInvariant);
|
|
|
extern IRoxieServerActivityFactory *createRoxieServerIfActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind, bool _graphInvariant);
|
|
|
-extern IRoxieServerActivityFactory *createRoxieServerParseActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind, IResourceContext *rc);
|
|
|
+extern IRoxieServerActivityFactory *createRoxieServerParseActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind, IPropertyTree &_graphNode, IResourceContext *rc);
|
|
|
extern IRoxieServerActivityFactory *createRoxieServerWorkUnitWriteActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind, unsigned _usageCount, bool _isRoot);
|
|
|
extern IRoxieServerActivityFactory *createRoxieServerWorkUnitWriteDictActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind, unsigned _usageCount, bool _isRoot);
|
|
|
extern IRoxieServerActivityFactory *createRoxieServerRemoteResultActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind, unsigned _usageCount, bool _isRoot);
|
|
@@ -413,7 +429,7 @@ extern IRoxieServerActivityFactory *createRoxieServerNonEmptyActivityFactory(uns
|
|
|
extern IRoxieServerActivityFactory *createRoxieServerIfActionActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind, bool _isRoot);
|
|
|
extern IRoxieServerActivityFactory *createRoxieServerSequentialActionActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind, bool _isRoot);
|
|
|
extern IRoxieServerActivityFactory *createRoxieServerParallelActionActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind, bool _isRoot);
|
|
|
-extern IRoxieServerActivityFactory *createRoxieServerPrefetchProjectActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind);
|
|
|
+extern IRoxieServerActivityFactory *createRoxieServerPrefetchProjectActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind, IPropertyTree &_graphNode);
|
|
|
extern IRoxieServerActivityFactory *createRoxieServerStreamedIteratorActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind);
|
|
|
extern IRoxieServerActivityFactory *createRoxieServerWhenActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind);
|
|
|
extern IRoxieServerActivityFactory *createRoxieServerWhenActionActivityFactory(unsigned _id, unsigned _subgraphId, IQueryFactory &_queryFactory, HelperFactory *_helperFactory, ThorActivityKind _kind, bool _isRoot);
|