diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/AbstractExecutionTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/AbstractExecutionTest.java index f10f91f529502..6f71c884220ea 100644 --- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/AbstractExecutionTest.java +++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/AbstractExecutionTest.java @@ -18,7 +18,6 @@ package org.apache.ignite.internal.processors.query.calcite.exec.rel; import java.util.ArrayDeque; -import java.util.ArrayList; import java.util.Deque; import java.util.HashMap; import java.util.List; @@ -31,6 +30,8 @@ import java.util.concurrent.locks.LockSupport; import java.util.stream.Collectors; import java.util.stream.IntStream; +import java.util.stream.Stream; + import com.google.common.collect.ImmutableMap; import org.apache.ignite.internal.GridKernalContext; import org.apache.ignite.internal.processors.query.calcite.exec.ArrayRowHandler; @@ -82,20 +83,48 @@ public class AbstractExecutionTest extends GridCommonAbstractTest { protected int nodesCnt = 3; /** */ - @Parameterized.Parameters(name = "Execution direction = {0}") - public static List parameters() { - ArrayList params = new ArrayList<>(); + enum ExecutionStrategy { + /** */ + FIFO { + @Override public T2 nextTask(Deque> tasks) { + return tasks.pollFirst(); + } + }, - params.add(new Object[]{true}); - params.add(new Object[]{false}); - params.add(new Object[]{null}); + /** */ + LIFO { + @Override public T2 nextTask(Deque> tasks) { + return tasks.pollLast(); + } + }, - return params; + /** */ + RANDOM { + @Override public T2 nextTask(Deque> tasks) { + return ThreadLocalRandom.current().nextBoolean() ? tasks.pollLast() : tasks.pollFirst(); + } + }; + + /** + * Returns a next task according to the strategy. + * + * @param tasks Task list. + * @return Next task. + */ + public T2 nextTask(Deque> tasks) { + throw new UnsupportedOperationException(); + } + } + + /** */ + @Parameterized.Parameters(name = "Execution strategy = {0}") + public static List parameters() { + return Stream.of(ExecutionStrategy.values()).map(s -> new Object[]{s}).collect(Collectors.toList()); } /** Execution direction. */ @Parameterized.Parameter - public static Boolean execDir; + public static ExecutionStrategy execStgy; /** */ @Before @@ -161,8 +190,7 @@ public IgniteTestStripedThreadPoolExecutor(int concurrentLvl, String igniteInsta while (!stop.get()) { synchronized (tasks) { while (!tasks.isEmpty()) { - T2 r = execDir != null ? (execDir ? tasks.pollLast() : tasks.pollFirst()) : - ThreadLocalRandom.current().nextBoolean() ? tasks.pollLast() : tasks.pollFirst(); + T2 r = execStgy.nextTask(tasks); exec.execute(() -> super.execute(r.getKey(), r.getValue())); }