Package org.eclipse.rdf4j.federated.evaluation.concurrent

## Class ParallelServiceExecutor

- java.lang.Object
- - org.eclipse.rdf4j.common.iteration.AbstractCloseableIteration<E,​X>
  - - org.eclipse.rdf4j.common.iteration.LookAheadIteration<BindingSet,​QueryEvaluationException>
    - - org.eclipse.rdf4j.federated.evaluation.concurrent.ParallelServiceExecutor

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

      public class ParallelServiceExecutor
      extends LookAheadIteration<BindingSet,​QueryEvaluationException>
      implements ParallelExecutor<BindingSet>

  Parallel executor for `FedXService` nodes, which wrap SERVICE expressions. Uses the union scheduler to execute the task
  Author:
    Andreas Schwarte

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected BindingSet` | `bindings` |
    `protected Exception` | `error` |
    `protected FederationContext` | `federationContext` |
    `protected boolean` | `finished` |
    `protected static org.slf4j.Logger` | `log` |
    `protected CloseableIteration<BindingSet,​QueryEvaluationException>` | `rightIter` |
    `protected FedXService` | `service` |
    `protected FederationEvalStrategy` | `strategy` |

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `ParallelServiceExecutor​(FedXService service, FederationEvalStrategy strategy, BindingSet bindings, FederationContext federationContext)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `addResult​(CloseableIteration<BindingSet,​QueryEvaluationException> res)` | Handle the result appropriately, e.g.
    `void` | `done()` | Inform the controlling instance that some job is done from a different thread.
    `protected BindingSet` | `getNextElement()` | Gets the next element.
    `QueryInfo` | `getQueryInfo()` | Return the query info of the associated query
    `boolean` | `isFinished()` | Return true if this executor is finished or aborted
    `void` | `run()` |
    `void` | `toss​(Exception e)` | Toss some exception to the controlling instance

    - ### Methods inherited from class org.eclipse.rdf4j.common.iteration.LookAheadIteration

      `handleClose, 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, toString, wait, wait, wait`

    - ### Methods inherited from interface org.eclipse.rdf4j.common.iteration.Iteration

      `stream`

- - ### Field Detail

    - #### log

          protected static final org.slf4j.Logger log

    - #### service

          protected final FedXService service

    - #### strategy

          protected final FederationEvalStrategy strategy

    - #### bindings

          protected final BindingSet bindings

    - #### federationContext

          protected final FederationContext federationContext

    - #### rightIter

          protected CloseableIteration<BindingSet,​QueryEvaluationException> rightIter

    - #### finished

          protected boolean finished

    - #### error

          protected Exception error

  - ### Constructor Detail

    - #### ParallelServiceExecutor

          public ParallelServiceExecutor​(FedXService service,
                                         FederationEvalStrategy strategy,
                                         BindingSet bindings,
                                         FederationContext federationContext)

      Parameters:
        `service` -
        `strategy` -
        `bindings` -
        `federationContext` -

  - ### Method Detail

    - #### run

          public void run()

      Specified by:
        `run` in interface `Runnable`

    - #### addResult

          public void addResult​(CloseableIteration<BindingSet,​QueryEvaluationException> res)

      Description copied from interface: `ParallelExecutor`
      Handle the result appropriately, e.g. add it to the result iteration. Take care for synchronization in a multithreaded environment
      Specified by:
        `addResult` in interface `ParallelExecutor<BindingSet>`

    - #### toss

          public void toss​(Exception e)

      Description copied from interface: `ParallelExecutor`
      Toss some exception to the controlling instance
      Specified by:
        `toss` in interface `ParallelExecutor<BindingSet>`

    - #### done

          public void done()

      Description copied from interface: `ParallelExecutor`
      Inform the controlling instance that some job is done from a different thread. In most cases this is a no-op.
      Specified by:
        `done` in interface `ParallelExecutor<BindingSet>`

    - #### isFinished

          public boolean isFinished()

      Description copied from interface: `ParallelExecutor`
      Return true if this executor is finished or aborted
      Specified by:
        `isFinished` in interface `ParallelExecutor<BindingSet>`
      Returns:
        whether the execution is finished

    - #### getQueryInfo

          public QueryInfo getQueryInfo()

      Description copied from interface: `ParallelExecutor`
      Return the query info of the associated query
      Specified by:
        `getQueryInfo` in interface `ParallelExecutor<BindingSet>`
      Returns:
        the query info

    - #### getNextElement

          protected BindingSet getNextElement()
                                       throws QueryEvaluationException

      Description copied from class: `LookAheadIteration`
      Gets the next element. Subclasses should implement this method so that it returns the next element.
      Specified by:
        `getNextElement` in class `LookAheadIteration<BindingSet,​QueryEvaluationException>`
      Returns:
        The next element, or null if no more elements are available.
      Throws:
        `QueryEvaluationException`