Class JoinExecutorBase<T>
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<T>
- All Implemented Interfaces:
AutoCloseable
,Runnable
,CloseableIteration<T,
,QueryEvaluationException> Iteration<T,
,QueryEvaluationException> ParallelExecutor<T>
- Direct Known Subclasses:
ControlledWorkerJoin
,ControlledWorkerLeftJoin
,HashJoin
,SynchronousJoin
Base class for any join parallel join executor.
Note that this class extends
LookAheadIteration
and thus any implementation of this class is applicable for
pipelining when used in a different thread (access to shared variables is synchronized).- Author:
- Andreas Schwarte
-
Field Summary
Modifier and TypeFieldDescriptionprotected final BindingSet
protected CloseableIteration<T,
QueryEvaluationException> protected final TupleExpr
Fields inherited from class org.eclipse.rdf4j.federated.evaluation.concurrent.ParallelExecutorBase
evaluationThread, executorId, finished, log, NEXT_EXECUTOR_ID, queryInfo, rightIter, rightQueue, strategy
-
Constructor Summary
ConstructorDescriptionJoinExecutorBase
(FederationEvalStrategy strategy, CloseableIteration<T, QueryEvaluationException> leftIter, TupleExpr rightArg, BindingSet bindings, QueryInfo queryInfo) -
Method Summary
Modifier and TypeMethodDescriptionprotected String
protected abstract void
Implementations must implement this method to handle bindings.void
Called byAbstractCloseableIteration.close()
when it is called for the first time.protected final void
Perform the parallel execution.void
setJoinVars
(Set<String> joinVars) Set the join variablesMethods 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 Details
-
rightArg
-
bindings
-
joinVars
-
leftIter
-
-
Constructor Details
-
JoinExecutorBase
public JoinExecutorBase(FederationEvalStrategy strategy, CloseableIteration<T, QueryEvaluationException> leftIter, TupleExpr rightArg, BindingSet bindings, QueryInfo queryInfo) throws QueryEvaluationException- Throws:
QueryEvaluationException
-
-
Method Details
-
performExecution
Description copied from class:ParallelExecutorBase
Perform the parallel execution.Note that this method must block until the execution is completed.
- Specified by:
performExecution
in classParallelExecutorBase<T>
- Throws:
Exception
-
handleBindings
Implementations 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.- Throws:
Exception
-
handleClose
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 classParallelExecutorBase<T>
- Throws:
QueryEvaluationException
-
getExecutorType
- Overrides:
getExecutorType
in classParallelExecutorBase<T>
- Returns:
- the executor type, e.g. "Join". Default "Executor"
-
getJoinVars
- Returns:
- the join variables, might be
null
if unknown in the concrete implementation
-
setJoinVars
Set the join variables- Parameters:
joinVars
- the join variables
-