Class ControlledWorkerJoin
- java.lang.Object
-
- org.eclipse.rdf4j.common.iteration.AbstractCloseableIteration<E,X>
-
- org.eclipse.rdf4j.common.iteration.LookAheadIteration<T,QueryEvaluationException>
-
- org.eclipse.rdf4j.federated.evaluation.concurrent.ParallelExecutorBase<T>
-
- org.eclipse.rdf4j.federated.evaluation.join.JoinExecutorBase<BindingSet>
-
- org.eclipse.rdf4j.federated.evaluation.join.ControlledWorkerJoin
-
- All Implemented Interfaces:
AutoCloseable
,Runnable
,CloseableIteration<BindingSet,QueryEvaluationException>
,Iteration<BindingSet,QueryEvaluationException>
,ParallelExecutor<BindingSet>
- Direct Known Subclasses:
ControlledWorkerBoundJoin
public class ControlledWorkerJoin extends JoinExecutorBase<BindingSet>
Execute the nested loop join in an asynchronous fashion, i.e. one binding after the other (but concurrently) The number of concurrent threads is controlled by aControlledWorkerScheduler
which works according to the FIFO principle. This join cursor blocks until all scheduled tasks are finished, however the result iteration can be accessed from different threads to allow for pipelining.- Author:
- Andreas Schwarte
-
-
Field Summary
Fields Modifier and Type Field Description protected Phaser
phaser
protected ControlledWorkerScheduler<BindingSet>
scheduler
-
Fields inherited from class org.eclipse.rdf4j.federated.evaluation.join.JoinExecutorBase
bindings, joinVars, leftIter, rightArg
-
Fields inherited from class org.eclipse.rdf4j.federated.evaluation.concurrent.ParallelExecutorBase
evaluationThread, executorId, finished, NEXT_EXECUTOR_ID, queryInfo, rightIter, rightQueue, strategy
-
-
Constructor Summary
Constructors Constructor Description ControlledWorkerJoin(ControlledWorkerScheduler<BindingSet> scheduler, FederationEvalStrategy strategy, CloseableIteration<BindingSet,QueryEvaluationException> leftIter, TupleExpr rightArg, BindingSet bindings, QueryInfo queryInfo)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
handleBindings()
Implementations must implement this method to handle bindings.void
handleClose()
Called byAbstractCloseableIteration.close()
when it is called for the first time.-
Methods inherited from class org.eclipse.rdf4j.federated.evaluation.join.JoinExecutorBase
getExecutorType, getJoinVars, performExecution, setJoinVars
-
Methods inherited from class org.eclipse.rdf4j.federated.evaluation.concurrent.ParallelExecutorBase
addResult, checkTimeout, done, getDisplayId, getId, getNextElement, getQueryInfo, isFinished, run, toss, toString
-
Methods inherited from class org.eclipse.rdf4j.common.iteration.LookAheadIteration
hasNext, next, remove
-
Methods inherited from class org.eclipse.rdf4j.common.iteration.AbstractCloseableIteration
close, isClosed
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.eclipse.rdf4j.common.iteration.CloseableIteration
stream
-
-
-
-
Field Detail
-
scheduler
protected final ControlledWorkerScheduler<BindingSet> scheduler
-
phaser
protected final Phaser phaser
-
-
Constructor Detail
-
ControlledWorkerJoin
public ControlledWorkerJoin(ControlledWorkerScheduler<BindingSet> scheduler, FederationEvalStrategy strategy, CloseableIteration<BindingSet,QueryEvaluationException> leftIter, TupleExpr rightArg, BindingSet bindings, QueryInfo queryInfo) throws QueryEvaluationException
- Throws:
QueryEvaluationException
-
-
Method Detail
-
handleBindings
protected void handleBindings() throws Exception
Description copied from class:JoinExecutorBase
Implementations must implement this method to handle bindings. Use the following as a templatewhile (!closed && leftIter.hasNext()) { // your code }
and add results to rightQueue. Note that addResult() is implemented synchronized and thus thread safe. In case you can guarantee sequential access, it is also possible to directly access rightQueue Note that the implementation must block until the entire join is executed.- Specified by:
handleBindings
in classJoinExecutorBase<BindingSet>
- Throws:
Exception
-
handleClose
public void handleClose() throws QueryEvaluationException
Description copied from class:AbstractCloseableIteration
Called byAbstractCloseableIteration.close()
when it is called for the first time. This method is only called once on each iteration. By default, this method does nothing.- Overrides:
handleClose
in classJoinExecutorBase<BindingSet>
- Throws:
QueryEvaluationException
-
-