java.lang.Object
org.hibernate.search.engine.backend.orchestration.spi.BatchingExecutor<P>

public final class BatchingExecutor<P extends BatchedWorkProcessor> extends Object
An executor of works that accepts works from multiple threads, puts them in a queue, and processes them in batches in a single background thread.

Useful when works can be merged together for optimization purposes (bulking in Elasticsearch), or when they should never be executed in parallel (writes to a Lucene index).

  • Constructor Details

    • BatchingExecutor

      public BatchingExecutor(String name, P processor, int maxTasksPerBatch, boolean fair, FailureHandler failureHandler)
      Parameters:
      name - The name of the executor thread (and of this executor when reporting errors)
      processor - A task processor. May not be thread-safe.
      maxTasksPerBatch - The maximum number of tasks to process in a single batch. Higher values mean more opportunity for the processor to optimize execution, but higher heap consumption.
      fair - if true tasks are always submitted to the processor in FIFO order, if false tasks submitted when the internal queue is full may be submitted out of order.
      failureHandler - A failure handler to report failures of the background thread.
  • Method Details

    • toString

      public String toString()
      Overrides:
      toString in class Object
    • start

      public void start(ExecutorService executorService)
      Start the executor, allowing works to be submitted through submit(BatchedWork).
      Parameters:
      executorService - An executor service with at least one thread.
    • stop

      public void stop()
      Stop the executor, no longer allowing works to be submitted through submit(BatchedWork).

      This will remove pending works from the queue.

    • submit

      public void submit(BatchedWork<? super P> work) throws InterruptedException
      Submit a work for execution.

      Must not be called when the executor is stopped.

      Parameters:
      work - A work to execute.
      Throws:
      InterruptedException - If the current thread is interrupted while enqueuing the work.
    • completion

      public CompletableFuture<?> completion()
      Returns:
      A future that completes when all works submitted to the executor so far are completely executed. Works submitted to the executor after entering this method may delay the wait.