Class ControlledWorkerBoundJoin
java.lang.Object
org.eclipse.rdf4j.common.iteration.AbstractCloseableIteration<BindingSet>
org.eclipse.rdf4j.common.iteration.LookAheadIteration<BindingSet>
org.eclipse.rdf4j.federated.evaluation.concurrent.ParallelExecutorBase<BindingSet>
org.eclipse.rdf4j.federated.evaluation.join.JoinExecutorBase<BindingSet>
org.eclipse.rdf4j.federated.evaluation.join.ControlledWorkerJoin
org.eclipse.rdf4j.federated.evaluation.join.ControlledWorkerBoundJoin
- All Implemented Interfaces:
AutoCloseable,Runnable,Iterator<BindingSet>,CloseableIteration<BindingSet>,ParallelExecutor<BindingSet>
Execute the nested loop join in an asynchronous fashion, using grouped requests, i.e. group bindings into one SPARQL
request using a VALUES clause.
The number of concurrent threads is controlled by a
ControlledWorkerScheduler which works according to the
FIFO principle and uses worker threads.
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
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected classprotected classprotected classprotected static interface -
Field Summary
Fields inherited from class org.eclipse.rdf4j.federated.evaluation.join.ControlledWorkerJoin
phaser, schedulerFields inherited from class org.eclipse.rdf4j.federated.evaluation.join.JoinExecutorBase
bindings, joinVars, leftIter, rightArgFields inherited from class org.eclipse.rdf4j.federated.evaluation.concurrent.ParallelExecutorBase
evaluationThread, executorId, finished, NEXT_EXECUTOR_ID, queryInfo, rightIter, rightQueue, strategy -
Constructor Summary
ConstructorsConstructorDescriptionControlledWorkerBoundJoin(ControlledWorkerScheduler<BindingSet> scheduler, FederationEvalStrategy strategy, CloseableIteration<BindingSet> leftIter, TupleExpr rightArg, BindingSet bindings, QueryInfo queryInfo) -
Method Summary
Modifier and TypeMethodDescriptionprotected ControlledWorkerBoundJoin.TaskCreatordetermineTaskCreator(TupleExpr expr, BindingSet bs) protected intgetNextBindJoinSize(int configuredBindJoinSize, int totalBindings) Return the size of the next bind join block.protected voidImplementations must implement this method to handle bindings.voidCalled byAbstractCloseableIteration.close()when it is called for the first time.protected voidsetSubmitFirstResultImmediately(boolean flag) Methods inherited from class org.eclipse.rdf4j.federated.evaluation.join.JoinExecutorBase
getExecutorType, getJoinVars, performExecution, setJoinVarsMethods inherited from class org.eclipse.rdf4j.federated.evaluation.concurrent.ParallelExecutorBase
addResult, checkTimeout, done, getDisplayId, getId, getNextElement, getQueryInfo, isFinished, run, toss, toStringMethods inherited from class org.eclipse.rdf4j.common.iteration.LookAheadIteration
hasNext, next, removeMethods inherited from class org.eclipse.rdf4j.common.iteration.AbstractCloseableIteration
close, isClosedMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.eclipse.rdf4j.common.iteration.CloseableIteration
streamMethods inherited from interface java.util.Iterator
forEachRemaining
-
Constructor Details
-
ControlledWorkerBoundJoin
public ControlledWorkerBoundJoin(ControlledWorkerScheduler<BindingSet> scheduler, FederationEvalStrategy strategy, CloseableIteration<BindingSet> leftIter, TupleExpr rightArg, BindingSet bindings, QueryInfo queryInfo) throws QueryEvaluationException - Throws:
QueryEvaluationException
-
-
Method Details
-
setSubmitFirstResultImmediately
protected void setSubmitFirstResultImmediately(boolean flag) -
handleBindings
Description copied from class:JoinExecutorBaseImplementations must implement this method to handle bindings. Use the following as a templatewhile (!closed invalid input: '&'invalid input: '&' 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.- Overrides:
handleBindingsin classControlledWorkerJoin- Throws:
Exception
-
handleClose
Description copied from class:AbstractCloseableIterationCalled 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:
handleClosein classControlledWorkerJoin- Throws:
QueryEvaluationException
-
determineTaskCreator
-
getNextBindJoinSize
protected int getNextBindJoinSize(int configuredBindJoinSize, int totalBindings) Return the size of the next bind join block.- Parameters:
configuredBindJoinSize- the configured bind join sizetotalBindings- the current process bindings from the intermediate result set- Returns:
-