Removed the watcher executor thread pool as it is redundant now with the async indexing.

Original commit: elastic/x-pack-elasticsearch@6afaf0308b
This commit is contained in:
Martijn van Groningen 2015-04-22 22:21:58 +02:00
parent 7851ad6993
commit 34c9d6af62
11 changed files with 25 additions and 141 deletions

View File

@ -16,7 +16,6 @@ import org.elasticsearch.watcher.actions.email.service.InternalEmailService;
import org.elasticsearch.watcher.history.HistoryModule; import org.elasticsearch.watcher.history.HistoryModule;
import org.elasticsearch.watcher.license.LicenseService; import org.elasticsearch.watcher.license.LicenseService;
import org.elasticsearch.watcher.support.init.InitializingService; import org.elasticsearch.watcher.support.init.InitializingService;
import org.elasticsearch.watcher.trigger.schedule.ScheduleModule;
import java.util.Collection; import java.util.Collection;
@ -69,7 +68,6 @@ public class WatcherPlugin extends AbstractPlugin {
return ImmutableSettings.EMPTY; return ImmutableSettings.EMPTY;
} }
Settings additionalSettings = settingsBuilder() Settings additionalSettings = settingsBuilder()
.put(ScheduleModule.additionalSettings(settings))
.put(HistoryModule.additionalSettings(settings)) .put(HistoryModule.additionalSettings(settings))
.build(); .build();

View File

