Skip to content

Commit 592eedb

Browse files
committed
Make persistent tasks work.
Made persistent tasks executors pluggable.
1 parent 07e727c commit 592eedb

File tree

4 files changed

+73
-22
lines changed

4 files changed

+73
-22
lines changed

server/src/main/java/org/elasticsearch/action/ActionModule.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,9 +312,12 @@
312312
import org.elasticsearch.rest.action.search.RestMultiSearchAction;
313313
import org.elasticsearch.rest.action.search.RestSearchAction;
314314
import org.elasticsearch.rest.action.search.RestSearchScrollAction;
315-
import org.elasticsearch.tasks.TaskManager;
316315
import org.elasticsearch.threadpool.ThreadPool;
317316
import org.elasticsearch.usage.UsageService;
317+
import org.elasticsearch.persistent.CompletionPersistentTaskAction;
318+
import org.elasticsearch.persistent.RemovePersistentTaskAction;
319+
import org.elasticsearch.persistent.StartPersistentTaskAction;
320+
import org.elasticsearch.persistent.UpdatePersistentTaskStatusAction;
318321

319322
import java.util.ArrayList;
320323
import java.util.Collections;
@@ -507,6 +510,12 @@ public <Request extends ActionRequest, Response extends ActionResponse> void reg
507510

508511
actionPlugins.stream().flatMap(p -> p.getActions().stream()).forEach(actions::register);
509512

513+
// Persistent tasks:
514+
actions.register(StartPersistentTaskAction.INSTANCE, StartPersistentTaskAction.TransportAction.class);
515+
actions.register(UpdatePersistentTaskStatusAction.INSTANCE, UpdatePersistentTaskStatusAction.TransportAction.class);
516+
actions.register(CompletionPersistentTaskAction.INSTANCE, CompletionPersistentTaskAction.TransportAction.class);
517+
actions.register(RemovePersistentTaskAction.INSTANCE, RemovePersistentTaskAction.TransportAction.class);
518+
510519
return unmodifiableMap(actions.getRegistry());
511520
}
512521

server/src/main/java/org/elasticsearch/node/Node.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@
117117
import org.elasticsearch.plugins.MapperPlugin;
118118
import org.elasticsearch.plugins.MetaDataUpgrader;
119119
import org.elasticsearch.plugins.NetworkPlugin;
120+
import org.elasticsearch.plugins.PersistentTaskPlugin;
120121
import org.elasticsearch.plugins.Plugin;
121122
import org.elasticsearch.plugins.PluginsService;
122123
import org.elasticsearch.plugins.RepositoryPlugin;
@@ -139,6 +140,10 @@
139140
import org.elasticsearch.transport.TransportService;
140141
import org.elasticsearch.usage.UsageService;
141142
import org.elasticsearch.watcher.ResourceWatcherService;
143+
import org.elasticsearch.persistent.PersistentTasksClusterService;
144+
import org.elasticsearch.persistent.PersistentTasksExecutor;
145+
import org.elasticsearch.persistent.PersistentTasksExecutorRegistry;
146+
import org.elasticsearch.persistent.PersistentTasksService;
142147

143148
import java.io.BufferedWriter;
144149
import java.io.Closeable;
@@ -461,6 +466,17 @@ protected Node(final Environment environment, Collection<Class<? extends Plugin>
461466
threadPool, scriptModule.getScriptService(), bigArrays, searchModule.getFetchPhase(),
462467
responseCollectorService);
463468

