Skip to content

Commit 5db7682

Browse files
committed
Deguice ActionFilter (#26691)
Allows to instantiate TransportAction instances without Guice.
1 parent 89e606e commit 5db7682

File tree

7 files changed

+67
-43
lines changed

7 files changed

+67
-43
lines changed

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

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@
315315
import org.elasticsearch.usage.UsageService;
316316

317317
import java.util.ArrayList;
318+
import java.util.Collections;
318319
import java.util.List;
319320
import java.util.Map;
320321
import java.util.Set;
@@ -341,7 +342,7 @@ public class ActionModule extends AbstractModule {
341342
private final SettingsFilter settingsFilter;
342343
private final List<ActionPlugin> actionPlugins;
343344
private final Map<String, ActionHandler<?, ?>> actions;
344-
private final List<Class<? extends ActionFilter>> actionFilters;
345+
private final ActionFilters actionFilters;
345346
private final AutoCreateIndex autoCreateIndex;
346347
private final DestructiveOperations destructiveOperations;
347348
private final RestController restController;
@@ -503,8 +504,9 @@ public <Request extends ActionRequest, Response extends ActionResponse> void reg
503504
return unmodifiableMap(actions.getRegistry());
504505
}
505506

506-
private List<Class<? extends ActionFilter>> setupActionFilters(List<ActionPlugin> actionPlugins) {
507-
return unmodifiableList(actionPlugins.stream().flatMap(p -> p.getActionFilters().stream()).collect(Collectors.toList()));
507+
private ActionFilters setupActionFilters(List<ActionPlugin> actionPlugins) {
508+
return new ActionFilters(
509+
Collections.unmodifiableSet(actionPlugins.stream().flatMap(p -> p.getActionFilters().stream()).collect(Collectors.toSet())));
508510
}
509511

510512
public void initRestHandlers(Supplier<DiscoveryNodes> nodesInCluster) {
@@ -649,11 +651,7 @@ public void initRestHandlers(Supplier<DiscoveryNodes> nodesInCluster) {
649651

650652
@Override
651653
protected void configure() {
652-
Multibinder<ActionFilter> actionFilterMultibinder = Multibinder.newSetBinder(binder(), ActionFilter.class);
653-
for (Class<? extends ActionFilter> actionFilter : actionFilters) {
654-
actionFilterMultibinder.addBinding().to(actionFilter);
655-
}
656-
bind(ActionFilters.class).asEagerSingleton();
654+
bind(ActionFilters.class).toInstance(actionFilters);
657655
bind(DestructiveOperations.class).toInstance(destructiveOperations);
658656

659657
if (false == transportClient) {
@@ -676,6 +674,10 @@ protected void configure() {
676674
}
677675
}
678676

677+
public ActionFilters getActionFilters() {
678+
return actionFilters;
679+
}
680+
679681
public RestController getRestController() {
680682
return restController;
681683
}

core/src/main/java/org/elasticsearch/action/support/ActionFilters.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919

2020
package org.elasticsearch.action.support;
2121

22-
import org.elasticsearch.common.inject.Inject;
23-
2422
import java.util.Arrays;
2523
import java.util.Comparator;
2624
import java.util.Set;
@@ -32,7 +30,6 @@ public class ActionFilters {
3230

3331
private final ActionFilter[] filters;
3432

35-
@Inject
3633
public ActionFilters(Set<ActionFilter> actionFilters) {
3734
this.filters = actionFilters.toArray(new ActionFilter[actionFilters.size()]);
3835
Arrays.sort(filters, new Comparator<ActionFilter>() {

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -361,10 +361,6 @@ protected Node(final Environment environment, Collection<Class<? extends Plugin>
361361
CircuitBreakerService circuitBreakerService = createCircuitBreakerService(settingsModule.getSettings(),
362362
settingsModule.getClusterSettings());
363363
resourcesToClose.add(circuitBreakerService);
364-
ActionModule actionModule = new ActionModule(false, settings, clusterModule.getIndexNameExpressionResolver(),
365-
settingsModule.getIndexScopedSettings(), settingsModule.getClusterSettings(), settingsModule.getSettingsFilter(),
366-
threadPool, pluginsService.filterPlugins(ActionPlugin.class), client, circuitBreakerService, usageService);
367-
modules.add(actionModule);
368364
modules.add(new GatewayModule());
369365

370366

@@ -400,6 +396,12 @@ protected Node(final Environment environment, Collection<Class<? extends Plugin>
400396
scriptModule.getScriptService(), xContentRegistry, environment, nodeEnvironment,
401397
namedWriteableRegistry).stream())
402398
.collect(Collectors.toList());
399+
400+
ActionModule actionModule = new ActionModule(false, settings, clusterModule.getIndexNameExpressionResolver(),
401+
settingsModule.getIndexScopedSettings(), settingsModule.getClusterSettings(), settingsModule.getSettingsFilter(),
402+
threadPool, pluginsService.filterPlugins(ActionPlugin.class), client, circuitBreakerService, usageService);
403+
modules.add(actionModule);
404+
403405
final RestController restController = actionModule.getRestController();
404406
final NetworkModule networkModule = new NetworkModule(settings, false, pluginsService.filterPlugins(NetworkPlugin.class),
405407
threadPool, bigArrays, circuitBreakerService, namedWriteableRegistry, xContentRegistry, networkService, restController);

core/src/main/java/org/elasticsearch/plugins/ActionPlugin.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import org.elasticsearch.common.settings.Settings;
3434
import org.elasticsearch.common.settings.SettingsFilter;
3535
import org.elasticsearch.common.util.concurrent.ThreadContext;
36-
import org.elasticsearch.plugins.Plugin;
3736
import org.elasticsearch.rest.RestController;
3837
import org.elasticsearch.rest.RestHandler;
3938

@@ -66,7 +65,7 @@ public interface ActionPlugin {
6665
/**
6766
* Action filters added by this plugin.
6867
*/
69-
default List<Class<? extends ActionFilter>> getActionFilters() {
68+
default List<ActionFilter> getActionFilters() {
7069
return Collections.emptyList();
7170
}
7271
/**

core/src/test/java/org/elasticsearch/cluster/ClusterInfoServiceIT.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import org.elasticsearch.ElasticsearchException;
2424
import org.elasticsearch.action.ActionListener;
2525
import org.elasticsearch.action.ActionRequest;
26-
import org.elasticsearch.action.ActionResponse;
2726
import org.elasticsearch.action.admin.cluster.node.stats.NodesStatsAction;
2827
import org.elasticsearch.action.admin.indices.stats.IndicesStatsAction;
2928
import org.elasticsearch.action.support.ActionFilter;
@@ -35,7 +34,6 @@
3534
import org.elasticsearch.cluster.service.ClusterService;
3635
import org.elasticsearch.common.Strings;
3736
import org.elasticsearch.common.collect.ImmutableOpenMap;
38-
import org.elasticsearch.common.inject.Inject;
3937
import org.elasticsearch.common.settings.Settings;
4038
import org.elasticsearch.common.unit.TimeValue;
4139
import org.elasticsearch.env.NodeEnvironment;
@@ -48,9 +46,6 @@
4846
import org.elasticsearch.test.ESIntegTestCase;
4947
import org.elasticsearch.test.InternalTestCluster;
5048
import org.elasticsearch.test.transport.MockTransportService;
51-
import org.elasticsearch.transport.ConnectionProfile;
52-
import org.elasticsearch.transport.Transport;
53-
import org.elasticsearch.transport.TransportException;
5449
import org.elasticsearch.transport.TransportRequest;
5550
import org.elasticsearch.transport.TransportRequestOptions;
5651
import org.elasticsearch.transport.TransportService;
@@ -80,16 +75,22 @@
8075
public class ClusterInfoServiceIT extends ESIntegTestCase {
8176

8277
public static class TestPlugin extends Plugin implements ActionPlugin {
78+
79+
private final BlockingActionFilter blockingActionFilter;
80+
81+
public TestPlugin(Settings settings) {
82+
blockingActionFilter = new BlockingActionFilter(settings);
83+
}
84+
8385
@Override
84-
public List<Class<? extends ActionFilter>> getActionFilters() {
85-
return singletonList(BlockingActionFilter.class);
86+
public List<ActionFilter> getActionFilters() {
87+
return singletonList(blockingActionFilter);
8688
}
8789
}
8890

8991
public static class BlockingActionFilter extends org.elasticsearch.action.support.ActionFilter.Simple {
9092
private Set<String> blockedActions = emptySet();
9193

92-
@Inject
9394
public BlockingActionFilter(Settings settings) {
9495
super(settings);
9596
}

modules/reindex/src/test/java/org/elasticsearch/index/reindex/ReindexFromRemoteWithAuthTests.java

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
package org.elasticsearch.index.reindex;
2121

22+
import org.apache.lucene.util.SetOnce;
2223
import org.elasticsearch.ElasticsearchSecurityException;
2324
import org.elasticsearch.ElasticsearchStatusException;
2425
import org.elasticsearch.action.ActionListener;
@@ -29,23 +30,31 @@
2930
import org.elasticsearch.action.support.ActionFilter;
3031
import org.elasticsearch.action.support.ActionFilterChain;
3132
import org.elasticsearch.action.support.WriteRequest.RefreshPolicy;
33+
import org.elasticsearch.client.Client;
34+
import org.elasticsearch.cluster.service.ClusterService;
3235
import org.elasticsearch.common.bytes.BytesArray;
33-
import org.elasticsearch.common.inject.Inject;
36+
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
3437
import org.elasticsearch.common.network.NetworkModule;
3538
import org.elasticsearch.common.settings.Settings;
3639
import org.elasticsearch.common.transport.TransportAddress;
3740
import org.elasticsearch.common.util.concurrent.ThreadContext;
41+
import org.elasticsearch.common.xcontent.NamedXContentRegistry;
42+
import org.elasticsearch.env.Environment;
43+
import org.elasticsearch.env.NodeEnvironment;
3844
import org.elasticsearch.plugins.ActionPlugin;
3945
import org.elasticsearch.plugins.Plugin;
4046
import org.elasticsearch.rest.RestStatus;
47+
import org.elasticsearch.script.ScriptService;
4148
import org.elasticsearch.tasks.Task;
4249
import org.elasticsearch.test.ESSingleNodeTestCase;
4350
import org.elasticsearch.threadpool.ThreadPool;
4451
import org.elasticsearch.transport.Netty4Plugin;
52+
import org.elasticsearch.watcher.ResourceWatcherService;
4553
import org.junit.Before;
4654

4755
import java.util.Arrays;
4856
import java.util.Collection;
57+
import java.util.Collections;
4958
import java.util.List;
5059
import java.util.Map;
5160

@@ -129,9 +138,21 @@ public void testReindexWithBadAuthentication() throws Exception {
129138
* Plugin that demands authentication.
130139
*/
131140
public static class TestPlugin extends Plugin implements ActionPlugin {
141+
142+
private final SetOnce<ReindexFromRemoteWithAuthTests.TestFilter> testFilter = new SetOnce<>();
143+
144+
@Override
145+
public Collection<Object> createComponents(Client client, ClusterService clusterService, ThreadPool threadPool,
146+
ResourceWatcherService resourceWatcherService, ScriptService scriptService,
147+
NamedXContentRegistry xContentRegistry, Environment environment,
148+
NodeEnvironment nodeEnvironment, NamedWriteableRegistry namedWriteableRegistry) {
149+
testFilter.set(new ReindexFromRemoteWithAuthTests.TestFilter(threadPool));
150+
return Collections.emptyList();
151+
}
152+
132153
@Override
133-
public List<Class<? extends ActionFilter>> getActionFilters() {
134-
return singletonList(ReindexFromRemoteWithAuthTests.TestFilter.class);
154+
public List<ActionFilter> getActionFilters() {
155+
return singletonList(testFilter.get());
135156
}
136157

137158
@Override
@@ -153,7 +174,6 @@ public static class TestFilter implements ActionFilter {
153174
private static final String EXAMPLE_HEADER = "Example-Header";
154175
private final ThreadContext context;
155176

156-
@Inject
157177
public TestFilter(ThreadPool threadPool) {
158178
context = threadPool.getThreadContext();
159179
}

qa/smoke-test-http/src/test/java/org/elasticsearch/http/ContextAndHeaderTransportIT.java

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package org.elasticsearch.http;
2121

2222
import org.apache.http.message.BasicHeader;
23+
import org.apache.lucene.util.SetOnce;
2324
import org.elasticsearch.action.ActionListener;
2425
import org.elasticsearch.action.ActionRequest;
2526
import org.elasticsearch.action.admin.indices.refresh.RefreshRequest;
@@ -31,12 +32,14 @@
3132
import org.elasticsearch.action.termvectors.MultiTermVectorsRequest;
3233
import org.elasticsearch.client.Client;
3334
import org.elasticsearch.client.Response;
34-
import org.elasticsearch.common.inject.AbstractModule;
35-
import org.elasticsearch.common.inject.Inject;
36-
import org.elasticsearch.common.inject.Module;
35+
import org.elasticsearch.cluster.service.ClusterService;
36+
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
3737
import org.elasticsearch.common.network.NetworkModule;
3838
import org.elasticsearch.common.settings.Settings;
39+
import org.elasticsearch.common.xcontent.NamedXContentRegistry;
3940
import org.elasticsearch.common.xcontent.XContentType;
41+
import org.elasticsearch.env.Environment;
42+
import org.elasticsearch.env.NodeEnvironment;
4043
import org.elasticsearch.index.query.BoolQueryBuilder;
4144
import org.elasticsearch.index.query.GeoShapeQueryBuilder;
4245
import org.elasticsearch.index.query.MoreLikeThisQueryBuilder;
@@ -46,8 +49,10 @@
4649
import org.elasticsearch.indices.TermsLookup;
4750
import org.elasticsearch.plugins.ActionPlugin;
4851
import org.elasticsearch.plugins.Plugin;
52+
import org.elasticsearch.script.ScriptService;
4953
import org.elasticsearch.test.ESIntegTestCase.ClusterScope;
5054
import org.elasticsearch.threadpool.ThreadPool;
55+
import org.elasticsearch.watcher.ResourceWatcherService;
5156
import org.junit.After;
5257
import org.junit.Before;
5358

@@ -282,21 +287,20 @@ private Client transportClient() {
282287

283288
public static class ActionLoggingPlugin extends Plugin implements ActionPlugin {
284289

285-
@Override
286-
public Collection<Module> createGuiceModules() {
287-
return Collections.<Module>singletonList(new ActionLoggingModule());
288-
}
290+
private final SetOnce<LoggingFilter> loggingFilter = new SetOnce<>();
289291

290292
@Override
291-
public List<Class<? extends ActionFilter>> getActionFilters() {
292-
return singletonList(LoggingFilter.class);
293+
public Collection<Object> createComponents(Client client, ClusterService clusterService, ThreadPool threadPool,
294+
ResourceWatcherService resourceWatcherService, ScriptService scriptService,
295+
NamedXContentRegistry xContentRegistry, Environment environment,
296+
NodeEnvironment nodeEnvironment, NamedWriteableRegistry namedWriteableRegistry) {
297+
loggingFilter.set(new LoggingFilter(clusterService.getSettings(), threadPool));
298+
return Collections.emptyList();
293299
}
294-
}
295300

296-
public static class ActionLoggingModule extends AbstractModule {
297301
@Override
298-
protected void configure() {
299-
bind(LoggingFilter.class).asEagerSingleton();
302+
public List<ActionFilter> getActionFilters() {
303+
return singletonList(loggingFilter.get());
300304
}
301305

302306
}
@@ -305,7 +309,6 @@ public static class LoggingFilter extends ActionFilter.Simple {
305309

306310
private final ThreadPool threadPool;
307311

308-
@Inject
309312
public LoggingFilter(Settings settings, ThreadPool pool) {
310313
super(settings);
311314
this.threadPool = pool;

0 commit comments

Comments
 (0)