Class TaskExecutor


  • public final class TaskExecutor
    extends java.lang.Object
    Executor wrapper responsible for the execution of concurrent tasks. Used to parallelize search across segments as well as query rewrite in some cases. Exposes a single invokeAll(Collection) method that takes a collection of Callables and executes them concurrently/ Once all tasks are submitted to the executor, it blocks and wait for all tasks to be completed, and then returns a list with the obtained results. Ensures that the underlying executor is only used for top-level invokeAll(Collection) calls, and not for potential invokeAll(Collection) calls made from one of the tasks. This is to prevent deadlock with certain types of pool based executors (e.g. ThreadPoolExecutor).
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      private static class  TaskExecutor.TaskGroup<T>
      Holds all the sub-tasks that a certain operation gets split into as it gets parallelized and exposes the ability to invoke such tasks and wait for them all to complete their execution and provide their results.
    • Constructor Summary

      Constructors 
      Constructor Description
      TaskExecutor​(java.util.concurrent.Executor executor)
      Creates a TaskExecutor instance
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      <T> java.util.List<T> invokeAll​(java.util.Collection<java.util.concurrent.Callable<T>> callables)
      Execute all the callables provided as an argument, wait for them to complete and return the obtained results.
      java.lang.String toString()  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • numberOfRunningTasksInCurrentThread

        private static final java.lang.ThreadLocal<java.lang.Integer> numberOfRunningTasksInCurrentThread
      • executor

        private final java.util.concurrent.Executor executor
    • Constructor Detail

      • TaskExecutor

        public TaskExecutor​(java.util.concurrent.Executor executor)
        Creates a TaskExecutor instance
        Parameters:
        executor - the executor to be used for running tasks concurrently
    • Method Detail

      • invokeAll

        public <T> java.util.List<T> invokeAll​(java.util.Collection<java.util.concurrent.Callable<T>> callables)
                                        throws java.io.IOException
        Execute all the callables provided as an argument, wait for them to complete and return the obtained results. If an exception is thrown by more than one callable, the subsequent ones will be added as suppressed exceptions to the first one that was caught.
        Type Parameters:
        T - the return type of the task execution
        Parameters:
        callables - the callables to execute
        Returns:
        a list containing the results from the tasks execution
        Throws:
        java.io.IOException
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object