469+
final List<PersistentTasksExecutor<?>> tasksExecutors = pluginsService
470+
.filterPlugins(PersistentTaskPlugin.class).stream()
471+
.map(p -> p.getPersistentTasksExecutor(clusterService))
472+
.flatMap(List::stream)
473+
.collect(toList());
474+
475+
final PersistentTasksExecutorRegistry registry = new PersistentTasksExecutorRegistry(settings, tasksExecutors);
476+
final PersistentTasksClusterService persistentTasksClusterService =
477+
new PersistentTasksClusterService(settings, registry, clusterService);
478+
final PersistentTasksService persistentTasksService = new PersistentTasksService(settings, clusterService, threadPool, client);
479+
464480
modules.add(b -> {
465481
b.bind(Node.class).toInstance(this);
466482
b.bind(NodeService.class).toInstance(nodeService);
@@ -504,6 +520,9 @@ protected Node(final Environment environment, Collection<Class<? extends Plugin>
504520
}
505521
httpBind.accept(b);
506522
pluginComponents.stream().forEach(p -> b.bind((Class) p.getClass()).toInstance(p));
523+
b.bind(PersistentTasksService.class).toInstance(persistentTasksService);
524+
b.bind(PersistentTasksClusterService.class).toInstance(persistentTasksClusterService);
525+
b.bind(PersistentTasksExecutorRegistry.class).toInstance(registry);
507526
}
508527
);
509528
injector = modules.createInjector();
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* Licensed to Elasticsearch under one or more contributor
3+
* license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright
5+
* ownership. Elasticsearch licenses this file to you under
6+
* the Apache License, Version 2.0 (the "License"); you may
7+
* not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
package org.elasticsearch.plugins;
20+
21+
import org.elasticsearch.cluster.service.ClusterService;
22+
import org.elasticsearch.persistent.PersistentTasksExecutor;
23+
24+
import java.util.Collections;
25+
import java.util.List;
26+
27+
/**
28+
* Plugin for registering persistent tasks executors.
29+
*/
30+
public interface PersistentTaskPlugin {
31+
32+
/**
33+
* Returns additional persistent tasks executors added by this plugin.
34+
*/
35+
default List<PersistentTasksExecutor<?>> getPersistentTasksExecutor(ClusterService clusterService) {
36+
return Collections.emptyList();
37+
}
38+
39+
}

server/src/test/java/org/elasticsearch/persistent/TestPersistentTasksPlugin.java

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import org.elasticsearch.env.Environment;
5555
import org.elasticsearch.env.NodeEnvironment;
5656
import org.elasticsearch.plugins.ActionPlugin;
57+
import org.elasticsearch.plugins.PersistentTaskPlugin;
5758
import org.elasticsearch.plugins.Plugin;
5859
import org.elasticsearch.script.ScriptService;
5960
import org.elasticsearch.tasks.Task;
@@ -87,33 +88,16 @@
8788
/**
8889
* A plugin that adds a test persistent task.
8990
*/
90-
public class TestPersistentTasksPlugin extends Plugin implements ActionPlugin {
91+
public class TestPersistentTasksPlugin extends Plugin implements ActionPlugin, PersistentTaskPlugin {
9192

9293
@Override
9394
public List<ActionHandler<? extends ActionRequest, ? extends ActionResponse>> getActions() {
94-
return Arrays.asList(
95-
new ActionHandler<>(TestTaskAction.INSTANCE, TransportTestTaskAction.class),
96-
new ActionHandler<>(StartPersistentTaskAction.INSTANCE, StartPersistentTaskAction.TransportAction.class),
97-
new ActionHandler<>(UpdatePersistentTaskStatusAction.INSTANCE, UpdatePersistentTaskStatusAction.TransportAction.class),
98-
new ActionHandler<>(CompletionPersistentTaskAction.INSTANCE, CompletionPersistentTaskAction.TransportAction.class),
99-
new ActionHandler<>(RemovePersistentTaskAction.INSTANCE, RemovePersistentTaskAction.TransportAction.class)
100-
);
95+
return Collections.singletonList(new ActionHandler<>(TestTaskAction.INSTANCE, TransportTestTaskAction.class));
10196
}
10297

10398
@Override
104-
public Collection<Object> createComponents(Client client, ClusterService clusterService, ThreadPool threadPool,
105-
ResourceWatcherService resourceWatcherService, ScriptService scriptService,
106-
NamedXContentRegistry xContentRegistry, Environment environment,
107-
NodeEnvironment nodeEnvironment, NamedWriteableRegistry namedWriteableRegistry) {
108-
PersistentTasksService persistentTasksService = new PersistentTasksService(Settings.EMPTY, clusterService, threadPool, client);
109-
TestPersistentTasksExecutor testPersistentAction = new TestPersistentTasksExecutor(Settings.EMPTY, clusterService);
110-
PersistentTasksExecutorRegistry persistentTasksExecutorRegistry = new PersistentTasksExecutorRegistry(Settings.EMPTY,
111-
Collections.singletonList(testPersistentAction));
112-
return Arrays.asList(
113-
persistentTasksService,
114-
persistentTasksExecutorRegistry,
115-
new PersistentTasksClusterService(Settings.EMPTY, persistentTasksExecutorRegistry, clusterService)
116-
);
99+
public List<PersistentTasksExecutor<?>> getPersistentTasksExecutor(ClusterService clusterService) {
100+
return Collections.singletonList(new TestPersistentTasksExecutor(Settings.EMPTY, clusterService));
117101
}
118102

119103
@Override

0 commit comments

Comments
 (0)