Deprecated xpack "enable" settings should be no-ops (#55416) (#56167)

The following settings are now no-ops:

* xpack.flattened.enabled
* xpack.logstash.enabled
* xpack.rollup.enabled
* xpack.slm.enabled
* xpack.sql.enabled
* xpack.transform.enabled
* xpack.vectors.enabled

Since these settings no longer need to be checked, we can remove settings
parameters from a number of constructors and methods, and do so in this
commit.

We also update documentation to remove references to these settings.
This commit is contained in:
William Brafford 2020-05-05 10:40:49 -04:00 committed by GitHub
parent 94b349cd18
commit 3499fa917c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
49 changed files with 207 additions and 675 deletions

View File

@ -295,8 +295,15 @@ greater than `Integer.MAX_VALUE`. This leniency has been removed.
In Elasticsearch 7.8.0, the following settings no longer have any effect, and In Elasticsearch 7.8.0, the following settings no longer have any effect, and
have been deprecated: have been deprecated:
* `xpack.enrich.enabled`
* `xpack.flattened.enabled`
* `xpack.ilm.enabled` * `xpack.ilm.enabled`
* `xpack.monitoring.enabled` * `xpack.monitoring.enabled`
* `xpack.rollup.enabled`
* `xpack.slm.enabled`
* `xpack.sql.enabled`
* `xpack.transform.enabled`
* `xpack.vectors.enabled`
Previously, these settings could be set to `false` in order to disable the Previously, these settings could be set to `false` in order to disable the
feature's APIs in a cluster. As of 7.8.0, these basic license features are feature's APIs in a cluster. As of 7.8.0, these basic license features are
@ -306,15 +313,3 @@ If you have disabled ILM so that you can use another tool to manage Watcher
indices, the newly introduced `xpack.watcher.use_ilm_index_management` setting indices, the newly introduced `xpack.watcher.use_ilm_index_management` setting
may be set to false. may be set to false.
Additionally, the following settings have been deprecated:
* `xpack.enrich.enabled`
* `xpack.flattened.enabled`
* `xpack.rollup.enabled`
* `xpack.slm.enabled`
* `xpack.sql.enabled`
* `xpack.transform.enabled`
* `xpack.vectors.enabled`
In future releases, it will not be possible to disable the APIs for Enrichment,
Flattened mappings, Rollup, SLM, SQL, Transforms, and Vectors.

View File

@ -404,12 +404,9 @@ node.remote_cluster_client: false <8>
{transform-cap} nodes run {transforms} and handle {transform} API requests. {transform-cap} nodes run {transforms} and handle {transform} API requests.
If you want to use {transforms} in your cluster, you must not have If you want to use {transforms} in your cluster, you must have `node.transform`
`xpack.transform.enabled` set to `false` on any master-eligible or data set to `true` on at least one node. This is the default behavior. If you have
nodes. To use {transforms} in clients (including {kib}), do not disable this the {oss-dist}, do not use these settings. For more information, see
setting on any coordinating nodes. You must also have `node.transform` set to
`true` on at least one node. This is the default behavior. If you have the
{oss-dist}, do not use these settings. For more information, see
<<transform-settings>>. <<transform-settings>>.
To create a dedicated {transform} node in the {default-dist}, set: To create a dedicated {transform} node in the {default-dist}, set:

View File

@ -5,12 +5,11 @@
<titleabbrev>SQL access settings</titleabbrev> <titleabbrev>SQL access settings</titleabbrev>
++++ ++++
SQL Access is enabled by default. You can configure SQL Access is always enabled.
these SQL Access settings in the `elasticsearch.yml` file.
[float] [float]
[[general-sql-settings]] [[general-sql-settings]]
==== General SQL Access Settings ==== General SQL Access Settings
`xpack.sql.enabled`:: `xpack.sql.enabled`::
deprecated:[7.8.0,Basic License features should always be enabled] + deprecated:[7.8.0,Basic License features should always be enabled] +
Set to `false` to disable SQL Access on the node. This deprecated setting no longer has any effect.

View File

@ -21,34 +21,20 @@ file.
==== General {transforms} settings ==== General {transforms} settings
`node.transform`:: `node.transform`::
Set to `true` to identify the node as a _transform node_. If either `node.data` Set to `true` to identify the node as a _transform node_. If `node.data`
or `xpack.transform.enabled` is `false` for the node, the default value is is `false` for the node, the default value is `false`. Otherwise, the default
`false`. Otherwise, the default value is `true`. value is `true`.
+ +
If set to `false` in `elasticsearch.yml`, the node cannot run transforms. If set to If set to `false` in `elasticsearch.yml`, the node cannot run transforms. If
`true` but `xpack.transform.enabled` is set to `false`, the `node.transform` setting is you want to run transforms, there must be at least one transform node in your
ignored and the node cannot run transforms. If you want to run transforms, there must be at cluster. +
least one transform node in your cluster. +
+ +
IMPORTANT: It is advised to use the `node.transform` setting to constrain the execution IMPORTANT: On dedicated coordinating nodes or dedicated master nodes, disable
of transforms to certain nodes instead of using `xpack.transform.enabled`. On dedicated the node.transform role.
coordinating nodes or dedicated master nodes, disable the node.transform role.
`xpack.transform.enabled`:: `xpack.transform.enabled`::
deprecated:[7.8.0,Basic License features should always be enabled] + deprecated:[7.8.0,Basic License features should always be enabled] +
Set to `true` (default) to enable {transforms} on the node. This deprecated setting no longer has any effect.
+
If set to `false` in `elasticsearch.yml`, the {transform} APIs are disabled on
the node. Therefore the node cannot start or administrate {transforms} or
receive transport (internal) communication requests related to {transform} APIs.
If the node is a coordinating node, {transform} requests from clients (including
{kib}) also fail.
+
IMPORTANT: If you want to use {transform} features in your cluster, it is
recommended that you set `xpack.transform.enabled` to `true` on all nodes. This
is the default behavior. At a minimum, it must be enabled on all master-eligible
nodes and all data nodes. If you want to use {transforms} in clients or {kib},
it must also be enabled on all coordinating nodes.
`xpack.transform.num_transform_failure_retries` (<<cluster-update-settings,Dynamic>>):: `xpack.transform.num_transform_failure_retries` (<<cluster-update-settings,Dynamic>>)::
The number of times that a {transform} retries when it experiences a The number of times that a {transform} retries when it experiences a

View File

@ -16,9 +16,8 @@ To use the {transforms}, you must have the
==== {transform-cap} nodes ==== {transform-cap} nodes
To use {transforms}, there must be at least one node in your cluster with To use {transforms}, there must be at least one node in your cluster with
`xpack.transform.enabled` and `node.transform` set to `true`. By default, all `node.transform` set to `true`. By default, all nodes are {transform} nodes
nodes are {transform} nodes unless you explicitly change these settings or set unless you explicitly change these settings or set `node.data` to `false`.
`node.data` to `false`.
If you want to control which nodes run {transforms}, set `node.transform` to If you want to control which nodes run {transforms}, set `node.transform` to
`false` on some nodes. `false` on some nodes.

View File

@ -42,7 +42,10 @@ public class XPackSettings {
/** /**
* Setting for controlling whether or not enrich is enabled. * Setting for controlling whether or not enrich is enabled.
* <p>
* This setting is now a no-op: setting it to false is permitted, but does nothing.
*/ */
@Deprecated // since = "7.8.0"
public static final Setting<Boolean> ENRICH_ENABLED_SETTING = Setting.boolSetting("xpack.enrich.enabled", true, public static final Setting<Boolean> ENRICH_ENABLED_SETTING = Setting.boolSetting("xpack.enrich.enabled", true,
Property.NodeScope, Property.Deprecated); Property.NodeScope, Property.Deprecated);
@ -55,7 +58,14 @@ public class XPackSettings {
@Deprecated // replaced by TRANSFORM_ENABLED @Deprecated // replaced by TRANSFORM_ENABLED
private static final Setting<Boolean> DATA_FRAME_ENABLED = Setting.boolSetting("xpack.data_frame.enabled", true, private static final Setting<Boolean> DATA_FRAME_ENABLED = Setting.boolSetting("xpack.data_frame.enabled", true,
Setting.Property.NodeScope, Setting.Property.Deprecated); Setting.Property.NodeScope, Setting.Property.Deprecated);
public static final Setting<Boolean> TRANSFORM_ENABLED = Setting.boolSetting("xpack.transform.enabled", DATA_FRAME_ENABLED,
/**
* Setting for enabling or disabling data frame. Defaults to true.
* <p>
* This setting is now a no-op: setting it to false is permitted, but does nothing.
*/
@Deprecated // since = "7.8.0"
public static final Setting<Boolean> TRANSFORM_ENABLED = Setting.boolSetting("xpack.transform.enabled", true,
Property.NodeScope, Property.Deprecated); Property.NodeScope, Property.Deprecated);
/** Setting for enabling or disabling security. Defaults to true. */ /** Setting for enabling or disabling security. Defaults to true. */
@ -80,7 +90,12 @@ public class XPackSettings {
public static final Setting<Boolean> MACHINE_LEARNING_ENABLED = Setting.boolSetting("xpack.ml.enabled", true, public static final Setting<Boolean> MACHINE_LEARNING_ENABLED = Setting.boolSetting("xpack.ml.enabled", true,
Setting.Property.NodeScope); Setting.Property.NodeScope);
/** Setting for enabling or disabling rollup. Defaults to true. */ /**
* Setting for enabling or disabling rollup. Defaults to true.
* <p>
* This setting is now a no-op: setting it to false is permitted, but does nothing.
*/
@Deprecated // since = "7.8.0"
public static final Setting<Boolean> ROLLUP_ENABLED = Setting.boolSetting("xpack.rollup.enabled", true, public static final Setting<Boolean> ROLLUP_ENABLED = Setting.boolSetting("xpack.rollup.enabled", true,
Property.NodeScope, Property.Deprecated); Property.NodeScope, Property.Deprecated);
@ -92,7 +107,12 @@ public class XPackSettings {
public static final Setting<Boolean> DLS_FLS_ENABLED = Setting.boolSetting("xpack.security.dls_fls.enabled", true, public static final Setting<Boolean> DLS_FLS_ENABLED = Setting.boolSetting("xpack.security.dls_fls.enabled", true,
Setting.Property.NodeScope); Setting.Property.NodeScope);
/** Setting for enabling or disabling Logstash extensions. Defaults to true. */ /**
* Setting for enabling or disabling Logstash extensions. Defaults to true.
* <p>
* This setting is now a no-op: setting it to false is permitted, but does nothing.
*/
@Deprecated // since = "7.8.0"
public static final Setting<Boolean> LOGSTASH_ENABLED = Setting.boolSetting("xpack.logstash.enabled", true, public static final Setting<Boolean> LOGSTASH_ENABLED = Setting.boolSetting("xpack.logstash.enabled", true,
Setting.Property.NodeScope, Property.Deprecated); Setting.Property.NodeScope, Property.Deprecated);
@ -107,7 +127,10 @@ public class XPackSettings {
/** /**
* Setting for enabling or disabling the snapshot lifecycle extension. Defaults to true. * Setting for enabling or disabling the snapshot lifecycle extension. Defaults to true.
* <p>
* This setting is now a no-op: setting it to false is permitted, but does nothing.
*/ */
@Deprecated // since = "7.8.0"
public static final Setting<Boolean> SNAPSHOT_LIFECYCLE_ENABLED = Setting.boolSetting("xpack.slm.enabled", true, public static final Setting<Boolean> SNAPSHOT_LIFECYCLE_ENABLED = Setting.boolSetting("xpack.slm.enabled", true,
Property.NodeScope, Property.Deprecated); Property.NodeScope, Property.Deprecated);
@ -135,15 +158,30 @@ public class XPackSettings {
public static final Setting<Boolean> FIPS_MODE_ENABLED = public static final Setting<Boolean> FIPS_MODE_ENABLED =
Setting.boolSetting("xpack.security.fips_mode.enabled", false, Property.NodeScope); Setting.boolSetting("xpack.security.fips_mode.enabled", false, Property.NodeScope);
/** Setting for enabling or disabling sql. Defaults to true. */ /**
* Setting for enabling or disabling sql. Defaults to true.
* <p>
* This setting is now a no-op: setting it to false is permitted, but does nothing.
*/
@Deprecated // since = "7.8.0"
public static final Setting<Boolean> SQL_ENABLED = Setting.boolSetting("xpack.sql.enabled", true, public static final Setting<Boolean> SQL_ENABLED = Setting.boolSetting("xpack.sql.enabled", true,
Property.NodeScope, Property.Deprecated); Property.NodeScope, Property.Deprecated);
/** Setting for enabling or disabling flattened fields. Defaults to true. */ /**
* Setting for enabling or disabling flattened fields. Defaults to true.
* <p>
* This setting is now a no-op: setting it to false is permitted, but does nothing.
*/
@Deprecated // since = "7.8.0"
public static final Setting<Boolean> FLATTENED_ENABLED = Setting.boolSetting("xpack.flattened.enabled", true, public static final Setting<Boolean> FLATTENED_ENABLED = Setting.boolSetting("xpack.flattened.enabled", true,
Property.NodeScope, Property.Deprecated); Property.NodeScope, Property.Deprecated);
/** Setting for enabling or disabling vectors. Defaults to true. */ /**
* Setting for enabling or disabling vectors. Defaults to true.
* <p>
* This setting is now a no-op: setting it to false is permitted, but does nothing.
*/
@Deprecated // since = "7.8.0"
public static final Setting<Boolean> VECTORS_ENABLED = Setting.boolSetting("xpack.vectors.enabled", true, public static final Setting<Boolean> VECTORS_ENABLED = Setting.boolSetting("xpack.vectors.enabled", true,
Property.NodeScope, Property.Deprecated); Property.NodeScope, Property.Deprecated);
@ -284,6 +322,7 @@ public class XPackSettings {
settings.add(TRANSFORM_ENABLED); settings.add(TRANSFORM_ENABLED);
settings.add(FLATTENED_ENABLED); settings.add(FLATTENED_ENABLED);
settings.add(VECTORS_ENABLED); settings.add(VECTORS_ENABLED);
settings.add(ENRICH_ENABLED_SETTING);
settings.add(DIAGNOSE_TRUST_EXCEPTIONS_SETTING); settings.add(DIAGNOSE_TRUST_EXCEPTIONS_SETTING);
settings.add(FIPS_MODE_ENABLED); settings.add(FIPS_MODE_ENABLED);
return Collections.unmodifiableList(settings); return Collections.unmodifiableList(settings);

View File

@ -10,23 +10,19 @@ import org.elasticsearch.action.ActionListener;
import org.elasticsearch.common.Nullable; import org.elasticsearch.common.Nullable;
import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.license.XPackLicenseState; import org.elasticsearch.license.XPackLicenseState;
import org.elasticsearch.xpack.core.XPackFeatureSet; import org.elasticsearch.xpack.core.XPackFeatureSet;
import org.elasticsearch.xpack.core.XPackField; import org.elasticsearch.xpack.core.XPackField;
import org.elasticsearch.xpack.core.XPackSettings;
import java.io.IOException; import java.io.IOException;
import java.util.Map; import java.util.Map;
public class EnrichFeatureSet implements XPackFeatureSet { public class EnrichFeatureSet implements XPackFeatureSet {
private final boolean enabled;
private final XPackLicenseState licenseState; private final XPackLicenseState licenseState;
@Inject @Inject
public EnrichFeatureSet(Settings settings, @Nullable XPackLicenseState licenseState) { public EnrichFeatureSet(@Nullable XPackLicenseState licenseState) {
this.enabled = XPackSettings.ENRICH_ENABLED_SETTING.get(settings);
this.licenseState = licenseState; this.licenseState = licenseState;
} }
@ -42,7 +38,7 @@ public class EnrichFeatureSet implements XPackFeatureSet {
@Override @Override
public boolean enabled() { public boolean enabled() {
return enabled; return true;
} }
@Override @Override

View File

@ -24,8 +24,8 @@ public class FlattenedFeatureSetUsage extends XPackFeatureSet.Usage {
this.fieldCount = input.getVersion().onOrAfter(Version.V_7_6_0) ? input.readInt() : 0; this.fieldCount = input.getVersion().onOrAfter(Version.V_7_6_0) ? input.readInt() : 0;
} }
public FlattenedFeatureSetUsage(boolean available, boolean enabled, int fieldCount) { public FlattenedFeatureSetUsage(boolean available, int fieldCount) {
super(XPackField.FLATTENED, available, enabled); super(XPackField.FLATTENED, available, true);
this.fieldCount = fieldCount; this.fieldCount = fieldCount;
} }

View File

@ -18,8 +18,8 @@ public class LogstashFeatureSetUsage extends XPackFeatureSet.Usage {
super(in); super(in);
} }
public LogstashFeatureSetUsage(boolean available, boolean enabled) { public LogstashFeatureSetUsage(boolean available) {
super(XPackField.LOGSTASH, available, enabled); super(XPackField.LOGSTASH, available, true);
} }
@Override @Override

View File

@ -18,8 +18,8 @@ public class RollupFeatureSetUsage extends XPackFeatureSet.Usage {
super(input); super(input);
} }
public RollupFeatureSetUsage(boolean available, boolean enabled) { public RollupFeatureSetUsage(boolean available) {
super(XPackField.ROLLUP, available, enabled); super(XPackField.ROLLUP, available, true);
} }
@Override @Override

View File

@ -33,8 +33,8 @@ public class SLMFeatureSetUsage extends XPackFeatureSet.Usage {
out.writeOptionalWriteable(this.slmStats); out.writeOptionalWriteable(this.slmStats);
} }
public SLMFeatureSetUsage(boolean available, boolean enabled, @Nullable SnapshotLifecycleStats slmStats) { public SLMFeatureSetUsage(boolean available, @Nullable SnapshotLifecycleStats slmStats) {
super(XPackField.SNAPSHOT_LIFECYCLE, available, enabled); super(XPackField.SNAPSHOT_LIFECYCLE, available, true);
this.slmStats = slmStats; this.slmStats = slmStats;
} }

View File

@ -25,8 +25,8 @@ public class SqlFeatureSetUsage extends XPackFeatureSet.Usage {
stats = in.readMap(); stats = in.readMap();
} }
public SqlFeatureSetUsage(boolean available, boolean enabled, Map<String, Object> stats) { public SqlFeatureSetUsage(boolean available, Map<String, Object> stats) {
super(XPackField.SQL, available, enabled); super(XPackField.SQL, available, true);
this.stats = stats; this.stats = stats;
} }

View File

@ -31,9 +31,9 @@ public class TransformFeatureSetUsage extends Usage {
this.accumulatedStats = new TransformIndexerStats(in); this.accumulatedStats = new TransformIndexerStats(in);
} }
public TransformFeatureSetUsage(boolean available, boolean enabled, Map<String, Long> transformCountByState, public TransformFeatureSetUsage(boolean available, Map<String, Long> transformCountByState,
TransformIndexerStats accumulatedStats) { TransformIndexerStats accumulatedStats) {
super(XPackField.TRANSFORM, available, enabled); super(XPackField.TRANSFORM, available, true);
this.transformCountByState = Objects.requireNonNull(transformCountByState); this.transformCountByState = Objects.requireNonNull(transformCountByState);
this.accumulatedStats = Objects.requireNonNull(accumulatedStats); this.accumulatedStats = Objects.requireNonNull(accumulatedStats);
} }

View File

@ -14,29 +14,25 @@ public class FlattenedFeatureSetUsageTests extends AbstractWireSerializingTestCa
@Override @Override
protected FlattenedFeatureSetUsage createTestInstance() { protected FlattenedFeatureSetUsage createTestInstance() {
return new FlattenedFeatureSetUsage(randomBoolean(), randomBoolean(), randomIntBetween(0, 1000)); return new FlattenedFeatureSetUsage(randomBoolean(), randomIntBetween(0, 1000));
} }
@Override @Override
protected FlattenedFeatureSetUsage mutateInstance(FlattenedFeatureSetUsage instance) throws IOException { protected FlattenedFeatureSetUsage mutateInstance(FlattenedFeatureSetUsage instance) throws IOException {
boolean available = instance.available(); boolean available = instance.available();
boolean enabled = instance.enabled();
int fieldCount = instance.fieldCount(); int fieldCount = instance.fieldCount();
switch (between(0, 2)) { switch (between(0, 1)) {
case 0: case 0:
available = !available; available = !available;
break; break;
case 1: case 1:
enabled = !enabled;
break;
case 2:
fieldCount = randomValueOtherThan(instance.fieldCount(), () -> randomIntBetween(0, 1000)); fieldCount = randomValueOtherThan(instance.fieldCount(), () -> randomIntBetween(0, 1000));
break; break;
} }
return new FlattenedFeatureSetUsage(available, enabled, fieldCount); return new FlattenedFeatureSetUsage(available, fieldCount);
} }
@Override @Override

View File

@ -24,8 +24,7 @@ public class TransformFeatureSetUsageTests extends AbstractWireSerializingTestCa
transformCountByState.put(randomFrom(IndexerState.values()).toString(), randomLong()); transformCountByState.put(randomFrom(IndexerState.values()).toString(), randomLong());
} }
return new TransformFeatureSetUsage(randomBoolean(), randomBoolean(), transformCountByState, return new TransformFeatureSetUsage(randomBoolean(), transformCountByState, TransformIndexerStatsTests.randomStats());
TransformIndexerStatsTests.randomStats());
} }
@Override @Override

View File

@ -67,8 +67,6 @@ import java.util.concurrent.TimeUnit;
import java.util.function.Supplier; import java.util.function.Supplier;
import static java.util.Collections.emptyList; import static java.util.Collections.emptyList;
import static java.util.Collections.emptyMap;
import static org.elasticsearch.xpack.core.XPackSettings.ENRICH_ENABLED_SETTING;
import static org.elasticsearch.xpack.core.enrich.EnrichPolicy.ENRICH_INDEX_PATTERN; import static org.elasticsearch.xpack.core.enrich.EnrichPolicy.ENRICH_INDEX_PATTERN;
public class EnrichPlugin extends Plugin implements SystemIndexPlugin, IngestPlugin { public class EnrichPlugin extends Plugin implements SystemIndexPlugin, IngestPlugin {
@ -126,21 +124,15 @@ public class EnrichPlugin extends Plugin implements SystemIndexPlugin, IngestPlu
}, val -> Setting.parseInt(val, 1, Integer.MAX_VALUE, QUEUE_CAPACITY_SETTING_NAME), Setting.Property.NodeScope); }, val -> Setting.parseInt(val, 1, Integer.MAX_VALUE, QUEUE_CAPACITY_SETTING_NAME), Setting.Property.NodeScope);
private final Settings settings; private final Settings settings;
private final Boolean enabled;
private final boolean transportClientMode; private final boolean transportClientMode;
public EnrichPlugin(final Settings settings) { public EnrichPlugin(final Settings settings) {
this.settings = settings; this.settings = settings;
this.enabled = ENRICH_ENABLED_SETTING.get(settings);
this.transportClientMode = XPackPlugin.transportClientMode(settings); this.transportClientMode = XPackPlugin.transportClientMode(settings);
} }
@Override @Override
public Map<String, Processor.Factory> getProcessors(Processor.Parameters parameters) { public Map<String, Processor.Factory> getProcessors(Processor.Parameters parameters) {
if (enabled == false) {
return emptyMap();
}
EnrichProcessorFactory factory = new EnrichProcessorFactory(parameters.client, parameters.scriptService); EnrichProcessorFactory factory = new EnrichProcessorFactory(parameters.client, parameters.scriptService);
parameters.ingestService.addIngestClusterStateListener(factory); parameters.ingestService.addIngestClusterStateListener(factory);
return Collections.singletonMap(EnrichProcessorFactory.TYPE, factory); return Collections.singletonMap(EnrichProcessorFactory.TYPE, factory);
@ -151,10 +143,6 @@ public class EnrichPlugin extends Plugin implements SystemIndexPlugin, IngestPlu
} }
public List<ActionHandler<? extends ActionRequest, ? extends ActionResponse>> getActions() { public List<ActionHandler<? extends ActionRequest, ? extends ActionResponse>> getActions() {
if (enabled == false) {
return emptyList();
}
return Arrays.asList( return Arrays.asList(
new ActionHandler<>(GetEnrichPolicyAction.INSTANCE, TransportGetEnrichPolicyAction.class), new ActionHandler<>(GetEnrichPolicyAction.INSTANCE, TransportGetEnrichPolicyAction.class),
new ActionHandler<>(DeleteEnrichPolicyAction.INSTANCE, TransportDeleteEnrichPolicyAction.class), new ActionHandler<>(DeleteEnrichPolicyAction.INSTANCE, TransportDeleteEnrichPolicyAction.class),
@ -176,10 +164,6 @@ public class EnrichPlugin extends Plugin implements SystemIndexPlugin, IngestPlu
IndexNameExpressionResolver indexNameExpressionResolver, IndexNameExpressionResolver indexNameExpressionResolver,
Supplier<DiscoveryNodes> nodesInCluster Supplier<DiscoveryNodes> nodesInCluster
) { ) {
if (enabled == false) {
return emptyList();
}
return Arrays.asList( return Arrays.asList(
new RestGetEnrichPolicyAction(), new RestGetEnrichPolicyAction(),
new RestDeleteEnrichPolicyAction(), new RestDeleteEnrichPolicyAction(),
@ -203,7 +187,7 @@ public class EnrichPlugin extends Plugin implements SystemIndexPlugin, IngestPlu
IndexNameExpressionResolver expressionResolver, IndexNameExpressionResolver expressionResolver,
Supplier<RepositoriesService> repositoriesServiceSupplier Supplier<RepositoriesService> repositoriesServiceSupplier
) { ) {
if (enabled == false || transportClientMode) { if (transportClientMode) {
return emptyList(); return emptyList();
} }
@ -253,7 +237,6 @@ public class EnrichPlugin extends Plugin implements SystemIndexPlugin, IngestPlu
@Override @Override
public List<Setting<?>> getSettings() { public List<Setting<?>> getSettings() {
return Arrays.asList( return Arrays.asList(
ENRICH_ENABLED_SETTING,
ENRICH_FETCH_SIZE_SETTING, ENRICH_FETCH_SIZE_SETTING,
ENRICH_MAX_CONCURRENT_POLICY_EXECUTIONS, ENRICH_MAX_CONCURRENT_POLICY_EXECUTIONS,
ENRICH_CLEANUP_PERIOD, ENRICH_CLEANUP_PERIOD,

View File

@ -1,44 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
package org.elasticsearch.xpack.enrich;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.plugins.Plugin;
import org.elasticsearch.protocol.xpack.XPackInfoRequest;
import org.elasticsearch.protocol.xpack.XPackInfoResponse;
import org.elasticsearch.test.ESSingleNodeTestCase;
import org.elasticsearch.xpack.core.XPackField;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.core.action.XPackInfoAction;
import java.util.Collection;
import java.util.Collections;
import java.util.EnumSet;
import static org.hamcrest.Matchers.is;
public class EnrichDisabledIT extends ESSingleNodeTestCase {
public void testEnrichAvailableButNotEnabled() {
ensureGreen();
XPackInfoRequest infoRequest = new XPackInfoRequest();
infoRequest.setCategories(EnumSet.of(XPackInfoRequest.Category.FEATURES));
XPackInfoResponse infoResponse = client().execute(XPackInfoAction.INSTANCE, infoRequest).actionGet();
assertThat(infoResponse.getFeatureSetsInfo().getFeatureSets().get(XPackField.ENRICH).available(), is(true));
assertThat(infoResponse.getFeatureSetsInfo().getFeatureSets().get(XPackField.ENRICH).enabled(), is(false));
}
@Override
protected Settings nodeSettings() {
return Settings.builder().put(XPackSettings.ENRICH_ENABLED_SETTING.getKey(), false).build();
}
@Override
protected Collection<Class<? extends Plugin>> getPlugins() {
return Collections.singleton(LocalStateEnrich.class);
}
}

View File

@ -8,12 +8,10 @@ package org.elasticsearch.xpack.monitoring.collector.enrich;
import org.elasticsearch.action.ActionFuture; import org.elasticsearch.action.ActionFuture;
import org.elasticsearch.client.Client; import org.elasticsearch.client.Client;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.settings.Setting;
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.ThreadContext; import org.elasticsearch.common.util.concurrent.ThreadContext;
import org.elasticsearch.license.XPackLicenseState; import org.elasticsearch.license.XPackLicenseState;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.core.enrich.action.EnrichStatsAction; import org.elasticsearch.xpack.core.enrich.action.EnrichStatsAction;
import org.elasticsearch.xpack.core.enrich.action.EnrichStatsAction.Response.CoordinatorStats; import org.elasticsearch.xpack.core.enrich.action.EnrichStatsAction.Response.CoordinatorStats;
import org.elasticsearch.xpack.core.enrich.action.EnrichStatsAction.Response.ExecutingPolicy; import org.elasticsearch.xpack.core.enrich.action.EnrichStatsAction.Response.ExecutingPolicy;
@ -40,7 +38,6 @@ import static org.mockito.Mockito.when;
public class EnrichStatsCollectorTests extends BaseCollectorTestCase { public class EnrichStatsCollectorTests extends BaseCollectorTestCase {
public void testShouldCollectReturnsFalseIfMonitoringNotAllowed() { public void testShouldCollectReturnsFalseIfMonitoringNotAllowed() {
final Settings settings = randomFrom(enrichEnabledSettings(), enrichDisabledSettings());
final boolean enrichAllowed = randomBoolean(); final boolean enrichAllowed = randomBoolean();
final boolean isElectedMaster = randomBoolean(); final boolean isElectedMaster = randomBoolean();
whenLocalNodeElectedMaster(isElectedMaster); whenLocalNodeElectedMaster(isElectedMaster);
@ -49,7 +46,7 @@ public class EnrichStatsCollectorTests extends BaseCollectorTestCase {
when(licenseState.isAllowed(XPackLicenseState.Feature.MONITORING)).thenReturn(false); when(licenseState.isAllowed(XPackLicenseState.Feature.MONITORING)).thenReturn(false);
when(licenseState.isAllowed(XPackLicenseState.Feature.ENRICH)).thenReturn(enrichAllowed); when(licenseState.isAllowed(XPackLicenseState.Feature.ENRICH)).thenReturn(enrichAllowed);
final EnrichStatsCollector collector = createCollector(settings, clusterService, licenseState, client); final EnrichStatsCollector collector = createCollector(clusterService, licenseState, client);
assertThat(collector.shouldCollect(isElectedMaster), is(false)); assertThat(collector.shouldCollect(isElectedMaster), is(false));
if (isElectedMaster) { if (isElectedMaster) {
@ -58,47 +55,17 @@ public class EnrichStatsCollectorTests extends BaseCollectorTestCase {
} }
public void testShouldCollectReturnsFalseIfNotMaster() { public void testShouldCollectReturnsFalseIfNotMaster() {
// regardless of enrich being enabled
final Settings settings = randomFrom(enrichEnabledSettings(), enrichDisabledSettings());
when(licenseState.isAllowed(XPackLicenseState.Feature.MONITORING)).thenReturn(randomBoolean()); when(licenseState.isAllowed(XPackLicenseState.Feature.MONITORING)).thenReturn(randomBoolean());
when(licenseState.isAllowed(XPackLicenseState.Feature.ENRICH)).thenReturn(randomBoolean()); when(licenseState.isAllowed(XPackLicenseState.Feature.ENRICH)).thenReturn(randomBoolean());
// this controls the blockage // this controls the blockage
final boolean isElectedMaster = false; final boolean isElectedMaster = false;
final EnrichStatsCollector collector = createCollector(settings, clusterService, licenseState, client); final EnrichStatsCollector collector = createCollector(clusterService, licenseState, client);
assertThat(collector.shouldCollect(isElectedMaster), is(false)); assertThat(collector.shouldCollect(isElectedMaster), is(false));
} }
public void testShouldCollectReturnsFalseIfEnrichIsDisabled() {
// this is controls the blockage
final Settings settings = enrichDisabledSettings();
boolean isMonitoringAllowed = randomBoolean();
when(licenseState.isAllowed(XPackLicenseState.Feature.MONITORING)).thenReturn(isMonitoringAllowed);
when(licenseState.isAllowed(XPackLicenseState.Feature.ENRICH)).thenReturn(randomBoolean());
final boolean isElectedMaster = randomBoolean();
whenLocalNodeElectedMaster(isElectedMaster);
final EnrichStatsCollector collector = createCollector(settings, clusterService, licenseState, client);
assertThat(collector.shouldCollect(isElectedMaster), is(false));
if (isElectedMaster) {
verify(licenseState).isAllowed(XPackLicenseState.Feature.MONITORING);
}
if (isElectedMaster && isMonitoringAllowed) {
// The enrich setting is only checked if the node is master and monitoring is allowed,
// so in other cases we won't have a deprecation warning.
assertSettingDeprecationsAndWarnings(new Setting<?>[] { XPackSettings.ENRICH_ENABLED_SETTING });
}
}
public void testShouldCollectReturnsFalseIfEnrichIsNotAllowed() { public void testShouldCollectReturnsFalseIfEnrichIsNotAllowed() {
final Settings settings = randomFrom(enrichEnabledSettings(), enrichDisabledSettings());
boolean isMonitoringAllowed = randomBoolean(); boolean isMonitoringAllowed = randomBoolean();
when(licenseState.isAllowed(XPackLicenseState.Feature.MONITORING)).thenReturn(isMonitoringAllowed); when(licenseState.isAllowed(XPackLicenseState.Feature.MONITORING)).thenReturn(isMonitoringAllowed);
// this is controls the blockage // this is controls the blockage
@ -106,33 +73,25 @@ public class EnrichStatsCollectorTests extends BaseCollectorTestCase {
final boolean isElectedMaster = randomBoolean(); final boolean isElectedMaster = randomBoolean();
whenLocalNodeElectedMaster(isElectedMaster); whenLocalNodeElectedMaster(isElectedMaster);
final EnrichStatsCollector collector = createCollector(settings, clusterService, licenseState, client); final EnrichStatsCollector collector = createCollector(clusterService, licenseState, client);
assertThat(collector.shouldCollect(isElectedMaster), is(false)); assertThat(collector.shouldCollect(isElectedMaster), is(false));
if (isElectedMaster) { if (isElectedMaster) {
verify(licenseState).isAllowed(XPackLicenseState.Feature.MONITORING); verify(licenseState).isAllowed(XPackLicenseState.Feature.MONITORING);
} }
if (isElectedMaster && isMonitoringAllowed && settings.get(XPackSettings.ENRICH_ENABLED_SETTING.getKey()) != null) {
assertSettingDeprecationsAndWarnings(new Setting<?>[] { XPackSettings.ENRICH_ENABLED_SETTING });
}
} }
public void testShouldCollectReturnsTrue() { public void testShouldCollectReturnsTrue() {
final Settings settings = enrichEnabledSettings();
when(licenseState.isAllowed(XPackLicenseState.Feature.MONITORING)).thenReturn(true); when(licenseState.isAllowed(XPackLicenseState.Feature.MONITORING)).thenReturn(true);
when(licenseState.isAllowed(XPackLicenseState.Feature.ENRICH)).thenReturn(true); when(licenseState.isAllowed(XPackLicenseState.Feature.ENRICH)).thenReturn(true);
final boolean isElectedMaster = true; final boolean isElectedMaster = true;
final EnrichStatsCollector collector = createCollector(settings, clusterService, licenseState, client); final EnrichStatsCollector collector = createCollector(clusterService, licenseState, client);
assertThat(collector.shouldCollect(isElectedMaster), is(true)); assertThat(collector.shouldCollect(isElectedMaster), is(true));
verify(licenseState).isAllowed(XPackLicenseState.Feature.MONITORING); verify(licenseState).isAllowed(XPackLicenseState.Feature.MONITORING);
if (settings.get(XPackSettings.ENRICH_ENABLED_SETTING.getKey()) != null) {
assertSettingDeprecationsAndWarnings(new Setting<?>[] { XPackSettings.ENRICH_ENABLED_SETTING });
}
} }
public void testDoCollect() throws Exception { public void testDoCollect() throws Exception {
@ -172,7 +131,7 @@ public class EnrichStatsCollectorTests extends BaseCollectorTestCase {
when(client.execute(eq(EnrichStatsAction.INSTANCE), any(EnrichStatsAction.Request.class))).thenReturn(future); when(client.execute(eq(EnrichStatsAction.INSTANCE), any(EnrichStatsAction.Request.class))).thenReturn(future);
when(future.actionGet(timeout)).thenReturn(response); when(future.actionGet(timeout)).thenReturn(response);
final EnrichStatsCollector collector = new EnrichStatsCollector(clusterService, licenseState, client, threadContext, settings); final EnrichStatsCollector collector = new EnrichStatsCollector(clusterService, licenseState, client, threadContext);
assertEquals(timeout, collector.getCollectionTimeout()); assertEquals(timeout, collector.getCollectionTimeout());
final long interval = randomNonNegativeLong(); final long interval = randomNonNegativeLong();
@ -211,22 +170,8 @@ public class EnrichStatsCollectorTests extends BaseCollectorTestCase {
} }
} }
private EnrichStatsCollector createCollector( private EnrichStatsCollector createCollector(ClusterService clusterService, XPackLicenseState licenseState, Client client) {
Settings settings, return new EnrichStatsCollector(clusterService, licenseState, client);
ClusterService clusterService,
XPackLicenseState licenseState,
Client client
) {
return new EnrichStatsCollector(clusterService, licenseState, client, settings);
}
private Settings enrichEnabledSettings() {
// since it's the default, we want to ensure we test both with/without it
return randomBoolean() ? Settings.EMPTY : Settings.builder().put(XPackSettings.ENRICH_ENABLED_SETTING.getKey(), true).build();
}
private Settings enrichDisabledSettings() {
return Settings.builder().put(XPackSettings.ENRICH_ENABLED_SETTING.getKey(), false).build();
} }
} }

View File

@ -28,7 +28,6 @@ public abstract class AbstractEqlIntegTestCase extends ESIntegTestCase {
settings.put(XPackSettings.WATCHER_ENABLED.getKey(), false); settings.put(XPackSettings.WATCHER_ENABLED.getKey(), false);
settings.put(XPackSettings.GRAPH_ENABLED.getKey(), false); settings.put(XPackSettings.GRAPH_ENABLED.getKey(), false);
settings.put(XPackSettings.MACHINE_LEARNING_ENABLED.getKey(), false); settings.put(XPackSettings.MACHINE_LEARNING_ENABLED.getKey(), false);
settings.put(XPackSettings.SQL_ENABLED.getKey(), false);
settings.put(EqlPlugin.EQL_ENABLED_SETTING.getKey(), true); settings.put(EqlPlugin.EQL_ENABLED_SETTING.getKey(), true);
settings.put(LicenseService.SELF_GENERATED_LICENSE_TYPE.getKey(), "trial"); settings.put(LicenseService.SELF_GENERATED_LICENSE_TYPE.getKey(), "trial");
return settings.build(); return settings.build();

View File

@ -38,7 +38,6 @@ import org.elasticsearch.script.ScriptService;
import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.watcher.ResourceWatcherService;
import org.elasticsearch.xpack.core.XPackPlugin; import org.elasticsearch.xpack.core.XPackPlugin;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.core.ilm.AllocateAction; import org.elasticsearch.xpack.core.ilm.AllocateAction;
import org.elasticsearch.xpack.core.ilm.DeleteAction; import org.elasticsearch.xpack.core.ilm.DeleteAction;
import org.elasticsearch.xpack.core.ilm.ForceMergeAction; import org.elasticsearch.xpack.core.ilm.ForceMergeAction;
@ -141,12 +140,10 @@ public class IndexLifecycle extends Plugin implements ActionPlugin {
private final SetOnce<SnapshotRetentionService> snapshotRetentionService = new SetOnce<>(); private final SetOnce<SnapshotRetentionService> snapshotRetentionService = new SetOnce<>();
private final SetOnce<SnapshotHistoryStore> snapshotHistoryStore = new SetOnce<>(); private final SetOnce<SnapshotHistoryStore> snapshotHistoryStore = new SetOnce<>();
private Settings settings; private Settings settings;
private boolean slmEnabled;
private boolean transportClientMode; private boolean transportClientMode;
public IndexLifecycle(Settings settings) { public IndexLifecycle(Settings settings) {
this.settings = settings; this.settings = settings;
this.slmEnabled = XPackSettings.SNAPSHOT_LIFECYCLE_ENABLED.get(settings);
this.transportClientMode = XPackPlugin.transportClientMode(settings); this.transportClientMode = XPackPlugin.transportClientMode(settings);
} }
@ -204,7 +201,7 @@ public class IndexLifecycle extends Plugin implements ActionPlugin {
indexLifecycleInitialisationService.set(new IndexLifecycleService(settings, client, clusterService, threadPool, indexLifecycleInitialisationService.set(new IndexLifecycleService(settings, client, clusterService, threadPool,
getClock(), System::currentTimeMillis, xContentRegistry, ilmHistoryStore.get())); getClock(), System::currentTimeMillis, xContentRegistry, ilmHistoryStore.get()));
components.add(indexLifecycleInitialisationService.get()); components.add(indexLifecycleInitialisationService.get());
if (slmEnabled) {
// the template registry is a cluster state listener // the template registry is a cluster state listener
@SuppressWarnings("unused") @SuppressWarnings("unused")
SnapshotLifecycleTemplateRegistry templateRegistry = new SnapshotLifecycleTemplateRegistry(settings, clusterService, threadPool, SnapshotLifecycleTemplateRegistry templateRegistry = new SnapshotLifecycleTemplateRegistry(settings, clusterService, threadPool,
@ -217,7 +214,7 @@ public class IndexLifecycle extends Plugin implements ActionPlugin {
() -> new SnapshotRetentionTask(client, clusterService, System::nanoTime, snapshotHistoryStore.get(), threadPool), () -> new SnapshotRetentionTask(client, clusterService, System::nanoTime, snapshotHistoryStore.get(), threadPool),
clusterService, getClock())); clusterService, getClock()));
components.addAll(Arrays.asList(snapshotLifecycleService.get(), snapshotHistoryStore.get(), snapshotRetentionService.get())); components.addAll(Arrays.asList(snapshotLifecycleService.get(), snapshotHistoryStore.get(), snapshotRetentionService.get()));
}
return components; return components;
} }
@ -259,8 +256,9 @@ public class IndexLifecycle extends Plugin implements ActionPlugin {
IndexScopedSettings indexScopedSettings, SettingsFilter settingsFilter, IndexNameExpressionResolver indexNameExpressionResolver, IndexScopedSettings indexScopedSettings, SettingsFilter settingsFilter, IndexNameExpressionResolver indexNameExpressionResolver,
Supplier<DiscoveryNodes> nodesInCluster) { Supplier<DiscoveryNodes> nodesInCluster) {
List<RestHandler> handlers = new ArrayList<>(); List<RestHandler> handlers = new ArrayList<>();
// add ILM rest handlers
handlers.addAll(Arrays.asList( handlers.addAll(Arrays.asList(
// add ILM rest handlers
new RestPutLifecycleAction(), new RestPutLifecycleAction(),
new RestGetLifecycleAction(), new RestGetLifecycleAction(),
new RestDeleteLifecycleAction(), new RestDeleteLifecycleAction(),
@ -270,10 +268,9 @@ public class IndexLifecycle extends Plugin implements ActionPlugin {
new RestRetryAction(), new RestRetryAction(),
new RestStopAction(), new RestStopAction(),
new RestStartILMAction(), new RestStartILMAction(),
new RestGetStatusAction() new RestGetStatusAction(),
));
if (slmEnabled) { // add SLM rest headers
handlers.addAll(Arrays.asList(
new RestPutSnapshotLifecycleAction(), new RestPutSnapshotLifecycleAction(),
new RestDeleteSnapshotLifecycleAction(), new RestDeleteSnapshotLifecycleAction(),
new RestGetSnapshotLifecycleAction(), new RestGetSnapshotLifecycleAction(),
@ -284,7 +281,6 @@ public class IndexLifecycle extends Plugin implements ActionPlugin {
new RestStartSLMAction(), new RestStartSLMAction(),
new RestGetSLMStatusAction() new RestGetSLMStatusAction()
)); ));
}
return handlers; return handlers;
} }
@ -293,6 +289,7 @@ public class IndexLifecycle extends Plugin implements ActionPlugin {
List<ActionHandler<? extends ActionRequest, ? extends ActionResponse>> actions = new ArrayList<>(); List<ActionHandler<? extends ActionRequest, ? extends ActionResponse>> actions = new ArrayList<>();
// add ILM actions // add ILM actions
actions.addAll(Arrays.asList( actions.addAll(Arrays.asList(
// add ILM actions
new ActionHandler<>(PutLifecycleAction.INSTANCE, TransportPutLifecycleAction.class), new ActionHandler<>(PutLifecycleAction.INSTANCE, TransportPutLifecycleAction.class),
new ActionHandler<>(GetLifecycleAction.INSTANCE, TransportGetLifecycleAction.class), new ActionHandler<>(GetLifecycleAction.INSTANCE, TransportGetLifecycleAction.class),
new ActionHandler<>(DeleteLifecycleAction.INSTANCE, TransportDeleteLifecycleAction.class), new ActionHandler<>(DeleteLifecycleAction.INSTANCE, TransportDeleteLifecycleAction.class),
@ -302,10 +299,9 @@ public class IndexLifecycle extends Plugin implements ActionPlugin {
new ActionHandler<>(RetryAction.INSTANCE, TransportRetryAction.class), new ActionHandler<>(RetryAction.INSTANCE, TransportRetryAction.class),
new ActionHandler<>(StartILMAction.INSTANCE, TransportStartILMAction.class), new ActionHandler<>(StartILMAction.INSTANCE, TransportStartILMAction.class),
new ActionHandler<>(StopILMAction.INSTANCE, TransportStopILMAction.class), new ActionHandler<>(StopILMAction.INSTANCE, TransportStopILMAction.class),
new ActionHandler<>(GetStatusAction.INSTANCE, TransportGetStatusAction.class) new ActionHandler<>(GetStatusAction.INSTANCE, TransportGetStatusAction.class),
));
if (slmEnabled) { // add SLM actions
actions.addAll(Arrays.asList(
new ActionHandler<>(PutSnapshotLifecycleAction.INSTANCE, TransportPutSnapshotLifecycleAction.class), new ActionHandler<>(PutSnapshotLifecycleAction.INSTANCE, TransportPutSnapshotLifecycleAction.class),
new ActionHandler<>(DeleteSnapshotLifecycleAction.INSTANCE, TransportDeleteSnapshotLifecycleAction.class), new ActionHandler<>(DeleteSnapshotLifecycleAction.INSTANCE, TransportDeleteSnapshotLifecycleAction.class),
new ActionHandler<>(GetSnapshotLifecycleAction.INSTANCE, TransportGetSnapshotLifecycleAction.class), new ActionHandler<>(GetSnapshotLifecycleAction.INSTANCE, TransportGetSnapshotLifecycleAction.class),
@ -316,7 +312,6 @@ public class IndexLifecycle extends Plugin implements ActionPlugin {
new ActionHandler<>(StopSLMAction.INSTANCE, TransportStopSLMAction.class), new ActionHandler<>(StopSLMAction.INSTANCE, TransportStopSLMAction.class),
new ActionHandler<>(GetSLMStatusAction.INSTANCE, TransportGetSLMStatusAction.class) new ActionHandler<>(GetSLMStatusAction.INSTANCE, TransportGetSLMStatusAction.class)
)); ));
}
return actions; return actions;
} }

View File

@ -11,11 +11,9 @@ import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.Nullable; import org.elasticsearch.common.Nullable;
import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.license.XPackLicenseState; import org.elasticsearch.license.XPackLicenseState;
import org.elasticsearch.xpack.core.XPackFeatureSet; import org.elasticsearch.xpack.core.XPackFeatureSet;
import org.elasticsearch.xpack.core.XPackField; import org.elasticsearch.xpack.core.XPackField;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.core.slm.SLMFeatureSetUsage; import org.elasticsearch.xpack.core.slm.SLMFeatureSetUsage;
import org.elasticsearch.xpack.core.slm.SnapshotLifecycleMetadata; import org.elasticsearch.xpack.core.slm.SnapshotLifecycleMetadata;
@ -23,14 +21,12 @@ import java.util.Map;
public class SLMFeatureSet implements XPackFeatureSet { public class SLMFeatureSet implements XPackFeatureSet {
private final boolean enabled;
private final XPackLicenseState licenseState; private final XPackLicenseState licenseState;
private ClusterService clusterService; private ClusterService clusterService;
@Inject @Inject
public SLMFeatureSet(Settings settings, @Nullable XPackLicenseState licenseState, ClusterService clusterService) { public SLMFeatureSet(@Nullable XPackLicenseState licenseState, ClusterService clusterService) {
this.clusterService = clusterService; this.clusterService = clusterService;
this.enabled = XPackSettings.SNAPSHOT_LIFECYCLE_ENABLED.get(settings);
this.licenseState = licenseState; this.licenseState = licenseState;
} }
@ -46,7 +42,7 @@ public class SLMFeatureSet implements XPackFeatureSet {
@Override @Override
public boolean enabled() { public boolean enabled() {
return enabled; return true;
} }
@Override @Override
@ -59,8 +55,7 @@ public class SLMFeatureSet implements XPackFeatureSet {
final ClusterState state = clusterService.state(); final ClusterState state = clusterService.state();
boolean available = licenseState.isAllowed(XPackLicenseState.Feature.ILM); boolean available = licenseState.isAllowed(XPackLicenseState.Feature.ILM);
final SnapshotLifecycleMetadata slmMeta = state.metadata().custom(SnapshotLifecycleMetadata.TYPE); final SnapshotLifecycleMetadata slmMeta = state.metadata().custom(SnapshotLifecycleMetadata.TYPE);
final SLMFeatureSetUsage usage = new SLMFeatureSetUsage(available, enabled, final SLMFeatureSetUsage usage = new SLMFeatureSetUsage(available, slmMeta == null ? null : slmMeta.getStats());
slmMeta == null ? null : slmMeta.getStats());
listener.onResponse(usage); listener.onResponse(usage);
} }

View File

@ -118,9 +118,7 @@ public class IndexLifecycleInitialisationTests extends ESIntegTestCase {
settings.put(XPackSettings.MACHINE_LEARNING_ENABLED.getKey(), false); settings.put(XPackSettings.MACHINE_LEARNING_ENABLED.getKey(), false);
settings.put(XPackSettings.SECURITY_ENABLED.getKey(), false); settings.put(XPackSettings.SECURITY_ENABLED.getKey(), false);
settings.put(XPackSettings.WATCHER_ENABLED.getKey(), false); settings.put(XPackSettings.WATCHER_ENABLED.getKey(), false);
settings.put(XPackSettings.MONITORING_ENABLED.getKey(), false);
settings.put(XPackSettings.GRAPH_ENABLED.getKey(), false); settings.put(XPackSettings.GRAPH_ENABLED.getKey(), false);
settings.put(XPackSettings.LOGSTASH_ENABLED.getKey(), false);
return settings.build(); return settings.build();
} }

View File

@ -90,9 +90,7 @@ public class SLMSnapshotBlockingIntegTests extends ESIntegTestCase {
settings.put(XPackSettings.MACHINE_LEARNING_ENABLED.getKey(), false); settings.put(XPackSettings.MACHINE_LEARNING_ENABLED.getKey(), false);
settings.put(XPackSettings.SECURITY_ENABLED.getKey(), false); settings.put(XPackSettings.SECURITY_ENABLED.getKey(), false);
settings.put(XPackSettings.WATCHER_ENABLED.getKey(), false); settings.put(XPackSettings.WATCHER_ENABLED.getKey(), false);
settings.put(XPackSettings.MONITORING_ENABLED.getKey(), false);
settings.put(XPackSettings.GRAPH_ENABLED.getKey(), false); settings.put(XPackSettings.GRAPH_ENABLED.getKey(), false);
settings.put(XPackSettings.LOGSTASH_ENABLED.getKey(), false);
settings.put(LifecycleSettings.LIFECYCLE_HISTORY_INDEX_ENABLED, false); settings.put(LifecycleSettings.LIFECYCLE_HISTORY_INDEX_ENABLED, false);
return settings.build(); return settings.build();
} }
@ -108,9 +106,7 @@ public class SLMSnapshotBlockingIntegTests extends ESIntegTestCase {
settings.put(XPackSettings.MACHINE_LEARNING_ENABLED.getKey(), false); settings.put(XPackSettings.MACHINE_LEARNING_ENABLED.getKey(), false);
settings.put(XPackSettings.SECURITY_ENABLED.getKey(), false); settings.put(XPackSettings.SECURITY_ENABLED.getKey(), false);
settings.put(XPackSettings.WATCHER_ENABLED.getKey(), false); settings.put(XPackSettings.WATCHER_ENABLED.getKey(), false);
settings.put(XPackSettings.MONITORING_ENABLED.getKey(), false);
settings.put(XPackSettings.GRAPH_ENABLED.getKey(), false); settings.put(XPackSettings.GRAPH_ENABLED.getKey(), false);
settings.put(XPackSettings.LOGSTASH_ENABLED.getKey(), false);
return settings.build(); return settings.build();
} }

View File

@ -49,8 +49,6 @@ public class SnapshotLifecycleInitialisationTests extends ESSingleNodeTestCase {
settings.put(XPackSettings.WATCHER_ENABLED.getKey(), false); settings.put(XPackSettings.WATCHER_ENABLED.getKey(), false);
settings.put(XPackSettings.GRAPH_ENABLED.getKey(), false); settings.put(XPackSettings.GRAPH_ENABLED.getKey(), false);
settings.put(Environment.PATH_REPO_SETTING.getKey(), repositoryLocation); settings.put(Environment.PATH_REPO_SETTING.getKey(), repositoryLocation);
settings.put(XPackSettings.SNAPSHOT_LIFECYCLE_ENABLED.getKey(), true);
return settings.build(); return settings.build();
} }

View File

@ -8,23 +8,19 @@ package org.elasticsearch.xpack.logstash;
import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.ActionListener;
import org.elasticsearch.common.Nullable; import org.elasticsearch.common.Nullable;
import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.license.XPackLicenseState; import org.elasticsearch.license.XPackLicenseState;
import org.elasticsearch.xpack.core.XPackFeatureSet; import org.elasticsearch.xpack.core.XPackFeatureSet;
import org.elasticsearch.xpack.core.XPackField; import org.elasticsearch.xpack.core.XPackField;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.core.logstash.LogstashFeatureSetUsage; import org.elasticsearch.xpack.core.logstash.LogstashFeatureSetUsage;
import java.util.Map; import java.util.Map;
public class LogstashFeatureSet implements XPackFeatureSet { public class LogstashFeatureSet implements XPackFeatureSet {
private final boolean enabled;
private final XPackLicenseState licenseState; private final XPackLicenseState licenseState;
@Inject @Inject
public LogstashFeatureSet(Settings settings, @Nullable XPackLicenseState licenseState) { public LogstashFeatureSet(@Nullable XPackLicenseState licenseState) {
this.enabled = XPackSettings.LOGSTASH_ENABLED.get(settings);
this.licenseState = licenseState; this.licenseState = licenseState;
} }
@ -40,7 +36,7 @@ public class LogstashFeatureSet implements XPackFeatureSet {
@Override @Override
public boolean enabled() { public boolean enabled() {
return enabled; return true;
} }
@Override @Override
@ -50,7 +46,7 @@ public class LogstashFeatureSet implements XPackFeatureSet {
@Override @Override
public void usage(ActionListener<XPackFeatureSet.Usage> listener) { public void usage(ActionListener<XPackFeatureSet.Usage> listener) {
listener.onResponse(new LogstashFeatureSetUsage(available(), enabled())); listener.onResponse(new LogstashFeatureSetUsage(available()));
} }
} }

View File

@ -7,12 +7,9 @@ package org.elasticsearch.xpack.logstash;
import org.elasticsearch.action.support.PlainActionFuture; import org.elasticsearch.action.support.PlainActionFuture;
import org.elasticsearch.common.io.stream.BytesStreamOutput; import org.elasticsearch.common.io.stream.BytesStreamOutput;
import org.elasticsearch.common.settings.Setting;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.license.XPackLicenseState; import org.elasticsearch.license.XPackLicenseState;
import org.elasticsearch.test.ESTestCase; import org.elasticsearch.test.ESTestCase;
import org.elasticsearch.xpack.core.XPackFeatureSet; import org.elasticsearch.xpack.core.XPackFeatureSet;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.core.logstash.LogstashFeatureSetUsage; import org.elasticsearch.xpack.core.logstash.LogstashFeatureSetUsage;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
@ -21,33 +18,14 @@ import static org.mockito.Mockito.when;
public class LogstashFeatureSetTests extends ESTestCase { public class LogstashFeatureSetTests extends ESTestCase {
public void testEnabledSetting() throws Exception {
boolean enabled = randomBoolean();
Settings settings = Settings.builder().put("path.home", createTempDir()).put("xpack.logstash.enabled", enabled).build();
LogstashFeatureSet featureSet = new LogstashFeatureSet(settings, null);
assertThat(featureSet.enabled(), is(enabled));
PlainActionFuture<XPackFeatureSet.Usage> future = new PlainActionFuture<>();
featureSet.usage(future);
XPackFeatureSet.Usage usage = future.get();
BytesStreamOutput out = new BytesStreamOutput();
usage.writeTo(out);
XPackFeatureSet.Usage serializedUsage = new LogstashFeatureSetUsage(out.bytes().streamInput());
assertThat(serializedUsage.enabled(), is(enabled));
assertSettingDeprecationsAndWarnings(new Setting<?>[] { XPackSettings.LOGSTASH_ENABLED });
}
public void testEnabledDefault() throws Exception { public void testEnabledDefault() throws Exception {
Settings settings = Settings.builder().put("path.home", createTempDir()).build(); LogstashFeatureSet featureSet = new LogstashFeatureSet(null);
LogstashFeatureSet featureSet = new LogstashFeatureSet(settings, null);
assertThat(featureSet.enabled(), is(true)); assertThat(featureSet.enabled(), is(true));
} }
public void testAvailable() throws Exception { public void testAvailable() throws Exception {
final XPackLicenseState licenseState = mock(XPackLicenseState.class); final XPackLicenseState licenseState = mock(XPackLicenseState.class);
LogstashFeatureSet featureSet = new LogstashFeatureSet(Settings.EMPTY, licenseState); LogstashFeatureSet featureSet = new LogstashFeatureSet(licenseState);
boolean available = randomBoolean(); boolean available = randomBoolean();
when(licenseState.isAllowed(XPackLicenseState.Feature.LOGSTASH)).thenReturn(available); when(licenseState.isAllowed(XPackLicenseState.Feature.LOGSTASH)).thenReturn(available);
assertThat(featureSet.available(), is(available)); assertThat(featureSet.available(), is(available));

View File

@ -10,11 +10,9 @@ import org.elasticsearch.cluster.metadata.IndexMetadata;
import org.elasticsearch.cluster.metadata.MappingMetadata; import org.elasticsearch.cluster.metadata.MappingMetadata;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.license.XPackLicenseState; import org.elasticsearch.license.XPackLicenseState;
import org.elasticsearch.xpack.core.XPackFeatureSet; import org.elasticsearch.xpack.core.XPackFeatureSet;
import org.elasticsearch.xpack.core.XPackField; import org.elasticsearch.xpack.core.XPackField;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.core.flattened.FlattenedFeatureSetUsage; import org.elasticsearch.xpack.core.flattened.FlattenedFeatureSetUsage;
import org.elasticsearch.xpack.flattened.mapper.FlatObjectFieldMapper; import org.elasticsearch.xpack.flattened.mapper.FlatObjectFieldMapper;
@ -22,13 +20,11 @@ import java.util.Map;
public class FlattenedFeatureSet implements XPackFeatureSet { public class FlattenedFeatureSet implements XPackFeatureSet {
private final boolean enabled;
private final XPackLicenseState licenseState; private final XPackLicenseState licenseState;
private final ClusterService clusterService; private final ClusterService clusterService;
@Inject @Inject
public FlattenedFeatureSet(Settings settings, XPackLicenseState licenseState, ClusterService clusterService) { public FlattenedFeatureSet(XPackLicenseState licenseState, ClusterService clusterService) {
this.enabled = XPackSettings.FLATTENED_ENABLED.get(settings);
this.licenseState = licenseState; this.licenseState = licenseState;
this.clusterService = clusterService; this.clusterService = clusterService;
} }
@ -45,7 +41,7 @@ public class FlattenedFeatureSet implements XPackFeatureSet {
@Override @Override
public boolean enabled() { public boolean enabled() {
return enabled; return true;
} }
@Override @Override
@ -78,6 +74,6 @@ public class FlattenedFeatureSet implements XPackFeatureSet {
} }
} }
listener.onResponse(new FlattenedFeatureSetUsage(available(), enabled(), fieldCount)); listener.onResponse(new FlattenedFeatureSetUsage(available(), fieldCount));
} }
} }

View File

@ -7,29 +7,22 @@
package org.elasticsearch.xpack.flattened; package org.elasticsearch.xpack.flattened;
import org.elasticsearch.common.inject.Module; import org.elasticsearch.common.inject.Module;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.index.mapper.Mapper; import org.elasticsearch.index.mapper.Mapper;
import org.elasticsearch.plugins.ActionPlugin; import org.elasticsearch.plugins.ActionPlugin;
import org.elasticsearch.plugins.MapperPlugin; import org.elasticsearch.plugins.MapperPlugin;
import org.elasticsearch.plugins.Plugin; import org.elasticsearch.plugins.Plugin;
import org.elasticsearch.xpack.core.XPackPlugin; import org.elasticsearch.xpack.core.XPackPlugin;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.flattened.mapper.FlatObjectFieldMapper; import org.elasticsearch.xpack.flattened.mapper.FlatObjectFieldMapper;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Map; import java.util.Map;
import static java.util.Collections.emptyMap;
import static java.util.Collections.singletonMap; import static java.util.Collections.singletonMap;
public class FlattenedMapperPlugin extends Plugin implements MapperPlugin, ActionPlugin { public class FlattenedMapperPlugin extends Plugin implements MapperPlugin, ActionPlugin {
private final boolean enabled; public FlattenedMapperPlugin() { }
public FlattenedMapperPlugin(Settings settings) {
this.enabled = XPackSettings.FLATTENED_ENABLED.get(settings);
}
public Collection<Module> createGuiceModules() { public Collection<Module> createGuiceModules() {
return Collections.singletonList(b -> { return Collections.singletonList(b -> {
@ -39,9 +32,6 @@ public class FlattenedMapperPlugin extends Plugin implements MapperPlugin, Actio
@Override @Override
public Map<String, Mapper.TypeParser> getMappers() { public Map<String, Mapper.TypeParser> getMappers() {
if (enabled == false) {
return emptyMap();
}
return singletonMap(FlatObjectFieldMapper.CONTENT_TYPE, new FlatObjectFieldMapper.TypeParser()); return singletonMap(FlatObjectFieldMapper.CONTENT_TYPE, new FlatObjectFieldMapper.TypeParser());
} }
} }

View File

@ -44,7 +44,6 @@ import org.elasticsearch.xpack.core.ml.action.GetDatafeedsStatsAction;
import org.elasticsearch.xpack.core.ml.action.GetJobsAction; import org.elasticsearch.xpack.core.ml.action.GetJobsAction;
import org.elasticsearch.xpack.core.ml.action.GetJobsStatsAction; import org.elasticsearch.xpack.core.ml.action.GetJobsStatsAction;
import org.elasticsearch.xpack.core.ml.action.StopDatafeedAction; import org.elasticsearch.xpack.core.ml.action.StopDatafeedAction;
import org.elasticsearch.xpack.core.action.util.QueryPage;
import org.elasticsearch.xpack.core.ml.client.MachineLearningClient; import org.elasticsearch.xpack.core.ml.client.MachineLearningClient;
import org.elasticsearch.xpack.core.ml.datafeed.DatafeedConfig; import org.elasticsearch.xpack.core.ml.datafeed.DatafeedConfig;
import org.elasticsearch.xpack.core.ml.datafeed.DatafeedState; import org.elasticsearch.xpack.core.ml.datafeed.DatafeedState;
@ -106,7 +105,6 @@ public abstract class BaseMlIntegTestCase extends ESIntegTestCase {
settings.put(XPackSettings.MACHINE_LEARNING_ENABLED.getKey(), true); settings.put(XPackSettings.MACHINE_LEARNING_ENABLED.getKey(), true);
settings.put(XPackSettings.SECURITY_ENABLED.getKey(), false); settings.put(XPackSettings.SECURITY_ENABLED.getKey(), false);
settings.put(XPackSettings.WATCHER_ENABLED.getKey(), false); settings.put(XPackSettings.WATCHER_ENABLED.getKey(), false);
settings.put(XPackSettings.MONITORING_ENABLED.getKey(), false);
settings.put(XPackSettings.GRAPH_ENABLED.getKey(), false); settings.put(XPackSettings.GRAPH_ENABLED.getKey(), false);
return settings.build(); return settings.build();
} }

View File

@ -140,7 +140,7 @@ public class Monitoring extends Plugin implements ActionPlugin, ReloadablePlugin
collectors.add(new IndexRecoveryCollector(clusterService, getLicenseState(), client)); collectors.add(new IndexRecoveryCollector(clusterService, getLicenseState(), client));
collectors.add(new JobStatsCollector(settings, clusterService, getLicenseState(), client)); collectors.add(new JobStatsCollector(settings, clusterService, getLicenseState(), client));
collectors.add(new StatsCollector(settings, clusterService, getLicenseState(), client)); collectors.add(new StatsCollector(settings, clusterService, getLicenseState(), client));
collectors.add(new EnrichStatsCollector(clusterService, getLicenseState(), client, settings)); collectors.add(new EnrichStatsCollector(clusterService, getLicenseState(), client));
final MonitoringService monitoringService = new MonitoringService(settings, clusterService, threadPool, collectors, exporters); final MonitoringService monitoringService = new MonitoringService(settings, clusterService, threadPool, collectors, exporters);

View File

@ -9,11 +9,9 @@ import org.elasticsearch.client.Client;
import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.settings.Setting; import org.elasticsearch.common.settings.Setting;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.util.concurrent.ThreadContext; import org.elasticsearch.common.util.concurrent.ThreadContext;
import org.elasticsearch.license.XPackLicenseState; import org.elasticsearch.license.XPackLicenseState;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.core.enrich.action.EnrichStatsAction; import org.elasticsearch.xpack.core.enrich.action.EnrichStatsAction;
import org.elasticsearch.xpack.core.monitoring.exporter.MonitoringDoc; import org.elasticsearch.xpack.core.monitoring.exporter.MonitoringDoc;
import org.elasticsearch.xpack.monitoring.collector.Collector; import org.elasticsearch.xpack.monitoring.collector.Collector;
@ -29,24 +27,20 @@ public final class EnrichStatsCollector extends Collector {
public static final Setting<TimeValue> STATS_TIMEOUT = collectionTimeoutSetting("enrich.stats.timeout"); public static final Setting<TimeValue> STATS_TIMEOUT = collectionTimeoutSetting("enrich.stats.timeout");
private final Client client; private final Client client;
private final Settings settings;
private final ThreadContext threadContext; private final ThreadContext threadContext;
public EnrichStatsCollector(ClusterService clusterService, public EnrichStatsCollector(ClusterService clusterService,
XPackLicenseState licenseState, XPackLicenseState licenseState,
Client client, Client client) {
Settings settings) { this(clusterService, licenseState, client, client.threadPool().getThreadContext());
this(clusterService, licenseState, client, client.threadPool().getThreadContext(), settings);
} }
EnrichStatsCollector(ClusterService clusterService, EnrichStatsCollector(ClusterService clusterService,
XPackLicenseState licenseState, XPackLicenseState licenseState,
Client client, Client client,
ThreadContext threadContext, ThreadContext threadContext) {
Settings settings) {
super(EnrichCoordinatorDoc.TYPE, clusterService, STATS_TIMEOUT, licenseState); super(EnrichCoordinatorDoc.TYPE, clusterService, STATS_TIMEOUT, licenseState);
this.client = client; this.client = client;
this.settings = settings;
this.threadContext = threadContext; this.threadContext = threadContext;
} }
@ -54,7 +48,6 @@ public final class EnrichStatsCollector extends Collector {
protected boolean shouldCollect(final boolean isElectedMaster) { protected boolean shouldCollect(final boolean isElectedMaster) {
return isElectedMaster return isElectedMaster
&& super.shouldCollect(isElectedMaster) && super.shouldCollect(isElectedMaster)
&& XPackSettings.ENRICH_ENABLED_SETTING.get(settings)
&& licenseState.isAllowed(XPackLicenseState.Feature.ENRICH); && licenseState.isAllowed(XPackLicenseState.Feature.ENRICH);
} }

View File

@ -36,7 +36,6 @@ import org.elasticsearch.threadpool.FixedExecutorBuilder;
import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.watcher.ResourceWatcherService;
import org.elasticsearch.xpack.core.XPackPlugin; import org.elasticsearch.xpack.core.XPackPlugin;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.core.rollup.RollupField; import org.elasticsearch.xpack.core.rollup.RollupField;
import org.elasticsearch.xpack.core.rollup.action.DeleteRollupJobAction; import org.elasticsearch.xpack.core.rollup.action.DeleteRollupJobAction;
import org.elasticsearch.xpack.core.rollup.action.GetRollupCapsAction; import org.elasticsearch.xpack.core.rollup.action.GetRollupCapsAction;
@ -97,12 +96,10 @@ public class Rollup extends Plugin implements ActionPlugin, PersistentTaskPlugin
private final SetOnce<SchedulerEngine> schedulerEngine = new SetOnce<>(); private final SetOnce<SchedulerEngine> schedulerEngine = new SetOnce<>();
private final Settings settings; private final Settings settings;
private final boolean enabled;
private final boolean transportClientMode; private final boolean transportClientMode;
public Rollup(Settings settings) { public Rollup(Settings settings) {
this.settings = settings; this.settings = settings;
this.enabled = XPackSettings.ROLLUP_ENABLED.get(settings);
this.transportClientMode = XPackPlugin.transportClientMode(settings); this.transportClientMode = XPackPlugin.transportClientMode(settings);
} }
@ -134,10 +131,6 @@ public class Rollup extends Plugin implements ActionPlugin, PersistentTaskPlugin
IndexScopedSettings indexScopedSettings, SettingsFilter settingsFilter, IndexScopedSettings indexScopedSettings, SettingsFilter settingsFilter,
IndexNameExpressionResolver indexNameExpressionResolver, IndexNameExpressionResolver indexNameExpressionResolver,
Supplier<DiscoveryNodes> nodesInCluster) { Supplier<DiscoveryNodes> nodesInCluster) {
if (!enabled) {
return emptyList();
}
return Arrays.asList( return Arrays.asList(
new RestRollupSearchAction(), new RestRollupSearchAction(),
new RestPutRollupJobAction(), new RestPutRollupJobAction(),
@ -153,9 +146,6 @@ public class Rollup extends Plugin implements ActionPlugin, PersistentTaskPlugin
@Override @Override
public List<ActionHandler<? extends ActionRequest, ? extends ActionResponse>> getActions() { public List<ActionHandler<? extends ActionRequest, ? extends ActionResponse>> getActions() {
if (!enabled) {
return emptyList();
}
return Arrays.asList( return Arrays.asList(
new ActionHandler<>(RollupSearchAction.INSTANCE, TransportRollupSearchAction.class), new ActionHandler<>(RollupSearchAction.INSTANCE, TransportRollupSearchAction.class),
new ActionHandler<>(PutRollupJobAction.INSTANCE, TransportPutRollupJobAction.class), new ActionHandler<>(PutRollupJobAction.INSTANCE, TransportPutRollupJobAction.class),
@ -170,7 +160,7 @@ public class Rollup extends Plugin implements ActionPlugin, PersistentTaskPlugin
@Override @Override
public List<ExecutorBuilder<?>> getExecutorBuilders(Settings settings) { public List<ExecutorBuilder<?>> getExecutorBuilders(Settings settings) {
if (false == enabled || transportClientMode) { if (transportClientMode) {
return emptyList(); return emptyList();
} }
@ -186,7 +176,7 @@ public class Rollup extends Plugin implements ActionPlugin, PersistentTaskPlugin
Client client, Client client,
SettingsModule settingsModule, SettingsModule settingsModule,
IndexNameExpressionResolver expressionResolver) { IndexNameExpressionResolver expressionResolver) {
if (enabled == false || transportClientMode ) { if (transportClientMode ) {
return emptyList(); return emptyList();
} }

View File

@ -8,23 +8,19 @@ package org.elasticsearch.xpack.rollup;
import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.ActionListener;
import org.elasticsearch.common.Nullable; import org.elasticsearch.common.Nullable;
import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.license.XPackLicenseState; import org.elasticsearch.license.XPackLicenseState;
import org.elasticsearch.xpack.core.XPackFeatureSet; import org.elasticsearch.xpack.core.XPackFeatureSet;
import org.elasticsearch.xpack.core.XPackField; import org.elasticsearch.xpack.core.XPackField;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.core.rollup.RollupFeatureSetUsage; import org.elasticsearch.xpack.core.rollup.RollupFeatureSetUsage;
import java.util.Map; import java.util.Map;
public class RollupFeatureSet implements XPackFeatureSet { public class RollupFeatureSet implements XPackFeatureSet {
private final boolean enabled;
private final XPackLicenseState licenseState; private final XPackLicenseState licenseState;
@Inject @Inject
public RollupFeatureSet(Settings settings, @Nullable XPackLicenseState licenseState) { public RollupFeatureSet(@Nullable XPackLicenseState licenseState) {
this.enabled = XPackSettings.ROLLUP_ENABLED.get(settings);
this.licenseState = licenseState; this.licenseState = licenseState;
} }
@ -40,7 +36,7 @@ public class RollupFeatureSet implements XPackFeatureSet {
@Override @Override
public boolean enabled() { public boolean enabled() {
return enabled; return true;
} }
@Override @Override
@ -51,6 +47,6 @@ public class RollupFeatureSet implements XPackFeatureSet {
@Override @Override
public void usage(ActionListener<XPackFeatureSet.Usage> listener) { public void usage(ActionListener<XPackFeatureSet.Usage> listener) {
// TODO expose the currently running rollup tasks on this node? Unclear the best way to do that // TODO expose the currently running rollup tasks on this node? Unclear the best way to do that
listener.onResponse(new RollupFeatureSetUsage(available(), enabled())); listener.onResponse(new RollupFeatureSetUsage(available()));
} }
} }

View File

@ -7,12 +7,9 @@ package org.elasticsearch.xpack.rollup;
import org.elasticsearch.action.support.PlainActionFuture; import org.elasticsearch.action.support.PlainActionFuture;
import org.elasticsearch.common.io.stream.BytesStreamOutput; import org.elasticsearch.common.io.stream.BytesStreamOutput;
import org.elasticsearch.common.settings.Setting;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.license.XPackLicenseState; import org.elasticsearch.license.XPackLicenseState;
import org.elasticsearch.test.ESTestCase; import org.elasticsearch.test.ESTestCase;
import org.elasticsearch.xpack.core.XPackFeatureSet; import org.elasticsearch.xpack.core.XPackFeatureSet;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.core.rollup.RollupFeatureSetUsage; import org.elasticsearch.xpack.core.rollup.RollupFeatureSetUsage;
import org.junit.Before; import org.junit.Before;
@ -33,28 +30,19 @@ public class RollupFeatureSetTests extends ESTestCase {
} }
public void testAvailable() { public void testAvailable() {
RollupFeatureSet featureSet = new RollupFeatureSet(Settings.EMPTY, licenseState); RollupFeatureSet featureSet = new RollupFeatureSet(licenseState);
boolean available = randomBoolean(); boolean available = randomBoolean();
when(licenseState.isAllowed(XPackLicenseState.Feature.ROLLUP)).thenReturn(available); when(licenseState.isAllowed(XPackLicenseState.Feature.ROLLUP)).thenReturn(available);
assertThat(featureSet.available(), is(available)); assertThat(featureSet.available(), is(available));
} }
public void testEnabledSetting() {
boolean enabled = randomBoolean();
Settings.Builder settings = Settings.builder();
settings.put("xpack.rollup.enabled", enabled);
RollupFeatureSet featureSet = new RollupFeatureSet(settings.build(), licenseState);
assertThat(featureSet.enabled(), is(enabled));
assertSettingDeprecationsAndWarnings(new Setting<?>[] { XPackSettings.ROLLUP_ENABLED } );
}
public void testEnabledDefault() { public void testEnabledDefault() {
RollupFeatureSet featureSet = new RollupFeatureSet(Settings.EMPTY, licenseState); RollupFeatureSet featureSet = new RollupFeatureSet(licenseState);
assertThat(featureSet.enabled(), is(true)); assertThat(featureSet.enabled(), is(true));
} }
public void testUsage() throws ExecutionException, InterruptedException, IOException { public void testUsage() throws ExecutionException, InterruptedException, IOException {
RollupFeatureSet featureSet = new RollupFeatureSet(Settings.EMPTY, licenseState); RollupFeatureSet featureSet = new RollupFeatureSet(licenseState);
PlainActionFuture<XPackFeatureSet.Usage> future = new PlainActionFuture<>(); PlainActionFuture<XPackFeatureSet.Usage> future = new PlainActionFuture<>();
featureSet.usage(future); featureSet.usage(future);
XPackFeatureSet.Usage rollupUsage = future.get(); XPackFeatureSet.Usage rollupUsage = future.get();

View File

@ -1,5 +1,4 @@
testClusters.integTest { testClusters.integTest {
setting 'xpack.security.enabled', 'false' setting 'xpack.security.enabled', 'false'
setting 'xpack.sql.enabled', 'false'
setting 'xpack.license.self_generated.type', 'trial' setting 'xpack.license.self_generated.type', 'trial'
} }

View File

@ -9,13 +9,14 @@ package org.elasticsearch.xpack.sql.qa.jdbc;
import java.sql.Connection; import java.sql.Connection;
import java.sql.SQLException; import java.sql.SQLException;
import static org.hamcrest.Matchers.startsWith;
public class JdbcNoSqlTestCase extends JdbcIntegrationTestCase { public class JdbcNoSqlTestCase extends JdbcIntegrationTestCase {
public void testJdbcExceptionMessage() throws SQLException { public void testJdbcExceptionMessage() throws SQLException {
try (Connection c = esJdbc()) { try (Connection c = esJdbc()) {
SQLException e = expectThrows(SQLException.class, () -> c.prepareStatement("SELECT * FROM bla").executeQuery()); SQLException e = expectThrows(SQLException.class, () -> c.prepareStatement("SELECT * FROM bla").executeQuery());
assertTrue(e.getMessage().startsWith("X-Pack/SQL does not seem to be available on the Elasticsearch" assertThat(e.getMessage(), startsWith("Found 1 problem\nline 1:15: Unknown index [bla]"));
+ " node using the access path"));
} }
} }
} }

View File

@ -10,11 +10,9 @@ import org.elasticsearch.action.ActionListener;
import org.elasticsearch.client.Client; import org.elasticsearch.client.Client;
import org.elasticsearch.common.Nullable; import org.elasticsearch.common.Nullable;
import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.license.XPackLicenseState; import org.elasticsearch.license.XPackLicenseState;
import org.elasticsearch.xpack.core.XPackFeatureSet; import org.elasticsearch.xpack.core.XPackFeatureSet;
import org.elasticsearch.xpack.core.XPackField; import org.elasticsearch.xpack.core.XPackField;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.core.sql.SqlFeatureSetUsage; import org.elasticsearch.xpack.core.sql.SqlFeatureSetUsage;
import org.elasticsearch.xpack.core.watcher.common.stats.Counters; import org.elasticsearch.xpack.core.watcher.common.stats.Counters;
import org.elasticsearch.xpack.sql.plugin.SqlStatsAction; import org.elasticsearch.xpack.sql.plugin.SqlStatsAction;
@ -29,13 +27,11 @@ import java.util.stream.Collectors;
public class SqlFeatureSet implements XPackFeatureSet { public class SqlFeatureSet implements XPackFeatureSet {
private final boolean enabled;
private final XPackLicenseState licenseState; private final XPackLicenseState licenseState;
private final Client client; private final Client client;
@Inject @Inject
public SqlFeatureSet(Settings settings, @Nullable XPackLicenseState licenseState, Client client) { public SqlFeatureSet(@Nullable XPackLicenseState licenseState, Client client) {
this.enabled = XPackSettings.SQL_ENABLED.get(settings);
this.licenseState = licenseState; this.licenseState = licenseState;
this.client = client; this.client = client;
} }
@ -52,7 +48,7 @@ public class SqlFeatureSet implements XPackFeatureSet {
@Override @Override
public boolean enabled() { public boolean enabled() {
return enabled; return true;
} }
@Override @Override
@ -62,7 +58,7 @@ public class SqlFeatureSet implements XPackFeatureSet {
@Override @Override
public void usage(ActionListener<XPackFeatureSet.Usage> listener) { public void usage(ActionListener<XPackFeatureSet.Usage> listener) {
if (enabled) { if (true) {
SqlStatsRequest request = new SqlStatsRequest(); SqlStatsRequest request = new SqlStatsRequest();
request.includeStats(true); request.includeStats(true);
client.execute(SqlStatsAction.INSTANCE, request, ActionListener.wrap(r -> { client.execute(SqlStatsAction.INSTANCE, request, ActionListener.wrap(r -> {
@ -72,10 +68,10 @@ public class SqlFeatureSet implements XPackFeatureSet {
.filter(Objects::nonNull) .filter(Objects::nonNull)
.collect(Collectors.toList()); .collect(Collectors.toList());
Counters mergedCounters = Counters.merge(countersPerNode); Counters mergedCounters = Counters.merge(countersPerNode);
listener.onResponse(new SqlFeatureSetUsage(available(), enabled(), mergedCounters.toNestedMap())); listener.onResponse(new SqlFeatureSetUsage(available(), mergedCounters.toNestedMap()));
}, listener::onFailure)); }, listener::onFailure));
} else { } else {
listener.onResponse(new SqlFeatureSetUsage(available(), enabled(), Collections.emptyMap())); listener.onResponse(new SqlFeatureSetUsage(available(), Collections.emptyMap()));
} }
} }

View File

@ -32,7 +32,6 @@ import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.watcher.ResourceWatcherService;
import org.elasticsearch.xpack.core.XPackField; import org.elasticsearch.xpack.core.XPackField;
import org.elasticsearch.xpack.core.XPackPlugin; import org.elasticsearch.xpack.core.XPackPlugin;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.ql.index.IndexResolver; import org.elasticsearch.xpack.ql.index.IndexResolver;
import org.elasticsearch.xpack.sql.SqlFeatureSet; import org.elasticsearch.xpack.sql.SqlFeatureSet;
import org.elasticsearch.xpack.sql.action.SqlClearCursorAction; import org.elasticsearch.xpack.sql.action.SqlClearCursorAction;
@ -47,11 +46,8 @@ import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.function.Supplier; import java.util.function.Supplier;
import static java.util.Collections.emptyList;
public class SqlPlugin extends Plugin implements ActionPlugin { public class SqlPlugin extends Plugin implements ActionPlugin {
private final boolean enabled;
private final SqlLicenseChecker sqlLicenseChecker = new SqlLicenseChecker( private final SqlLicenseChecker sqlLicenseChecker = new SqlLicenseChecker(
(mode) -> { (mode) -> {
XPackLicenseState licenseState = getLicenseState(); XPackLicenseState licenseState = getLicenseState();
@ -78,8 +74,8 @@ public class SqlPlugin extends Plugin implements ActionPlugin {
} }
); );
// remove unneeded Settings
public SqlPlugin(Settings settings) { public SqlPlugin(Settings settings) {
this.enabled = XPackSettings.SQL_ENABLED.get(settings);
} }
// overridable by tests // overridable by tests
@ -100,9 +96,6 @@ public class SqlPlugin extends Plugin implements ActionPlugin {
* Create components used by the sql plugin. * Create components used by the sql plugin.
*/ */
Collection<Object> createComponents(Client client, String clusterName, NamedWriteableRegistry namedWriteableRegistry) { Collection<Object> createComponents(Client client, String clusterName, NamedWriteableRegistry namedWriteableRegistry) {
if (false == enabled) {
return emptyList();
}
IndexResolver indexResolver = new IndexResolver(client, clusterName, SqlDataTypeRegistry.INSTANCE); IndexResolver indexResolver = new IndexResolver(client, clusterName, SqlDataTypeRegistry.INSTANCE);
return Arrays.asList(sqlLicenseChecker, indexResolver, new PlanExecutor(client, indexResolver, namedWriteableRegistry)); return Arrays.asList(sqlLicenseChecker, indexResolver, new PlanExecutor(client, indexResolver, namedWriteableRegistry));
} }
@ -120,10 +113,6 @@ public class SqlPlugin extends Plugin implements ActionPlugin {
SettingsFilter settingsFilter, IndexNameExpressionResolver indexNameExpressionResolver, SettingsFilter settingsFilter, IndexNameExpressionResolver indexNameExpressionResolver,
Supplier<DiscoveryNodes> nodesInCluster) { Supplier<DiscoveryNodes> nodesInCluster) {
if (false == enabled) {
return emptyList();
}
return Arrays.asList(new RestSqlQueryAction(), return Arrays.asList(new RestSqlQueryAction(),
new RestSqlTranslateAction(), new RestSqlTranslateAction(),
new RestSqlClearCursorAction(), new RestSqlClearCursorAction(),
@ -132,10 +121,6 @@ public class SqlPlugin extends Plugin implements ActionPlugin {
@Override @Override
public List<ActionHandler<? extends ActionRequest, ? extends ActionResponse>> getActions() { public List<ActionHandler<? extends ActionRequest, ? extends ActionResponse>> getActions() {
if (false == enabled) {
return emptyList();
}
return Arrays.asList(new ActionHandler<>(SqlQueryAction.INSTANCE, TransportSqlQueryAction.class), return Arrays.asList(new ActionHandler<>(SqlQueryAction.INSTANCE, TransportSqlQueryAction.class),
new ActionHandler<>(SqlTranslateAction.INSTANCE, TransportSqlTranslateAction.class), new ActionHandler<>(SqlTranslateAction.INSTANCE, TransportSqlTranslateAction.class),
new ActionHandler<>(SqlClearCursorAction.INSTANCE, TransportSqlClearCursorAction.class), new ActionHandler<>(SqlClearCursorAction.INSTANCE, TransportSqlClearCursorAction.class),

View File

@ -11,14 +11,12 @@ import org.elasticsearch.action.support.PlainActionFuture;
import org.elasticsearch.client.Client; import org.elasticsearch.client.Client;
import org.elasticsearch.cluster.ClusterName; import org.elasticsearch.cluster.ClusterName;
import org.elasticsearch.cluster.node.DiscoveryNode; import org.elasticsearch.cluster.node.DiscoveryNode;
import org.elasticsearch.common.settings.Setting;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.util.concurrent.ThreadContext; import org.elasticsearch.common.util.concurrent.ThreadContext;
import org.elasticsearch.common.xcontent.ObjectPath; import org.elasticsearch.common.xcontent.ObjectPath;
import org.elasticsearch.license.XPackLicenseState; import org.elasticsearch.license.XPackLicenseState;
import org.elasticsearch.test.ESTestCase; import org.elasticsearch.test.ESTestCase;
import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.core.sql.SqlFeatureSetUsage; import org.elasticsearch.xpack.core.sql.SqlFeatureSetUsage;
import org.elasticsearch.xpack.core.watcher.common.stats.Counters; import org.elasticsearch.xpack.core.watcher.common.stats.Counters;
import org.elasticsearch.xpack.sql.plugin.SqlStatsAction; import org.elasticsearch.xpack.sql.plugin.SqlStatsAction;
@ -53,32 +51,12 @@ public class SqlFeatureSetTests extends ESTestCase {
} }
public void testAvailable() { public void testAvailable() {
SqlFeatureSet featureSet = new SqlFeatureSet(Settings.EMPTY, licenseState, client); SqlFeatureSet featureSet = new SqlFeatureSet(licenseState, client);
boolean available = randomBoolean(); boolean available = randomBoolean();
when(licenseState.isAllowed(XPackLicenseState.Feature.SQL)).thenReturn(available); when(licenseState.isAllowed(XPackLicenseState.Feature.SQL)).thenReturn(available);
assertThat(featureSet.available(), is(available)); assertThat(featureSet.available(), is(available));
} }
public void testEnabled() {
boolean enabled = randomBoolean();
Settings.Builder settings = Settings.builder();
boolean isExplicitlySet = false;
if (enabled) {
if (randomBoolean()) {
settings.put("xpack.sql.enabled", enabled);
isExplicitlySet = true;
}
} else {
settings.put("xpack.sql.enabled", enabled);
isExplicitlySet = true;
}
SqlFeatureSet featureSet = new SqlFeatureSet(settings.build(), licenseState, client);
assertThat(featureSet.enabled(), is(enabled));
if (isExplicitlySet) {
assertSettingDeprecationsAndWarnings(new Setting<?>[] { XPackSettings.SQL_ENABLED } );
}
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public void testUsageStats() throws Exception { public void testUsageStats() throws Exception {
doAnswer(mock -> { doAnswer(mock -> {
@ -107,7 +85,7 @@ public class SqlFeatureSetTests extends ESTestCase {
}).when(client).execute(eq(SqlStatsAction.INSTANCE), any(), any()); }).when(client).execute(eq(SqlStatsAction.INSTANCE), any(), any());
PlainActionFuture<SqlFeatureSet.Usage> future = new PlainActionFuture<>(); PlainActionFuture<SqlFeatureSet.Usage> future = new PlainActionFuture<>();
new SqlFeatureSet(Settings.EMPTY, licenseState, client).usage(future); new SqlFeatureSet(licenseState, client).usage(future);
SqlFeatureSetUsage sqlUsage = (SqlFeatureSetUsage) future.get(); SqlFeatureSetUsage sqlUsage = (SqlFeatureSetUsage) future.get();
long fooBarBaz = ObjectPath.eval("foo.bar.baz", sqlUsage.stats()); long fooBarBaz = ObjectPath.eval("foo.bar.baz", sqlUsage.stats());

View File

@ -1,51 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
package org.elasticsearch.xpack.sql.action;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.plugins.Plugin;
import org.elasticsearch.xpack.core.LocalStateCompositeXPackPlugin;
import org.elasticsearch.xpack.core.XPackSettings;
import java.util.Collection;
import java.util.Collections;
import static org.hamcrest.CoreMatchers.either;
import static org.hamcrest.CoreMatchers.startsWith;
public class SqlDisabledIT extends AbstractSqlIntegTestCase {
@Override
protected Collection<Class<? extends Plugin>> nodePlugins() {
return Collections.singletonList(LocalStateCompositeXPackPlugin.class);
}
@Override
protected Settings nodeSettings(int nodeOrdinal) {
return Settings.builder()
.put(super.nodeSettings(nodeOrdinal))
.put(XPackSettings.SQL_ENABLED.getKey(), false)
.build();
}
@Override
protected Settings transportClientSettings() {
return Settings.builder()
.put(super.transportClientSettings())
.put(XPackSettings.SQL_ENABLED.getKey(), randomBoolean())
.build();
}
public void testSqlAction() {
Throwable throwable = expectThrows(Throwable.class,
() -> new SqlQueryRequestBuilder(client(), SqlQueryAction.INSTANCE).query("SHOW tables").get());
assertThat(throwable.getMessage(),
either(startsWith("no proxy found for action")) // disabled on client
.or(startsWith("failed to find action")) // disabled on proxy client
.or(startsWith("No handler for action [indices:data/read/sql]"))); // disabled on server
}
}

View File

@ -11,31 +11,30 @@ import org.elasticsearch.cluster.node.DiscoveryNodes;
import org.elasticsearch.common.io.stream.NamedWriteableRegistry; import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
import org.elasticsearch.common.settings.ClusterSettings; import org.elasticsearch.common.settings.ClusterSettings;
import org.elasticsearch.common.settings.IndexScopedSettings; import org.elasticsearch.common.settings.IndexScopedSettings;
import org.elasticsearch.common.settings.Setting;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.settings.SettingsFilter; import org.elasticsearch.common.settings.SettingsFilter;
import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestController;
import org.elasticsearch.test.ESTestCase; import org.elasticsearch.test.ESTestCase;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.sql.session.Cursors; import org.elasticsearch.xpack.sql.session.Cursors;
import java.util.Collections; import java.util.Collections;
import static org.hamcrest.Matchers.empty; import static org.hamcrest.Matchers.hasSize;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
public class SqlPluginTests extends ESTestCase { public class SqlPluginTests extends ESTestCase {
public void testSqlDisabled() { public void testSqlDisabledIsNoOp() {
Settings settings = Settings.builder().put("xpack.sql.enabled", false).build(); Settings settings = Settings.builder().put("xpack.sql.enabled", false).build();
SqlPlugin plugin = new SqlPlugin(settings); SqlPlugin plugin = new SqlPlugin(settings);
assertThat(plugin.createComponents(mock(Client.class), "cluster", new NamedWriteableRegistry(Cursors.getNamedWriteables())), assertThat(plugin.createComponents(mock(Client.class), "cluster", new NamedWriteableRegistry(Cursors.getNamedWriteables())),
empty()); hasSize(3));
assertThat(plugin.getActions(), empty()); assertThat(plugin.getActions(), hasSize(4));
assertThat(plugin.getRestHandlers(Settings.EMPTY, mock(RestController.class), assertThat(
plugin.getRestHandlers(Settings.EMPTY, mock(RestController.class),
new ClusterSettings(Settings.EMPTY, ClusterSettings.BUILT_IN_CLUSTER_SETTINGS), new ClusterSettings(Settings.EMPTY, ClusterSettings.BUILT_IN_CLUSTER_SETTINGS),
IndexScopedSettings.DEFAULT_SCOPED_SETTINGS, new SettingsFilter(Collections.emptyList()), IndexScopedSettings.DEFAULT_SCOPED_SETTINGS, new SettingsFilter(Collections.emptyList()),
mock(IndexNameExpressionResolver.class), () -> mock(DiscoveryNodes.class)), empty()); mock(IndexNameExpressionResolver.class), () -> mock(DiscoveryNodes.class)),
assertSettingDeprecationsAndWarnings(new Setting<?>[] { XPackSettings.SQL_ENABLED } ); hasSize(4));
} }
} }

View File

@ -47,7 +47,6 @@ import org.elasticsearch.threadpool.FixedExecutorBuilder;
import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.watcher.ResourceWatcherService;
import org.elasticsearch.xpack.core.XPackPlugin; import org.elasticsearch.xpack.core.XPackPlugin;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.core.scheduler.SchedulerEngine; import org.elasticsearch.xpack.core.scheduler.SchedulerEngine;
import org.elasticsearch.xpack.core.transform.TransformNamedXContentProvider; import org.elasticsearch.xpack.core.transform.TransformNamedXContentProvider;
import org.elasticsearch.xpack.core.transform.action.DeleteTransformAction; import org.elasticsearch.xpack.core.transform.action.DeleteTransformAction;
@ -128,7 +127,6 @@ public class Transform extends Plugin implements SystemIndexPlugin, PersistentTa
private static final Logger logger = LogManager.getLogger(Transform.class); private static final Logger logger = LogManager.getLogger(Transform.class);
private final boolean enabled;
private final Settings settings; private final Settings settings;
private final boolean transportClientMode; private final boolean transportClientMode;
private final SetOnce<TransformServices> transformServices = new SetOnce<>(); private final SetOnce<TransformServices> transformServices = new SetOnce<>();
@ -152,12 +150,11 @@ public class Transform extends Plugin implements SystemIndexPlugin, PersistentTa
public static final String TRANSFORM_ENABLED_NODE_ATTR = "transform.node"; public static final String TRANSFORM_ENABLED_NODE_ATTR = "transform.node";
/** /**
* Setting whether transform (the coordinator task) can run on this node and REST API's are available, * Setting whether transform (the coordinator task) can run on this node.
* respects xpack.transform.enabled (for the whole plugin) as fallback
*/ */
public static final Setting<Boolean> TRANSFORM_ENABLED_NODE = Setting.boolSetting( public static final Setting<Boolean> TRANSFORM_ENABLED_NODE = Setting.boolSetting(
"node.transform", "node.transform",
settings -> Boolean.toString(XPackSettings.TRANSFORM_ENABLED.get(settings) && DiscoveryNode.isDataNode(settings)), settings -> Boolean.toString(DiscoveryNode.isDataNode(settings)),
Property.NodeScope Property.NodeScope
); );
@ -172,7 +169,6 @@ public class Transform extends Plugin implements SystemIndexPlugin, PersistentTa
public Transform(Settings settings) { public Transform(Settings settings) {
this.settings = settings; this.settings = settings;
this.enabled = XPackSettings.TRANSFORM_ENABLED.get(settings);
this.transportClientMode = XPackPlugin.transportClientMode(settings); this.transportClientMode = XPackPlugin.transportClientMode(settings);
} }
@ -203,10 +199,6 @@ public class Transform extends Plugin implements SystemIndexPlugin, PersistentTa
final Supplier<DiscoveryNodes> nodesInCluster final Supplier<DiscoveryNodes> nodesInCluster
) { ) {
if (!enabled) {
return emptyList();
}
return Arrays.asList( return Arrays.asList(
new RestPutTransformAction(), new RestPutTransformAction(),
new RestStartTransformAction(), new RestStartTransformAction(),
@ -232,10 +224,6 @@ public class Transform extends Plugin implements SystemIndexPlugin, PersistentTa
@Override @Override
public List<ActionHandler<? extends ActionRequest, ? extends ActionResponse>> getActions() { public List<ActionHandler<? extends ActionRequest, ? extends ActionResponse>> getActions() {
if (!enabled) {
return emptyList();
}
return Arrays.asList( return Arrays.asList(
new ActionHandler<>(PutTransformAction.INSTANCE, TransportPutTransformAction.class), new ActionHandler<>(PutTransformAction.INSTANCE, TransportPutTransformAction.class),
new ActionHandler<>(StartTransformAction.INSTANCE, TransportStartTransformAction.class), new ActionHandler<>(StartTransformAction.INSTANCE, TransportStartTransformAction.class),
@ -260,7 +248,7 @@ public class Transform extends Plugin implements SystemIndexPlugin, PersistentTa
@Override @Override
public List<ExecutorBuilder<?>> getExecutorBuilders(Settings settings) { public List<ExecutorBuilder<?>> getExecutorBuilders(Settings settings) {
if (false == enabled || transportClientMode) { if (transportClientMode) {
return emptyList(); return emptyList();
} }
@ -289,7 +277,7 @@ public class Transform extends Plugin implements SystemIndexPlugin, PersistentTa
IndexNameExpressionResolver expressionResolver, IndexNameExpressionResolver expressionResolver,
Supplier<RepositoriesService> repositoriesServiceSupplier Supplier<RepositoriesService> repositoriesServiceSupplier
) { ) {
if (enabled == false || transportClientMode) { if (transportClientMode) {
return emptyList(); return emptyList();
} }
@ -339,7 +327,7 @@ public class Transform extends Plugin implements SystemIndexPlugin, PersistentTa
SettingsModule settingsModule, SettingsModule settingsModule,
IndexNameExpressionResolver expressionResolver IndexNameExpressionResolver expressionResolver
) { ) {
if (enabled == false || transportClientMode) { if (transportClientMode) {
return emptyList(); return emptyList();
} }
@ -373,10 +361,6 @@ public class Transform extends Plugin implements SystemIndexPlugin, PersistentTa
); );
} }
if (enabled == false) {
return Settings.EMPTY;
}
Settings.Builder additionalSettings = Settings.builder(); Settings.Builder additionalSettings = Settings.builder();
additionalSettings.put(transformEnabledNodeAttribute, TRANSFORM_ENABLED_NODE.get(settings)); additionalSettings.put(transformEnabledNodeAttribute, TRANSFORM_ENABLED_NODE.get(settings));

View File

@ -17,7 +17,6 @@ import org.elasticsearch.client.Client;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.Nullable; import org.elasticsearch.common.Nullable;
import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.license.XPackLicenseState; import org.elasticsearch.license.XPackLicenseState;
@ -28,7 +27,6 @@ import org.elasticsearch.search.aggregations.metrics.NumericMetricsAggregation;
import org.elasticsearch.xpack.core.ClientHelper; import org.elasticsearch.xpack.core.ClientHelper;
import org.elasticsearch.xpack.core.XPackFeatureSet; import org.elasticsearch.xpack.core.XPackFeatureSet;
import org.elasticsearch.xpack.core.XPackField; import org.elasticsearch.xpack.core.XPackField;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.core.transform.TransformFeatureSetUsage; import org.elasticsearch.xpack.core.transform.TransformFeatureSetUsage;
import org.elasticsearch.xpack.core.transform.TransformField; import org.elasticsearch.xpack.core.transform.TransformField;
import org.elasticsearch.xpack.core.transform.transforms.TransformConfig; import org.elasticsearch.xpack.core.transform.transforms.TransformConfig;
@ -50,7 +48,6 @@ import java.util.Objects;
public class TransformFeatureSet implements XPackFeatureSet { public class TransformFeatureSet implements XPackFeatureSet {
private final boolean enabled;
private final Client client; private final Client client;
private final XPackLicenseState licenseState; private final XPackLicenseState licenseState;
private final ClusterService clusterService; private final ClusterService clusterService;
@ -75,8 +72,7 @@ public class TransformFeatureSet implements XPackFeatureSet {
TransformIndexerStats.EXPONENTIAL_AVG_DOCUMENTS_PROCESSED.getPreferredName(), }; TransformIndexerStats.EXPONENTIAL_AVG_DOCUMENTS_PROCESSED.getPreferredName(), };
@Inject @Inject
public TransformFeatureSet(Settings settings, ClusterService clusterService, Client client, @Nullable XPackLicenseState licenseState) { public TransformFeatureSet(ClusterService clusterService, Client client, @Nullable XPackLicenseState licenseState) {
this.enabled = XPackSettings.TRANSFORM_ENABLED.get(settings);
this.client = Objects.requireNonNull(client); this.client = Objects.requireNonNull(client);
this.clusterService = Objects.requireNonNull(clusterService); this.clusterService = Objects.requireNonNull(clusterService);
this.licenseState = licenseState; this.licenseState = licenseState;
@ -94,7 +90,7 @@ public class TransformFeatureSet implements XPackFeatureSet {
@Override @Override
public boolean enabled() { public boolean enabled() {
return enabled; return true;
} }
@Override @Override
@ -104,11 +100,6 @@ public class TransformFeatureSet implements XPackFeatureSet {
@Override @Override
public void usage(ActionListener<XPackFeatureSet.Usage> listener) { public void usage(ActionListener<XPackFeatureSet.Usage> listener) {
if (enabled == false) {
listener.onResponse(new TransformFeatureSetUsage(available(), enabled(), Collections.emptyMap(), new TransformIndexerStats()));
return;
}
PersistentTasksCustomMetadata taskMetadata = PersistentTasksCustomMetadata.getPersistentTasksCustomMetadata(clusterService.state()); PersistentTasksCustomMetadata taskMetadata = PersistentTasksCustomMetadata.getPersistentTasksCustomMetadata(clusterService.state());
Collection<PersistentTasksCustomMetadata.PersistentTask<?>> transformTasks = taskMetadata == null Collection<PersistentTasksCustomMetadata.PersistentTask<?>> transformTasks = taskMetadata == null
? Collections.emptyList() ? Collections.emptyList()
@ -122,7 +113,7 @@ public class TransformFeatureSet implements XPackFeatureSet {
ActionListener<TransformIndexerStats> totalStatsListener = ActionListener.wrap( ActionListener<TransformIndexerStats> totalStatsListener = ActionListener.wrap(
statSummations -> listener.onResponse( statSummations -> listener.onResponse(
new TransformFeatureSetUsage(available(), enabled(), transformsCountByState, statSummations) new TransformFeatureSetUsage(available(), transformsCountByState, statSummations)
), ),
listener::onFailure listener::onFailure
); );
@ -137,7 +128,7 @@ public class TransformFeatureSet implements XPackFeatureSet {
long totalTransforms = transformCountSuccess.getHits().getTotalHits().value; long totalTransforms = transformCountSuccess.getHits().getTotalHits().value;
if (totalTransforms == 0) { if (totalTransforms == 0) {
listener.onResponse( listener.onResponse(
new TransformFeatureSetUsage(available(), enabled(), transformsCountByState, new TransformIndexerStats()) new TransformFeatureSetUsage(available(), transformsCountByState, new TransformIndexerStats())
); );
return; return;
} }

View File

@ -7,33 +7,19 @@
package org.elasticsearch.xpack.transform; package org.elasticsearch.xpack.transform;
import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.PlainActionFuture;
import org.elasticsearch.client.Client; import org.elasticsearch.client.Client;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.settings.Setting;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.ToXContent;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentParser;
import org.elasticsearch.common.xcontent.support.XContentMapValues;
import org.elasticsearch.license.XPackLicenseState; import org.elasticsearch.license.XPackLicenseState;
import org.elasticsearch.search.aggregations.Aggregation; import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.metrics.NumericMetricsAggregation; import org.elasticsearch.search.aggregations.metrics.NumericMetricsAggregation;
import org.elasticsearch.test.ESTestCase; import org.elasticsearch.test.ESTestCase;
import org.elasticsearch.xpack.core.XPackFeatureSet;
import org.elasticsearch.xpack.core.XPackFeatureSet.Usage;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.core.transform.transforms.TransformIndexerStats; import org.elasticsearch.xpack.core.transform.transforms.TransformIndexerStats;
import org.junit.Before; import org.junit.Before;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import static org.elasticsearch.xpack.transform.TransformFeatureSet.PROVIDED_STATS; import static org.elasticsearch.xpack.transform.TransformFeatureSet.PROVIDED_STATS;
import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.equalTo;
@ -51,7 +37,6 @@ public class TransformFeatureSetTests extends ESTestCase {
public void testAvailable() { public void testAvailable() {
TransformFeatureSet featureSet = new TransformFeatureSet( TransformFeatureSet featureSet = new TransformFeatureSet(
Settings.EMPTY,
mock(ClusterService.class), mock(ClusterService.class),
mock(Client.class), mock(Client.class),
licenseState licenseState
@ -62,66 +47,12 @@ public class TransformFeatureSetTests extends ESTestCase {
} }
public void testEnabledSetting() { public void testEnabledSetting() {
boolean enabled = randomBoolean();
Settings.Builder settings = Settings.builder();
settings.put("xpack.transform.enabled", enabled);
TransformFeatureSet featureSet = new TransformFeatureSet( TransformFeatureSet featureSet = new TransformFeatureSet(
settings.build(),
mock(ClusterService.class),
mock(Client.class),
licenseState
);
assertThat(featureSet.enabled(), is(enabled));
assertSettingDeprecationsAndWarnings(new Setting<?>[] { XPackSettings.TRANSFORM_ENABLED } );
}
public void testEnabledSettingFallback() {
boolean enabled = randomBoolean();
Settings.Builder settings = Settings.builder();
// use the deprecated setting
settings.put("xpack.data_frame.enabled", enabled);
TransformFeatureSet featureSet = new TransformFeatureSet(
settings.build(),
mock(ClusterService.class),
mock(Client.class),
licenseState
);
assertThat(featureSet.enabled(), is(enabled));
assertWarnings(
"[xpack.data_frame.enabled] setting was deprecated in Elasticsearch and will be removed in a future release! "
+ "See the breaking changes documentation for the next major version."
);
}
public void testEnabledSettingFallbackMix() {
Settings.Builder settings = Settings.builder();
// use the older deprecated setting
settings.put("xpack.data_frame.enabled", false);
// ...and also the more recently deprecated setting
settings.put("xpack.transform.enabled", true);
TransformFeatureSet featureSet = new TransformFeatureSet(
settings.build(),
mock(ClusterService.class), mock(ClusterService.class),
mock(Client.class), mock(Client.class),
licenseState licenseState
); );
assertThat(featureSet.enabled(), is(true)); assertThat(featureSet.enabled(), is(true));
assertWarnings(
"[xpack.data_frame.enabled] setting was deprecated in Elasticsearch and will be removed in a future release! "
+ "See the breaking changes documentation for the next major version.",
"[xpack.transform.enabled] setting was deprecated in Elasticsearch and will be removed in a future release! "
+ "See the breaking changes documentation for the next major version."
);
}
public void testEnabledDefault() {
TransformFeatureSet featureSet = new TransformFeatureSet(
Settings.EMPTY,
mock(ClusterService.class),
mock(Client.class),
licenseState
);
assertTrue(featureSet.enabled());
} }
public void testParseSearchAggs() { public void testParseSearchAggs() {
@ -167,33 +98,4 @@ public class TransformFeatureSetTests extends ESTestCase {
when(agg.value()).thenReturn(value); when(agg.value()).thenReturn(value);
return agg; return agg;
} }
public void testUsageDisabled() throws IOException, InterruptedException, ExecutionException {
when(licenseState.isAllowed(XPackLicenseState.Feature.TRANSFORM)).thenReturn(true);
Settings.Builder settings = Settings.builder();
settings.put("xpack.transform.enabled", false);
TransformFeatureSet featureSet = new TransformFeatureSet(
settings.build(),
mock(ClusterService.class),
mock(Client.class),
licenseState
);
PlainActionFuture<Usage> future = new PlainActionFuture<>();
featureSet.usage(future);
XPackFeatureSet.Usage usage = future.get();
assertFalse(usage.enabled());
try (XContentBuilder builder = XContentFactory.jsonBuilder()) {
usage.toXContent(builder, ToXContent.EMPTY_PARAMS);
XContentParser parser = createParser(builder);
Map<String, Object> usageAsMap = parser.map();
assertTrue((boolean) XContentMapValues.extractValue("available", usageAsMap));
assertFalse((boolean) XContentMapValues.extractValue("enabled", usageAsMap));
// not enabled -> no transforms, no stats
assertEquals(null, XContentMapValues.extractValue("transforms", usageAsMap));
assertEquals(null, XContentMapValues.extractValue("stats", usageAsMap));
}
assertSettingDeprecationsAndWarnings(new Setting<?>[] { XPackSettings.TRANSFORM_ENABLED } );
}
} }

View File

@ -6,11 +6,9 @@
package org.elasticsearch.xpack.transform; package org.elasticsearch.xpack.transform;
import org.elasticsearch.common.settings.Setting;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.license.XPackLicenseState; import org.elasticsearch.license.XPackLicenseState;
import org.elasticsearch.test.ESTestCase; import org.elasticsearch.test.ESTestCase;
import org.elasticsearch.xpack.core.XPackSettings;
import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.equalTo;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
@ -35,12 +33,9 @@ public class TransformTests extends ESTestCase {
Transform transform = createTransform(builder.build()); Transform transform = createTransform(builder.build());
assertNotNull(transform.additionalSettings()); assertNotNull(transform.additionalSettings());
assertEquals( assertEquals(
transformPluginEnabled && transformEnabled, transformEnabled,
Boolean.parseBoolean(transform.additionalSettings().get("node.attr.transform.node")) Boolean.parseBoolean(transform.additionalSettings().get("node.attr.transform.node"))
); );
if (transformPluginEnabled == false) {
assertSettingDeprecationsAndWarnings(new Setting<?>[]{XPackSettings.TRANSFORM_ENABLED});
}
} }
public void testNodeAttributesDirectlyGiven() { public void testNodeAttributesDirectlyGiven() {

View File

@ -7,12 +7,10 @@
package org.elasticsearch.xpack.vectors; package org.elasticsearch.xpack.vectors;
import org.elasticsearch.common.inject.Module; import org.elasticsearch.common.inject.Module;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.index.mapper.Mapper; import org.elasticsearch.index.mapper.Mapper;
import org.elasticsearch.plugins.MapperPlugin; import org.elasticsearch.plugins.MapperPlugin;
import org.elasticsearch.plugins.Plugin; import org.elasticsearch.plugins.Plugin;
import org.elasticsearch.xpack.core.XPackPlugin; import org.elasticsearch.xpack.core.XPackPlugin;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.vectors.mapper.DenseVectorFieldMapper; import org.elasticsearch.xpack.vectors.mapper.DenseVectorFieldMapper;
import org.elasticsearch.xpack.vectors.mapper.SparseVectorFieldMapper; import org.elasticsearch.xpack.vectors.mapper.SparseVectorFieldMapper;
@ -21,16 +19,11 @@ import java.util.Collections;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import static java.util.Collections.emptyMap;
public class Vectors extends Plugin implements MapperPlugin { public class Vectors extends Plugin implements MapperPlugin {
public static final String NAME = "vectors"; public static final String NAME = "vectors";
protected final boolean enabled;
public Vectors(Settings settings) { public Vectors() { }
this.enabled = XPackSettings.VECTORS_ENABLED.get(settings);
}
public Collection<Module> createGuiceModules() { public Collection<Module> createGuiceModules() {
return Collections.singletonList(b -> { return Collections.singletonList(b -> {
@ -40,9 +33,6 @@ public class Vectors extends Plugin implements MapperPlugin {
@Override @Override
public Map<String, Mapper.TypeParser> getMappers() { public Map<String, Mapper.TypeParser> getMappers() {
if (enabled == false) {
return emptyMap();
}
Map<String, Mapper.TypeParser> mappers = new LinkedHashMap<>(); Map<String, Mapper.TypeParser> mappers = new LinkedHashMap<>();
mappers.put(DenseVectorFieldMapper.CONTENT_TYPE, new DenseVectorFieldMapper.TypeParser()); mappers.put(DenseVectorFieldMapper.CONTENT_TYPE, new DenseVectorFieldMapper.TypeParser());
mappers.put(SparseVectorFieldMapper.CONTENT_TYPE, new SparseVectorFieldMapper.TypeParser()); mappers.put(SparseVectorFieldMapper.CONTENT_TYPE, new SparseVectorFieldMapper.TypeParser());

View File

@ -10,11 +10,9 @@ import org.elasticsearch.cluster.metadata.IndexMetadata;
import org.elasticsearch.cluster.metadata.MappingMetadata; import org.elasticsearch.cluster.metadata.MappingMetadata;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.license.XPackLicenseState; import org.elasticsearch.license.XPackLicenseState;
import org.elasticsearch.xpack.core.XPackFeatureSet; import org.elasticsearch.xpack.core.XPackFeatureSet;
import org.elasticsearch.xpack.core.XPackField; import org.elasticsearch.xpack.core.XPackField;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.core.vectors.VectorsFeatureSetUsage; import org.elasticsearch.xpack.core.vectors.VectorsFeatureSetUsage;
import org.elasticsearch.xpack.vectors.mapper.DenseVectorFieldMapper; import org.elasticsearch.xpack.vectors.mapper.DenseVectorFieldMapper;
import org.elasticsearch.xpack.vectors.mapper.SparseVectorFieldMapper; import org.elasticsearch.xpack.vectors.mapper.SparseVectorFieldMapper;
@ -23,13 +21,11 @@ import java.util.Map;
public class VectorsFeatureSet implements XPackFeatureSet { public class VectorsFeatureSet implements XPackFeatureSet {
private final boolean enabled;
private final XPackLicenseState licenseState; private final XPackLicenseState licenseState;
private final ClusterService clusterService; private final ClusterService clusterService;
@Inject @Inject
public VectorsFeatureSet(Settings settings, XPackLicenseState licenseState, ClusterService clusterService) { public VectorsFeatureSet(XPackLicenseState licenseState, ClusterService clusterService) {
this.enabled = XPackSettings.VECTORS_ENABLED.get(settings);
this.licenseState = licenseState; this.licenseState = licenseState;
this.clusterService = clusterService; this.clusterService = clusterService;
} }
@ -46,7 +42,7 @@ public class VectorsFeatureSet implements XPackFeatureSet {
@Override @Override
public boolean enabled() { public boolean enabled() {
return enabled; return true;
} }
@Override @Override
@ -62,7 +58,7 @@ public class VectorsFeatureSet implements XPackFeatureSet {
int numSparseVectorFields = 0; int numSparseVectorFields = 0;
int avgDenseVectorDims = 0; int avgDenseVectorDims = 0;
if (vectorsAvailable && vectorsEnabled && clusterService.state() != null) { if (vectorsAvailable && clusterService.state() != null) {
for (IndexMetadata indexMetadata : clusterService.state().metadata()) { for (IndexMetadata indexMetadata : clusterService.state().metadata()) {
MappingMetadata mappingMetadata = indexMetadata.mapping(); MappingMetadata mappingMetadata = indexMetadata.mapping();
if (mappingMetadata != null) { if (mappingMetadata != null) {

View File

@ -13,12 +13,9 @@ import org.elasticsearch.cluster.metadata.IndexMetadata;
import org.elasticsearch.cluster.metadata.Metadata; import org.elasticsearch.cluster.metadata.Metadata;
import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.io.stream.BytesStreamOutput; import org.elasticsearch.common.io.stream.BytesStreamOutput;
import org.elasticsearch.common.settings.Setting;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.license.XPackLicenseState; import org.elasticsearch.license.XPackLicenseState;
import org.elasticsearch.test.ESTestCase; import org.elasticsearch.test.ESTestCase;
import org.elasticsearch.xpack.core.XPackFeatureSet; import org.elasticsearch.xpack.core.XPackFeatureSet;
import org.elasticsearch.xpack.core.XPackSettings;
import org.elasticsearch.xpack.core.vectors.VectorsFeatureSetUsage; import org.elasticsearch.xpack.core.vectors.VectorsFeatureSetUsage;
import org.junit.Before; import org.junit.Before;
import org.mockito.Mockito; import org.mockito.Mockito;
@ -38,7 +35,7 @@ public class VectorsFeatureSetTests extends ESTestCase {
} }
public void testAvailable() throws Exception { public void testAvailable() throws Exception {
VectorsFeatureSet featureSet = new VectorsFeatureSet(Settings.EMPTY, licenseState, clusterService); VectorsFeatureSet featureSet = new VectorsFeatureSet(licenseState, clusterService);
boolean available = randomBoolean(); boolean available = randomBoolean();
when(licenseState.isAllowed(XPackLicenseState.Feature.VECTORS)).thenReturn(available); when(licenseState.isAllowed(XPackLicenseState.Feature.VECTORS)).thenReturn(available);
assertEquals(available, featureSet.available()); assertEquals(available, featureSet.available());
@ -54,35 +51,6 @@ public class VectorsFeatureSetTests extends ESTestCase {
assertEquals(available, serializedUsage.available()); assertEquals(available, serializedUsage.available());
} }
public void testEnabled() throws Exception {
boolean enabled = randomBoolean();
Settings.Builder settings = Settings.builder();
boolean isExplicitlySet = false;
if (enabled) {
if (randomBoolean()) {
settings.put("xpack.vectors.enabled", enabled);
isExplicitlySet = true;
}
} else {
settings.put("xpack.vectors.enabled", enabled);
isExplicitlySet = true;
}
VectorsFeatureSet featureSet = new VectorsFeatureSet(settings.build(), licenseState, clusterService);
assertEquals(enabled, featureSet.enabled());
PlainActionFuture<XPackFeatureSet.Usage> future = new PlainActionFuture<>();
featureSet.usage(future);
XPackFeatureSet.Usage usage = future.get();
assertEquals(enabled, usage.enabled());
BytesStreamOutput out = new BytesStreamOutput();
usage.writeTo(out);
XPackFeatureSet.Usage serializedUsage = new VectorsFeatureSetUsage(out.bytes().streamInput());
assertEquals(enabled, serializedUsage.enabled());
if (isExplicitlySet) {
assertSettingDeprecationsAndWarnings(new Setting<?>[] { XPackSettings.VECTORS_ENABLED } );
}
}
public void testUsageStats() throws Exception { public void testUsageStats() throws Exception {
Metadata.Builder metadata = Metadata.builder(); Metadata.Builder metadata = Metadata.builder();
IndexMetadata.Builder index1 = IndexMetadata.builder("test-index1") IndexMetadata.Builder index1 = IndexMetadata.builder("test-index1")
@ -103,7 +71,7 @@ public class VectorsFeatureSetTests extends ESTestCase {
when(licenseState.isAllowed(XPackLicenseState.Feature.VECTORS)).thenReturn(true); when(licenseState.isAllowed(XPackLicenseState.Feature.VECTORS)).thenReturn(true);
PlainActionFuture<XPackFeatureSet.Usage> future = new PlainActionFuture<>(); PlainActionFuture<XPackFeatureSet.Usage> future = new PlainActionFuture<>();
VectorsFeatureSet vectorsFeatureSet = new VectorsFeatureSet(Settings.EMPTY, licenseState, clusterService); VectorsFeatureSet vectorsFeatureSet = new VectorsFeatureSet(licenseState, clusterService);
vectorsFeatureSet.usage(future); vectorsFeatureSet.usage(future);
VectorsFeatureSetUsage vectorUsage = (VectorsFeatureSetUsage) future.get(); VectorsFeatureSetUsage vectorUsage = (VectorsFeatureSetUsage) future.get();
assertEquals(true, vectorUsage.enabled()); assertEquals(true, vectorUsage.enabled());

View File

@ -99,6 +99,12 @@ import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsNot.not; import static org.hamcrest.core.IsNot.not;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
/**
* Base class for Watcher integration tests
*
* Note that SLM has been observed to cause timing issues during testsuite teardown:
* https://github.com/elastic/elasticsearch/issues/50302
*/
@ClusterScope(scope = SUITE, numClientNodes = 0, transportClientRatio = 0, maxNumDataNodes = 3) @ClusterScope(scope = SUITE, numClientNodes = 0, transportClientRatio = 0, maxNumDataNodes = 3)
public abstract class AbstractWatcherIntegrationTestCase extends ESIntegTestCase { public abstract class AbstractWatcherIntegrationTestCase extends ESIntegTestCase {
@ -118,9 +124,6 @@ public abstract class AbstractWatcherIntegrationTestCase extends ESIntegTestCase
.put("xpack.watcher.execution.scroll.size", randomIntBetween(1, 100)) .put("xpack.watcher.execution.scroll.size", randomIntBetween(1, 100))
.put("xpack.watcher.watch.scroll.size", randomIntBetween(1, 100)) .put("xpack.watcher.watch.scroll.size", randomIntBetween(1, 100))
.put("indices.lifecycle.history_index_enabled", false) .put("indices.lifecycle.history_index_enabled", false)
// SLM can cause timing issues during testsuite teardown: https://github.com/elastic/elasticsearch/issues/50302
// SLM is not required for tests extending from this base class and only add noise.
.put("xpack.slm.enabled", false)
.build(); .build();
} }