@ -35,9 +35,7 @@ public abstract class CronnableSchedule implements Schedule {
@Override @Override
public long nextScheduledTimeAfter(long startTime, long time) { public long nextScheduledTimeAfter(long startTime, long time) {
if (time <= startTime) { assert time >= startTime;
return startTime;
}
long nextTime = Long.MAX_VALUE; long nextTime = Long.MAX_VALUE;
for (Cron cron : crons) { for (Cron cron : crons) {
nextTime = Math.min(nextTime, cron.getNextValidTimeAfter(time)); nextTime = Math.min(nextTime, cron.getNextValidTimeAfter(time));

View File

@ -34,8 +34,9 @@ public class IntervalSchedule implements Schedule {
@Override @Override
public long nextScheduledTimeAfter(long startTime, long time) { public long nextScheduledTimeAfter(long startTime, long time) {
if (time <= startTime) { assert time >= startTime;
return startTime; if (startTime == time) {
time++;
} }
long delta = time - startTime; long delta = time - startTime;
return startTime + (delta / interval.millis + 1) * interval.millis; return startTime + (delta / interval.millis + 1) * interval.millis;

View File

@ -8,12 +8,10 @@ package org.elasticsearch.watcher.trigger.schedule;
import org.elasticsearch.common.inject.AbstractModule; import org.elasticsearch.common.inject.AbstractModule;
import org.elasticsearch.common.inject.multibindings.MapBinder; import org.elasticsearch.common.inject.multibindings.MapBinder;
import org.elasticsearch.common.logging.Loggers; import org.elasticsearch.common.logging.Loggers;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.util.concurrent.EsExecutors;
import org.elasticsearch.watcher.support.ThreadPoolSettingsBuilder;
import org.elasticsearch.watcher.trigger.TriggerEngine; import org.elasticsearch.watcher.trigger.TriggerEngine;
import org.elasticsearch.watcher.trigger.schedule.engine.*; import org.elasticsearch.watcher.trigger.schedule.engine.SchedulerScheduleTriggerEngine;
import org.elasticsearch.watcher.trigger.schedule.engine.TickerScheduleTriggerEngine;
import java.util.HashMap; import java.util.HashMap;
import java.util.Locale; import java.util.Locale;
@ -24,8 +22,6 @@ import java.util.Map;
*/ */
public class ScheduleModule extends AbstractModule { public class ScheduleModule extends AbstractModule {
public static final String THREAD_POOL_NAME = "watcher_scheduler";
private final Map<String, Class<? extends Schedule.Parser>> parsers = new HashMap<>(); private final Map<String, Class<? extends Schedule.Parser>> parsers = new HashMap<>();
public ScheduleModule() { public ScheduleModule() {
@ -59,20 +55,6 @@ public class ScheduleModule extends AbstractModule {
bind(ScheduleRegistry.class).asEagerSingleton(); bind(ScheduleRegistry.class).asEagerSingleton();
} }
public static Settings additionalSettings(Settings nodeSettings) {
Settings settings = nodeSettings.getAsSettings("threadpool." + THREAD_POOL_NAME);
if (!settings.names().isEmpty()) {
// scheduler TP is already configured in the node settings
// no need for additional settings
return ImmutableSettings.EMPTY;
}
int availableProcessors = EsExecutors.boundedNumberOfProcessors(settings);
return new ThreadPoolSettingsBuilder.Fixed(THREAD_POOL_NAME)
.size(availableProcessors * 2)
.queueSize(1000)
.build();
}
public enum Engine { public enum Engine {
SCHEDULER() { SCHEDULER() {

View File

@ -11,10 +11,6 @@ import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.joda.time.DateTime; import org.elasticsearch.common.joda.time.DateTime;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.util.concurrent.EsExecutors; import org.elasticsearch.common.util.concurrent.EsExecutors;
import org.elasticsearch.common.util.concurrent.EsRejectedExecutionException;
import org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor;
import org.elasticsearch.common.util.concurrent.XRejectedExecutionHandler;
import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.watcher.support.clock.Clock; import org.elasticsearch.watcher.support.clock.Clock;
import org.elasticsearch.watcher.trigger.TriggerEvent; import org.elasticsearch.watcher.trigger.TriggerEvent;
import org.elasticsearch.watcher.trigger.schedule.*; import org.elasticsearch.watcher.trigger.schedule.*;
@ -22,7 +18,10 @@ import org.elasticsearch.watcher.trigger.schedule.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.concurrent.*; import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
/** /**
* *
@ -32,13 +31,11 @@ public class SchedulerScheduleTriggerEngine extends ScheduleTriggerEngine {
private final Clock clock; private final Clock clock;
private volatile Schedules schedules; private volatile Schedules schedules;
private ScheduledExecutorService scheduler; private ScheduledExecutorService scheduler;
private EsThreadPoolExecutor executor;
@Inject @Inject
public SchedulerScheduleTriggerEngine(Settings settings, ScheduleRegistry scheduleRegistry, Clock clock, ThreadPool threadPool) { public SchedulerScheduleTriggerEngine(Settings settings, ScheduleRegistry scheduleRegistry, Clock clock) {
super(settings, scheduleRegistry); super(settings, scheduleRegistry);
this.clock = clock; this.clock = clock;
this.executor = (EsThreadPoolExecutor) threadPool.executor(ScheduleModule.THREAD_POOL_NAME);
} }
@Override @Override
@ -66,7 +63,6 @@ public class SchedulerScheduleTriggerEngine extends ScheduleTriggerEngine {
} catch (InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
} }
executor.getQueue().clear();
logger.debug("schedule engine stopped"); logger.debug("schedule engine stopped");
} }
@ -92,19 +88,7 @@ public class SchedulerScheduleTriggerEngine extends ScheduleTriggerEngine {
logger.trace("triggered job [{}] at [{}] (scheduled time was [{}])", name, new DateTime(triggeredTime), new DateTime(scheduledTime)); logger.trace("triggered job [{}] at [{}] (scheduled time was [{}])", name, new DateTime(triggeredTime), new DateTime(scheduledTime));
final ScheduleTriggerEvent event = new ScheduleTriggerEvent(name, new DateTime(triggeredTime), new DateTime(scheduledTime)); final ScheduleTriggerEvent event = new ScheduleTriggerEvent(name, new DateTime(triggeredTime), new DateTime(scheduledTime));
for (Listener listener : listeners) { for (Listener listener : listeners) {
try { listener.triggered(ImmutableList.<TriggerEvent>of(event));
executor.execute(new ListenerRunnable(listener, event));
} catch (EsRejectedExecutionException e) {
if (logger.isDebugEnabled()) {
RejectedExecutionHandler rejectedExecutionHandler = executor.getRejectedExecutionHandler();
long rejected = -1;
if (rejectedExecutionHandler instanceof XRejectedExecutionHandler) {
rejected = ((XRejectedExecutionHandler) rejectedExecutionHandler).rejected();
}
int queueCapacity = executor.getQueue().size();
logger.debug("can't execute trigger on the [{}] thread pool, rejected tasks [{}] queue capacity [{}]", ScheduleModule.THREAD_POOL_NAME, rejected, queueCapacity);
}
}
} }
} }
@ -146,22 +130,6 @@ public class SchedulerScheduleTriggerEngine extends ScheduleTriggerEngine {
} }
} }
static class ListenerRunnable implements Runnable {
private final Listener listener;
private final ScheduleTriggerEvent event;
public ListenerRunnable(Listener listener, ScheduleTriggerEvent event) {
this.listener = listener;
this.event = event;
}
@Override
public void run() {
listener.triggered(ImmutableList.<TriggerEvent>of(event));
}
}
static class Schedules { static class Schedules {
private final ActiveSchedule[] schedules; private final ActiveSchedule[] schedules;

View File

@ -10,10 +10,6 @@ import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.joda.time.DateTime; import org.elasticsearch.common.joda.time.DateTime;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.util.concurrent.EsRejectedExecutionException;
import org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor;
import org.elasticsearch.common.util.concurrent.XRejectedExecutionHandler;
import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.watcher.support.clock.Clock; import org.elasticsearch.watcher.support.clock.Clock;
import org.elasticsearch.watcher.trigger.TriggerEvent; import org.elasticsearch.watcher.trigger.TriggerEvent;
import org.elasticsearch.watcher.trigger.schedule.*; import org.elasticsearch.watcher.trigger.schedule.*;
@ -24,7 +20,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.RejectedExecutionHandler;
/** /**
* *
@ -36,15 +31,13 @@ public class TickerScheduleTriggerEngine extends ScheduleTriggerEngine {
private final TimeValue tickInterval; private final TimeValue tickInterval;
private volatile Map<String, ActiveSchedule> schedules; private volatile Map<String, ActiveSchedule> schedules;
private Ticker ticker; private Ticker ticker;
private EsThreadPoolExecutor executor;
@Inject @Inject
public TickerScheduleTriggerEngine(Settings settings, ScheduleRegistry scheduleRegistry, Clock clock, ThreadPool threadPool) { public TickerScheduleTriggerEngine(Settings settings, ScheduleRegistry scheduleRegistry, Clock clock) {
super(settings, scheduleRegistry); super(settings, scheduleRegistry);
this.tickInterval = settings.getAsTime("watcher.trigger.schedule.ticker.tick_interval", TimeValue.timeValueMillis(500)); this.tickInterval = settings.getAsTime("watcher.trigger.schedule.ticker.tick_interval", TimeValue.timeValueMillis(500));
this.schedules = new ConcurrentHashMap<>(); this.schedules = new ConcurrentHashMap<>();
this.clock = clock; this.clock = clock;
this.executor = (EsThreadPoolExecutor) threadPool.executor(ScheduleModule.THREAD_POOL_NAME);
} }
@Override @Override
@ -64,7 +57,6 @@ public class TickerScheduleTriggerEngine extends ScheduleTriggerEngine {
@Override @Override
public void stop() { public void stop() {
ticker.close(); ticker.close();
executor.getQueue().clear();
} }
@Override @Override
@ -100,19 +92,7 @@ public class TickerScheduleTriggerEngine extends ScheduleTriggerEngine {
protected void notifyListeners(List<TriggerEvent> events) { protected void notifyListeners(List<TriggerEvent> events) {
for (Listener listener : listeners) { for (Listener listener : listeners) {
try { listener.triggered(events);
executor.execute(new ListenerRunnable(listener, events));
} catch (EsRejectedExecutionException e) {
if (logger.isDebugEnabled()) {
RejectedExecutionHandler rejectedExecutionHandler = executor.getRejectedExecutionHandler();
long rejected = -1;
if (rejectedExecutionHandler instanceof XRejectedExecutionHandler) {
rejected = ((XRejectedExecutionHandler) rejectedExecutionHandler).rejected();
}
int queueCapacity = executor.getQueue().size();
logger.debug("can't execute trigger on the [" + ScheduleModule.THREAD_POOL_NAME + "] thread pool, rejected tasks [" + rejected + "] queue capacity [" + queueCapacity +"]");
}
}
} }
} }
@ -146,22 +126,6 @@ public class TickerScheduleTriggerEngine extends ScheduleTriggerEngine {
} }
} }
static class ListenerRunnable implements Runnable {
private final Listener listener;
private final List<TriggerEvent> events;
public ListenerRunnable(Listener listener, List<TriggerEvent> events) {
this.listener = listener;
this.events = events;
}
@Override
public void run() {
listener.triggered(events);
}
}
class Ticker extends Thread { class Ticker extends Thread {
private volatile boolean active = true; private volatile boolean active = true;

View File

@ -8,7 +8,6 @@ package org.elasticsearch.watcher.test.bench;
import org.elasticsearch.common.metrics.MeanMetric; import org.elasticsearch.common.metrics.MeanMetric;
import org.elasticsearch.common.settings.ImmutableSettings; import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.watcher.support.clock.SystemClock; import org.elasticsearch.watcher.support.clock.SystemClock;
import org.elasticsearch.watcher.trigger.Trigger; import org.elasticsearch.watcher.trigger.Trigger;
import org.elasticsearch.watcher.trigger.TriggerEngine; import org.elasticsearch.watcher.trigger.TriggerEngine;
@ -49,14 +48,12 @@ public class ScheduleEngineTriggerBenchmark {
System.out.println("Running benchmark with numWatches=" + numWatches + " benchTime=" + benchTime + " interval=" + interval); System.out.println("Running benchmark with numWatches=" + numWatches + " benchTime=" + benchTime + " interval=" + interval);
Settings settings = ImmutableSettings.builder() Settings settings = ImmutableSettings.builder()
.put(ScheduleModule.additionalSettings(ImmutableSettings.EMPTY))
.put("name", "test") .put("name", "test")
.build(); .build();
List<TriggerEngine.Job> jobs = new ArrayList<>(numWatches); List<TriggerEngine.Job> jobs = new ArrayList<>(numWatches);
for (int i = 0; i < numWatches; i++) { for (int i = 0; i < numWatches; i++) {
jobs.add(new SimpleJob("job_" + i, interval(interval + "s"))); jobs.add(new SimpleJob("job_" + i, interval(interval + "s")));
} }
ThreadPool threadPool = new ThreadPool(settings, null);
ScheduleRegistry scheduleRegistry = new ScheduleRegistry(Collections.<String, Schedule.Parser>emptyMap()); ScheduleRegistry scheduleRegistry = new ScheduleRegistry(Collections.<String, Schedule.Parser>emptyMap());
List<String> impls = new ArrayList<>(Arrays.asList(new String[]{"schedule", "ticker"})); List<String> impls = new ArrayList<>(Arrays.asList(new String[]{"schedule", "ticker"}));
Collections.shuffle(impls); Collections.shuffle(impls);
@ -75,7 +72,7 @@ public class ScheduleEngineTriggerBenchmark {
final ScheduleTriggerEngine scheduler; final ScheduleTriggerEngine scheduler;
switch (impl) { switch (impl) {
case "schedule": case "schedule":
scheduler = new SchedulerScheduleTriggerEngine(ImmutableSettings.EMPTY, scheduleRegistry, SystemClock.INSTANCE, threadPool) { scheduler = new SchedulerScheduleTriggerEngine(ImmutableSettings.EMPTY, scheduleRegistry, SystemClock.INSTANCE) {
@Override @Override
protected void notifyListeners(String name, long triggeredTime, long scheduledTime) { protected void notifyListeners(String name, long triggeredTime, long scheduledTime) {
@ -86,7 +83,7 @@ public class ScheduleEngineTriggerBenchmark {
}; };
break; break;
case "ticker": case "ticker":
scheduler = new TickerScheduleTriggerEngine(settings, scheduleRegistry, SystemClock.INSTANCE, threadPool) { scheduler = new TickerScheduleTriggerEngine(settings, scheduleRegistry, SystemClock.INSTANCE) {
@Override @Override
protected void notifyListeners(List<TriggerEvent> events) { protected void notifyListeners(List<TriggerEvent> events) {

View File

@ -12,6 +12,7 @@ import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client; import org.elasticsearch.client.Client;
import org.elasticsearch.common.Strings; import org.elasticsearch.common.Strings;
import org.elasticsearch.common.joda.time.DateTime;
import org.elasticsearch.common.metrics.MeanMetric; import org.elasticsearch.common.metrics.MeanMetric;
import org.elasticsearch.common.settings.ImmutableSettings; import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
@ -150,6 +151,7 @@ public class WatcherScheduleEngineBenchmark {
if (actualLoadedWatches != numWatches) { if (actualLoadedWatches != numWatches) {
throw new IllegalStateException("Expected [" + numWatches + "] watched to be loaded, but only [" + actualLoadedWatches + "] watches were actually loaded"); throw new IllegalStateException("Expected [" + numWatches + "] watched to be loaded, but only [" + actualLoadedWatches + "] watches were actually loaded");
} }
long startTime = clock.millis();
System.out.println("==> watcher started, waiting [" + benchTime + "] seconds now..."); System.out.println("==> watcher started, waiting [" + benchTime + "] seconds now...");
final AtomicBoolean start = new AtomicBoolean(true); final AtomicBoolean start = new AtomicBoolean(true);
@ -170,7 +172,6 @@ public class WatcherScheduleEngineBenchmark {
} }
}); });
sampleThread.start(); sampleThread.start();
long startTime = clock.millis();
Thread.sleep(benchTime); Thread.sleep(benchTime);
long endTime = clock.millis(); long endTime = clock.millis();
start.set(false); start.set(false);
@ -179,14 +180,12 @@ public class WatcherScheduleEngineBenchmark {
NodesStatsResponse response = client.admin().cluster().prepareNodesStats().setThreadPool(true).get(); NodesStatsResponse response = client.admin().cluster().prepareNodesStats().setThreadPool(true).get();
for (NodeStats nodeStats : response) { for (NodeStats nodeStats : response) {
for (ThreadPoolStats.Stats threadPoolStats : nodeStats.getThreadPool()) { for (ThreadPoolStats.Stats threadPoolStats : nodeStats.getThreadPool()) {
if ("watcher_scheduler".equals(threadPoolStats.getName())) { if ("watcher".equals(threadPoolStats.getName())) {
stats.setWatcherExecutorThreadPoolStats(threadPoolStats);
} else if ("watcher".equals(threadPoolStats.getName())) {
stats.setWatcherThreadPoolStats(threadPoolStats); stats.setWatcherThreadPoolStats(threadPoolStats);
} }
} }
} }
client.admin().indices().prepareRefresh("_all").get(); client.admin().indices().prepareRefresh(HistoryStore.INDEX_PREFIX + "*").get();
SearchResponse searchResponse = client.prepareSearch(HistoryStore.INDEX_PREFIX + "*") SearchResponse searchResponse = client.prepareSearch(HistoryStore.INDEX_PREFIX + "*")
.setQuery(QueryBuilders.rangeQuery("trigger_event.schedule.scheduled_time").gte(startTime).lte(endTime)) .setQuery(QueryBuilders.rangeQuery("trigger_event.schedule.scheduled_time").gte(startTime).lte(endTime))
.addAggregation(terms("state").field("state")) .addAggregation(terms("state").field("state"))
@ -224,8 +223,8 @@ public class WatcherScheduleEngineBenchmark {
System.out.println(); System.out.println();
System.out.println("### Watcher execution and watcher thread pool stats"); System.out.println("### Watcher execution and watcher thread pool stats");
System.out.println(); System.out.println();
System.out.println(" Name | avg heap used | wetp rejected | wetp completed | wtp rejected | wtp completed"); System.out.println(" Name | avg heap used | wtp rejected | wtp completed");
System.out.println("---------- | ------------- | ------------- | -------------- | ------------ | -------------"); System.out.println("---------- | ------------- | ------------ | -------------");
for (BenchStats benchStats : results.values()) { for (BenchStats benchStats : results.values()) {
benchStats.printThreadStats(); benchStats.printThreadStats();
} }
@ -252,9 +251,7 @@ public class WatcherScheduleEngineBenchmark {
private final String name; private final String name;
private final int numWatches; private final int numWatches;
private ThreadPoolStats.Stats watcherThreadPoolStats; private ThreadPoolStats.Stats watcherThreadPoolStats;
private ThreadPoolStats.Stats watcherExecutorThreadPoolStats;
private Terms stateStats; private Terms stateStats;
private Histogram delayStats; private Histogram delayStats;
@ -284,14 +281,6 @@ public class WatcherScheduleEngineBenchmark {
this.watcherThreadPoolStats = watcherThreadPoolStats; this.watcherThreadPoolStats = watcherThreadPoolStats;
} }
public ThreadPoolStats.Stats getWatcherExecutorThreadPoolStats() {
return watcherExecutorThreadPoolStats;
}
public void setWatcherExecutorThreadPoolStats(ThreadPoolStats.Stats watcherExecutorThreadPoolStats) {
this.watcherExecutorThreadPoolStats = watcherExecutorThreadPoolStats;
}
public Terms getStateStats() { public Terms getStateStats() {
return stateStats; return stateStats;
} }
@ -323,9 +312,8 @@ public class WatcherScheduleEngineBenchmark {
public void printThreadStats() throws IOException { public void printThreadStats() throws IOException {
System.out.printf( System.out.printf(
Locale.ENGLISH, Locale.ENGLISH,
"%10s | %13s | %13d | %14d | %12d | %13d \n", "%10s | %13s | %12d | %13d \n",
name, new ByteSizeValue(avgHeapUsed), name, new ByteSizeValue(avgHeapUsed),
watcherExecutorThreadPoolStats.getRejected(), watcherExecutorThreadPoolStats.getCompleted(),
watcherThreadPoolStats.getRejected(), watcherThreadPoolStats.getCompleted() watcherThreadPoolStats.getRejected(), watcherThreadPoolStats.getCompleted()
); );
} }

View File

@ -8,11 +8,7 @@ package org.elasticsearch.watcher.trigger.schedule.engine;
import org.apache.lucene.util.LuceneTestCase.Slow; import org.apache.lucene.util.LuceneTestCase.Slow;
import org.elasticsearch.common.joda.time.DateTime; import org.elasticsearch.common.joda.time.DateTime;
import org.elasticsearch.common.joda.time.DateTimeZone; import org.elasticsearch.common.joda.time.DateTimeZone;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.test.ElasticsearchTestCase; import org.elasticsearch.test.ElasticsearchTestCase;
import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.watcher.WatcherPlugin;
import org.elasticsearch.watcher.trigger.Trigger; import org.elasticsearch.watcher.trigger.Trigger;
import org.elasticsearch.watcher.trigger.TriggerEngine; import org.elasticsearch.watcher.trigger.TriggerEngine;
import org.elasticsearch.watcher.trigger.TriggerEvent; import org.elasticsearch.watcher.trigger.TriggerEvent;
@ -42,17 +38,10 @@ import static org.hamcrest.Matchers.is;
@Ignore @Ignore
public abstract class BaseTriggerEngineTests extends ElasticsearchTestCase { public abstract class BaseTriggerEngineTests extends ElasticsearchTestCase {
protected ThreadPool threadPool;
private TriggerEngine engine; private TriggerEngine engine;
@Before @Before
public void init() throws Exception { public void init() throws Exception {
WatcherPlugin plugin = new WatcherPlugin(ImmutableSettings.EMPTY);
Settings settings = ImmutableSettings.builder()
.put(plugin.additionalSettings())
.put("name", "test")
.build();
threadPool = new ThreadPool(settings, null);
engine = createEngine(); engine = createEngine();
} }
@ -61,7 +50,6 @@ public abstract class BaseTriggerEngineTests extends ElasticsearchTestCase {
@After @After
public void cleanup() throws Exception { public void cleanup() throws Exception {
engine.stop(); engine.stop();
threadPool.shutdownNow();
} }
@Test @Test

View File

@ -20,7 +20,7 @@ import static org.mockito.Mockito.mock;
public class SchedulerScheduleEngineTests extends BaseTriggerEngineTests { public class SchedulerScheduleEngineTests extends BaseTriggerEngineTests {
protected TriggerEngine createEngine() { protected TriggerEngine createEngine() {
return new SchedulerScheduleTriggerEngine(ImmutableSettings.EMPTY, mock(ScheduleRegistry.class), SystemClock.INSTANCE, threadPool); return new SchedulerScheduleTriggerEngine(ImmutableSettings.EMPTY, mock(ScheduleRegistry.class), SystemClock.INSTANCE);
} }
} }

View File

@ -18,6 +18,6 @@ public class TickerScheduleEngineTests extends BaseTriggerEngineTests {
@Override @Override
protected TriggerEngine createEngine() { protected TriggerEngine createEngine() {
return new TickerScheduleTriggerEngine(ImmutableSettings.EMPTY, mock(ScheduleRegistry.class), SystemClock.INSTANCE, threadPool); return new TickerScheduleTriggerEngine(ImmutableSettings.EMPTY, mock(ScheduleRegistry.class), SystemClock.INSTANCE);
} }
} }