Package org.eclipse.rdf4j.federated.evaluation.join

## Class ControlledWorkerBoundJoin

- 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
          - - org.eclipse.rdf4j.federated.evaluation.join.ControlledWorkerBoundJoin

- All Implemented Interfaces:
    `AutoCloseable`, `Runnable`, `CloseableIteration<BindingSet,​QueryEvaluationException>`, `Iteration<BindingSet,​QueryEvaluationException>`, `ParallelExecutor<BindingSet>`

      public class ControlledWorkerBoundJoin
      extends ControlledWorkerJoin

  Execute the nested loop join in an asynchronous fashion, using grouped requests, i.e. group bindings into one SPARQL request using the UNION operator. 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 Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `protected class` | `ControlledWorkerBoundJoin.BoundJoinTaskCreator` |
    `protected class` | `ControlledWorkerBoundJoin.CheckJoinTaskCreator` |
    `protected class` | `ControlledWorkerBoundJoin.FedXServiceJoinTaskCreator` |
    `protected static interface` | `ControlledWorkerBoundJoin.TaskCreator` |

  - ### Field Summary

    - ### Fields inherited from class org.eclipse.rdf4j.federated.evaluation.join.ControlledWorkerJoin

      `phaser, 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
    --- | ---
    `ControlledWorkerBoundJoin​(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 by `AbstractCloseableIteration.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.Iteration

      `stream`

- - ### Constructor Detail

    - #### ControlledWorkerBoundJoin

          public ControlledWorkerBoundJoin​(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 template `while (!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.
      Overrides:
        `handleBindings` in class `ControlledWorkerJoin`
      Throws:
        `Exception`

    - #### handleClose

          public void handleClose()
                           throws QueryEvaluationException

      Description copied from class: `AbstractCloseableIteration`
      Called by `AbstractCloseableIteration.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 class `ControlledWorkerJoin`
      Throws:
        `QueryEvaluationException`