diff --git a/core/build.gradle b/core/build.gradle index 7b80449729e..229951f895d 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -102,8 +102,8 @@ if (isEclipse) { } } -compileJava.options.compilerArgs << "-Xlint:-cast,-deprecation,-fallthrough,-overrides,-rawtypes,-serial,-try,-unchecked" -compileTestJava.options.compilerArgs << "-Xlint:-cast,-deprecation,-fallthrough,-overrides,-rawtypes,-serial,-try,-unchecked" +compileJava.options.compilerArgs << "-Xlint:-cast,-deprecation,-rawtypes,-serial,-try,-unchecked" +compileTestJava.options.compilerArgs << "-Xlint:-cast,-deprecation,-rawtypes,-serial,-try,-unchecked" forbiddenPatterns { exclude '**/*.json' diff --git a/core/src/main/java/org/elasticsearch/ElasticsearchException.java b/core/src/main/java/org/elasticsearch/ElasticsearchException.java index 9f9dbf18869..4a35bcbcfb0 100644 --- a/core/src/main/java/org/elasticsearch/ElasticsearchException.java +++ b/core/src/main/java/org/elasticsearch/ElasticsearchException.java @@ -566,7 +566,7 @@ public class ElasticsearchException extends RuntimeException implements ToXConte REFRESH_FAILED_ENGINE_EXCEPTION(org.elasticsearch.index.engine.RefreshFailedEngineException.class, org.elasticsearch.index.engine.RefreshFailedEngineException::new, 90), AGGREGATION_INITIALIZATION_EXCEPTION(org.elasticsearch.search.aggregations.AggregationInitializationException.class, org.elasticsearch.search.aggregations.AggregationInitializationException::new, 91), DELAY_RECOVERY_EXCEPTION(org.elasticsearch.indices.recovery.DelayRecoveryException.class, org.elasticsearch.indices.recovery.DelayRecoveryException::new, 92), - INDEX_WARMER_MISSING_EXCEPTION(org.elasticsearch.search.warmer.IndexWarmerMissingException.class, org.elasticsearch.search.warmer.IndexWarmerMissingException::new, 93), + // 93 used to be for IndexWarmerMissingException NO_NODE_AVAILABLE_EXCEPTION(org.elasticsearch.client.transport.NoNodeAvailableException.class, org.elasticsearch.client.transport.NoNodeAvailableException::new, 94), INVALID_SNAPSHOT_NAME_EXCEPTION(org.elasticsearch.snapshots.InvalidSnapshotNameException.class, org.elasticsearch.snapshots.InvalidSnapshotNameException::new, 96), ILLEGAL_INDEX_SHARD_STATE_EXCEPTION(org.elasticsearch.index.shard.IllegalIndexShardStateException.class, org.elasticsearch.index.shard.IllegalIndexShardStateException::new, 97), diff --git a/core/src/main/java/org/elasticsearch/Version.java b/core/src/main/java/org/elasticsearch/Version.java index ac2575597e8..e55800682dd 100644 --- a/core/src/main/java/org/elasticsearch/Version.java +++ b/core/src/main/java/org/elasticsearch/Version.java @@ -25,7 +25,6 @@ import org.elasticsearch.common.SuppressForbidden; import org.elasticsearch.common.inject.AbstractModule; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; -import org.elasticsearch.common.lucene.Lucene; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.monitor.jvm.JvmInfo; @@ -286,7 +285,8 @@ public class Version { public static final Version CURRENT = V_3_0_0; static { - assert CURRENT.luceneVersion.equals(Lucene.VERSION) : "Version must be upgraded to [" + Lucene.VERSION + "] is still set to [" + CURRENT.luceneVersion + "]"; + assert CURRENT.luceneVersion.equals(org.apache.lucene.util.Version.LATEST) : "Version must be upgraded to [" + + org.apache.lucene.util.Version.LATEST + "] is still set to [" + CURRENT.luceneVersion + "]"; } public static Version readVersion(StreamInput in) throws IOException { @@ -457,7 +457,6 @@ public class Version { return V_0_90_0_RC1; case V_0_90_0_Beta1_ID: return V_0_90_0_Beta1; - case V_0_20_7_ID: return V_0_20_7; case V_0_20_6_ID: @@ -476,7 +475,6 @@ public class Version { return V_0_20_0; case V_0_20_0_RC1_ID: return V_0_20_0_RC1; - case V_0_19_0_RC1_ID: return V_0_19_0_RC1; case V_0_19_0_RC2_ID: @@ -511,7 +509,6 @@ public class Version { return V_0_19_12; case V_0_19_13_ID: return V_0_19_13; - case V_0_18_0_ID: return V_0_18_0; case V_0_18_1_ID: @@ -530,9 +527,8 @@ public class Version { return V_0_18_7; case V_0_18_8_ID: return V_0_18_8; - default: - return new Version(id, false, Lucene.VERSION); + return new Version(id, false, org.apache.lucene.util.Version.LATEST); } } diff --git a/core/src/main/java/org/elasticsearch/action/ActionModule.java b/core/src/main/java/org/elasticsearch/action/ActionModule.java index 264d8d6d0e3..51a5498fd63 100644 --- a/core/src/main/java/org/elasticsearch/action/ActionModule.java +++ b/core/src/main/java/org/elasticsearch/action/ActionModule.java @@ -127,12 +127,6 @@ import org.elasticsearch.action.admin.indices.upgrade.post.UpgradeAction; import org.elasticsearch.action.admin.indices.upgrade.post.UpgradeSettingsAction; import org.elasticsearch.action.admin.indices.validate.query.TransportValidateQueryAction; import org.elasticsearch.action.admin.indices.validate.query.ValidateQueryAction; -import org.elasticsearch.action.admin.indices.warmer.delete.DeleteWarmerAction; -import org.elasticsearch.action.admin.indices.warmer.delete.TransportDeleteWarmerAction; -import org.elasticsearch.action.admin.indices.warmer.get.GetWarmersAction; -import org.elasticsearch.action.admin.indices.warmer.get.TransportGetWarmersAction; -import org.elasticsearch.action.admin.indices.warmer.put.PutWarmerAction; -import org.elasticsearch.action.admin.indices.warmer.put.TransportPutWarmerAction; import org.elasticsearch.action.bulk.BulkAction; import org.elasticsearch.action.bulk.TransportBulkAction; import org.elasticsearch.action.bulk.TransportShardBulkAction; @@ -323,9 +317,6 @@ public class ActionModule extends AbstractModule { registerAction(UpgradeStatusAction.INSTANCE, TransportUpgradeStatusAction.class); registerAction(UpgradeSettingsAction.INSTANCE, TransportUpgradeSettingsAction.class); registerAction(ClearIndicesCacheAction.INSTANCE, TransportClearIndicesCacheAction.class); - registerAction(PutWarmerAction.INSTANCE, TransportPutWarmerAction.class); - registerAction(DeleteWarmerAction.INSTANCE, TransportDeleteWarmerAction.class); - registerAction(GetWarmersAction.INSTANCE, TransportGetWarmersAction.class); registerAction(GetAliasesAction.INSTANCE, TransportGetAliasesAction.class); registerAction(AliasesExistAction.INSTANCE, TransportAliasesExistAction.class); registerAction(GetSettingsAction.INSTANCE, TransportGetSettingsAction.class); diff --git a/core/src/main/java/org/elasticsearch/action/AliasesRequest.java b/core/src/main/java/org/elasticsearch/action/AliasesRequest.java index 6e45af0cf84..a4ff57ebd20 100644 --- a/core/src/main/java/org/elasticsearch/action/AliasesRequest.java +++ b/core/src/main/java/org/elasticsearch/action/AliasesRequest.java @@ -35,7 +35,7 @@ public interface AliasesRequest extends IndicesRequest.Replaceable { /** * Sets the array of aliases that the action relates to */ - AliasesRequest aliases(String[] aliases); + AliasesRequest aliases(String... aliases); /** * Returns true if wildcards expressions among aliases should be resolved, false otherwise diff --git a/core/src/main/java/org/elasticsearch/action/IndicesRequest.java b/core/src/main/java/org/elasticsearch/action/IndicesRequest.java index 9200f99c6f7..4c62a7e849b 100644 --- a/core/src/main/java/org/elasticsearch/action/IndicesRequest.java +++ b/core/src/main/java/org/elasticsearch/action/IndicesRequest.java @@ -41,9 +41,9 @@ public interface IndicesRequest { IndicesOptions indicesOptions(); static interface Replaceable extends IndicesRequest { - /* - * Sets the array of indices that the action relates to + /** + * Sets the indices that the action relates to. */ - IndicesRequest indices(String[] indices); + IndicesRequest indices(String... indices); } } diff --git a/core/src/main/java/org/elasticsearch/action/admin/cluster/health/ClusterHealthRequest.java b/core/src/main/java/org/elasticsearch/action/admin/cluster/health/ClusterHealthRequest.java index d603886d924..59b426d8c31 100644 --- a/core/src/main/java/org/elasticsearch/action/admin/cluster/health/ClusterHealthRequest.java +++ b/core/src/main/java/org/elasticsearch/action/admin/cluster/health/ClusterHealthRequest.java @@ -61,7 +61,7 @@ public class ClusterHealthRequest extends MasterNodeReadRequest { public static enum Feature { ALIASES((byte) 0, "_aliases", "_alias"), MAPPINGS((byte) 1, "_mappings", "_mapping"), - SETTINGS((byte) 2, "_settings"), - WARMERS((byte) 3, "_warmers", "_warmer"); + SETTINGS((byte) 2, "_settings"); private static final Feature[] FEATURES = new Feature[Feature.values().length]; @@ -97,7 +96,7 @@ public class GetIndexRequest extends ClusterInfoRequest { } } - private static final Feature[] DEFAULT_FEATURES = new Feature[] { Feature.ALIASES, Feature.MAPPINGS, Feature.SETTINGS, Feature.WARMERS }; + private static final Feature[] DEFAULT_FEATURES = new Feature[] { Feature.ALIASES, Feature.MAPPINGS, Feature.SETTINGS }; private Feature[] features = DEFAULT_FEATURES; private boolean humanReadable = false; diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/get/GetIndexResponse.java b/core/src/main/java/org/elasticsearch/action/admin/indices/get/GetIndexResponse.java index 1f06a25acc3..3a29237faeb 100644 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/get/GetIndexResponse.java +++ b/core/src/main/java/org/elasticsearch/action/admin/indices/get/GetIndexResponse.java @@ -27,7 +27,6 @@ import org.elasticsearch.common.collect.ImmutableOpenMap; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.search.warmer.IndexWarmersMetaData; import java.io.IOException; import java.util.ArrayList; @@ -39,19 +38,15 @@ import java.util.List; */ public class GetIndexResponse extends ActionResponse { - private ImmutableOpenMap> warmers = ImmutableOpenMap.of(); private ImmutableOpenMap> mappings = ImmutableOpenMap.of(); private ImmutableOpenMap> aliases = ImmutableOpenMap.of(); private ImmutableOpenMap settings = ImmutableOpenMap.of(); private String[] indices; - GetIndexResponse(String[] indices, ImmutableOpenMap> warmers, + GetIndexResponse(String[] indices, ImmutableOpenMap> mappings, ImmutableOpenMap> aliases, ImmutableOpenMap settings) { this.indices = indices; - if (warmers != null) { - this.warmers = warmers; - } if (mappings != null) { this.mappings = mappings; } @@ -74,14 +69,6 @@ public class GetIndexResponse extends ActionResponse { return indices(); } - public ImmutableOpenMap> warmers() { - return warmers; - } - - public ImmutableOpenMap> getWarmers() { - return warmers(); - } - public ImmutableOpenMap> mappings() { return mappings; } @@ -110,23 +97,6 @@ public class GetIndexResponse extends ActionResponse { public void readFrom(StreamInput in) throws IOException { super.readFrom(in); this.indices = in.readStringArray(); - int warmersSize = in.readVInt(); - ImmutableOpenMap.Builder> warmersMapBuilder = ImmutableOpenMap.builder(); - for (int i = 0; i < warmersSize; i++) { - String key = in.readString(); - int valueSize = in.readVInt(); - List warmerEntryBuilder = new ArrayList<>(); - for (int j = 0; j < valueSize; j++) { - warmerEntryBuilder.add(new IndexWarmersMetaData.Entry( - in.readString(), - in.readStringArray(), - in.readOptionalBoolean(), - in.readBoolean() ? new IndexWarmersMetaData.SearchSource(in) : null) - ); - } - warmersMapBuilder.put(key, Collections.unmodifiableList(warmerEntryBuilder)); - } - warmers = warmersMapBuilder.build(); int mappingsSize = in.readVInt(); ImmutableOpenMap.Builder> mappingsMapBuilder = ImmutableOpenMap.builder(); for (int i = 0; i < mappingsSize; i++) { @@ -164,21 +134,6 @@ public class GetIndexResponse extends ActionResponse { public void writeTo(StreamOutput out) throws IOException { super.writeTo(out); out.writeStringArray(indices); - out.writeVInt(warmers.size()); - for (ObjectObjectCursor> indexEntry : warmers) { - out.writeString(indexEntry.key); - out.writeVInt(indexEntry.value.size()); - for (IndexWarmersMetaData.Entry warmerEntry : indexEntry.value) { - out.writeString(warmerEntry.name()); - out.writeStringArray(warmerEntry.types()); - out.writeOptionalBoolean(warmerEntry.requestCache()); - boolean hasSource = warmerEntry.source() != null; - out.writeBoolean(hasSource); - if (hasSource) { - warmerEntry.source().writeTo(out); - } - } - } out.writeVInt(mappings.size()); for (ObjectObjectCursor> indexEntry : mappings) { out.writeString(indexEntry.key); diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/get/TransportGetIndexAction.java b/core/src/main/java/org/elasticsearch/action/admin/indices/get/TransportGetIndexAction.java index 4edbd5216cd..1b9180ce192 100644 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/get/TransportGetIndexAction.java +++ b/core/src/main/java/org/elasticsearch/action/admin/indices/get/TransportGetIndexAction.java @@ -36,7 +36,6 @@ import org.elasticsearch.common.Strings; import org.elasticsearch.common.collect.ImmutableOpenMap; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.search.warmer.IndexWarmersMetaData.Entry; import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.transport.TransportService; @@ -72,7 +71,6 @@ public class TransportGetIndexAction extends TransportClusterInfoAction listener) { - ImmutableOpenMap> warmersResult = ImmutableOpenMap.of(); ImmutableOpenMap> mappingsResult = ImmutableOpenMap.of(); ImmutableOpenMap> aliasesResult = ImmutableOpenMap.of(); ImmutableOpenMap settings = ImmutableOpenMap.of(); @@ -80,15 +78,8 @@ public class TransportGetIndexAction extends TransportClusterInfoAction im * Sets the indices this put mapping operation will execute on. */ @Override - public PutMappingRequest indices(String[] indices) { + public PutMappingRequest indices(String... indices) { this.indices = indices; return this; } diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/delete/DeleteWarmerAction.java b/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/delete/DeleteWarmerAction.java deleted file mode 100644 index 86c447d3ca4..00000000000 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/delete/DeleteWarmerAction.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.action.admin.indices.warmer.delete; - -import org.elasticsearch.action.Action; -import org.elasticsearch.client.ElasticsearchClient; - -/** - * Action for the admin/warmers/delete API. - */ -public class DeleteWarmerAction extends Action { - - public static final DeleteWarmerAction INSTANCE = new DeleteWarmerAction(); - public static final String NAME = "indices:admin/warmers/delete"; - - private DeleteWarmerAction() { - super(NAME); - } - - @Override - public DeleteWarmerResponse newResponse() { - return new DeleteWarmerResponse(); - } - - @Override - public DeleteWarmerRequestBuilder newRequestBuilder(ElasticsearchClient client) { - return new DeleteWarmerRequestBuilder(client, this); - } -} diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/delete/DeleteWarmerRequest.java b/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/delete/DeleteWarmerRequest.java deleted file mode 100644 index 39312e5a3d7..00000000000 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/delete/DeleteWarmerRequest.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.elasticsearch.action.admin.indices.warmer.delete; - -import org.elasticsearch.action.ActionRequestValidationException; -import org.elasticsearch.action.IndicesRequest; -import org.elasticsearch.action.support.IndicesOptions; -import org.elasticsearch.action.support.master.AcknowledgedRequest; -import org.elasticsearch.common.Nullable; -import org.elasticsearch.common.Strings; -import org.elasticsearch.common.io.stream.StreamInput; -import org.elasticsearch.common.io.stream.StreamOutput; -import org.elasticsearch.common.util.CollectionUtils; - -import java.io.IOException; - -import static org.elasticsearch.action.ValidateActions.addValidationError; - -/** - * A request that deletes a index warmer (name, {@link org.elasticsearch.action.search.SearchRequest}) - * tuple from the clusters metadata. - */ -public class DeleteWarmerRequest extends AcknowledgedRequest implements IndicesRequest.Replaceable { - - private String[] names = Strings.EMPTY_ARRAY; - private IndicesOptions indicesOptions = IndicesOptions.fromOptions(false, false, true, false); - private String[] indices = Strings.EMPTY_ARRAY; - - public DeleteWarmerRequest() { - } - - /** - * Constructs a new delete warmer request for the specified name. - * - * @param names the name (or wildcard expression) of the warmer to match, null to delete all. - */ - public DeleteWarmerRequest(String... names) { - names(names); - } - - @Override - public ActionRequestValidationException validate() { - ActionRequestValidationException validationException = null; - if (CollectionUtils.isEmpty(names)) { - validationException = addValidationError("warmer names are missing", validationException); - } else { - validationException = checkForEmptyString(validationException, names); - } - if (CollectionUtils.isEmpty(indices)) { - validationException = addValidationError("indices are missing", validationException); - } else { - validationException = checkForEmptyString(validationException, indices); - } - return validationException; - } - - private ActionRequestValidationException checkForEmptyString(ActionRequestValidationException validationException, String[] strings) { - boolean containsEmptyString = false; - for (String string : strings) { - if (!Strings.hasText(string)) { - containsEmptyString = true; - } - } - if (containsEmptyString) { - validationException = addValidationError("types must not contain empty strings", validationException); - } - return validationException; - } - - /** - * The name to delete. - */ - @Nullable - public String[] names() { - return names; - } - - /** - * The name (or wildcard expression) of the index warmer to delete, or null - * to delete all warmers. - */ - public DeleteWarmerRequest names(@Nullable String... names) { - this.names = names; - return this; - } - - /** - * Sets the indices this put mapping operation will execute on. - */ - @Override - public DeleteWarmerRequest indices(String... indices) { - this.indices = indices; - return this; - } - - /** - * The indices the mappings will be put. - */ - @Override - public String[] indices() { - return indices; - } - - @Override - public IndicesOptions indicesOptions() { - return indicesOptions; - } - - public DeleteWarmerRequest indicesOptions(IndicesOptions indicesOptions) { - this.indicesOptions = indicesOptions; - return this; - } - - @Override - public void readFrom(StreamInput in) throws IOException { - super.readFrom(in); - names = in.readStringArray(); - indices = in.readStringArray(); - indicesOptions = IndicesOptions.readIndicesOptions(in); - readTimeout(in); - } - - @Override - public void writeTo(StreamOutput out) throws IOException { - super.writeTo(out); - out.writeStringArrayNullable(names); - out.writeStringArrayNullable(indices); - indicesOptions.writeIndicesOptions(out); - writeTimeout(out); - } -} diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/delete/DeleteWarmerRequestBuilder.java b/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/delete/DeleteWarmerRequestBuilder.java deleted file mode 100644 index fdba95b590f..00000000000 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/delete/DeleteWarmerRequestBuilder.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.action.admin.indices.warmer.delete; - -import org.elasticsearch.action.support.IndicesOptions; -import org.elasticsearch.action.support.master.AcknowledgedRequestBuilder; -import org.elasticsearch.client.ElasticsearchClient; - -/** - * A builder for the {@link DeleteWarmerRequest} - * - * @see DeleteWarmerRequest for details - */ -public class DeleteWarmerRequestBuilder extends AcknowledgedRequestBuilder { - - public DeleteWarmerRequestBuilder(ElasticsearchClient client, DeleteWarmerAction action) { - super(client, action, new DeleteWarmerRequest()); - } - - public DeleteWarmerRequestBuilder setIndices(String... indices) { - request.indices(indices); - return this; - } - - /** - * The name (or wildcard expression) of the index warmer to delete, or null - * to delete all warmers. - */ - public DeleteWarmerRequestBuilder setNames(String... names) { - request.names(names); - return this; - } - - /** - * Specifies what type of requested indices to ignore and wildcard indices expressions. - *

- * For example indices that don't exist. - */ - public DeleteWarmerRequestBuilder setIndicesOptions(IndicesOptions options) { - request.indicesOptions(options); - return this; - } -} diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/delete/DeleteWarmerResponse.java b/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/delete/DeleteWarmerResponse.java deleted file mode 100644 index 6e5235f78b2..00000000000 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/delete/DeleteWarmerResponse.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.elasticsearch.action.admin.indices.warmer.delete; - -import org.elasticsearch.action.support.master.AcknowledgedResponse; -import org.elasticsearch.common.io.stream.StreamInput; -import org.elasticsearch.common.io.stream.StreamOutput; - -import java.io.IOException; - -/** - * An acknowledged response of delete warmer operation. - */ -public class DeleteWarmerResponse extends AcknowledgedResponse { - - DeleteWarmerResponse() { - super(); - } - - DeleteWarmerResponse(boolean acknowledged) { - super(acknowledged); - } - - @Override - public void readFrom(StreamInput in) throws IOException { - super.readFrom(in); - readAcknowledged(in); - } - - @Override - public void writeTo(StreamOutput out) throws IOException { - super.writeTo(out); - writeAcknowledged(out); - } -} diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/delete/TransportDeleteWarmerAction.java b/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/delete/TransportDeleteWarmerAction.java deleted file mode 100644 index 293729af462..00000000000 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/delete/TransportDeleteWarmerAction.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.elasticsearch.action.admin.indices.warmer.delete; - -import org.elasticsearch.action.ActionListener; -import org.elasticsearch.action.support.ActionFilters; -import org.elasticsearch.action.support.master.TransportMasterNodeAction; -import org.elasticsearch.cluster.AckedClusterStateUpdateTask; -import org.elasticsearch.cluster.ClusterService; -import org.elasticsearch.cluster.ClusterState; -import org.elasticsearch.cluster.block.ClusterBlockException; -import org.elasticsearch.cluster.block.ClusterBlockLevel; -import org.elasticsearch.cluster.metadata.IndexMetaData; -import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; -import org.elasticsearch.cluster.metadata.MetaData; -import org.elasticsearch.common.inject.Inject; -import org.elasticsearch.common.regex.Regex; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.index.IndexNotFoundException; -import org.elasticsearch.search.warmer.IndexWarmerMissingException; -import org.elasticsearch.search.warmer.IndexWarmersMetaData; -import org.elasticsearch.threadpool.ThreadPool; -import org.elasticsearch.transport.TransportService; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * Internal Actions executed on the master deleting the warmer from the cluster state metadata. - * - * Note: this is an internal API and should not be used / called by any client code. - */ -public class TransportDeleteWarmerAction extends TransportMasterNodeAction { - - @Inject - public TransportDeleteWarmerAction(Settings settings, TransportService transportService, ClusterService clusterService, - ThreadPool threadPool, ActionFilters actionFilters, IndexNameExpressionResolver indexNameExpressionResolver) { - super(settings, DeleteWarmerAction.NAME, transportService, clusterService, threadPool, actionFilters, indexNameExpressionResolver, DeleteWarmerRequest::new); - } - - @Override - protected String executor() { - // we go async right away - return ThreadPool.Names.SAME; - } - - @Override - protected DeleteWarmerResponse newResponse() { - return new DeleteWarmerResponse(); - } - - @Override - protected ClusterBlockException checkBlock(DeleteWarmerRequest request, ClusterState state) { - return state.blocks().indicesBlockedException(ClusterBlockLevel.METADATA_WRITE, indexNameExpressionResolver.concreteIndices(state, request)); - } - - @Override - protected void masterOperation(final DeleteWarmerRequest request, final ClusterState state, final ActionListener listener) { - final String[] concreteIndices = indexNameExpressionResolver.concreteIndices(state, request); - clusterService.submitStateUpdateTask("delete_warmer [" + Arrays.toString(request.names()) + "]", new AckedClusterStateUpdateTask(request, listener) { - - @Override - protected DeleteWarmerResponse newResponse(boolean acknowledged) { - return new DeleteWarmerResponse(acknowledged); - } - - @Override - public void onFailure(String source, Throwable t) { - logger.debug("failed to delete warmer [{}] on indices [{}]", t, Arrays.toString(request.names()), concreteIndices); - super.onFailure(source, t); - } - - @Override - public ClusterState execute(ClusterState currentState) { - MetaData.Builder mdBuilder = MetaData.builder(currentState.metaData()); - - boolean globalFoundAtLeastOne = false; - boolean deleteAll = false; - for (int i=0; i entries = new ArrayList<>(); - for (IndexWarmersMetaData.Entry entry : warmers.entries()) { - boolean keepWarmer = true; - for (String warmer : request.names()) { - if (Regex.simpleMatch(warmer, entry.name()) || warmer.equals(MetaData.ALL)) { - globalFoundAtLeastOne = true; - keepWarmer = false; - // don't add it... - break; - } - } - if (keepWarmer) { - entries.add(entry); - } - } - // a change, update it... - if (entries.size() != warmers.entries().size()) { - warmers = new IndexWarmersMetaData(entries.toArray(new IndexWarmersMetaData.Entry[entries.size()])); - IndexMetaData.Builder indexBuilder = IndexMetaData.builder(indexMetaData).putCustom(IndexWarmersMetaData.TYPE, warmers); - mdBuilder.put(indexBuilder); - } - } - } - - if (globalFoundAtLeastOne == false && deleteAll == false) { - throw new IndexWarmerMissingException(request.names()); - } - - if (logger.isInfoEnabled()) { - for (String index : concreteIndices) { - IndexMetaData indexMetaData = currentState.metaData().index(index); - if (indexMetaData == null) { - throw new IndexNotFoundException(index); - } - IndexWarmersMetaData warmers = indexMetaData.custom(IndexWarmersMetaData.TYPE); - if (warmers != null) { - for (IndexWarmersMetaData.Entry entry : warmers.entries()) { - for (String warmer : request.names()) { - if (Regex.simpleMatch(warmer, entry.name()) || warmer.equals(MetaData.ALL)) { - logger.info("[{}] delete warmer [{}]", index, entry.name()); - } - } - } - } else if(deleteAll){ - logger.debug("no warmers to delete on index [{}]", index); - } - } - } - - return ClusterState.builder(currentState).metaData(mdBuilder).build(); - } - }); - } -} diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/get/GetWarmersAction.java b/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/get/GetWarmersAction.java deleted file mode 100644 index e2debde72a6..00000000000 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/get/GetWarmersAction.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.action.admin.indices.warmer.get; - -import org.elasticsearch.action.Action; -import org.elasticsearch.client.ElasticsearchClient; - -/** - * Action for the admin/warmers/get API. - */ -public class GetWarmersAction extends Action { - - public static final GetWarmersAction INSTANCE = new GetWarmersAction(); - public static final String NAME = "indices:admin/warmers/get"; - - private GetWarmersAction() { - super(NAME); - } - - @Override - public GetWarmersRequestBuilder newRequestBuilder(ElasticsearchClient client) { - return new GetWarmersRequestBuilder(client, this); - } - - @Override - public GetWarmersResponse newResponse() { - return new GetWarmersResponse(); - } -} diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/get/GetWarmersRequest.java b/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/get/GetWarmersRequest.java deleted file mode 100644 index bebf0d40b6e..00000000000 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/get/GetWarmersRequest.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.action.admin.indices.warmer.get; - -import org.elasticsearch.action.ActionRequestValidationException; -import org.elasticsearch.action.support.master.info.ClusterInfoRequest; -import org.elasticsearch.common.Strings; -import org.elasticsearch.common.io.stream.StreamInput; -import org.elasticsearch.common.io.stream.StreamOutput; - -import java.io.IOException; - -/** - * A {@link ClusterInfoRequest} that fetches {@link org.elasticsearch.search.warmer.IndexWarmersMetaData} for - * a list or all existing index warmers in the cluster-state - */ -public class GetWarmersRequest extends ClusterInfoRequest { - - private String[] warmers = Strings.EMPTY_ARRAY; - - public GetWarmersRequest warmers(String[] warmers) { - this.warmers = warmers; - return this; - } - - public String[] warmers() { - return warmers; - } - - @Override - public ActionRequestValidationException validate() { - return null; - } - - @Override - public void readFrom(StreamInput in) throws IOException { - super.readFrom(in); - warmers = in.readStringArray(); - } - - @Override - public void writeTo(StreamOutput out) throws IOException { - super.writeTo(out); - out.writeStringArray(warmers); - } - -} diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/get/GetWarmersRequestBuilder.java b/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/get/GetWarmersRequestBuilder.java deleted file mode 100644 index de67d38603a..00000000000 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/get/GetWarmersRequestBuilder.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.action.admin.indices.warmer.get; - -import org.elasticsearch.action.support.master.info.ClusterInfoRequestBuilder; -import org.elasticsearch.client.ElasticsearchClient; -import org.elasticsearch.common.util.ArrayUtils; - -/** - * Builder for {@link GetWarmersRequest} - * - * @see GetWarmersRequest for details - */ -public class GetWarmersRequestBuilder extends ClusterInfoRequestBuilder { - - public GetWarmersRequestBuilder(ElasticsearchClient client, GetWarmersAction action, String... indices) { - super(client, action, new GetWarmersRequest().indices(indices)); - } - - public GetWarmersRequestBuilder setWarmers(String... warmers) { - request.warmers(warmers); - return this; - } - - public GetWarmersRequestBuilder addWarmers(String... warmers) { - request.warmers(ArrayUtils.concat(request.warmers(), warmers)); - return this; - } -} diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/get/GetWarmersResponse.java b/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/get/GetWarmersResponse.java deleted file mode 100644 index 0559e522925..00000000000 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/get/GetWarmersResponse.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.action.admin.indices.warmer.get; - -import com.carrotsearch.hppc.cursors.ObjectObjectCursor; -import org.elasticsearch.action.ActionResponse; -import org.elasticsearch.common.collect.ImmutableOpenMap; -import org.elasticsearch.common.io.stream.StreamInput; -import org.elasticsearch.common.io.stream.StreamOutput; -import org.elasticsearch.search.warmer.IndexWarmersMetaData; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -/** - * Holds a warmer-name to a list of {@link IndexWarmersMetaData} mapping for each warmer specified - * in the {@link GetWarmersRequest}. This information is fetched from the current master since the metadata - * is contained inside the cluster-state - */ -public class GetWarmersResponse extends ActionResponse { - - private ImmutableOpenMap> warmers = ImmutableOpenMap.of(); - - GetWarmersResponse(ImmutableOpenMap> warmers) { - this.warmers = warmers; - } - - GetWarmersResponse() { - } - - public ImmutableOpenMap> warmers() { - return warmers; - } - - public ImmutableOpenMap> getWarmers() { - return warmers(); - } - - @Override - public void readFrom(StreamInput in) throws IOException { - super.readFrom(in); - int size = in.readVInt(); - ImmutableOpenMap.Builder> indexMapBuilder = ImmutableOpenMap.builder(); - for (int i = 0; i < size; i++) { - String key = in.readString(); - int valueSize = in.readVInt(); - List warmerEntryBuilder = new ArrayList<>(); - for (int j = 0; j < valueSize; j++) { - String name = in.readString(); - String[] types = in.readStringArray(); - IndexWarmersMetaData.SearchSource source = null; - if (in.readBoolean()) { - source = new IndexWarmersMetaData.SearchSource(in); - } - Boolean queryCache = null; - queryCache = in.readOptionalBoolean(); - warmerEntryBuilder.add(new IndexWarmersMetaData.Entry( - name, - types, - queryCache, - source) - ); - } - indexMapBuilder.put(key, Collections.unmodifiableList(warmerEntryBuilder)); - } - warmers = indexMapBuilder.build(); - } - - @Override - public void writeTo(StreamOutput out) throws IOException { - super.writeTo(out); - out.writeVInt(warmers.size()); - for (ObjectObjectCursor> indexEntry : warmers) { - out.writeString(indexEntry.key); - out.writeVInt(indexEntry.value.size()); - for (IndexWarmersMetaData.Entry warmerEntry : indexEntry.value) { - out.writeString(warmerEntry.name()); - out.writeStringArray(warmerEntry.types()); - boolean hasWarmerSource = warmerEntry != null; - out.writeBoolean(hasWarmerSource); - if (hasWarmerSource) { - warmerEntry.source().writeTo(out); - } - out.writeOptionalBoolean(warmerEntry.requestCache()); - } - } - } -} diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/get/TransportGetWarmersAction.java b/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/get/TransportGetWarmersAction.java deleted file mode 100644 index a86a6260ca3..00000000000 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/get/TransportGetWarmersAction.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.action.admin.indices.warmer.get; - -import org.elasticsearch.action.ActionListener; -import org.elasticsearch.action.support.ActionFilters; -import org.elasticsearch.action.support.master.info.TransportClusterInfoAction; -import org.elasticsearch.cluster.ClusterService; -import org.elasticsearch.cluster.ClusterState; -import org.elasticsearch.cluster.block.ClusterBlockException; -import org.elasticsearch.cluster.block.ClusterBlockLevel; -import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; -import org.elasticsearch.common.collect.ImmutableOpenMap; -import org.elasticsearch.common.inject.Inject; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.search.warmer.IndexWarmersMetaData; -import org.elasticsearch.threadpool.ThreadPool; -import org.elasticsearch.transport.TransportService; - -import java.util.List; - -/** - * Internal Actions executed on the master fetching the warmer from the cluster state metadata. - * - * Note: this is an internal API and should not be used / called by any client code. - */ -public class TransportGetWarmersAction extends TransportClusterInfoAction { - - @Inject - public TransportGetWarmersAction(Settings settings, TransportService transportService, ClusterService clusterService, - ThreadPool threadPool, ActionFilters actionFilters, IndexNameExpressionResolver indexNameExpressionResolver) { - super(settings, GetWarmersAction.NAME, transportService, clusterService, threadPool, actionFilters, indexNameExpressionResolver, GetWarmersRequest::new); - } - - @Override - protected String executor() { - // very lightweight operation, no need to fork - return ThreadPool.Names.SAME; - } - - @Override - protected ClusterBlockException checkBlock(GetWarmersRequest request, ClusterState state) { - return state.blocks().indicesBlockedException(ClusterBlockLevel.METADATA_READ, indexNameExpressionResolver.concreteIndices(state, request)); - } - - @Override - protected GetWarmersResponse newResponse() { - return new GetWarmersResponse(); - } - - @Override - protected void doMasterOperation(final GetWarmersRequest request, String[] concreteIndices, final ClusterState state, final ActionListener listener) { - ImmutableOpenMap> result = state.metaData().findWarmers( - concreteIndices, request.types(), request.warmers() - ); - listener.onResponse(new GetWarmersResponse(result)); - } -} diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/package-info.java b/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/package-info.java deleted file mode 100644 index 053cc75caa3..00000000000 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/package-info.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Index / Search Warmer Administrative Actions - *

- * Index warming allows to run registered search requests to warm up the index before it is available for search. - * With the near real time aspect of search, cold data (segments) will be warmed up before they become available for - * search. This includes things such as the query cache, filesystem cache, and loading field data for fields. - *

- * - * See the reference guide for more detailed information about the Indices / Search Warmer - */ -package org.elasticsearch.action.admin.indices.warmer; diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/put/PutWarmerRequest.java b/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/put/PutWarmerRequest.java deleted file mode 100644 index dbf136dec12..00000000000 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/put/PutWarmerRequest.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.action.admin.indices.warmer.put; - -import org.elasticsearch.action.ActionRequestValidationException; -import org.elasticsearch.action.IndicesRequest; -import org.elasticsearch.action.search.SearchRequest; -import org.elasticsearch.action.search.SearchRequestBuilder; -import org.elasticsearch.action.support.IndicesOptions; -import org.elasticsearch.action.support.master.AcknowledgedRequest; -import org.elasticsearch.common.io.stream.StreamInput; -import org.elasticsearch.common.io.stream.StreamOutput; - -import java.io.IOException; - -import static org.elasticsearch.action.ValidateActions.addValidationError; - -/** - * A request that associates a {@link SearchRequest} with a name in the cluster that is - * in-turn used to warm up indices before they are available for search. - * - * Note: neither the search request nor the name must be null - */ -public class PutWarmerRequest extends AcknowledgedRequest implements IndicesRequest.Replaceable { - - private String name; - - private SearchRequest searchRequest; - - public PutWarmerRequest() { - } - - /** - * Constructs a new warmer. - * - * @param name The name of the warmer. - */ - public PutWarmerRequest(String name) { - this.name = name; - } - - /** - * Sets the name of the warmer. - */ - public PutWarmerRequest name(String name) { - this.name = name; - return this; - } - - public String name() { - return this.name; - } - - /** - * Sets the search request to warm. - */ - public PutWarmerRequest searchRequest(SearchRequest searchRequest) { - this.searchRequest = searchRequest; - return this; - } - - /** - * Sets the search request to warm. - */ - public PutWarmerRequest searchRequest(SearchRequestBuilder searchRequest) { - this.searchRequest = searchRequest.request(); - return this; - } - - public SearchRequest searchRequest() { - return this.searchRequest; - } - - @Override - public ActionRequestValidationException validate() { - ActionRequestValidationException validationException = null; - if (searchRequest == null) { - validationException = addValidationError("search request is missing", validationException); - } else { - validationException = searchRequest.validate(); - } - if (name == null) { - validationException = addValidationError("name is missing", validationException); - } - return validationException; - } - - @Override - public String[] indices() { - if (searchRequest == null) { - throw new IllegalStateException("unable to retrieve indices, search request is null"); - } - return searchRequest.indices(); - } - - @Override - public IndicesRequest indices(String[] indices) { - if (searchRequest == null) { - throw new IllegalStateException("unable to set indices, search request is null"); - } - searchRequest.indices(indices); - return this; - } - - @Override - public IndicesOptions indicesOptions() { - if (searchRequest == null) { - throw new IllegalStateException("unable to retrieve indices options, search request is null"); - } - return searchRequest.indicesOptions(); - } - - @Override - public void readFrom(StreamInput in) throws IOException { - super.readFrom(in); - name = in.readString(); - if (in.readBoolean()) { - searchRequest = new SearchRequest(); - searchRequest.readFrom(in); - } - readTimeout(in); - } - - @Override - public void writeTo(StreamOutput out) throws IOException { - super.writeTo(out); - out.writeString(name); - if (searchRequest == null) { - out.writeBoolean(false); - } else { - out.writeBoolean(true); - searchRequest.writeTo(out); - } - writeTimeout(out); - } -} diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/put/PutWarmerRequestBuilder.java b/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/put/PutWarmerRequestBuilder.java deleted file mode 100644 index 39b7a370584..00000000000 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/put/PutWarmerRequestBuilder.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.action.admin.indices.warmer.put; - -import org.elasticsearch.action.search.SearchRequest; -import org.elasticsearch.action.search.SearchRequestBuilder; -import org.elasticsearch.action.support.master.AcknowledgedRequestBuilder; -import org.elasticsearch.client.ElasticsearchClient; - -/** - * Builder for {@link PutWarmerRequest} - * - * @see PutWarmerRequest for details - */ -public class PutWarmerRequestBuilder extends AcknowledgedRequestBuilder { - - /** - * Creates a new {@link PutWarmerRequestBuilder} with a given name. - */ - public PutWarmerRequestBuilder(ElasticsearchClient client, PutWarmerAction action, String name) { - super(client, action, new PutWarmerRequest().name(name)); - } - - /** - * Creates a new {@link PutWarmerRequestBuilder} - * Note: {@link #setName(String)} must be called with a non-null value before this request is executed. - */ - public PutWarmerRequestBuilder(ElasticsearchClient client, PutWarmerAction action) { - super(client, action, new PutWarmerRequest()); - } - - /** - * Sets the name of the warmer. - */ - public PutWarmerRequestBuilder setName(String name) { - request.name(name); - return this; - } - - /** - * Sets the search request to use to warm the index when applicable. - */ - public PutWarmerRequestBuilder setSearchRequest(SearchRequest searchRequest) { - request.searchRequest(searchRequest); - return this; - } - - /** - * Sets the search request to use to warm the index when applicable. - */ - public PutWarmerRequestBuilder setSearchRequest(SearchRequestBuilder searchRequest) { - request.searchRequest(searchRequest); - return this; - } -} diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/put/PutWarmerResponse.java b/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/put/PutWarmerResponse.java deleted file mode 100644 index 008b239920c..00000000000 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/put/PutWarmerResponse.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.action.admin.indices.warmer.put; - -import org.elasticsearch.action.support.master.AcknowledgedResponse; -import org.elasticsearch.common.io.stream.StreamInput; -import org.elasticsearch.common.io.stream.StreamOutput; - -import java.io.IOException; - -/** - * An acknowledged response of put warmer operation. - */ -public class PutWarmerResponse extends AcknowledgedResponse { - - PutWarmerResponse() { - super(); - } - - PutWarmerResponse(boolean acknowledged) { - super(acknowledged); - } - - @Override - public void readFrom(StreamInput in) throws IOException { - super.readFrom(in); - readAcknowledged(in); - } - - @Override - public void writeTo(StreamOutput out) throws IOException { - super.writeTo(out); - writeAcknowledged(out); - } -} \ No newline at end of file diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/put/TransportPutWarmerAction.java b/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/put/TransportPutWarmerAction.java deleted file mode 100644 index 8dd671b4da0..00000000000 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/put/TransportPutWarmerAction.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.action.admin.indices.warmer.put; - -import org.elasticsearch.ElasticsearchException; -import org.elasticsearch.action.ActionListener; -import org.elasticsearch.action.search.SearchRequest; -import org.elasticsearch.action.search.SearchResponse; -import org.elasticsearch.action.search.TransportSearchAction; -import org.elasticsearch.action.support.ActionFilters; -import org.elasticsearch.action.support.master.TransportMasterNodeAction; -import org.elasticsearch.cluster.AckedClusterStateUpdateTask; -import org.elasticsearch.cluster.ClusterService; -import org.elasticsearch.cluster.ClusterState; -import org.elasticsearch.cluster.block.ClusterBlockException; -import org.elasticsearch.cluster.block.ClusterBlockLevel; -import org.elasticsearch.cluster.metadata.IndexMetaData; -import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; -import org.elasticsearch.cluster.metadata.MetaData; -import org.elasticsearch.common.inject.Inject; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.index.IndexNotFoundException; -import org.elasticsearch.search.warmer.IndexWarmersMetaData; -import org.elasticsearch.threadpool.ThreadPool; -import org.elasticsearch.transport.TransportService; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * Internal Actions executed on the master associating a warmer with a name in the cluster state metadata. - * - * Note: this is an internal API and should not be used / called by any client code. - */ -public class TransportPutWarmerAction extends TransportMasterNodeAction { - - private final TransportSearchAction searchAction; - - @Inject - public TransportPutWarmerAction(Settings settings, TransportService transportService, ClusterService clusterService, ThreadPool threadPool, - TransportSearchAction searchAction, ActionFilters actionFilters, IndexNameExpressionResolver indexNameExpressionResolver) { - super(settings, PutWarmerAction.NAME, transportService, clusterService, threadPool, actionFilters, indexNameExpressionResolver, PutWarmerRequest::new); - this.searchAction = searchAction; - } - - @Override - protected String executor() { - return ThreadPool.Names.SAME; - } - - @Override - protected PutWarmerResponse newResponse() { - return new PutWarmerResponse(); - } - - @Override - protected ClusterBlockException checkBlock(PutWarmerRequest request, ClusterState state) { - String[] concreteIndices = indexNameExpressionResolver.concreteIndices(state, request); - ClusterBlockException status = state.blocks().indicesBlockedException(ClusterBlockLevel.METADATA_WRITE, concreteIndices); - if (status != null) { - return status; - } - // PutWarmer executes a SearchQuery before adding the new warmer to the cluster state, - // so we need to check the same block as TransportSearchTypeAction here - return state.blocks().indicesBlockedException(ClusterBlockLevel.READ, concreteIndices); - } - - @Override - protected void masterOperation(final PutWarmerRequest request, final ClusterState state, final ActionListener listener) { - // first execute the search request, see that its ok... - SearchRequest searchRequest = new SearchRequest(request.searchRequest(), request); - searchAction.execute(searchRequest, new ActionListener() { - @Override - public void onResponse(SearchResponse searchResponse) { - if (searchResponse.getFailedShards() > 0) { - listener.onFailure(new ElasticsearchException("search failed with failed shards: " + Arrays.toString(searchResponse.getShardFailures()))); - return; - } - - clusterService.submitStateUpdateTask("put_warmer [" + request.name() + "]", new AckedClusterStateUpdateTask(request, listener) { - - @Override - protected PutWarmerResponse newResponse(boolean acknowledged) { - return new PutWarmerResponse(acknowledged); - } - - @Override - public void onFailure(String source, Throwable t) { - logger.debug("failed to put warmer [{}] on indices [{}]", t, request.name(), request.searchRequest().indices()); - super.onFailure(source, t); - } - - @Override - public ClusterState execute(ClusterState currentState) { - MetaData metaData = currentState.metaData(); - String[] concreteIndices = indexNameExpressionResolver.concreteIndices(currentState, request.searchRequest().indicesOptions(), request.searchRequest().indices()); - - IndexWarmersMetaData.SearchSource source = null; - if (request.searchRequest().source() != null) { - source = new IndexWarmersMetaData.SearchSource(request.searchRequest().source()); - } - - // now replace it on the metadata - MetaData.Builder mdBuilder = MetaData.builder(currentState.metaData()); - - for (String index : concreteIndices) { - IndexMetaData indexMetaData = metaData.index(index); - if (indexMetaData == null) { - throw new IndexNotFoundException(index); - } - IndexWarmersMetaData warmers = indexMetaData.custom(IndexWarmersMetaData.TYPE); - if (warmers == null) { - logger.info("[{}] putting warmer [{}]", index, request.name()); - warmers = new IndexWarmersMetaData(new IndexWarmersMetaData.Entry(request.name(), request.searchRequest().types(), request.searchRequest().requestCache(), source)); - } else { - boolean found = false; - List entries = new ArrayList<>(warmers.entries().size() + 1); - for (IndexWarmersMetaData.Entry entry : warmers.entries()) { - if (entry.name().equals(request.name())) { - found = true; - entries.add(new IndexWarmersMetaData.Entry(request.name(), request.searchRequest().types(), request.searchRequest().requestCache(), source)); - } else { - entries.add(entry); - } - } - if (!found) { - logger.info("[{}] put warmer [{}]", index, request.name()); - entries.add(new IndexWarmersMetaData.Entry(request.name(), request.searchRequest().types(), request.searchRequest().requestCache(), source)); - } else { - logger.info("[{}] update warmer [{}]", index, request.name()); - } - warmers = new IndexWarmersMetaData(entries.toArray(new IndexWarmersMetaData.Entry[entries.size()])); - } - IndexMetaData.Builder indexBuilder = IndexMetaData.builder(indexMetaData).putCustom(IndexWarmersMetaData.TYPE, warmers); - mdBuilder.put(indexBuilder); - } - - return ClusterState.builder(currentState).metaData(mdBuilder).build(); - } - }); - } - - @Override - public void onFailure(Throwable e) { - listener.onFailure(e); - } - }); - } -} diff --git a/core/src/main/java/org/elasticsearch/action/support/master/TransportMasterNodeAction.java b/core/src/main/java/org/elasticsearch/action/support/master/TransportMasterNodeAction.java index c97a4a526da..60064a5ff46 100644 --- a/core/src/main/java/org/elasticsearch/action/support/master/TransportMasterNodeAction.java +++ b/core/src/main/java/org/elasticsearch/action/support/master/TransportMasterNodeAction.java @@ -26,10 +26,10 @@ import org.elasticsearch.action.ActionRunnable; import org.elasticsearch.action.support.ActionFilters; import org.elasticsearch.action.support.HandledTransportAction; import org.elasticsearch.action.support.ThreadedActionListener; -import org.elasticsearch.cluster.ClusterChangedEvent; import org.elasticsearch.cluster.ClusterService; import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.ClusterStateObserver; +import org.elasticsearch.cluster.MasterNodeChangePredicate; import org.elasticsearch.cluster.NotMasterException; import org.elasticsearch.cluster.block.ClusterBlockException; import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver; @@ -51,20 +51,6 @@ import java.util.function.Supplier; * A base class for operations that needs to be performed on the master node. */ public abstract class TransportMasterNodeAction extends HandledTransportAction { - private static final ClusterStateObserver.ChangePredicate masterNodeChangedPredicate = new ClusterStateObserver.ChangePredicate() { - @Override - public boolean apply(ClusterState previousState, ClusterState.ClusterStateStatus previousStatus, - ClusterState newState, ClusterState.ClusterStateStatus newStatus) { - // The condition !newState.nodes().masterNodeId().equals(previousState.nodes().masterNodeId()) is not sufficient as the same master node might get reelected after a disruption. - return newState.nodes().masterNodeId() != null && newState != previousState; - } - - @Override - public boolean apply(ClusterChangedEvent event) { - return event.nodesDelta().masterNodeChanged(); - } - }; - protected final TransportService transportService; protected final ClusterService clusterService; @@ -164,7 +150,7 @@ public abstract class TransportMasterNodeAction(listener) { @Override @@ -195,7 +181,7 @@ public abstract class TransportMasterNodeAction putWarmer(PutWarmerRequest request); - - /** - * Puts an index search warmer to be applies when applicable. - */ - void putWarmer(PutWarmerRequest request, ActionListener listener); - - /** - * Puts an index search warmer to be applies when applicable. - */ - PutWarmerRequestBuilder preparePutWarmer(String name); - - /** - * Deletes an index warmer. - */ - ActionFuture deleteWarmer(DeleteWarmerRequest request); - - /** - * Deletes an index warmer. - */ - void deleteWarmer(DeleteWarmerRequest request, ActionListener listener); - - /** - * Deletes an index warmer. - */ - DeleteWarmerRequestBuilder prepareDeleteWarmer(); - - /** - * Returns a map of index warmers for the given get request. - */ - void getWarmers(GetWarmersRequest request, ActionListener listener); - - /** - * Returns a map of index warmers for the given get request. - */ - ActionFuture getWarmers(GetWarmersRequest request); - - /** - * Returns a new builder to fetch index warmer metadata for the given indices. - */ - GetWarmersRequestBuilder prepareGetWarmers(String... indices); - /** * Executed a per index settings get request and returns the settings for the indices specified. * Note: this is a per index request and will not include settings that are set on the cluster diff --git a/core/src/main/java/org/elasticsearch/client/support/AbstractClient.java b/core/src/main/java/org/elasticsearch/client/support/AbstractClient.java index e085c8da075..e5a465442bb 100644 --- a/core/src/main/java/org/elasticsearch/client/support/AbstractClient.java +++ b/core/src/main/java/org/elasticsearch/client/support/AbstractClient.java @@ -232,18 +232,6 @@ import org.elasticsearch.action.admin.indices.validate.query.ValidateQueryAction import org.elasticsearch.action.admin.indices.validate.query.ValidateQueryRequest; import org.elasticsearch.action.admin.indices.validate.query.ValidateQueryRequestBuilder; import org.elasticsearch.action.admin.indices.validate.query.ValidateQueryResponse; -import org.elasticsearch.action.admin.indices.warmer.delete.DeleteWarmerAction; -import org.elasticsearch.action.admin.indices.warmer.delete.DeleteWarmerRequest; -import org.elasticsearch.action.admin.indices.warmer.delete.DeleteWarmerRequestBuilder; -import org.elasticsearch.action.admin.indices.warmer.delete.DeleteWarmerResponse; -import org.elasticsearch.action.admin.indices.warmer.get.GetWarmersAction; -import org.elasticsearch.action.admin.indices.warmer.get.GetWarmersRequest; -import org.elasticsearch.action.admin.indices.warmer.get.GetWarmersRequestBuilder; -import org.elasticsearch.action.admin.indices.warmer.get.GetWarmersResponse; -import org.elasticsearch.action.admin.indices.warmer.put.PutWarmerAction; -import org.elasticsearch.action.admin.indices.warmer.put.PutWarmerRequest; -import org.elasticsearch.action.admin.indices.warmer.put.PutWarmerRequestBuilder; -import org.elasticsearch.action.admin.indices.warmer.put.PutWarmerResponse; import org.elasticsearch.action.bulk.BulkAction; import org.elasticsearch.action.bulk.BulkRequest; import org.elasticsearch.action.bulk.BulkRequestBuilder; @@ -1669,51 +1657,6 @@ public abstract class AbstractClient extends AbstractComponent implements Client return new ValidateQueryRequestBuilder(this, ValidateQueryAction.INSTANCE).setIndices(indices); } - @Override - public ActionFuture putWarmer(PutWarmerRequest request) { - return execute(PutWarmerAction.INSTANCE, request); - } - - @Override - public void putWarmer(PutWarmerRequest request, ActionListener listener) { - execute(PutWarmerAction.INSTANCE, request, listener); - } - - @Override - public PutWarmerRequestBuilder preparePutWarmer(String name) { - return new PutWarmerRequestBuilder(this, PutWarmerAction.INSTANCE, name); - } - - @Override - public ActionFuture deleteWarmer(DeleteWarmerRequest request) { - return execute(DeleteWarmerAction.INSTANCE, request); - } - - @Override - public void deleteWarmer(DeleteWarmerRequest request, ActionListener listener) { - execute(DeleteWarmerAction.INSTANCE, request, listener); - } - - @Override - public DeleteWarmerRequestBuilder prepareDeleteWarmer() { - return new DeleteWarmerRequestBuilder(this, DeleteWarmerAction.INSTANCE); - } - - @Override - public GetWarmersRequestBuilder prepareGetWarmers(String... indices) { - return new GetWarmersRequestBuilder(this, GetWarmersAction.INSTANCE, indices); - } - - @Override - public ActionFuture getWarmers(GetWarmersRequest request) { - return execute(GetWarmersAction.INSTANCE, request); - } - - @Override - public void getWarmers(GetWarmersRequest request, ActionListener listener) { - execute(GetWarmersAction.INSTANCE, request, listener); - } - @Override public GetSettingsRequestBuilder prepareGetSettings(String... indices) { return new GetSettingsRequestBuilder(this, GetSettingsAction.INSTANCE, indices); diff --git a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/put/PutWarmerAction.java b/core/src/main/java/org/elasticsearch/cluster/MasterNodeChangePredicate.java similarity index 53% rename from core/src/main/java/org/elasticsearch/action/admin/indices/warmer/put/PutWarmerAction.java rename to core/src/main/java/org/elasticsearch/cluster/MasterNodeChangePredicate.java index 3c5c8b7c412..6d91ec7fd27 100644 --- a/core/src/main/java/org/elasticsearch/action/admin/indices/warmer/put/PutWarmerAction.java +++ b/core/src/main/java/org/elasticsearch/cluster/MasterNodeChangePredicate.java @@ -17,30 +17,24 @@ * under the License. */ -package org.elasticsearch.action.admin.indices.warmer.put; +package org.elasticsearch.cluster; -import org.elasticsearch.action.Action; -import org.elasticsearch.client.ElasticsearchClient; +public enum MasterNodeChangePredicate implements ClusterStateObserver.ChangePredicate { + INSTANCE; -/** - * Action for the admin/warmers/put API. - */ -public class PutWarmerAction extends Action { - - public static final PutWarmerAction INSTANCE = new PutWarmerAction(); - public static final String NAME = "indices:admin/warmers/put"; - - private PutWarmerAction() { - super(NAME); + @Override + public boolean apply( + ClusterState previousState, + ClusterState.ClusterStateStatus previousStatus, + ClusterState newState, + ClusterState.ClusterStateStatus newStatus) { + // checking if the masterNodeId changed is insufficient as the + // same master node might get re-elected after a disruption + return newState.nodes().masterNodeId() != null && newState != previousState; } @Override - public PutWarmerResponse newResponse() { - return new PutWarmerResponse(); - } - - @Override - public PutWarmerRequestBuilder newRequestBuilder(ElasticsearchClient client) { - return new PutWarmerRequestBuilder(client, this); + public boolean apply(ClusterChangedEvent changedEvent) { + return changedEvent.nodesDelta().masterNodeChanged(); } } diff --git a/core/src/main/java/org/elasticsearch/cluster/action/shard/ShardStateAction.java b/core/src/main/java/org/elasticsearch/cluster/action/shard/ShardStateAction.java index 58b766e8d84..00a238504f2 100644 --- a/core/src/main/java/org/elasticsearch/cluster/action/shard/ShardStateAction.java +++ b/core/src/main/java/org/elasticsearch/cluster/action/shard/ShardStateAction.java @@ -302,6 +302,10 @@ public class ShardStateAction extends AbstractComponent { this.failure = failure; } + public ShardRouting getShardRouting() { + return shardRouting; + } + @Override public void readFrom(StreamInput in) throws IOException { super.readFrom(in); diff --git a/core/src/main/java/org/elasticsearch/cluster/metadata/IndexMetaData.java b/core/src/main/java/org/elasticsearch/cluster/metadata/IndexMetaData.java index af98d9c2fde..d7b70b8ca8f 100644 --- a/core/src/main/java/org/elasticsearch/cluster/metadata/IndexMetaData.java +++ b/core/src/main/java/org/elasticsearch/cluster/metadata/IndexMetaData.java @@ -46,7 +46,6 @@ import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.rest.RestStatus; -import org.elasticsearch.search.warmer.IndexWarmersMetaData; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; @@ -92,11 +91,6 @@ public class IndexMetaData implements Diffable, FromXContentBuild public static Map customPrototypes = new HashMap<>(); - static { - // register non plugin custom metadata - registerPrototype(IndexWarmersMetaData.TYPE, IndexWarmersMetaData.PROTO); - } - /** * Register a custom index meta data factory. Make sure to call it from a static block. */ @@ -904,6 +898,12 @@ public class IndexMetaData implements Diffable, FromXContentBuild builder.putActiveAllocationIds(Integer.valueOf(shardId), allocationIds); } } + } else if ("warmers".equals(currentFieldName)) { + // TODO: do this in 4.0: + // throw new IllegalArgumentException("Warmers are not supported anymore - are you upgrading from 1.x?"); + // ignore: warmers have been removed in 3.0 and are + // simply ignored when upgrading from 2.x + assert Version.CURRENT.major <= 3; } else { // check if its a custom index metadata Custom proto = lookupPrototype(currentFieldName); diff --git a/core/src/main/java/org/elasticsearch/cluster/metadata/MetaData.java b/core/src/main/java/org/elasticsearch/cluster/metadata/MetaData.java index d904a3ca3ea..d96e1f17a0b 100644 --- a/core/src/main/java/org/elasticsearch/cluster/metadata/MetaData.java +++ b/core/src/main/java/org/elasticsearch/cluster/metadata/MetaData.java @@ -55,12 +55,10 @@ import org.elasticsearch.index.store.IndexStoreConfig; import org.elasticsearch.indices.recovery.RecoverySettings; import org.elasticsearch.indices.ttl.IndicesTTLService; import org.elasticsearch.rest.RestStatus; -import org.elasticsearch.search.warmer.IndexWarmersMetaData; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.EnumSet; @@ -71,7 +69,6 @@ import java.util.Map; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; -import java.util.stream.Collectors; import static java.util.Collections.unmodifiableSet; import static org.elasticsearch.common.settings.Settings.readSettingsFromStream; @@ -365,49 +362,6 @@ public class MetaData implements Iterable, Diffable, Fr return indexMapBuilder.build(); } - public ImmutableOpenMap> findWarmers(String[] concreteIndices, final String[] types, final String[] uncheckedWarmers) { - assert uncheckedWarmers != null; - assert concreteIndices != null; - if (concreteIndices.length == 0) { - return ImmutableOpenMap.of(); - } - // special _all check to behave the same like not specifying anything for the warmers (not for the indices) - final String[] warmers = Strings.isAllOrWildcard(uncheckedWarmers) ? Strings.EMPTY_ARRAY : uncheckedWarmers; - - ImmutableOpenMap.Builder> mapBuilder = ImmutableOpenMap.builder(); - Iterable intersection = HppcMaps.intersection(ObjectHashSet.from(concreteIndices), indices.keys()); - for (String index : intersection) { - IndexMetaData indexMetaData = indices.get(index); - IndexWarmersMetaData indexWarmersMetaData = indexMetaData.custom(IndexWarmersMetaData.TYPE); - if (indexWarmersMetaData == null || indexWarmersMetaData.entries().isEmpty()) { - continue; - } - - // TODO: make this a List so we don't have to copy below - Collection filteredWarmers = - indexWarmersMetaData - .entries() - .stream() - .filter(warmer -> { - if (warmers.length != 0 && types.length != 0) { - return Regex.simpleMatch(warmers, warmer.name()) && Regex.simpleMatch(types, warmer.types()); - } else if (warmers.length != 0) { - return Regex.simpleMatch(warmers, warmer.name()); - } else if (types.length != 0) { - return Regex.simpleMatch(types, warmer.types()); - } else { - return true; - } - }) - .collect(Collectors.toCollection(ArrayList::new)); - - if (!filteredWarmers.isEmpty()) { - mapBuilder.put(index, Collections.unmodifiableList(new ArrayList<>(filteredWarmers))); - } - } - return mapBuilder.build(); - } - /** * Returns all the concrete indices. */ diff --git a/core/src/main/java/org/elasticsearch/common/hash/MurmurHash3.java b/core/src/main/java/org/elasticsearch/common/hash/MurmurHash3.java index c9c0d29c448..ba159f30a22 100644 --- a/core/src/main/java/org/elasticsearch/common/hash/MurmurHash3.java +++ b/core/src/main/java/org/elasticsearch/common/hash/MurmurHash3.java @@ -59,6 +59,7 @@ public enum MurmurHash3 { * Note, this hashing function might be used to persist hashes, so if the way hashes are computed * changes for some reason, it needs to be addressed (like in BloomFilter and MurmurHashField). */ + @SuppressWarnings("fallthrough") // Intentionally uses fallthrough to implement a well known hashing algorithm public static Hash128 hash128(byte[] key, int offset, int length, long seed, Hash128 hash) { long h1 = seed; long h2 = seed; diff --git a/core/src/main/java/org/elasticsearch/common/inject/assistedinject/FactoryProvider2.java b/core/src/main/java/org/elasticsearch/common/inject/assistedinject/FactoryProvider2.java index 1f0e05f43c0..29863527202 100644 --- a/core/src/main/java/org/elasticsearch/common/inject/assistedinject/FactoryProvider2.java +++ b/core/src/main/java/org/elasticsearch/common/inject/assistedinject/FactoryProvider2.java @@ -258,6 +258,12 @@ public final class FactoryProvider2 implements InvocationHandler, Provider return o == this || o == factory; } + @Override + public int hashCode() { + // This way both this and its factory hash to the same spot, making hashCode consistent. + return factory.hashCode(); + } + /** * Returns true if {@code thrown} can be thrown by {@code invoked} without wrapping. */ diff --git a/core/src/main/java/org/elasticsearch/common/lucene/Lucene.java b/core/src/main/java/org/elasticsearch/common/lucene/Lucene.java index 558e92c4fb8..b693af1e6d1 100644 --- a/core/src/main/java/org/elasticsearch/common/lucene/Lucene.java +++ b/core/src/main/java/org/elasticsearch/common/lucene/Lucene.java @@ -86,11 +86,6 @@ import java.util.Objects; * */ public class Lucene { - - // TODO: remove VERSION, and have users use Version.LATEST. - public static final Version VERSION = Version.LATEST; - public static final Version ANALYZER_VERSION = VERSION; - public static final Version QUERYPARSER_VERSION = VERSION; public static final String LATEST_DOC_VALUES_FORMAT = "Lucene54"; public static final String LATEST_POSTINGS_FORMAT = "Lucene50"; public static final String LATEST_CODEC = "Lucene54"; @@ -109,7 +104,6 @@ public class Lucene { public static final TopDocs EMPTY_TOP_DOCS = new TopDocs(0, EMPTY_SCORE_DOCS, 0.0f); - @SuppressWarnings("deprecation") public static Version parseVersion(@Nullable String version, Version defaultVersion, ESLogger logger) { if (version == null) { return defaultVersion; diff --git a/core/src/main/java/org/elasticsearch/common/network/NetworkModule.java b/core/src/main/java/org/elasticsearch/common/network/NetworkModule.java index 13ea25b51f1..984c2d6ad81 100644 --- a/core/src/main/java/org/elasticsearch/common/network/NetworkModule.java +++ b/core/src/main/java/org/elasticsearch/common/network/NetworkModule.java @@ -88,9 +88,6 @@ import org.elasticsearch.rest.action.admin.indices.template.put.RestPutIndexTemp import org.elasticsearch.rest.action.admin.indices.upgrade.RestUpgradeAction; import org.elasticsearch.rest.action.admin.indices.validate.query.RestValidateQueryAction; import org.elasticsearch.rest.action.admin.indices.validate.template.RestRenderSearchTemplateAction; -import org.elasticsearch.rest.action.admin.indices.warmer.delete.RestDeleteWarmerAction; -import org.elasticsearch.rest.action.admin.indices.warmer.get.RestGetWarmerAction; -import org.elasticsearch.rest.action.admin.indices.warmer.put.RestPutWarmerAction; import org.elasticsearch.rest.action.bulk.RestBulkAction; import org.elasticsearch.rest.action.cat.AbstractCatAction; import org.elasticsearch.rest.action.cat.RestAliasAction; @@ -209,10 +206,6 @@ public class NetworkModule extends AbstractModule { RestDeleteIndexTemplateAction.class, RestHeadIndexTemplateAction.class, - RestPutWarmerAction.class, - RestDeleteWarmerAction.class, - RestGetWarmerAction.class, - RestPutMappingAction.class, RestGetMappingAction.class, RestGetFieldMappingAction.class, diff --git a/core/src/main/java/org/elasticsearch/common/util/BloomFilter.java b/core/src/main/java/org/elasticsearch/common/util/BloomFilter.java index b19d727f022..fdc94d53849 100644 --- a/core/src/main/java/org/elasticsearch/common/util/BloomFilter.java +++ b/core/src/main/java/org/elasticsearch/common/util/BloomFilter.java @@ -519,6 +519,7 @@ public class BloomFilter { return k; } + @SuppressWarnings("fallthrough") // Uses fallthrough to implement a well know hashing algorithm public static long hash3_x64_128(byte[] key, int offset, int length, long seed) { final int nblocks = length >> 4; // Process as 128-bit blocks. @@ -598,7 +599,7 @@ public class BloomFilter { case 2: k1 ^= ((long) key[offset + 1]) << 8; case 1: - k1 ^= ((long) key[offset]); + k1 ^= (key[offset]); k1 *= c1; k1 = rotl64(k1, 31); k1 *= c2; diff --git a/core/src/main/java/org/elasticsearch/index/analysis/Analysis.java b/core/src/main/java/org/elasticsearch/index/analysis/Analysis.java index 43c9af672d1..a27b49b9618 100644 --- a/core/src/main/java/org/elasticsearch/index/analysis/Analysis.java +++ b/core/src/main/java/org/elasticsearch/index/analysis/Analysis.java @@ -89,12 +89,12 @@ public class Analysis { // check for explicit version on the specific analyzer component String sVersion = settings.get("version"); if (sVersion != null) { - return Lucene.parseVersion(sVersion, Lucene.ANALYZER_VERSION, logger); + return Lucene.parseVersion(sVersion, Version.LATEST, logger); } // check for explicit version on the index itself as default for all analysis components sVersion = indexSettings.get("index.analysis.version"); if (sVersion != null) { - return Lucene.parseVersion(sVersion, Lucene.ANALYZER_VERSION, logger); + return Lucene.parseVersion(sVersion, Version.LATEST, logger); } // resolve the analysis version based on the version the index was created with return org.elasticsearch.Version.indexCreated(indexSettings).luceneVersion; diff --git a/core/src/main/java/org/elasticsearch/index/fieldvisitor/SingleFieldsVisitor.java b/core/src/main/java/org/elasticsearch/index/fieldvisitor/SingleFieldsVisitor.java index a9880d59f65..1751a820d8c 100644 --- a/core/src/main/java/org/elasticsearch/index/fieldvisitor/SingleFieldsVisitor.java +++ b/core/src/main/java/org/elasticsearch/index/fieldvisitor/SingleFieldsVisitor.java @@ -58,11 +58,16 @@ public class SingleFieldsVisitor extends FieldsVisitor { public void postProcess(MappedFieldType fieldType) { if (uid != null) { - // TODO: this switch seems very wrong...either each case should be breaking, or this should not be a switch switch (field) { - case UidFieldMapper.NAME: addValue(field, uid.toString()); - case IdFieldMapper.NAME: addValue(field, uid.id()); - case TypeFieldMapper.NAME: addValue(field, uid.type()); + case UidFieldMapper.NAME: + addValue(field, uid.toString()); + break; + case IdFieldMapper.NAME: + addValue(field, uid.id()); + break; + case TypeFieldMapper.NAME: + addValue(field, uid.type()); + break; } } diff --git a/core/src/main/java/org/elasticsearch/index/translog/Translog.java b/core/src/main/java/org/elasticsearch/index/translog/Translog.java index 0d2fba6ea57..88e4b06421e 100644 --- a/core/src/main/java/org/elasticsearch/index/translog/Translog.java +++ b/core/src/main/java/org/elasticsearch/index/translog/Translog.java @@ -51,6 +51,7 @@ import org.elasticsearch.index.shard.IndexShardComponent; import java.io.Closeable; import java.io.EOFException; import java.io.IOException; +import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.file.DirectoryStream; import java.nio.file.Files; @@ -440,7 +441,7 @@ public class Translog extends AbstractIndexShardComponent implements IndexShardC if (config.isSyncOnEachOperation()) { current.sync(); } - assert current.assertBytesAtLocation(location, bytes); + assert assertBytesAtLocation(location, bytes); return location; } } catch (AlreadyClosedException | IOException ex) { @@ -454,6 +455,13 @@ public class Translog extends AbstractIndexShardComponent implements IndexShardC } } + boolean assertBytesAtLocation(Translog.Location location, BytesReference expectedBytes) throws IOException { + // tests can override this + ByteBuffer buffer = ByteBuffer.allocate(location.size); + current.readBytes(buffer, location.translogLocation); + return new BytesArray(buffer.array()).equals(expectedBytes); + } + /** * Snapshots the current transaction log allowing to safely iterate over the snapshot. * Snapshots are fixed in time and will not be updated with future operations. diff --git a/core/src/main/java/org/elasticsearch/index/translog/TranslogWriter.java b/core/src/main/java/org/elasticsearch/index/translog/TranslogWriter.java index 867b94a8505..6a4d40ec545 100644 --- a/core/src/main/java/org/elasticsearch/index/translog/TranslogWriter.java +++ b/core/src/main/java/org/elasticsearch/index/translog/TranslogWriter.java @@ -218,11 +218,6 @@ public class TranslogWriter extends TranslogReader { } } - boolean assertBytesAtLocation(Translog.Location location, BytesReference expectedBytes) throws IOException { - ByteBuffer buffer = ByteBuffer.allocate(location.size); - readBytes(buffer, location.translogLocation); - return new BytesArray(buffer.array()).equals(expectedBytes); - } private long getWrittenOffset() throws IOException { return channelReference.getChannel().position(); diff --git a/core/src/main/java/org/elasticsearch/percolator/PercolatorService.java b/core/src/main/java/org/elasticsearch/percolator/PercolatorService.java index fd07d54a7d1..e6ffa313e83 100644 --- a/core/src/main/java/org/elasticsearch/percolator/PercolatorService.java +++ b/core/src/main/java/org/elasticsearch/percolator/PercolatorService.java @@ -254,7 +254,7 @@ public class PercolatorService extends AbstractComponent { } PercolatorQuery percolatorQuery = builder.build(); - if (context.isOnlyCount()) { + if (context.isOnlyCount() || context.size() == 0) { TotalHitCountCollector collector = new TotalHitCountCollector(); context.searcher().search(percolatorQuery, MultiCollector.wrap(collector, aggregatorCollector)); if (aggregatorCollector != null) { diff --git a/core/src/main/java/org/elasticsearch/rest/action/admin/indices/get/RestGetIndicesAction.java b/core/src/main/java/org/elasticsearch/rest/action/admin/indices/get/RestGetIndicesAction.java index 86336ccf971..b7371f7b80e 100644 --- a/core/src/main/java/org/elasticsearch/rest/action/admin/indices/get/RestGetIndicesAction.java +++ b/core/src/main/java/org/elasticsearch/rest/action/admin/indices/get/RestGetIndicesAction.java @@ -40,7 +40,6 @@ import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestRequest; import org.elasticsearch.rest.RestResponse; import org.elasticsearch.rest.action.support.RestBuilderListener; -import org.elasticsearch.search.warmer.IndexWarmersMetaData; import java.io.IOException; import java.util.List; @@ -100,9 +99,6 @@ public class RestGetIndicesAction extends BaseRestHandler { case SETTINGS: writeSettings(response.settings().get(index), builder, request); break; - case WARMERS: - writeWarmers(response.warmers().get(index), builder, request); - break; default: throw new IllegalStateException("feature [" + feature + "] is not valid"); } @@ -142,15 +138,6 @@ public class RestGetIndicesAction extends BaseRestHandler { builder.endObject(); } - private void writeWarmers(List warmers, XContentBuilder builder, Params params) throws IOException { - builder.startObject(Fields.WARMERS); - if (warmers != null) { - for (IndexWarmersMetaData.Entry warmer : warmers) { - IndexWarmersMetaData.toXContent(warmer, builder, params); - } - } - builder.endObject(); - } }); } diff --git a/core/src/main/java/org/elasticsearch/rest/action/admin/indices/warmer/delete/RestDeleteWarmerAction.java b/core/src/main/java/org/elasticsearch/rest/action/admin/indices/warmer/delete/RestDeleteWarmerAction.java deleted file mode 100644 index 4fe07564031..00000000000 --- a/core/src/main/java/org/elasticsearch/rest/action/admin/indices/warmer/delete/RestDeleteWarmerAction.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.elasticsearch.rest.action.admin.indices.warmer.delete; - -import org.elasticsearch.action.admin.indices.warmer.delete.DeleteWarmerRequest; -import org.elasticsearch.action.admin.indices.warmer.delete.DeleteWarmerResponse; -import org.elasticsearch.action.support.IndicesOptions; -import org.elasticsearch.client.Client; -import org.elasticsearch.common.Strings; -import org.elasticsearch.common.inject.Inject; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.rest.BaseRestHandler; -import org.elasticsearch.rest.RestChannel; -import org.elasticsearch.rest.RestController; -import org.elasticsearch.rest.RestRequest; -import org.elasticsearch.rest.action.support.AcknowledgedRestListener; - -import static org.elasticsearch.rest.RestRequest.Method.DELETE; - -/** - */ -public class RestDeleteWarmerAction extends BaseRestHandler { - - @Inject - public RestDeleteWarmerAction(Settings settings, RestController controller, Client client) { - super(settings, controller, client); - controller.registerHandler(DELETE, "/{index}/_warmer", this); - controller.registerHandler(DELETE, "/{index}/_warmer/{name}", this); - controller.registerHandler(DELETE, "/{index}/_warmers", this); - controller.registerHandler(DELETE, "/{index}/_warmers/{name}", this); - } - - @Override - public void handleRequest(final RestRequest request, final RestChannel channel, final Client client) { - DeleteWarmerRequest deleteWarmerRequest = new DeleteWarmerRequest(Strings.splitStringByCommaToArray(request.param("name"))) - .indices(Strings.splitStringByCommaToArray(request.param("index"))); - deleteWarmerRequest.timeout(request.paramAsTime("timeout", deleteWarmerRequest.timeout())); - deleteWarmerRequest.masterNodeTimeout(request.paramAsTime("master_timeout", deleteWarmerRequest.masterNodeTimeout())); - deleteWarmerRequest.indicesOptions(IndicesOptions.fromRequest(request, deleteWarmerRequest.indicesOptions())); - client.admin().indices().deleteWarmer(deleteWarmerRequest, new AcknowledgedRestListener(channel)); - } -} diff --git a/core/src/main/java/org/elasticsearch/rest/action/admin/indices/warmer/get/RestGetWarmerAction.java b/core/src/main/java/org/elasticsearch/rest/action/admin/indices/warmer/get/RestGetWarmerAction.java deleted file mode 100644 index 26f1186f550..00000000000 --- a/core/src/main/java/org/elasticsearch/rest/action/admin/indices/warmer/get/RestGetWarmerAction.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.elasticsearch.rest.action.admin.indices.warmer.get; - -import com.carrotsearch.hppc.cursors.ObjectObjectCursor; -import org.elasticsearch.action.admin.indices.warmer.get.GetWarmersRequest; -import org.elasticsearch.action.admin.indices.warmer.get.GetWarmersResponse; -import org.elasticsearch.action.support.IndicesOptions; -import org.elasticsearch.client.Client; -import org.elasticsearch.common.Strings; -import org.elasticsearch.common.inject.Inject; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.common.xcontent.XContentBuilder; -import org.elasticsearch.rest.BaseRestHandler; -import org.elasticsearch.rest.BytesRestResponse; -import org.elasticsearch.rest.RestChannel; -import org.elasticsearch.rest.RestController; -import org.elasticsearch.rest.RestRequest; -import org.elasticsearch.rest.RestResponse; -import org.elasticsearch.rest.action.support.RestBuilderListener; -import org.elasticsearch.search.warmer.IndexWarmersMetaData; - -import java.util.List; - -import static org.elasticsearch.rest.RestRequest.Method.GET; -import static org.elasticsearch.rest.RestStatus.OK; - -/** - * - */ -public class RestGetWarmerAction extends BaseRestHandler { - - @Inject - public RestGetWarmerAction(Settings settings, RestController controller, Client client) { - super(settings, controller, client); - controller.registerHandler(GET, "/_warmer/{name}", this); - controller.registerHandler(GET, "/{index}/_warmer/{name}", this); - controller.registerHandler(GET, "/{index}/_warmers/{name}", this); - controller.registerHandler(GET, "/{index}/{type}/_warmer/{name}", this); - } - - @Override - public void handleRequest(final RestRequest request, final RestChannel channel, final Client client) { - final String[] indices = Strings.splitStringByCommaToArray(request.param("index")); - final String[] types = Strings.splitStringByCommaToArray(request.param("type")); - final String[] names = request.paramAsStringArray("name", Strings.EMPTY_ARRAY); - - GetWarmersRequest getWarmersRequest = new GetWarmersRequest(); - getWarmersRequest.indices(indices).types(types).warmers(names); - getWarmersRequest.local(request.paramAsBoolean("local", getWarmersRequest.local())); - getWarmersRequest.indicesOptions(IndicesOptions.fromRequest(request, getWarmersRequest.indicesOptions())); - client.admin().indices().getWarmers(getWarmersRequest, new RestBuilderListener(channel) { - - @Override - public RestResponse buildResponse(GetWarmersResponse response, XContentBuilder builder) throws Exception { - if (indices.length > 0 && response.warmers().isEmpty()) { - return new BytesRestResponse(OK, builder.startObject().endObject()); - } - - builder.startObject(); - for (ObjectObjectCursor> entry : response.warmers()) { - builder.startObject(entry.key, XContentBuilder.FieldCaseConversion.NONE); - builder.startObject(IndexWarmersMetaData.TYPE, XContentBuilder.FieldCaseConversion.NONE); - for (IndexWarmersMetaData.Entry warmerEntry : entry.value) { - IndexWarmersMetaData.toXContent(warmerEntry, builder, request); - } - builder.endObject(); - builder.endObject(); - } - builder.endObject(); - - return new BytesRestResponse(OK, builder); - } - }); - } -} diff --git a/core/src/main/java/org/elasticsearch/rest/action/admin/indices/warmer/put/RestPutWarmerAction.java b/core/src/main/java/org/elasticsearch/rest/action/admin/indices/warmer/put/RestPutWarmerAction.java deleted file mode 100644 index b47c2542abf..00000000000 --- a/core/src/main/java/org/elasticsearch/rest/action/admin/indices/warmer/put/RestPutWarmerAction.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.elasticsearch.rest.action.admin.indices.warmer.put; - -import org.elasticsearch.action.admin.indices.warmer.put.PutWarmerRequest; -import org.elasticsearch.action.search.SearchRequest; -import org.elasticsearch.action.support.IndicesOptions; -import org.elasticsearch.client.Client; -import org.elasticsearch.common.Strings; -import org.elasticsearch.common.bytes.BytesReference; -import org.elasticsearch.common.inject.Inject; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.indices.query.IndicesQueriesRegistry; -import org.elasticsearch.rest.BaseRestHandler; -import org.elasticsearch.rest.RestChannel; -import org.elasticsearch.rest.RestController; -import org.elasticsearch.rest.RestRequest; -import org.elasticsearch.rest.action.support.AcknowledgedRestListener; -import org.elasticsearch.rest.action.support.RestActions; -import org.elasticsearch.search.builder.SearchSourceBuilder; - -import java.io.IOException; - -import static org.elasticsearch.rest.RestRequest.Method.POST; -import static org.elasticsearch.rest.RestRequest.Method.PUT; - -/** - */ -public class RestPutWarmerAction extends BaseRestHandler { - - private final IndicesQueriesRegistry queryRegistry; - - @Inject - public RestPutWarmerAction(Settings settings, RestController controller, Client client, IndicesQueriesRegistry queryRegistry) { - super(settings, controller, client); - this.queryRegistry = queryRegistry; - controller.registerHandler(PUT, "/_warmer/{name}", this); - controller.registerHandler(PUT, "/{index}/_warmer/{name}", this); - controller.registerHandler(PUT, "/{index}/{type}/_warmer/{name}", this); - - controller.registerHandler(PUT, "/_warmers/{name}", this); - controller.registerHandler(PUT, "/{index}/_warmers/{name}", this); - controller.registerHandler(PUT, "/{index}/{type}/_warmers/{name}", this); - - controller.registerHandler(POST, "/_warmer/{name}", this); - controller.registerHandler(POST, "/{index}/_warmer/{name}", this); - controller.registerHandler(POST, "/{index}/{type}/_warmer/{name}", this); - - controller.registerHandler(POST, "/_warmers/{name}", this); - controller.registerHandler(POST, "/{index}/_warmers/{name}", this); - controller.registerHandler(POST, "/{index}/{type}/_warmers/{name}", this); - } - - @Override - public void handleRequest(final RestRequest request, final RestChannel channel, final Client client) throws IOException { - PutWarmerRequest putWarmerRequest = new PutWarmerRequest(request.param("name")); - - BytesReference sourceBytes = RestActions.getRestContent(request); - SearchSourceBuilder source = RestActions.getRestSearchSource(sourceBytes, queryRegistry, parseFieldMatcher); - SearchRequest searchRequest = new SearchRequest(Strings.splitStringByCommaToArray(request.param("index"))) - .types(Strings.splitStringByCommaToArray(request.param("type"))) - .requestCache(request.paramAsBoolean("request_cache", null)).source(source); - searchRequest.indicesOptions(IndicesOptions.fromRequest(request, searchRequest.indicesOptions())); - putWarmerRequest.searchRequest(searchRequest); - putWarmerRequest.timeout(request.paramAsTime("timeout", putWarmerRequest.timeout())); - putWarmerRequest.masterNodeTimeout(request.paramAsTime("master_timeout", putWarmerRequest.masterNodeTimeout())); - client.admin().indices().putWarmer(putWarmerRequest, new AcknowledgedRestListener<>(channel)); - } -} diff --git a/core/src/main/java/org/elasticsearch/search/SearchService.java b/core/src/main/java/org/elasticsearch/search/SearchService.java index 02efa373ab0..473282a5777 100644 --- a/core/src/main/java/org/elasticsearch/search/SearchService.java +++ b/core/src/main/java/org/elasticsearch/search/SearchService.java @@ -28,7 +28,6 @@ import org.apache.lucene.index.LeafReaderContext; import org.apache.lucene.index.NumericDocValues; import org.apache.lucene.search.TopDocs; import org.elasticsearch.ExceptionsHelper; -import org.elasticsearch.action.search.SearchType; import org.elasticsearch.cache.recycler.PageCacheRecycler; import org.elasticsearch.cluster.ClusterService; import org.elasticsearch.cluster.metadata.IndexMetaData; @@ -94,7 +93,6 @@ import org.elasticsearch.search.internal.InternalScrollSearchRequest; import org.elasticsearch.search.internal.ScrollContext; import org.elasticsearch.search.internal.SearchContext; import org.elasticsearch.search.internal.SearchContext.Lifetime; -import org.elasticsearch.search.internal.ShardSearchLocalRequest; import org.elasticsearch.search.internal.ShardSearchRequest; import org.elasticsearch.search.profile.Profilers; import org.elasticsearch.search.query.QueryPhase; @@ -102,7 +100,6 @@ import org.elasticsearch.search.query.QuerySearchRequest; import org.elasticsearch.search.query.QuerySearchResult; import org.elasticsearch.search.query.QuerySearchResultProvider; import org.elasticsearch.search.query.ScrollQuerySearchResult; -import org.elasticsearch.search.warmer.IndexWarmersMetaData; import org.elasticsearch.threadpool.ThreadPool; import java.io.IOException; @@ -201,7 +198,6 @@ public class SearchService extends AbstractLifecycleComponent imp this.indicesWarmer.addListener(new NormsWarmer(indicesWarmer)); this.indicesWarmer.addListener(new FieldDataWarmer(indicesWarmer)); - this.indicesWarmer.addListener(new SearchWarmer()); defaultSearchTimeout = DEFAULT_SEARCH_TIMEOUT_SETTING.get(settings); clusterSettings.addSettingsUpdateConsumer(DEFAULT_SEARCH_TIMEOUT_SETTING, this::setDefaultSearchTimeout); @@ -1163,76 +1159,6 @@ public class SearchService extends AbstractLifecycleComponent imp } } - class SearchWarmer implements IndicesWarmer.Listener { - - @Override - public TerminationHandle warmNewReaders(IndexShard indexShard, final Engine.Searcher searcher) { - return internalWarm(indexShard, searcher, false); - } - - @Override - public TerminationHandle warmTopReader(IndexShard indexShard, final Engine.Searcher searcher) { - return internalWarm(indexShard, searcher, true); - } - - public TerminationHandle internalWarm(final IndexShard indexShard, final Engine.Searcher searcher, final boolean top) { - IndexWarmersMetaData custom = indexShard.getIndexSettings().getIndexMetaData().custom(IndexWarmersMetaData.TYPE); - if (custom == null) { - return TerminationHandle.NO_WAIT; - } - final Executor executor = indicesWarmer.getExecutor(); - final CountDownLatch latch = new CountDownLatch(custom.entries().size()); - for (final IndexWarmersMetaData.Entry entry : custom.entries()) { - executor.execute(() -> { - SearchContext context = null; - try { - long now = System.nanoTime(); - final IndexService indexService = indicesService.indexServiceSafe(indexShard.shardId().index().name()); - QueryParseContext queryParseContext = new QueryParseContext(indicesService.getIndicesQueryRegistry()); - queryParseContext.parseFieldMatcher(indexService.getIndexSettings().getParseFieldMatcher()); - ShardSearchRequest request = new ShardSearchLocalRequest(indexShard.shardId(), indexShard.getIndexSettings() - .getNumberOfShards(), - SearchType.QUERY_THEN_FETCH, entry.source().build(queryParseContext), entry.types(), entry.requestCache()); - context = createContext(request, searcher); - // if we use sort, we need to do query to sort on - // it and load relevant field data - // if not, we might as well set size=0 (and cache - // if needed) - if (context.sort() == null) { - context.size(0); - } - boolean canCache = indicesQueryCache.canCache(request, context); - // early terminate when we can cache, since we - // can only do proper caching on top level searcher - // also, if we can't cache, and its top, we don't - // need to execute it, since we already did when its - // not top - if (canCache != top) { - return; - } - loadOrExecuteQueryPhase(request, context, queryPhase); - long took = System.nanoTime() - now; - if (indexShard.warmerService().logger().isTraceEnabled()) { - indexShard.warmerService().logger().trace("warmed [{}], took [{}]", entry.name(), TimeValue.timeValueNanos(took)); - } - } catch (Throwable t) { - indexShard.warmerService().logger().warn("warmer [{}] failed", t, entry.name()); - } finally { - try { - if (context != null) { - freeContext(context.id()); - cleanContext(context); - } - } finally { - latch.countDown(); - } - } - }); - } - return () -> latch.await(); - } - } - class Reaper implements Runnable { @Override public void run() { diff --git a/core/src/main/java/org/elasticsearch/search/warmer/IndexWarmerMissingException.java b/core/src/main/java/org/elasticsearch/search/warmer/IndexWarmerMissingException.java deleted file mode 100644 index 1253a24544d..00000000000 --- a/core/src/main/java/org/elasticsearch/search/warmer/IndexWarmerMissingException.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.elasticsearch.search.warmer; - -import org.elasticsearch.ElasticsearchException; -import org.elasticsearch.common.io.stream.StreamInput; -import org.elasticsearch.common.io.stream.StreamOutput; -import org.elasticsearch.rest.RestStatus; - -import java.io.IOException; -import java.util.Arrays; - -/** - * - */ -public class IndexWarmerMissingException extends ElasticsearchException { - - private final String[] names; - - public IndexWarmerMissingException(String... names) { - super("index_warmer " + Arrays.toString(names) + " missing"); - this.names = names; - } - - public String[] names() { - return this.names; - } - - - public IndexWarmerMissingException(StreamInput in) throws IOException{ - super(in); - names = in.readStringArray(); - } - - @Override - public RestStatus status() { - return RestStatus.NOT_FOUND; - } - - @Override - public void writeTo(StreamOutput out) throws IOException { - super.writeTo(out); - out.writeStringArray(names); - } -} diff --git a/core/src/main/java/org/elasticsearch/search/warmer/IndexWarmersMetaData.java b/core/src/main/java/org/elasticsearch/search/warmer/IndexWarmersMetaData.java deleted file mode 100644 index 1ce27f97cff..00000000000 --- a/core/src/main/java/org/elasticsearch/search/warmer/IndexWarmersMetaData.java +++ /dev/null @@ -1,354 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.search.warmer; - -import org.elasticsearch.ElasticsearchException; -import org.elasticsearch.action.support.ToXContentToBytes; -import org.elasticsearch.cluster.AbstractDiffable; -import org.elasticsearch.cluster.metadata.IndexMetaData; -import org.elasticsearch.common.Nullable; -import org.elasticsearch.common.Strings; -import org.elasticsearch.common.bytes.BytesArray; -import org.elasticsearch.common.bytes.BytesReference; -import org.elasticsearch.common.io.stream.StreamInput; -import org.elasticsearch.common.io.stream.StreamOutput; -import org.elasticsearch.common.io.stream.Writeable; -import org.elasticsearch.common.xcontent.ToXContent; -import org.elasticsearch.common.xcontent.XContentBuilder; -import org.elasticsearch.common.xcontent.XContentFactory; -import org.elasticsearch.common.xcontent.XContentGenerator; -import org.elasticsearch.common.xcontent.XContentParser; -import org.elasticsearch.common.xcontent.XContentType; -import org.elasticsearch.index.query.QueryParseContext; -import org.elasticsearch.search.builder.SearchSourceBuilder; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -/** - */ -public class IndexWarmersMetaData extends AbstractDiffable implements IndexMetaData.Custom { - - public static final String TYPE = "warmers"; - - public static final IndexWarmersMetaData PROTO = new IndexWarmersMetaData(); - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - IndexWarmersMetaData that = (IndexWarmersMetaData) o; - - return entries.equals(that.entries); - - } - - @Override - public int hashCode() { - return entries.hashCode(); - } - - public static class Entry { - private final String name; - private final String[] types; - private final SearchSource source; - private final Boolean requestCache; - - public Entry(String name, String[] types, Boolean requestCache, SearchSource source) { - this.name = name; - this.types = types == null ? Strings.EMPTY_ARRAY : types; - this.source = source; - this.requestCache = requestCache; - } - - public String name() { - return this.name; - } - - public String[] types() { - return this.types; - } - - @Nullable - public SearchSource source() { - return this.source; - } - - @Nullable - public Boolean requestCache() { - return this.requestCache; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Entry entry = (Entry) o; - - if (!name.equals(entry.name)) return false; - if (!Arrays.equals(types, entry.types)) return false; - if (!source.equals(entry.source)) return false; - return Objects.equals(requestCache, entry.requestCache); - - } - - @Override - public int hashCode() { - int result = name.hashCode(); - result = 31 * result + Arrays.hashCode(types); - result = 31 * result + source.hashCode(); - result = 31 * result + (requestCache != null ? requestCache.hashCode() : 0); - return result; - } - } - - private final List entries; - - - public IndexWarmersMetaData(Entry... entries) { - this.entries = Arrays.asList(entries); - } - - public List entries() { - return this.entries; - } - - @Override - public String type() { - return TYPE; - } - - @Override - public IndexWarmersMetaData readFrom(StreamInput in) throws IOException { - Entry[] entries = new Entry[in.readVInt()]; - for (int i = 0; i < entries.length; i++) { - String name = in.readString(); - String[] types = in.readStringArray(); - SearchSource source = null; - if (in.readBoolean()) { - source = new SearchSource(in); - } - Boolean queryCache; - queryCache = in.readOptionalBoolean(); - entries[i] = new Entry(name, types, queryCache, source); - } - return new IndexWarmersMetaData(entries); - } - - @Override - public void writeTo(StreamOutput out) throws IOException { - out.writeVInt(entries().size()); - for (Entry entry : entries()) { - out.writeString(entry.name()); - out.writeStringArray(entry.types()); - if (entry.source() == null) { - out.writeBoolean(false); - } else { - out.writeBoolean(true); - entry.source.writeTo(out); - } - out.writeOptionalBoolean(entry.requestCache()); - } - } - - @Override - public IndexWarmersMetaData fromMap(Map map) throws IOException { - // if it starts with the type, remove it - if (map.size() == 1 && map.containsKey(TYPE)) { - map = (Map) map.values().iterator().next(); - } - XContentBuilder builder = XContentFactory.smileBuilder().map(map); - try (XContentParser parser = XContentFactory.xContent(XContentType.SMILE).createParser(builder.bytes())) { - // move to START_OBJECT - parser.nextToken(); - return fromXContent(parser); - } - } - - @Override - public IndexWarmersMetaData fromXContent(XContentParser parser) throws IOException { - // we get here after we are at warmers token - String currentFieldName = null; - XContentParser.Token token; - List entries = new ArrayList<>(); - while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) { - if (token == XContentParser.Token.FIELD_NAME) { - currentFieldName = parser.currentName(); - } else if (token == XContentParser.Token.START_OBJECT) { - String name = currentFieldName; - List types = new ArrayList<>(2); - SearchSource source = null; - Boolean queryCache = null; - while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) { - if (token == XContentParser.Token.FIELD_NAME) { - currentFieldName = parser.currentName(); - } else if (token == XContentParser.Token.START_ARRAY) { - if ("types".equals(currentFieldName)) { - while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) { - types.add(parser.text()); - } - } - } else if (token == XContentParser.Token.START_OBJECT) { - if ("source".equals(currentFieldName)) { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - try (XContentGenerator generator = XContentType.JSON.xContent().createGenerator(out)) { - generator.copyCurrentStructure(parser); - } - source = new SearchSource(new BytesArray(out.toByteArray())); - } - } else if (token == XContentParser.Token.VALUE_EMBEDDED_OBJECT) { - if ("source".equals(currentFieldName)) { - source = new SearchSource(new BytesArray(parser.binaryValue())); - } - } else if (token.isValue()) { - if ("requestCache".equals(currentFieldName) || "request_cache".equals(currentFieldName)) { - queryCache = parser.booleanValue(); - } - } - } - entries.add(new Entry(name, types.size() == 0 ? Strings.EMPTY_ARRAY : types.toArray(new String[types.size()]), queryCache, source)); - } - } - return new IndexWarmersMetaData(entries.toArray(new Entry[entries.size()])); - } - - @Override - public XContentBuilder toXContent(XContentBuilder builder, ToXContent.Params params) throws IOException { - //No need, IndexMetaData already writes it - //builder.startObject(TYPE, XContentBuilder.FieldCaseConversion.NONE); - for (Entry entry : entries()) { - toXContent(entry, builder, params); - } - //No need, IndexMetaData already writes it - //builder.endObject(); - return builder; - } - - public static void toXContent(Entry entry, XContentBuilder builder, ToXContent.Params params) throws IOException { - builder.startObject(entry.name(), XContentBuilder.FieldCaseConversion.NONE); - builder.field("types", entry.types()); - if (entry.requestCache() != null) { - builder.field("requestCache", entry.requestCache()); - } - builder.field("source", entry.source()); - builder.endObject(); - } - - @Override - public IndexMetaData.Custom mergeWith(IndexMetaData.Custom other) { - IndexWarmersMetaData second = (IndexWarmersMetaData) other; - List entries = new ArrayList<>(); - entries.addAll(entries()); - for (Entry secondEntry : second.entries()) { - boolean found = false; - for (Entry firstEntry : entries()) { - if (firstEntry.name().equals(secondEntry.name())) { - found = true; - break; - } - } - if (!found) { - entries.add(secondEntry); - } - } - return new IndexWarmersMetaData(entries.toArray(new Entry[entries.size()])); - } - - public static class SearchSource extends ToXContentToBytes implements Writeable { - private final BytesReference binary; - private SearchSourceBuilder cached; - - public SearchSource(BytesReference bytesArray) { - if (bytesArray == null) { - throw new IllegalArgumentException("bytesArray must not be null"); - } - this.binary = bytesArray; - } - - public SearchSource(StreamInput input) throws IOException { - this(input.readBytesReference()); - } - - public SearchSource(SearchSourceBuilder source) { - try (XContentBuilder builder = XContentBuilder.builder(XContentType.JSON.xContent())) { - source.toXContent(builder, ToXContent.EMPTY_PARAMS); - binary = builder.bytes(); - } catch (IOException ex) { - throw new ElasticsearchException("failed to generate XContent", ex); - } - } - - public SearchSourceBuilder build(QueryParseContext ctx) throws IOException { - if (cached == null) { - try (XContentParser parser = XContentFactory.xContent(binary).createParser(binary)) { - ctx.reset(parser); - cached = SearchSourceBuilder.parseSearchSource(parser, ctx); - } - } - return cached; - } - - - @Override - public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { - if (binary == null) { - cached.toXContent(builder, params); - } else { - try (XContentParser parser = XContentFactory.xContent(binary).createParser(binary)) { - builder.copyCurrentStructure(parser); - } - } - return builder; - } - - @Override - public void writeTo(StreamOutput out) throws IOException { - out.writeBytesReference(binary); - } - - @Override - public SearchSource readFrom(StreamInput in) throws IOException { - return new SearchSource(in); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - SearchSource that = (SearchSource) o; - - return binary.equals(that.binary); - - } - - @Override - public int hashCode() { - return binary.hashCode(); - } - } -} diff --git a/core/src/main/java/org/elasticsearch/threadpool/ThreadPool.java b/core/src/main/java/org/elasticsearch/threadpool/ThreadPool.java index c9055f34258..c0d63abe220 100644 --- a/core/src/main/java/org/elasticsearch/threadpool/ThreadPool.java +++ b/core/src/main/java/org/elasticsearch/threadpool/ThreadPool.java @@ -363,7 +363,7 @@ public class ThreadPool extends AbstractComponent { if (!Names.SAME.equals(name)) { command = new ThreadedRunnable(command, executor(name)); } - return scheduler.schedule(command, delay.millis(), TimeUnit.MILLISECONDS); + return scheduler.schedule(new LoggingRunnable(command), delay.millis(), TimeUnit.MILLISECONDS); } public void shutdown() { @@ -639,6 +639,7 @@ public class ThreadPool extends AbstractComponent { runnable.run(); } catch (Throwable t) { logger.warn("failed to run {}", t, runnable.toString()); + throw t; } } diff --git a/core/src/test/java/org/elasticsearch/ExceptionSerializationTests.java b/core/src/test/java/org/elasticsearch/ExceptionSerializationTests.java index 975de9e8f0e..db7b5df6662 100644 --- a/core/src/test/java/org/elasticsearch/ExceptionSerializationTests.java +++ b/core/src/test/java/org/elasticsearch/ExceptionSerializationTests.java @@ -71,7 +71,6 @@ import org.elasticsearch.search.SearchException; import org.elasticsearch.search.SearchParseException; import org.elasticsearch.search.SearchShardTarget; import org.elasticsearch.search.internal.SearchContext; -import org.elasticsearch.search.warmer.IndexWarmerMissingException; import org.elasticsearch.snapshots.SnapshotException; import org.elasticsearch.test.ESTestCase; import org.elasticsearch.test.TestSearchContext; @@ -494,12 +493,6 @@ public class ExceptionSerializationTests extends ESTestCase { assertEquals("[_na] msg", ex.getMessage()); } - public void testIndexWarmerMissingException() throws IOException { - IndexWarmerMissingException ex = serialize(new IndexWarmerMissingException("w1", "w2")); - assertEquals("index_warmer [w1, w2] missing", ex.getMessage()); - assertArrayEquals(new String[]{"w1", "w2"}, ex.names()); - } - public void testIndexTemplateMissingException() throws IOException { IndexTemplateMissingException ex = serialize(new IndexTemplateMissingException("name")); assertEquals("index_template [name] missing", ex.getMessage()); @@ -735,7 +728,6 @@ public class ExceptionSerializationTests extends ESTestCase { ids.put(90, org.elasticsearch.index.engine.RefreshFailedEngineException.class); ids.put(91, org.elasticsearch.search.aggregations.AggregationInitializationException.class); ids.put(92, org.elasticsearch.indices.recovery.DelayRecoveryException.class); - ids.put(93, org.elasticsearch.search.warmer.IndexWarmerMissingException.class); ids.put(94, org.elasticsearch.client.transport.NoNodeAvailableException.class); ids.put(95, null); ids.put(96, org.elasticsearch.snapshots.InvalidSnapshotNameException.class); diff --git a/core/src/test/java/org/elasticsearch/action/admin/indices/get/GetIndexIT.java b/core/src/test/java/org/elasticsearch/action/admin/indices/get/GetIndexIT.java index e878a3df45c..74416742d12 100644 --- a/core/src/test/java/org/elasticsearch/action/admin/indices/get/GetIndexIT.java +++ b/core/src/test/java/org/elasticsearch/action/admin/indices/get/GetIndexIT.java @@ -26,7 +26,6 @@ import org.elasticsearch.cluster.metadata.MappingMetaData; import org.elasticsearch.common.collect.ImmutableOpenMap; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.index.IndexNotFoundException; -import org.elasticsearch.search.warmer.IndexWarmersMetaData.Entry; import org.elasticsearch.test.ESIntegTestCase; import java.util.ArrayList; @@ -52,7 +51,6 @@ public class GetIndexIT extends ESIntegTestCase { assertAcked(prepareCreate("idx").addAlias(new Alias("alias_idx")).addMapping("type1", "{\"type1\":{}}") .setSettings(Settings.builder().put("number_of_shards", 1)).get()); ensureSearchable("idx"); - assertAcked(client().admin().indices().preparePutWarmer("warmer1").setSearchRequest(client().prepareSearch("idx")).get()); createIndex("empty_idx"); ensureSearchable("idx", "empty_idx"); } @@ -66,7 +64,6 @@ public class GetIndexIT extends ESIntegTestCase { assertAliases(response, "idx"); assertMappings(response, "idx"); assertSettings(response, "idx"); - assertWarmers(response, "idx"); } public void testSimpleUnknownIndex() { @@ -87,7 +84,6 @@ public class GetIndexIT extends ESIntegTestCase { assertEmptyAliases(response); assertEmptyOrOnlyDefaultMappings(response, "empty_idx"); assertNonEmptySettings(response, "empty_idx"); - assertEmptyWarmers(response); } public void testSimpleMapping() { @@ -100,7 +96,6 @@ public class GetIndexIT extends ESIntegTestCase { assertMappings(response, "idx"); assertEmptyAliases(response); assertEmptySettings(response); - assertEmptyWarmers(response); } public void testSimpleAlias() { @@ -113,7 +108,6 @@ public class GetIndexIT extends ESIntegTestCase { assertAliases(response, "idx"); assertEmptyMappings(response); assertEmptySettings(response); - assertEmptyWarmers(response); } public void testSimpleSettings() { @@ -126,20 +120,6 @@ public class GetIndexIT extends ESIntegTestCase { assertSettings(response, "idx"); assertEmptyAliases(response); assertEmptyMappings(response); - assertEmptyWarmers(response); - } - - public void testSimpleWarmer() { - GetIndexResponse response = runWithRandomFeatureMethod(client().admin().indices().prepareGetIndex().addIndices("idx"), - Feature.WARMERS); - String[] indices = response.indices(); - assertThat(indices, notNullValue()); - assertThat(indices.length, equalTo(1)); - assertThat(indices[0], equalTo("idx")); - assertWarmers(response, "idx"); - assertEmptyAliases(response); - assertEmptyMappings(response); - assertEmptySettings(response); } public void testSimpleMixedFeatures() { @@ -169,11 +149,6 @@ public class GetIndexIT extends ESIntegTestCase { } else { assertEmptySettings(response); } - if (features.contains(Feature.WARMERS)) { - assertWarmers(response, "idx"); - } else { - assertEmptyWarmers(response); - } } public void testEmptyMixedFeatures() { @@ -199,7 +174,6 @@ public class GetIndexIT extends ESIntegTestCase { } else { assertEmptySettings(response); } - assertEmptyWarmers(response); } public void testGetIndexWithBlocks() { @@ -235,18 +209,6 @@ public class GetIndexIT extends ESIntegTestCase { } } - private void assertWarmers(GetIndexResponse response, String indexName) { - ImmutableOpenMap> warmers = response.warmers(); - assertThat(warmers, notNullValue()); - assertThat(warmers.size(), equalTo(1)); - List indexWarmers = warmers.get(indexName); - assertThat(indexWarmers, notNullValue()); - assertThat(indexWarmers.size(), equalTo(1)); - Entry warmer = indexWarmers.get(0); - assertThat(warmer, notNullValue()); - assertThat(warmer.name(), equalTo("warmer1")); - } - private void assertSettings(GetIndexResponse response, String indexName) { ImmutableOpenMap settings = response.settings(); assertThat(settings, notNullValue()); @@ -305,11 +267,6 @@ public class GetIndexIT extends ESIntegTestCase { assertThat(alias.alias(), equalTo("alias_idx")); } - private void assertEmptyWarmers(GetIndexResponse response) { - assertThat(response.warmers(), notNullValue()); - assertThat(response.warmers().isEmpty(), equalTo(true)); - } - private void assertEmptySettings(GetIndexResponse response) { assertThat(response.settings(), notNullValue()); assertThat(response.settings().isEmpty(), equalTo(true)); diff --git a/core/src/test/java/org/elasticsearch/action/admin/indices/warmer/put/PutWarmerRequestTests.java b/core/src/test/java/org/elasticsearch/action/admin/indices/warmer/put/PutWarmerRequestTests.java deleted file mode 100644 index f20564e1712..00000000000 --- a/core/src/test/java/org/elasticsearch/action/admin/indices/warmer/put/PutWarmerRequestTests.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.elasticsearch.action.admin.indices.warmer.put; - -import org.elasticsearch.action.ActionRequestValidationException; -import org.elasticsearch.test.ESTestCase; - -import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.Matchers.hasSize; - -public class PutWarmerRequestTests extends ESTestCase { - // issue 4196 - public void testThatValidationWithoutSpecifyingSearchRequestFails() { - PutWarmerRequest putWarmerRequest = new PutWarmerRequest("foo"); - ActionRequestValidationException validationException = putWarmerRequest.validate(); - assertThat(validationException.validationErrors(), hasSize(1)); - assertThat(validationException.getMessage(), containsString("search request is missing")); - } -} diff --git a/core/src/test/java/org/elasticsearch/action/support/replication/TransportReplicationActionTests.java b/core/src/test/java/org/elasticsearch/action/support/replication/TransportReplicationActionTests.java index fdcf4b07245..6ccf48c7930 100644 --- a/core/src/test/java/org/elasticsearch/action/support/replication/TransportReplicationActionTests.java +++ b/core/src/test/java/org/elasticsearch/action/support/replication/TransportReplicationActionTests.java @@ -65,6 +65,7 @@ import org.junit.BeforeClass; import java.io.IOException; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.concurrent.CountDownLatch; @@ -75,9 +76,13 @@ import java.util.concurrent.atomic.AtomicInteger; import static org.elasticsearch.action.support.replication.ClusterStateCreationUtils.state; import static org.elasticsearch.action.support.replication.ClusterStateCreationUtils.stateWithStartedPrimary; +import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.Matchers.arrayWithSize; +import static org.hamcrest.Matchers.empty; import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.instanceOf; +import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.nullValue; @@ -486,7 +491,39 @@ public class TransportReplicationActionTests extends ESTestCase { replicationPhase.run(); final CapturingTransport.CapturedRequest[] capturedRequests = transport.capturedRequests(); transport.clear(); - assertThat(capturedRequests.length, equalTo(assignedReplicas)); + + HashMap nodesSentTo = new HashMap<>(); + boolean executeOnReplica = + action.shouldExecuteReplication(clusterService.state().getMetaData().index(shardId.getIndex()).getSettings()); + for (CapturingTransport.CapturedRequest capturedRequest : capturedRequests) { + // no duplicate requests + Request replicationRequest = (Request) capturedRequest.request; + assertNull(nodesSentTo.put(capturedRequest.node.getId(), replicationRequest)); + // the request is hitting the correct shard + assertEquals(request.shardId, replicationRequest.shardId); + } + + // no request was sent to the local node + assertThat(nodesSentTo.keySet(), not(hasItem(clusterService.state().getNodes().localNodeId()))); + + // requests were sent to the correct shard copies + for (ShardRouting shard : clusterService.state().getRoutingTable().shardRoutingTable(shardId.getIndex(), shardId.id())) { + if (shard.primary() == false && executeOnReplica == false) { + continue; + } + if (shard.unassigned()) { + continue; + } + if (shard.primary() == false) { + nodesSentTo.remove(shard.currentNodeId()); + } + if (shard.relocating()) { + nodesSentTo.remove(shard.relocatingNodeId()); + } + } + + assertThat(nodesSentTo.entrySet(), is(empty())); + if (assignedReplicas > 0) { assertThat("listener is done, but there are outstanding replicas", listener.isDone(), equalTo(false)); } @@ -511,6 +548,12 @@ public class TransportReplicationActionTests extends ESTestCase { transport.clear(); assertEquals(1, shardFailedRequests.length); CapturingTransport.CapturedRequest shardFailedRequest = shardFailedRequests[0]; + // get the shard the request was sent to + ShardRouting routing = clusterService.state().getRoutingNodes().node(capturedRequest.node.id()).get(request.shardId.id()); + // and the shard that was requested to be failed + ShardStateAction.ShardRoutingEntry shardRoutingEntry = (ShardStateAction.ShardRoutingEntry)shardFailedRequest.request; + // the shard the request was sent to and the shard to be failed should be the same + assertEquals(shardRoutingEntry.getShardRouting(), routing); failures.add(shardFailedRequest); transport.handleResponse(shardFailedRequest.requestId, TransportResponse.Empty.INSTANCE); } diff --git a/core/src/test/java/org/elasticsearch/bwcompat/GetIndexBackwardsCompatibilityIT.java b/core/src/test/java/org/elasticsearch/bwcompat/GetIndexBackwardsCompatibilityIT.java index 9a87c888747..9abe6bfbf44 100644 --- a/core/src/test/java/org/elasticsearch/bwcompat/GetIndexBackwardsCompatibilityIT.java +++ b/core/src/test/java/org/elasticsearch/bwcompat/GetIndexBackwardsCompatibilityIT.java @@ -28,7 +28,6 @@ import org.elasticsearch.cluster.metadata.AliasMetaData; import org.elasticsearch.cluster.metadata.MappingMetaData; import org.elasticsearch.common.collect.ImmutableOpenMap; import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.search.warmer.IndexWarmersMetaData.Entry; import org.elasticsearch.test.ESBackcompatTestCase; import java.util.List; @@ -88,21 +87,4 @@ public class GetIndexBackwardsCompatibilityIT extends ESBackcompatTestCase { assertThat(settings.get("index.number_of_shards"), equalTo("1")); } - public void testGetWarmers() throws Exception { - createIndex("test"); - ensureSearchable("test"); - assertAcked(client().admin().indices().preparePutWarmer("warmer1").setSearchRequest(client().prepareSearch("test")).get()); - ensureSearchable("test"); - GetIndexResponse getIndexResponse = client().admin().indices().prepareGetIndex().addIndices("test").addFeatures(Feature.WARMERS) - .execute().actionGet(); - ImmutableOpenMap> warmersMap = getIndexResponse.warmers(); - assertThat(warmersMap, notNullValue()); - assertThat(warmersMap.size(), equalTo(1)); - List warmersList = warmersMap.get("test"); - assertThat(warmersList, notNullValue()); - assertThat(warmersList.size(), equalTo(1)); - Entry warmer = warmersList.get(0); - assertThat(warmer, notNullValue()); - assertThat(warmer.name(), equalTo("warmer1")); - } } diff --git a/core/src/test/java/org/elasticsearch/bwcompat/OldIndexBackwardsCompatibilityIT.java b/core/src/test/java/org/elasticsearch/bwcompat/OldIndexBackwardsCompatibilityIT.java index 7011b4092e4..667716937da 100644 --- a/core/src/test/java/org/elasticsearch/bwcompat/OldIndexBackwardsCompatibilityIT.java +++ b/core/src/test/java/org/elasticsearch/bwcompat/OldIndexBackwardsCompatibilityIT.java @@ -32,20 +32,25 @@ import org.elasticsearch.action.admin.indices.upgrade.UpgradeIT; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.cluster.metadata.IndexMetaData; +import org.elasticsearch.cluster.metadata.MetaData; import org.elasticsearch.cluster.routing.allocation.decider.ThrottlingAllocationDecider; import org.elasticsearch.common.io.FileSystemUtils; import org.elasticsearch.common.logging.ESLogger; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.util.MultiDataPathUpgrader; +import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentHelper; +import org.elasticsearch.common.xcontent.XContentParser; +import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.env.NodeEnvironment; +import org.elasticsearch.gateway.MetaDataStateFormat; import org.elasticsearch.index.engine.EngineConfig; import org.elasticsearch.index.engine.Segment; import org.elasticsearch.index.mapper.string.StringFieldMapperPositionIncrementGapTests; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.shard.MergePolicyConfig; -import org.elasticsearch.indices.recovery.RecoverySettings; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.histogram.Histogram; @@ -423,4 +428,62 @@ public class OldIndexBackwardsCompatibilityIT extends ESIntegTestCase { UpgradeIT.assertUpgraded(client(), indexName); } + private Path getNodeDir(String indexFile) throws IOException { + Path unzipDir = createTempDir(); + Path unzipDataDir = unzipDir.resolve("data"); + + // decompress the index + Path backwardsIndex = getBwcIndicesPath().resolve(indexFile); + try (InputStream stream = Files.newInputStream(backwardsIndex)) { + TestUtil.unzip(stream, unzipDir); + } + + // check it is unique + assertTrue(Files.exists(unzipDataDir)); + Path[] list = FileSystemUtils.files(unzipDataDir); + if (list.length != 1) { + throw new IllegalStateException("Backwards index must contain exactly one cluster"); + } + + // the bwc scripts packs the indices under this path + return list[0].resolve("nodes/0/"); + } + + public void testOldClusterStates() throws Exception { + // dangling indices do not load the global state, only the per-index states + // so we make sure we can read them separately + MetaDataStateFormat globalFormat = new MetaDataStateFormat(XContentType.JSON, "global-") { + + @Override + public void toXContent(XContentBuilder builder, MetaData state) throws IOException { + throw new UnsupportedOperationException(); + } + + @Override + public MetaData fromXContent(XContentParser parser) throws IOException { + return MetaData.Builder.fromXContent(parser); + } + }; + MetaDataStateFormat indexFormat = new MetaDataStateFormat(XContentType.JSON, "state-") { + + @Override + public void toXContent(XContentBuilder builder, IndexMetaData state) throws IOException { + throw new UnsupportedOperationException(); + } + + @Override + public IndexMetaData fromXContent(XContentParser parser) throws IOException { + return IndexMetaData.Builder.fromXContent(parser); + } + }; + Collections.shuffle(indexes, random()); + for (String indexFile : indexes) { + String indexName = indexFile.replace(".zip", "").toLowerCase(Locale.ROOT).replace("unsupported-", "index-"); + Path nodeDir = getNodeDir(indexFile); + logger.info("Parsing cluster state files from index [" + indexName + "]"); + assertNotNull(globalFormat.loadLatestState(logger, nodeDir)); // no exception + Path indexDir = nodeDir.resolve("indices").resolve(indexName); + assertNotNull(indexFormat.loadLatestState(logger, indexDir)); // no exception + } + } } diff --git a/core/src/test/java/org/elasticsearch/cluster/ClusterServiceIT.java b/core/src/test/java/org/elasticsearch/cluster/ClusterServiceIT.java index 6e7e338d8b9..2d781c866de 100644 --- a/core/src/test/java/org/elasticsearch/cluster/ClusterServiceIT.java +++ b/core/src/test/java/org/elasticsearch/cluster/ClusterServiceIT.java @@ -27,6 +27,7 @@ import org.elasticsearch.cluster.service.InternalClusterService; import org.elasticsearch.cluster.service.PendingClusterTask; import org.elasticsearch.common.Nullable; import org.elasticsearch.common.Priority; +import org.elasticsearch.common.collect.Tuple; import org.elasticsearch.common.component.AbstractLifecycleComponent; import org.elasticsearch.common.component.LifecycleComponent; import org.elasticsearch.common.inject.Inject; @@ -51,9 +52,12 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.CyclicBarrier; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; @@ -61,6 +65,7 @@ import java.util.concurrent.atomic.AtomicInteger; import static org.elasticsearch.common.settings.Settings.settingsBuilder; import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked; +import static org.hamcrest.Matchers.empty; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.greaterThan; import static org.hamcrest.Matchers.greaterThanOrEqualTo; @@ -796,7 +801,92 @@ public class ClusterServiceIT extends ESIntegTestCase { assertTrue(published.get()); } - public void testClusterStateBatchedUpdates() throws InterruptedException { + // test that for a single thread, tasks are executed in the order + // that they are submitted + public void testClusterStateUpdateTasksAreExecutedInOrder() throws BrokenBarrierException, InterruptedException { + Settings settings = settingsBuilder() + .put("discovery.type", "local") + .build(); + internalCluster().startNode(settings); + ClusterService clusterService = internalCluster().getInstance(ClusterService.class); + + class TaskExecutor implements ClusterStateTaskExecutor { + List tasks = new ArrayList<>(); + + @Override + public BatchResult execute(ClusterState currentState, List tasks) throws Exception { + this.tasks.addAll(tasks); + return BatchResult.builder().successes(tasks).build(ClusterState.builder(currentState).build()); + } + + @Override + public boolean runOnlyOnMaster() { + return false; + } + } + + int numberOfThreads = randomIntBetween(2, 8); + TaskExecutor[] executors = new TaskExecutor[numberOfThreads]; + for (int i = 0; i < numberOfThreads; i++) { + executors[i] = new TaskExecutor(); + } + + int tasksSubmittedPerThread = randomIntBetween(2, 1024); + + CopyOnWriteArrayList> failures = new CopyOnWriteArrayList<>(); + CountDownLatch updateLatch = new CountDownLatch(numberOfThreads * tasksSubmittedPerThread); + + ClusterStateTaskListener listener = new ClusterStateTaskListener() { + @Override + public void onFailure(String source, Throwable t) { + logger.error("unexpected failure: [{}]", t, source); + failures.add(new Tuple<>(source, t)); + updateLatch.countDown(); + } + + @Override + public void clusterStateProcessed(String source, ClusterState oldState, ClusterState newState) { + updateLatch.countDown(); + } + }; + + CyclicBarrier barrier = new CyclicBarrier(1 + numberOfThreads); + + for (int i = 0; i < numberOfThreads; i++) { + final int index = i; + Thread thread = new Thread(() -> { + try { + barrier.await(); + for (int j = 0; j < tasksSubmittedPerThread; j++) { + clusterService.submitStateUpdateTask("[" + index + "][" + j + "]", j, ClusterStateTaskConfig.build(randomFrom(Priority.values())), executors[index], listener); + } + barrier.await(); + } catch (InterruptedException | BrokenBarrierException e) { + throw new AssertionError(e); + } + }); + thread.start(); + } + + // wait for all threads to be ready + barrier.await(); + // wait for all threads to finish + barrier.await(); + + updateLatch.await(); + + assertThat(failures, empty()); + + for (int i = 0; i < numberOfThreads; i++) { + assertEquals(tasksSubmittedPerThread, executors[i].tasks.size()); + for (int j = 0; j < tasksSubmittedPerThread; j++) { + assertNotNull(executors[i].tasks.get(j)); + assertEquals("cluster state update task executed out of order", j, (int)executors[i].tasks.get(j)); + } + } + } + + public void testClusterStateBatchedUpdates() throws BrokenBarrierException, InterruptedException { Settings settings = settingsBuilder() .put("discovery.type", "local") .build(); @@ -884,19 +974,12 @@ public class ClusterServiceIT extends ESIntegTestCase { counts.merge(executor, 1, (previous, one) -> previous + one); } - CountDownLatch startGate = new CountDownLatch(1); - CountDownLatch endGate = new CountDownLatch(numberOfThreads); - AtomicBoolean interrupted = new AtomicBoolean(); + CyclicBarrier barrier = new CyclicBarrier(1 + numberOfThreads); for (int i = 0; i < numberOfThreads; i++) { final int index = i; Thread thread = new Thread(() -> { try { - try { - startGate.await(); - } catch (InterruptedException e) { - interrupted.set(true); - return; - } + barrier.await(); for (int j = 0; j < tasksSubmittedPerThread; j++) { ClusterStateTaskExecutor executor = assignments.get(index * tasksSubmittedPerThread + j); clusterService.submitStateUpdateTask( @@ -906,16 +989,18 @@ public class ClusterServiceIT extends ESIntegTestCase { executor, listener); } - } finally { - endGate.countDown(); + barrier.await(); + } catch (BrokenBarrierException | InterruptedException e) { + throw new AssertionError(e); } }); thread.start(); } - startGate.countDown(); - endGate.await(); - assertFalse(interrupted.get()); + // wait for all threads to be ready + barrier.await(); + // wait for all threads to finish + barrier.await(); // wait until all the cluster state updates have been processed updateLatch.await(); diff --git a/core/src/test/java/org/elasticsearch/cluster/ClusterStateDiffIT.java b/core/src/test/java/org/elasticsearch/cluster/ClusterStateDiffIT.java index faa0f15d8f2..8b79b78397b 100644 --- a/core/src/test/java/org/elasticsearch/cluster/ClusterStateDiffIT.java +++ b/core/src/test/java/org/elasticsearch/cluster/ClusterStateDiffIT.java @@ -39,7 +39,6 @@ import org.elasticsearch.cluster.routing.ShardRoutingState; import org.elasticsearch.cluster.routing.TestShardRouting; import org.elasticsearch.cluster.routing.UnassignedInfo; import org.elasticsearch.common.Strings; -import org.elasticsearch.common.bytes.BytesArray; import org.elasticsearch.common.collect.ImmutableOpenMap; import org.elasticsearch.common.io.stream.BytesStreamOutput; import org.elasticsearch.common.io.stream.StreamInput; @@ -49,7 +48,6 @@ import org.elasticsearch.discovery.DiscoverySettings; import org.elasticsearch.gateway.GatewayService; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.shard.ShardId; -import org.elasticsearch.search.warmer.IndexWarmersMetaData; import org.elasticsearch.test.ESIntegTestCase; import java.util.Collections; @@ -492,9 +490,6 @@ public class ClusterStateDiffIT extends ESIntegTestCase { builder.settings(settingsBuilder); builder.numberOfShards(randomIntBetween(1, 10)).numberOfReplicas(randomInt(10)); int aliasCount = randomInt(10); - if (randomBoolean()) { - builder.putCustom(IndexWarmersMetaData.TYPE, randomWarmers()); - } for (int i = 0; i < aliasCount; i++) { builder.putAlias(randomAlias()); } @@ -504,7 +499,7 @@ public class ClusterStateDiffIT extends ESIntegTestCase { @Override public IndexMetaData randomChange(IndexMetaData part) { IndexMetaData.Builder builder = IndexMetaData.builder(part); - switch (randomIntBetween(0, 3)) { + switch (randomIntBetween(0, 2)) { case 0: builder.settings(Settings.builder().put(part.getSettings()).put(randomSettings(Settings.EMPTY))); break; @@ -518,9 +513,6 @@ public class ClusterStateDiffIT extends ESIntegTestCase { case 2: builder.settings(Settings.builder().put(part.getSettings()).put(IndexMetaData.SETTING_INDEX_UUID, Strings.randomBase64UUID())); break; - case 3: - builder.putCustom(IndexWarmersMetaData.TYPE, randomWarmers()); - break; default: throw new IllegalArgumentException("Shouldn't be here"); } @@ -529,23 +521,6 @@ public class ClusterStateDiffIT extends ESIntegTestCase { }); } - /** - * Generates a random warmer - */ - private IndexWarmersMetaData randomWarmers() { - if (randomBoolean()) { - return new IndexWarmersMetaData( - new IndexWarmersMetaData.Entry( - randomName("warm"), - new String[]{randomName("type")}, - randomBoolean(), - new IndexWarmersMetaData.SearchSource(new BytesArray(randomAsciiOfLength(1000)))) - ); - } else { - return new IndexWarmersMetaData(); - } - } - /** * Randomly adds, deletes or updates index templates in the metadata */ @@ -576,9 +551,6 @@ public class ClusterStateDiffIT extends ESIntegTestCase { for (int i = 0; i < aliasCount; i++) { builder.putAlias(randomAlias()); } - if (randomBoolean()) { - builder.putCustom(IndexWarmersMetaData.TYPE, randomWarmers()); - } return builder.build(); } diff --git a/core/src/test/java/org/elasticsearch/cluster/ack/AckIT.java b/core/src/test/java/org/elasticsearch/cluster/ack/AckIT.java index 13a5cae6ca3..9f646d0df58 100644 --- a/core/src/test/java/org/elasticsearch/cluster/ack/AckIT.java +++ b/core/src/test/java/org/elasticsearch/cluster/ack/AckIT.java @@ -19,7 +19,6 @@ package org.elasticsearch.cluster.ack; -import com.carrotsearch.hppc.cursors.ObjectObjectCursor; import org.elasticsearch.action.admin.cluster.reroute.ClusterRerouteResponse; import org.elasticsearch.action.admin.cluster.state.ClusterStateResponse; import org.elasticsearch.action.admin.indices.alias.IndicesAliasesResponse; @@ -27,9 +26,6 @@ import org.elasticsearch.action.admin.indices.close.CloseIndexResponse; import org.elasticsearch.action.admin.indices.create.CreateIndexResponse; import org.elasticsearch.action.admin.indices.mapping.put.PutMappingResponse; import org.elasticsearch.action.admin.indices.settings.put.UpdateSettingsResponse; -import org.elasticsearch.action.admin.indices.warmer.delete.DeleteWarmerResponse; -import org.elasticsearch.action.admin.indices.warmer.get.GetWarmersResponse; -import org.elasticsearch.action.admin.indices.warmer.put.PutWarmerResponse; import org.elasticsearch.client.Client; import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.metadata.AliasMetaData; @@ -42,12 +38,9 @@ import org.elasticsearch.cluster.routing.ShardRoutingState; import org.elasticsearch.cluster.routing.allocation.command.MoveAllocationCommand; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.discovery.DiscoverySettings; -import org.elasticsearch.index.query.QueryBuilders; -import org.elasticsearch.search.warmer.IndexWarmersMetaData; import org.elasticsearch.test.ESIntegTestCase; import org.elasticsearch.test.ESIntegTestCase.ClusterScope; -import java.util.List; import java.util.concurrent.TimeUnit; import static org.elasticsearch.cluster.metadata.IndexMetaData.SETTING_NUMBER_OF_REPLICAS; @@ -88,83 +81,6 @@ public class AckIT extends ESIntegTestCase { assertThat(updateSettingsResponse.isAcknowledged(), equalTo(false)); } - public void testPutWarmerAcknowledgement() { - createIndex("test"); - // make sure one shard is started so the search during put warmer will not fail - index("test", "type", "1", "f", 1); - - assertAcked(client().admin().indices().preparePutWarmer("custom_warmer") - .setSearchRequest(client().prepareSearch("test").setTypes("test").setQuery(QueryBuilders.matchAllQuery()))); - - for (Client client : clients()) { - GetWarmersResponse getWarmersResponse = client.admin().indices().prepareGetWarmers().setLocal(true).get(); - assertThat(getWarmersResponse.warmers().size(), equalTo(1)); - ObjectObjectCursor> entry = getWarmersResponse.warmers().iterator().next(); - assertThat(entry.key, equalTo("test")); - assertThat(entry.value.size(), equalTo(1)); - assertThat(entry.value.get(0).name(), equalTo("custom_warmer")); - } - } - - public void testPutWarmerNoAcknowledgement() throws InterruptedException { - createIndex("test"); - // make sure one shard is started so the search during put warmer will not fail - index("test", "type", "1", "f", 1); - - PutWarmerResponse putWarmerResponse = client().admin().indices().preparePutWarmer("custom_warmer").setTimeout("0s") - .setSearchRequest(client().prepareSearch("test").setTypes("test").setQuery(QueryBuilders.matchAllQuery())) - .get(); - assertThat(putWarmerResponse.isAcknowledged(), equalTo(false)); - /* Since we don't wait for the ack here we have to wait until the search request has been executed from the master - * otherwise the test infra might have already deleted the index and the search request fails on all shards causing - * the test to fail too. We simply wait until the the warmer has been installed and also clean it up afterwards.*/ - assertTrue(awaitBusy(() -> { - for (Client client : clients()) { - GetWarmersResponse getWarmersResponse = client.admin().indices().prepareGetWarmers().setLocal(true).get(); - if (getWarmersResponse.warmers().size() != 1) { - return false; - } - } - return true; - })); - assertAcked(client().admin().indices().prepareDeleteWarmer().setIndices("test").setNames("custom_warmer")); - } - - public void testDeleteWarmerAcknowledgement() { - createIndex("test"); - index("test", "type", "1", "f", 1); - - assertAcked(client().admin().indices().preparePutWarmer("custom_warmer") - .setSearchRequest(client().prepareSearch("test").setTypes("test").setQuery(QueryBuilders.matchAllQuery()))); - - assertAcked(client().admin().indices().prepareDeleteWarmer().setIndices("test").setNames("custom_warmer")); - - for (Client client : clients()) { - GetWarmersResponse getWarmersResponse = client.admin().indices().prepareGetWarmers().setLocal(true).get(); - assertThat(getWarmersResponse.warmers().size(), equalTo(0)); - } - } - - public void testDeleteWarmerNoAcknowledgement() throws InterruptedException { - createIndex("test"); - index("test", "type", "1", "f", 1); - - assertAcked(client().admin().indices().preparePutWarmer("custom_warmer") - .setSearchRequest(client().prepareSearch("test").setTypes("test").setQuery(QueryBuilders.matchAllQuery()))); - - DeleteWarmerResponse deleteWarmerResponse = client().admin().indices().prepareDeleteWarmer().setIndices("test").setNames("custom_warmer").setTimeout("0s").get(); - assertFalse(deleteWarmerResponse.isAcknowledged()); - assertTrue(awaitBusy(() -> { - for (Client client : clients()) { - GetWarmersResponse getWarmersResponse = client.admin().indices().prepareGetWarmers().setLocal(true).get(); - if (getWarmersResponse.warmers().size() > 0) { - return false; - } - } - return true; - })); - } - public void testClusterRerouteAcknowledgement() throws InterruptedException { assertAcked(prepareCreate("test").setSettings(Settings.builder() .put(indexSettings()) diff --git a/core/src/test/java/org/elasticsearch/common/cache/CacheTests.java b/core/src/test/java/org/elasticsearch/common/cache/CacheTests.java index 0985bc4b88e..921c66f7acb 100644 --- a/core/src/test/java/org/elasticsearch/common/cache/CacheTests.java +++ b/core/src/test/java/org/elasticsearch/common/cache/CacheTests.java @@ -31,7 +31,10 @@ import java.util.List; import java.util.Map; import java.util.Random; import java.util.Set; +import java.util.concurrent.BrokenBarrierException; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.CyclicBarrier; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -42,6 +45,8 @@ import java.util.concurrent.atomic.AtomicReferenceArray; import java.util.stream.Collectors; import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.Matchers.empty; +import static org.hamcrest.Matchers.is; public class CacheTests extends ESTestCase { private int numberOfEntries; @@ -483,7 +488,7 @@ public class CacheTests extends ESTestCase { return value; }); } catch (ExecutionException e) { - fail(e.getMessage()); + throw new AssertionError(e); } } for (int i = 0; i < numberOfEntries; i++) { @@ -491,25 +496,21 @@ public class CacheTests extends ESTestCase { } } - public void testComputeIfAbsentCallsOnce() throws InterruptedException { + public void testComputeIfAbsentCallsOnce() throws BrokenBarrierException, InterruptedException { int numberOfThreads = randomIntBetween(2, 32); final Cache cache = CacheBuilder.builder().build(); AtomicReferenceArray flags = new AtomicReferenceArray(numberOfEntries); for (int j = 0; j < numberOfEntries; j++) { flags.set(j, false); } - CountDownLatch startGate = new CountDownLatch(1); - CountDownLatch endGate = new CountDownLatch(numberOfThreads); - AtomicBoolean interrupted = new AtomicBoolean(); + + CopyOnWriteArrayList failures = new CopyOnWriteArrayList<>(); + + CyclicBarrier barrier = new CyclicBarrier(1 + numberOfThreads); for (int i = 0; i < numberOfThreads; i++) { Thread thread = new Thread(() -> { try { - try { - startGate.await(); - } catch (InterruptedException e) { - interrupted.set(true); - return; - } + barrier.await(); for (int j = 0; j < numberOfEntries; j++) { try { cache.computeIfAbsent(j, key -> { @@ -517,18 +518,24 @@ public class CacheTests extends ESTestCase { return Integer.toString(key); }); } catch (ExecutionException e) { - throw new RuntimeException(e); + failures.add(e); + break; } } - } finally { - endGate.countDown(); + barrier.await(); + } catch (BrokenBarrierException | InterruptedException e) { + throw new AssertionError(e); } }); thread.start(); } - startGate.countDown(); - endGate.await(); - assertFalse(interrupted.get()); + + // wait for all threads to be ready + barrier.await(); + // wait for all threads to finish + barrier.await(); + + assertThat(failures, is(empty())); } public void testComputeIfAbsentThrowsExceptionIfLoaderReturnsANullValue() { @@ -541,7 +548,7 @@ public class CacheTests extends ESTestCase { } } - public void testDependentKeyDeadlock() throws InterruptedException { + public void testDependentKeyDeadlock() throws BrokenBarrierException, InterruptedException { class Key { private final int key; @@ -568,18 +575,19 @@ public class CacheTests extends ESTestCase { int numberOfThreads = randomIntBetween(2, 32); final Cache cache = CacheBuilder.builder().build(); - CountDownLatch startGate = new CountDownLatch(1); + + CopyOnWriteArrayList failures = new CopyOnWriteArrayList<>(); + + CyclicBarrier barrier = new CyclicBarrier(1 + numberOfThreads); CountDownLatch deadlockLatch = new CountDownLatch(numberOfThreads); - AtomicBoolean interrupted = new AtomicBoolean(); List threads = new ArrayList<>(); for (int i = 0; i < numberOfThreads; i++) { Thread thread = new Thread(() -> { try { try { - startGate.await(); - } catch (InterruptedException e) { - interrupted.set(true); - return; + barrier.await(); + } catch (BrokenBarrierException | InterruptedException e) { + throw new AssertionError(e); } Random random = new Random(random().nextLong()); for (int j = 0; j < numberOfEntries; j++) { @@ -594,7 +602,8 @@ public class CacheTests extends ESTestCase { } }); } catch (ExecutionException e) { - fail(e.getMessage()); + failures.add(e); + break; } } } finally { @@ -631,7 +640,7 @@ public class CacheTests extends ESTestCase { }, 1, 1, TimeUnit.SECONDS); // everything is setup, release the hounds - startGate.countDown(); + barrier.await(); // wait for either deadlock to be detected or the threads to terminate deadlockLatch.await(); @@ -639,24 +648,21 @@ public class CacheTests extends ESTestCase { // shutdown the watchdog service scheduler.shutdown(); + assertThat(failures, is(empty())); + assertFalse("deadlock", deadlock.get()); } - public void testCachePollution() throws InterruptedException { + public void testCachePollution() throws BrokenBarrierException, InterruptedException { int numberOfThreads = randomIntBetween(2, 32); final Cache cache = CacheBuilder.builder().build(); - CountDownLatch startGate = new CountDownLatch(1); - CountDownLatch endGate = new CountDownLatch(numberOfThreads); - AtomicBoolean interrupted = new AtomicBoolean(); + + CyclicBarrier barrier = new CyclicBarrier(1 + numberOfThreads); + for (int i = 0; i < numberOfThreads; i++) { Thread thread = new Thread(() -> { try { - try { - startGate.await(); - } catch (InterruptedException e) { - interrupted.set(true); - return; - } + barrier.await(); Random random = new Random(random().nextLong()); for (int j = 0; j < numberOfEntries; j++) { Integer key = random.nextInt(numberOfEntries); @@ -686,21 +692,23 @@ public class CacheTests extends ESTestCase { cache.get(key); } } - } finally { - endGate.countDown(); + barrier.await(); + } catch (BrokenBarrierException | InterruptedException e) { + throw new AssertionError(e); } }); thread.start(); } - startGate.countDown(); - endGate.await(); - assertFalse(interrupted.get()); + // wait for all threads to be ready + barrier.await(); + // wait for all threads to finish + barrier.await(); } // test that the cache is not corrupted under lots of concurrent modifications, even hitting the same key // here be dragons: this test did catch one subtle bug during development; do not remove lightly - public void testTorture() throws InterruptedException { + public void testTorture() throws BrokenBarrierException, InterruptedException { int numberOfThreads = randomIntBetween(2, 32); final Cache cache = CacheBuilder.builder() @@ -708,32 +716,28 @@ public class CacheTests extends ESTestCase { .weigher((k, v) -> 2) .build(); - CountDownLatch startGate = new CountDownLatch(1); - CountDownLatch endGate = new CountDownLatch(numberOfThreads); - AtomicBoolean interrupted = new AtomicBoolean(); + CyclicBarrier barrier = new CyclicBarrier(1 + numberOfThreads); for (int i = 0; i < numberOfThreads; i++) { Thread thread = new Thread(() -> { try { - try { - startGate.await(); - } catch (InterruptedException e) { - interrupted.set(true); - return; - } + barrier.await(); Random random = new Random(random().nextLong()); for (int j = 0; j < numberOfEntries; j++) { Integer key = random.nextInt(numberOfEntries); cache.put(key, Integer.toString(j)); } - } finally { - endGate.countDown(); + barrier.await(); + } catch (BrokenBarrierException | InterruptedException e) { + throw new AssertionError(e); } }); thread.start(); } - startGate.countDown(); - endGate.await(); - assertFalse(interrupted.get()); + + // wait for all threads to be ready + barrier.await(); + // wait for all threads to finish + barrier.await(); cache.refresh(); assertEquals(500, cache.count()); diff --git a/core/src/test/java/org/elasticsearch/common/lucene/LuceneTests.java b/core/src/test/java/org/elasticsearch/common/lucene/LuceneTests.java index 0a15693dfd5..484b88f096f 100644 --- a/core/src/test/java/org/elasticsearch/common/lucene/LuceneTests.java +++ b/core/src/test/java/org/elasticsearch/common/lucene/LuceneTests.java @@ -38,7 +38,6 @@ import org.apache.lucene.search.TermQuery; import org.apache.lucene.store.Directory; import org.apache.lucene.store.MMapDirectory; import org.apache.lucene.store.MockDirectoryWrapper; -import org.apache.lucene.util.Version; import org.elasticsearch.test.ESTestCase; import java.io.IOException; @@ -54,14 +53,6 @@ import java.util.concurrent.atomic.AtomicBoolean; * */ public class LuceneTests extends ESTestCase { - /** - * simple test that ensures that we bump the version on Upgrade - */ - public void testVersion() { - // note this is just a silly sanity check, we test it in lucene, and we point to it this way - assertEquals(Lucene.VERSION, Version.LATEST); - } - public void testWaitForIndex() throws Exception { final MockDirectoryWrapper dir = newMockDirectory(); diff --git a/core/src/test/java/org/elasticsearch/index/translog/TranslogTests.java b/core/src/test/java/org/elasticsearch/index/translog/TranslogTests.java index b31aafa432d..ddd8c2f649f 100644 --- a/core/src/test/java/org/elasticsearch/index/translog/TranslogTests.java +++ b/core/src/test/java/org/elasticsearch/index/translog/TranslogTests.java @@ -32,6 +32,7 @@ import org.apache.lucene.util.LuceneTestCase; import org.elasticsearch.ElasticsearchException; import org.elasticsearch.cluster.metadata.IndexMetaData; import org.elasticsearch.common.bytes.BytesArray; +import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.io.FileSystemUtils; import org.elasticsearch.common.io.stream.BytesStreamOutput; import org.elasticsearch.common.io.stream.StreamInput; @@ -1316,7 +1317,7 @@ public class TranslogTests extends ESTestCase { public void testFailFlush() throws IOException { Path tempDir = createTempDir(); - final AtomicBoolean fail = new AtomicBoolean(); + final FailSwitch fail = new FailSwitch(); TranslogConfig config = getTranslogConfig(tempDir); Translog translog = getFailableTranslog(fail, config); @@ -1336,9 +1337,13 @@ public class TranslogTests extends ESTestCase { assertFalse(translog.isOpen()); assertEquals("__FAKE__ no space left on device", ex.getMessage()); } - fail.set(randomBoolean()); + if (randomBoolean()) { + fail.failAlways(); + } else { + fail.failNever(); + } } - fail.set(false); + fail.failNever(); if (randomBoolean()) { try { locations.add(translog.add(new Translog.Index("test", "" + opsSynced, Integer.toString(opsSynced).getBytes(Charset.forName("UTF-8"))))); @@ -1409,13 +1414,13 @@ public class TranslogTests extends ESTestCase { public void testTragicEventCanBeAnyException() throws IOException { Path tempDir = createTempDir(); - final AtomicBoolean fail = new AtomicBoolean(); + final FailSwitch fail = new FailSwitch(); TranslogConfig config = getTranslogConfig(tempDir); assumeFalse("this won't work if we sync on any op", config.isSyncOnEachOperation()); Translog translog = getFailableTranslog(fail, config, false, true); LineFileDocs lineFileDocs = new LineFileDocs(random()); // writes pretty big docs so we cross buffer boarders regularly translog.add(new Translog.Index("test", "1", lineFileDocs.nextDoc().toString().getBytes(Charset.forName("UTF-8")))); - fail.set(true); + fail.failAlways(); try { Translog.Location location = translog.add(new Translog.Index("test", "2", lineFileDocs.nextDoc().toString().getBytes(Charset.forName("UTF-8")))); if (randomBoolean()) { @@ -1436,7 +1441,7 @@ public class TranslogTests extends ESTestCase { public void testFatalIOExceptionsWhileWritingConcurrently() throws IOException, InterruptedException { Path tempDir = createTempDir(); - final AtomicBoolean fail = new AtomicBoolean(false); + final FailSwitch fail = new FailSwitch(); TranslogConfig config = getTranslogConfig(tempDir); Translog translog = getFailableTranslog(fail, config); @@ -1473,7 +1478,7 @@ public class TranslogTests extends ESTestCase { // this holds a reference to the current tlog channel such that it's not closed // if we hit a tragic event. this is important to ensure that asserts inside the Translog#add doesn't trip // otherwise our assertions here are off by one sometimes. - fail.set(true); + fail.failAlways(); for (int i = 0; i < threadCount; i++) { threads[i].join(); } @@ -1525,11 +1530,40 @@ public class TranslogTests extends ESTestCase { } } - private Translog getFailableTranslog(final AtomicBoolean fail, final TranslogConfig config) throws IOException { + private Translog getFailableTranslog(FailSwitch fail, final TranslogConfig config) throws IOException { return getFailableTranslog(fail, config, randomBoolean(), false); } - private Translog getFailableTranslog(final AtomicBoolean fail, final TranslogConfig config, final boolean paritalWrites, final boolean throwUnknownException) throws IOException { + private static class FailSwitch { + private volatile int failRate; + private volatile boolean onceFailedFailAlways = false; + public boolean fail() { + boolean fail = randomIntBetween(1, 100) <= failRate; + if (fail && onceFailedFailAlways) { + failAlways(); + } + return fail; + } + + public void failNever() { + failRate = 0; + } + + public void failAlways() { + failRate = 100; + } + + public void failRandomly() { + failRate = randomIntBetween(1, 100); + } + + public void onceFailedFailAlways() { + onceFailedFailAlways = true; + } + } + + + private Translog getFailableTranslog(final FailSwitch fail, final TranslogConfig config, final boolean paritalWrites, final boolean throwUnknownException) throws IOException { return new Translog(config) { @Override TranslogWriter.ChannelFactory getChannelFactory() { @@ -1539,23 +1573,56 @@ public class TranslogTests extends ESTestCase { @Override public FileChannel open(Path file) throws IOException { FileChannel channel = factory.open(file); - return new ThrowingFileChannel(fail, paritalWrites, throwUnknownException, channel); + boolean success = false; + try { + ThrowingFileChannel throwingFileChannel = new ThrowingFileChannel(fail, paritalWrites, throwUnknownException, channel); + success = true; + return throwingFileChannel; + } finally { + if (success == false) { + IOUtils.closeWhileHandlingException(channel); + } + } } }; } + + @Override + protected boolean assertBytesAtLocation(Location location, BytesReference expectedBytes) throws IOException { + return true; // we don't wanna fail in the assert + } }; } public static class ThrowingFileChannel extends FilterFileChannel { - private final AtomicBoolean fail; + private final FailSwitch fail; private final boolean partialWrite; private final boolean throwUnknownException; - public ThrowingFileChannel(AtomicBoolean fail, boolean partialWrite, boolean throwUnknownException, FileChannel delegate) { + public ThrowingFileChannel(FailSwitch fail, boolean partialWrite, boolean throwUnknownException, FileChannel delegate) throws MockDirectoryWrapper.FakeIOException { super(delegate); this.fail = fail; this.partialWrite = partialWrite; this.throwUnknownException = throwUnknownException; + if (fail.fail()) { + throw new MockDirectoryWrapper.FakeIOException(); + } + } + + @Override + public int read(ByteBuffer dst) throws IOException { + if (fail.fail()) { + throw new MockDirectoryWrapper.FakeIOException(); + } + return super.read(dst); + } + + @Override + public long read(ByteBuffer[] dsts, int offset, int length) throws IOException { + if (fail.fail()) { + throw new MockDirectoryWrapper.FakeIOException(); + } + return super.read(dsts, offset, length); } @Override @@ -1570,7 +1637,7 @@ public class TranslogTests extends ESTestCase { public int write(ByteBuffer src) throws IOException { - if (fail.get()) { + if (fail.fail()) { if (partialWrite) { if (src.hasRemaining()) { final int pos = src.position(); @@ -1590,6 +1657,22 @@ public class TranslogTests extends ESTestCase { } return super.write(src); } + + @Override + public void force(boolean metaData) throws IOException { + if (fail.fail()) { + throw new MockDirectoryWrapper.FakeIOException(); + } + super.force(metaData); + } + + @Override + public long position() throws IOException { + if (fail.fail()) { + throw new MockDirectoryWrapper.FakeIOException(); + } + return super.position(); + } } private static final class UnknownException extends RuntimeException { @@ -1711,4 +1794,78 @@ public class TranslogTests extends ESTestCase { } } + /** + * This test adds operations to the translog which might randomly throw an IOException. The only thing this test verifies is + * that we can, after we hit an exception, open and recover the translog successfully and retrieve all successfully synced operations + * from the transaction log. + */ + public void testWithRandomException() throws IOException { + final int runs = randomIntBetween(5, 10); + for (int run = 0; run < runs; run++) { + Path tempDir = createTempDir(); + final FailSwitch fail = new FailSwitch(); + fail.failRandomly(); + TranslogConfig config = getTranslogConfig(tempDir); + final int numOps = randomIntBetween(100, 200); + List syncedDocs = new ArrayList<>(); + List unsynced = new ArrayList<>(); + if (randomBoolean()) { + fail.onceFailedFailAlways(); + } + try { + final Translog failableTLog = getFailableTranslog(fail, config, randomBoolean(), false); + try { + LineFileDocs lineFileDocs = new LineFileDocs(random()); //writes pretty big docs so we cross buffer boarders regularly + for (int opsAdded = 0; opsAdded < numOps; opsAdded++) { + String doc = lineFileDocs.nextDoc().toString(); + failableTLog.add(new Translog.Index("test", "" + opsAdded, doc.getBytes(Charset.forName("UTF-8")))); + unsynced.add(doc); + if (randomBoolean()) { + failableTLog.sync(); + syncedDocs.addAll(unsynced); + unsynced.clear(); + } + if (randomFloat() < 0.1) { + failableTLog.sync(); // we have to sync here first otherwise we don't know if the sync succeeded if the commit fails + syncedDocs.addAll(unsynced); + unsynced.clear(); + if (randomBoolean()) { + failableTLog.prepareCommit(); + } + failableTLog.commit(); + syncedDocs.clear(); + } + } + } catch (TranslogException | MockDirectoryWrapper.FakeIOException ex) { + // fair enough + } catch (IOException ex) { + assertEquals(ex.getMessage(), "__FAKE__ no space left on device"); + } finally { + config.setTranslogGeneration(failableTLog.getGeneration()); + IOUtils.closeWhileHandlingException(failableTLog); + } + } catch (TranslogException | MockDirectoryWrapper.FakeIOException ex) { + // failed - that's ok, we didn't even create it + } + // now randomly open this failing tlog again just to make sure we can also recover from failing during recovery + if (randomBoolean()) { + try { + IOUtils.close(getFailableTranslog(fail, config, randomBoolean(), false)); + } catch (TranslogException | MockDirectoryWrapper.FakeIOException ex) { + // failed - that's ok, we didn't even create it + } + } + + try (Translog translog = new Translog(config)) { + try (Translog.Snapshot snapshot = translog.newSnapshot()) { + assertEquals(syncedDocs.size(), snapshot.estimatedTotalOperations()); + for (int i = 0; i < syncedDocs.size(); i++) { + Translog.Operation next = snapshot.next(); + assertEquals(syncedDocs.get(i), next.getSource().source.toUtf8()); + assertNotNull("operation " + i + " must be non-null", next); + } + } + } + } + } } diff --git a/core/src/test/java/org/elasticsearch/indices/IndicesOptionsIntegrationIT.java b/core/src/test/java/org/elasticsearch/indices/IndicesOptionsIntegrationIT.java index 2723f49a77a..aeb4ac55410 100644 --- a/core/src/test/java/org/elasticsearch/indices/IndicesOptionsIntegrationIT.java +++ b/core/src/test/java/org/elasticsearch/indices/IndicesOptionsIntegrationIT.java @@ -36,7 +36,6 @@ import org.elasticsearch.action.admin.indices.settings.get.GetSettingsRequestBui import org.elasticsearch.action.admin.indices.settings.get.GetSettingsResponse; import org.elasticsearch.action.admin.indices.stats.IndicesStatsRequestBuilder; import org.elasticsearch.action.admin.indices.validate.query.ValidateQueryRequestBuilder; -import org.elasticsearch.action.admin.indices.warmer.get.GetWarmersRequestBuilder; import org.elasticsearch.action.percolate.MultiPercolateRequestBuilder; import org.elasticsearch.action.percolate.PercolateRequestBuilder; import org.elasticsearch.action.percolate.PercolateSourceBuilder; @@ -49,10 +48,7 @@ import org.elasticsearch.action.support.IndicesOptions; import org.elasticsearch.common.Strings; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.index.IndexNotFoundException; -import org.elasticsearch.index.query.QueryBuilders; -import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.suggest.SuggestBuilders; -import org.elasticsearch.search.warmer.IndexWarmersMetaData; import org.elasticsearch.test.ESIntegTestCase; import static org.elasticsearch.action.percolate.PercolateSourceBuilder.docBuilder; @@ -86,7 +82,6 @@ public class IndicesOptionsIntegrationIT extends ESIntegTestCase { verify(getAliases("test1", "test2"), true); verify(getFieldMapping("test1", "test2"), true); verify(getMapping("test1", "test2"), true); - verify(getWarmer("test1", "test2"), true); verify(getSettings("test1", "test2"), true); IndicesOptions options = IndicesOptions.strictExpandOpen(); @@ -107,7 +102,6 @@ public class IndicesOptionsIntegrationIT extends ESIntegTestCase { verify(getAliases("test1", "test2").setIndicesOptions(options), true); verify(getFieldMapping("test1", "test2").setIndicesOptions(options), true); verify(getMapping("test1", "test2").setIndicesOptions(options), true); - verify(getWarmer("test1", "test2").setIndicesOptions(options), true); verify(getSettings("test1", "test2").setIndicesOptions(options), true); options = IndicesOptions.lenientExpandOpen(); @@ -128,7 +122,6 @@ public class IndicesOptionsIntegrationIT extends ESIntegTestCase { verify(getAliases("test1", "test2").setIndicesOptions(options), false); verify(getFieldMapping("test1", "test2").setIndicesOptions(options), false); verify(getMapping("test1", "test2").setIndicesOptions(options), false); - verify(getWarmer("test1", "test2").setIndicesOptions(options), false); verify(getSettings("test1", "test2").setIndicesOptions(options), false); options = IndicesOptions.strictExpandOpen(); @@ -151,7 +144,6 @@ public class IndicesOptionsIntegrationIT extends ESIntegTestCase { verify(getAliases("test1", "test2").setIndicesOptions(options), false); verify(getFieldMapping("test1", "test2").setIndicesOptions(options), false); verify(getMapping("test1", "test2").setIndicesOptions(options), false); - verify(getWarmer("test1", "test2").setIndicesOptions(options), false); verify(getSettings("test1", "test2").setIndicesOptions(options), false); } @@ -182,7 +174,6 @@ public class IndicesOptionsIntegrationIT extends ESIntegTestCase { verify(getAliases("test1").setIndicesOptions(options), true); verify(getFieldMapping("test1").setIndicesOptions(options), true); verify(getMapping("test1").setIndicesOptions(options), true); - verify(getWarmer("test1").setIndicesOptions(options), true); verify(getSettings("test1").setIndicesOptions(options), true); options = IndicesOptions.fromOptions(true, options.allowNoIndices(), options.expandWildcardsOpen(), options.expandWildcardsClosed(), options); @@ -203,7 +194,6 @@ public class IndicesOptionsIntegrationIT extends ESIntegTestCase { verify(getAliases("test1").setIndicesOptions(options), false); verify(getFieldMapping("test1").setIndicesOptions(options), false); verify(getMapping("test1").setIndicesOptions(options), false); - verify(getWarmer("test1").setIndicesOptions(options), false); verify(getSettings("test1").setIndicesOptions(options), false); assertAcked(client().admin().indices().prepareOpen("test1")); @@ -227,7 +217,6 @@ public class IndicesOptionsIntegrationIT extends ESIntegTestCase { verify(getAliases("test1").setIndicesOptions(options), false); verify(getFieldMapping("test1").setIndicesOptions(options), false); verify(getMapping("test1").setIndicesOptions(options), false); - verify(getWarmer("test1").setIndicesOptions(options), false); verify(getSettings("test1").setIndicesOptions(options), false); } @@ -249,7 +238,6 @@ public class IndicesOptionsIntegrationIT extends ESIntegTestCase { verify(getAliases("test1").setIndicesOptions(options), true); verify(getFieldMapping("test1").setIndicesOptions(options), true); verify(getMapping("test1").setIndicesOptions(options), true); - verify(getWarmer("test1").setIndicesOptions(options), true); verify(getSettings("test1").setIndicesOptions(options), true); options = IndicesOptions.fromOptions(true, options.allowNoIndices(), options.expandWildcardsOpen(), options.expandWildcardsClosed(), options); @@ -269,7 +257,6 @@ public class IndicesOptionsIntegrationIT extends ESIntegTestCase { verify(getAliases("test1").setIndicesOptions(options), false); verify(getFieldMapping("test1").setIndicesOptions(options), false); verify(getMapping("test1").setIndicesOptions(options), false); - verify(getWarmer("test1").setIndicesOptions(options), false); verify(getSettings("test1").setIndicesOptions(options), false); assertAcked(prepareCreate("test1")); @@ -292,7 +279,6 @@ public class IndicesOptionsIntegrationIT extends ESIntegTestCase { verify(getAliases("test1").setIndicesOptions(options), false); verify(getFieldMapping("test1").setIndicesOptions(options), false); verify(getMapping("test1").setIndicesOptions(options), false); - verify(getWarmer("test1").setIndicesOptions(options), false); verify(getSettings("test1").setIndicesOptions(options), false); } @@ -346,7 +332,6 @@ public class IndicesOptionsIntegrationIT extends ESIntegTestCase { verify(getAliases(indices), false); verify(getFieldMapping(indices), false); verify(getMapping(indices), false); - verify(getWarmer(indices), false); verify(getSettings(indices), false); // Now force allow_no_indices=true @@ -368,7 +353,6 @@ public class IndicesOptionsIntegrationIT extends ESIntegTestCase { verify(getAliases(indices).setIndicesOptions(options), false); verify(getFieldMapping(indices).setIndicesOptions(options), false); verify(getMapping(indices).setIndicesOptions(options), false); - verify(getWarmer(indices).setIndicesOptions(options), false); verify(getSettings(indices).setIndicesOptions(options), false); assertAcked(prepareCreate("foobar")); @@ -393,7 +377,6 @@ public class IndicesOptionsIntegrationIT extends ESIntegTestCase { verify(getAliases(indices), false); verify(getFieldMapping(indices), false); verify(getMapping(indices), false); - verify(getWarmer(indices), false); verify(getSettings(indices).setIndicesOptions(options), false); // Verify defaults for wildcards, with two wildcard expression and one existing index @@ -415,7 +398,6 @@ public class IndicesOptionsIntegrationIT extends ESIntegTestCase { verify(getAliases(indices), false); verify(getFieldMapping(indices), false); verify(getMapping(indices), false); - verify(getWarmer(indices), false); verify(getSettings(indices).setIndicesOptions(options), false); // Now force allow_no_indices=true @@ -437,7 +419,6 @@ public class IndicesOptionsIntegrationIT extends ESIntegTestCase { verify(getAliases(indices).setIndicesOptions(options), false); verify(getFieldMapping(indices).setIndicesOptions(options), false); verify(getMapping(indices).setIndicesOptions(options), false); - verify(getWarmer(indices).setIndicesOptions(options), false); verify(getSettings(indices).setIndicesOptions(options), false); } @@ -581,34 +562,6 @@ public class IndicesOptionsIntegrationIT extends ESIntegTestCase { assertThat(client().admin().indices().prepareExists("barbaz").get().isExists(), equalTo(false)); } - public void testPutWarmer() throws Exception { - createIndex("foobar"); - ensureYellow(); - verify(client().admin().indices().preparePutWarmer("warmer1").setSearchRequest(client().prepareSearch().setIndices("foobar").setQuery(QueryBuilders.matchAllQuery())), false); - assertThat(client().admin().indices().prepareGetWarmers("foobar").setWarmers("warmer1").get().getWarmers().size(), equalTo(1)); - - } - - public void testPutWarmerWildcard() throws Exception { - createIndex("foo", "foobar", "bar", "barbaz"); - ensureYellow(); - - verify(client().admin().indices().preparePutWarmer("warmer1").setSearchRequest(client().prepareSearch().setIndices("foo*").setQuery(QueryBuilders.matchAllQuery())), false); - - assertThat(client().admin().indices().prepareGetWarmers("foo").setWarmers("warmer1").get().getWarmers().size(), equalTo(1)); - assertThat(client().admin().indices().prepareGetWarmers("foobar").setWarmers("warmer1").get().getWarmers().size(), equalTo(1)); - assertThat(client().admin().indices().prepareGetWarmers("bar").setWarmers("warmer1").get().getWarmers().size(), equalTo(0)); - assertThat(client().admin().indices().prepareGetWarmers("barbaz").setWarmers("warmer1").get().getWarmers().size(), equalTo(0)); - - verify(client().admin().indices().preparePutWarmer("warmer2").setSearchRequest(client().prepareSearch().setIndices().setQuery(QueryBuilders.matchAllQuery())), false); - - assertThat(client().admin().indices().prepareGetWarmers("foo").setWarmers("warmer2").get().getWarmers().size(), equalTo(1)); - assertThat(client().admin().indices().prepareGetWarmers("foobar").setWarmers("warmer2").get().getWarmers().size(), equalTo(1)); - assertThat(client().admin().indices().prepareGetWarmers("bar").setWarmers("warmer2").get().getWarmers().size(), equalTo(1)); - assertThat(client().admin().indices().prepareGetWarmers("barbaz").setWarmers("warmer2").get().getWarmers().size(), equalTo(1)); - - } - public void testPutAlias() throws Exception { createIndex("foobar"); ensureYellow(); @@ -635,46 +588,6 @@ public class IndicesOptionsIntegrationIT extends ESIntegTestCase { } - public void testDeleteWarmer() throws Exception { - SearchSourceBuilder source = new SearchSourceBuilder(); - source.query(QueryBuilders.matchAllQuery()); - IndexWarmersMetaData.Entry entry = new IndexWarmersMetaData.Entry("test1", new String[] { "typ1" }, false, new IndexWarmersMetaData.SearchSource(source)); - assertAcked(prepareCreate("foobar").addCustom(new IndexWarmersMetaData(entry))); - ensureYellow(); - - verify(client().admin().indices().prepareDeleteWarmer().setIndices("foo").setNames("test1"), true); - assertThat(client().admin().indices().prepareGetWarmers("foobar").setWarmers("test1").get().getWarmers().size(), equalTo(1)); - verify(client().admin().indices().prepareDeleteWarmer().setIndices("foobar").setNames("test1"), false); - assertThat(client().admin().indices().prepareGetWarmers("foobar").setWarmers("test1").get().getWarmers().size(), equalTo(0)); - } - - public void testDeleteWarmerWildcard() throws Exception { - verify(client().admin().indices().prepareDeleteWarmer().setIndices("_all").setNames("test1"), true); - - SearchSourceBuilder source = new SearchSourceBuilder(); - source.query(QueryBuilders.matchAllQuery()); - IndexWarmersMetaData.Entry entry = new IndexWarmersMetaData.Entry("test1", new String[] { "type1" }, false, new IndexWarmersMetaData.SearchSource(source)); - assertAcked(prepareCreate("foo").addCustom(new IndexWarmersMetaData(entry))); - assertAcked(prepareCreate("foobar").addCustom(new IndexWarmersMetaData(entry))); - assertAcked(prepareCreate("bar").addCustom(new IndexWarmersMetaData(entry))); - assertAcked(prepareCreate("barbaz").addCustom(new IndexWarmersMetaData(entry))); - ensureYellow(); - - verify(client().admin().indices().prepareDeleteWarmer().setIndices("foo*").setNames("test1"), false); - assertThat(client().admin().indices().prepareGetWarmers("foo").setWarmers("test1").get().getWarmers().size(), equalTo(0)); - assertThat(client().admin().indices().prepareGetWarmers("foobar").setWarmers("test1").get().getWarmers().size(), equalTo(0)); - assertThat(client().admin().indices().prepareGetWarmers("bar").setWarmers("test1").get().getWarmers().size(), equalTo(1)); - assertThat(client().admin().indices().prepareGetWarmers("barbaz").setWarmers("test1").get().getWarmers().size(), equalTo(1)); - - assertAcked(client().admin().indices().prepareDelete("foo*")); - - verify(client().admin().indices().prepareDeleteWarmer().setIndices("foo*").setNames("test1"), true); - - verify(client().admin().indices().prepareDeleteWarmer().setIndices("_all").setNames("test1"), false); - assertThat(client().admin().indices().prepareGetWarmers("bar").setWarmers("test1").get().getWarmers().size(), equalTo(0)); - assertThat(client().admin().indices().prepareGetWarmers("barbaz").setWarmers("test1").get().getWarmers().size(), equalTo(0)); - } - public void testPutMapping() throws Exception { verify(client().admin().indices().preparePutMapping("foo").setType("type1").setSource("field", "type=string"), true); verify(client().admin().indices().preparePutMapping("_all").setType("type1").setSource("field", "type=string"), true); @@ -816,10 +729,6 @@ public class IndicesOptionsIntegrationIT extends ESIntegTestCase { return client().admin().indices().prepareGetMappings(indices); } - private static GetWarmersRequestBuilder getWarmer(String... indices) { - return client().admin().indices().prepareGetWarmers(indices); - } - private static GetSettingsRequestBuilder getSettings(String... indices) { return client().admin().indices().prepareGetSettings(indices); } diff --git a/core/src/test/java/org/elasticsearch/indices/memory/breaker/RandomExceptionCircuitBreakerIT.java b/core/src/test/java/org/elasticsearch/indices/memory/breaker/RandomExceptionCircuitBreakerIT.java index 3422959771c..15d334c61a9 100644 --- a/core/src/test/java/org/elasticsearch/indices/memory/breaker/RandomExceptionCircuitBreakerIT.java +++ b/core/src/test/java/org/elasticsearch/indices/memory/breaker/RandomExceptionCircuitBreakerIT.java @@ -151,18 +151,10 @@ public class RandomExceptionCircuitBreakerIT extends ESIntegTestCase { for (int i = 0; i < numSearches; i++) { SearchRequestBuilder searchRequestBuilder = client().prepareSearch().setQuery(QueryBuilders.matchAllQuery()); - switch (randomIntBetween(0, 5)) { - case 5: - case 4: - case 3: - searchRequestBuilder.addSort("test-str", SortOrder.ASC); - // fall through - sometimes get both fields - case 2: - case 1: - default: - searchRequestBuilder.addSort("test-num", SortOrder.ASC); - + if (random().nextBoolean()) { + searchRequestBuilder.addSort("test-str", SortOrder.ASC); } + searchRequestBuilder.addSort("test-num", SortOrder.ASC); boolean success = false; try { // Sort by the string and numeric fields, to load them into field data @@ -249,6 +241,7 @@ public class RandomExceptionCircuitBreakerIT extends ESIntegTestCase { if (random.nextDouble() < topLevelRatio) { throw new IOException("Forced top level Exception on [" + flag.name() + "]"); } + break; case Intersect: break; case Norms: diff --git a/core/src/test/java/org/elasticsearch/indices/warmer/GatewayIndicesWarmerIT.java b/core/src/test/java/org/elasticsearch/indices/warmer/GatewayIndicesWarmerIT.java deleted file mode 100644 index 7c5a154ebcb..00000000000 --- a/core/src/test/java/org/elasticsearch/indices/warmer/GatewayIndicesWarmerIT.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.indices.warmer; - -import org.elasticsearch.action.admin.indices.warmer.delete.DeleteWarmerResponse; -import org.elasticsearch.cluster.ClusterState; -import org.elasticsearch.common.logging.ESLogger; -import org.elasticsearch.common.logging.Loggers; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.index.query.QueryBuilders; -import org.elasticsearch.search.warmer.IndexWarmersMetaData; -import org.elasticsearch.test.ESIntegTestCase; -import org.elasticsearch.test.ESIntegTestCase.ClusterScope; -import org.elasticsearch.test.ESIntegTestCase.Scope; -import org.elasticsearch.test.InternalTestCluster.RestartCallback; -import org.hamcrest.Matchers; - -import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked; -import static org.hamcrest.Matchers.equalTo; - -/** - */ -@ClusterScope(numDataNodes =0, scope= Scope.TEST) -public class GatewayIndicesWarmerIT extends ESIntegTestCase { - private final ESLogger logger = Loggers.getLogger(GatewayIndicesWarmerIT.class); - - public void testStatePersistence() throws Exception { - logger.info("--> starting 1 nodes"); - internalCluster().startNode(); - - logger.info("--> putting two templates"); - createIndex("test"); - - ensureYellow(); - - assertAcked(client().admin().indices().preparePutWarmer("warmer_1") - .setSearchRequest(client().prepareSearch("test").setQuery(QueryBuilders.termQuery("field", "value1")))); - assertAcked(client().admin().indices().preparePutWarmer("warmer_2") - .setSearchRequest(client().prepareSearch("test").setQuery(QueryBuilders.termQuery("field", "value2")))); - - logger.info("--> put template with warmer"); - client().admin().indices().preparePutTemplate("template_1") - .setSource("{\n" + - " \"template\" : \"xxx\",\n" + - " \"warmers\" : {\n" + - " \"warmer_1\" : {\n" + - " \"types\" : [],\n" + - " \"source\" : {\n" + - " \"query\" : {\n" + - " \"match_all\" : {}\n" + - " }\n" + - " }\n" + - " }\n" + - " }\n" + - "}") - .execute().actionGet(); - - - logger.info("--> verify warmers are registered in cluster state"); - ClusterState clusterState = client().admin().cluster().prepareState().execute().actionGet().getState(); - IndexWarmersMetaData warmersMetaData = clusterState.metaData().index("test").custom(IndexWarmersMetaData.TYPE); - assertThat(warmersMetaData, Matchers.notNullValue()); - assertThat(warmersMetaData.entries().size(), equalTo(2)); - - IndexWarmersMetaData templateWarmers = clusterState.metaData().templates().get("template_1").custom(IndexWarmersMetaData.TYPE); - assertThat(templateWarmers, Matchers.notNullValue()); - assertThat(templateWarmers.entries().size(), equalTo(1)); - - logger.info("--> restarting the node"); - internalCluster().fullRestart(new RestartCallback() { - @Override - public Settings onNodeStopped(String nodeName) throws Exception { - return Settings.EMPTY; - } - }); - - ensureYellow(); - - logger.info("--> verify warmers are recovered"); - clusterState = client().admin().cluster().prepareState().execute().actionGet().getState(); - IndexWarmersMetaData recoveredWarmersMetaData = clusterState.metaData().index("test").custom(IndexWarmersMetaData.TYPE); - assertThat(recoveredWarmersMetaData.entries().size(), equalTo(warmersMetaData.entries().size())); - for (int i = 0; i < warmersMetaData.entries().size(); i++) { - assertThat(recoveredWarmersMetaData.entries().get(i).name(), equalTo(warmersMetaData.entries().get(i).name())); - assertThat(recoveredWarmersMetaData.entries().get(i).source(), equalTo(warmersMetaData.entries().get(i).source())); - } - - logger.info("--> verify warmers in template are recovered"); - IndexWarmersMetaData recoveredTemplateWarmers = clusterState.metaData().templates().get("template_1").custom(IndexWarmersMetaData.TYPE); - assertThat(recoveredTemplateWarmers.entries().size(), equalTo(templateWarmers.entries().size())); - for (int i = 0; i < templateWarmers.entries().size(); i++) { - assertThat(recoveredTemplateWarmers.entries().get(i).name(), equalTo(templateWarmers.entries().get(i).name())); - assertThat(recoveredTemplateWarmers.entries().get(i).source(), equalTo(templateWarmers.entries().get(i).source())); - } - - - logger.info("--> delete warmer warmer_1"); - DeleteWarmerResponse deleteWarmerResponse = client().admin().indices().prepareDeleteWarmer().setIndices("test").setNames("warmer_1").execute().actionGet(); - assertThat(deleteWarmerResponse.isAcknowledged(), equalTo(true)); - - logger.info("--> verify warmers (delete) are registered in cluster state"); - clusterState = client().admin().cluster().prepareState().execute().actionGet().getState(); - warmersMetaData = clusterState.metaData().index("test").custom(IndexWarmersMetaData.TYPE); - assertThat(warmersMetaData, Matchers.notNullValue()); - assertThat(warmersMetaData.entries().size(), equalTo(1)); - - logger.info("--> restarting the node"); - internalCluster().fullRestart(new RestartCallback() { - @Override - public Settings onNodeStopped(String nodeName) throws Exception { - return Settings.EMPTY; - } - }); - - ensureYellow(); - - logger.info("--> verify warmers are recovered"); - clusterState = client().admin().cluster().prepareState().execute().actionGet().getState(); - recoveredWarmersMetaData = clusterState.metaData().index("test").custom(IndexWarmersMetaData.TYPE); - assertThat(recoveredWarmersMetaData.entries().size(), equalTo(warmersMetaData.entries().size())); - for (int i = 0; i < warmersMetaData.entries().size(); i++) { - assertThat(recoveredWarmersMetaData.entries().get(i).name(), equalTo(warmersMetaData.entries().get(i).name())); - assertThat(recoveredWarmersMetaData.entries().get(i).source(), equalTo(warmersMetaData.entries().get(i).source())); - } - } -} diff --git a/core/src/test/java/org/elasticsearch/indices/warmer/IndicesWarmerBlocksIT.java b/core/src/test/java/org/elasticsearch/indices/warmer/IndicesWarmerBlocksIT.java deleted file mode 100644 index 5ca4a99ac1a..00000000000 --- a/core/src/test/java/org/elasticsearch/indices/warmer/IndicesWarmerBlocksIT.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.indices.warmer; - - -import com.carrotsearch.hppc.cursors.ObjectObjectCursor; -import org.elasticsearch.action.admin.indices.warmer.get.GetWarmersResponse; -import org.elasticsearch.index.query.QueryBuilders; -import org.elasticsearch.search.warmer.IndexWarmersMetaData; -import org.elasticsearch.test.ESIntegTestCase; -import org.elasticsearch.test.ESIntegTestCase.ClusterScope; - -import java.util.Arrays; -import java.util.List; - -import static org.elasticsearch.cluster.metadata.IndexMetaData.INDEX_METADATA_BLOCK; -import static org.elasticsearch.cluster.metadata.IndexMetaData.INDEX_READ_BLOCK; -import static org.elasticsearch.cluster.metadata.IndexMetaData.INDEX_READ_ONLY_BLOCK; -import static org.elasticsearch.cluster.metadata.IndexMetaData.SETTING_BLOCKS_METADATA; -import static org.elasticsearch.cluster.metadata.IndexMetaData.SETTING_BLOCKS_READ; -import static org.elasticsearch.cluster.metadata.IndexMetaData.SETTING_BLOCKS_WRITE; -import static org.elasticsearch.cluster.metadata.IndexMetaData.SETTING_READ_ONLY; -import static org.elasticsearch.cluster.metadata.MetaData.CLUSTER_READ_ONLY_BLOCK; -import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked; -import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertBlocked; -import static org.hamcrest.Matchers.equalTo; - -@ClusterScope(scope = ESIntegTestCase.Scope.TEST) -public class IndicesWarmerBlocksIT extends ESIntegTestCase { - public void testPutWarmerWithBlocks() { - createIndex("test-blocks"); - ensureGreen("test-blocks"); - - // Index reads are blocked, the warmer can't be registered - try { - enableIndexBlock("test-blocks", SETTING_BLOCKS_READ); - assertBlocked(client().admin().indices().preparePutWarmer("warmer_blocked") - .setSearchRequest(client().prepareSearch("test-*").setTypes("a1").setQuery(QueryBuilders.matchAllQuery())), INDEX_READ_BLOCK); - } finally { - disableIndexBlock("test-blocks", SETTING_BLOCKS_READ); - } - - // Index writes are blocked, the warmer can be registered - try { - enableIndexBlock("test-blocks", SETTING_BLOCKS_WRITE); - assertAcked(client().admin().indices().preparePutWarmer("warmer_acked") - .setSearchRequest(client().prepareSearch("test-blocks").setTypes("a1").setQuery(QueryBuilders.matchAllQuery()))); - } finally { - disableIndexBlock("test-blocks", SETTING_BLOCKS_WRITE); - } - - // Index metadata changes are blocked, the warmer can't be registered - try { - enableIndexBlock("test-blocks", SETTING_BLOCKS_METADATA); - assertBlocked(client().admin().indices().preparePutWarmer("warmer_blocked") - .setSearchRequest(client().prepareSearch("test-*").setTypes("a1").setQuery(QueryBuilders.matchAllQuery())), INDEX_METADATA_BLOCK); - } finally { - disableIndexBlock("test-blocks", SETTING_BLOCKS_METADATA); - } - - // Index metadata changes are blocked, the warmer can't be registered - try { - enableIndexBlock("test-blocks", SETTING_READ_ONLY); - assertBlocked(client().admin().indices().preparePutWarmer("warmer_blocked") - .setSearchRequest(client().prepareSearch("test-*").setTypes("a1").setQuery(QueryBuilders.matchAllQuery())), INDEX_READ_ONLY_BLOCK); - } finally { - disableIndexBlock("test-blocks", SETTING_READ_ONLY); - } - - // Adding a new warmer is not possible when the cluster is read-only - try { - setClusterReadOnly(true); - assertBlocked(client().admin().indices().preparePutWarmer("warmer_blocked") - .setSearchRequest(client().prepareSearch("test-blocks").setTypes("a1").setQuery(QueryBuilders.matchAllQuery())), CLUSTER_READ_ONLY_BLOCK); - } finally { - setClusterReadOnly(false); - } - } - - public void testGetWarmerWithBlocks() { - createIndex("test-blocks"); - ensureGreen("test-blocks"); - - assertAcked(client().admin().indices().preparePutWarmer("warmer_block") - .setSearchRequest(client().prepareSearch("test-blocks").setTypes("a1").setQuery(QueryBuilders.matchAllQuery()))); - - // Request is not blocked - for (String blockSetting : Arrays.asList(SETTING_BLOCKS_READ, SETTING_BLOCKS_WRITE, SETTING_READ_ONLY)) { - try { - enableIndexBlock("test-blocks", blockSetting); - GetWarmersResponse response = client().admin().indices().prepareGetWarmers("test-blocks").get(); - assertThat(response.warmers().size(), equalTo(1)); - - ObjectObjectCursor> entry = response.warmers().iterator().next(); - assertThat(entry.key, equalTo("test-blocks")); - assertThat(entry.value.size(), equalTo(1)); - assertThat(entry.value.iterator().next().name(), equalTo("warmer_block")); - } finally { - disableIndexBlock("test-blocks", blockSetting); - } - } - - // Request is blocked - try { - enableIndexBlock("test-blocks", SETTING_BLOCKS_METADATA); - assertBlocked(client().admin().indices().prepareGetWarmers("test-blocks"), INDEX_METADATA_BLOCK); - } finally { - disableIndexBlock("test-blocks", SETTING_BLOCKS_METADATA); - } - } - - public void testDeleteWarmerWithBlocks() { - createIndex("test-blocks"); - ensureGreen("test-blocks"); - - // Request is not blocked - for (String blockSetting : Arrays.asList(SETTING_BLOCKS_READ, SETTING_BLOCKS_WRITE)) { - try { - assertAcked(client().admin().indices().preparePutWarmer("warmer_block") - .setSearchRequest(client().prepareSearch("test-blocks").setTypes("a1").setQuery(QueryBuilders.matchAllQuery()))); - - enableIndexBlock("test-blocks", blockSetting); - assertAcked(client().admin().indices().prepareDeleteWarmer().setIndices("test-blocks").setNames("warmer_block")); - } finally { - disableIndexBlock("test-blocks", blockSetting); - } - } - - // Request is blocked - for (String blockSetting : Arrays.asList(SETTING_READ_ONLY, SETTING_BLOCKS_METADATA)) { - try { - assertAcked(client().admin().indices().preparePutWarmer("warmer_block") - .setSearchRequest(client().prepareSearch("test-blocks").setTypes("a1").setQuery(QueryBuilders.matchAllQuery()))); - - enableIndexBlock("test-blocks", blockSetting); - assertBlocked(client().admin().indices().prepareDeleteWarmer().setIndices("test-blocks").setNames("warmer_block")); - } finally { - disableIndexBlock("test-blocks", blockSetting); - } - } - } -} diff --git a/core/src/test/java/org/elasticsearch/indices/warmer/SimpleIndicesWarmerIT.java b/core/src/test/java/org/elasticsearch/indices/warmer/SimpleIndicesWarmerIT.java deleted file mode 100644 index dbbf3bf7247..00000000000 --- a/core/src/test/java/org/elasticsearch/indices/warmer/SimpleIndicesWarmerIT.java +++ /dev/null @@ -1,287 +0,0 @@ -/* - * Licensed to Elasticsearch under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.elasticsearch.indices.warmer; - -import com.carrotsearch.hppc.cursors.ObjectObjectCursor; -import org.elasticsearch.action.admin.indices.stats.IndicesStatsResponse; -import org.elasticsearch.action.admin.indices.warmer.delete.DeleteWarmerResponse; -import org.elasticsearch.action.admin.indices.warmer.get.GetWarmersResponse; -import org.elasticsearch.action.admin.indices.warmer.put.PutWarmerResponse; -import org.elasticsearch.cluster.ClusterState; -import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.index.query.QueryBuilders; -import org.elasticsearch.indices.cache.request.IndicesRequestCache; -import org.elasticsearch.search.warmer.IndexWarmerMissingException; -import org.elasticsearch.search.warmer.IndexWarmersMetaData; -import org.elasticsearch.test.ESIntegTestCase; -import org.hamcrest.Matchers; - -import java.util.List; - -import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.greaterThan; -import static org.hamcrest.Matchers.greaterThanOrEqualTo; -import static org.hamcrest.Matchers.is; - -public class SimpleIndicesWarmerIT extends ESIntegTestCase { - public void testSimpleWarmers() { - createIndex("test"); - ensureGreen(); - - PutWarmerResponse putWarmerResponse = client().admin().indices().preparePutWarmer("warmer_1") - .setSearchRequest(client().prepareSearch("test").setTypes("a1").setQuery(QueryBuilders.termQuery("field", "value1"))) - .execute().actionGet(); - assertThat(putWarmerResponse.isAcknowledged(), equalTo(true)); - putWarmerResponse = client().admin().indices().preparePutWarmer("warmer_2") - .setSearchRequest(client().prepareSearch("test").setTypes("a2").setQuery(QueryBuilders.termQuery("field", "value2"))) - .execute().actionGet(); - assertThat(putWarmerResponse.isAcknowledged(), equalTo(true)); - - client().prepareIndex("test", "type1", "1").setSource("field", "value1").setRefresh(true).execute().actionGet(); - client().prepareIndex("test", "type1", "2").setSource("field", "value2").setRefresh(true).execute().actionGet(); - - GetWarmersResponse getWarmersResponse = client().admin().indices().prepareGetWarmers("tes*") - .execute().actionGet(); - assertThat(getWarmersResponse.getWarmers().size(), equalTo(1)); - assertThat(getWarmersResponse.getWarmers().get("test").size(), equalTo(2)); - assertThat(getWarmersResponse.getWarmers().get("test").get(0).name(), equalTo("warmer_1")); - assertThat(getWarmersResponse.getWarmers().get("test").get(1).name(), equalTo("warmer_2")); - - getWarmersResponse = client().admin().indices().prepareGetWarmers("test").addWarmers("warmer_*") - .execute().actionGet(); - assertThat(getWarmersResponse.getWarmers().size(), equalTo(1)); - assertThat(getWarmersResponse.getWarmers().get("test").size(), equalTo(2)); - assertThat(getWarmersResponse.getWarmers().get("test").get(0).name(), equalTo("warmer_1")); - assertThat(getWarmersResponse.getWarmers().get("test").get(1).name(), equalTo("warmer_2")); - - getWarmersResponse = client().admin().indices().prepareGetWarmers("test").addWarmers("warmer_1") - .execute().actionGet(); - assertThat(getWarmersResponse.getWarmers().size(), equalTo(1)); - assertThat(getWarmersResponse.getWarmers().get("test").size(), equalTo(1)); - assertThat(getWarmersResponse.getWarmers().get("test").get(0).name(), equalTo("warmer_1")); - - getWarmersResponse = client().admin().indices().prepareGetWarmers("test").addWarmers("warmer_2") - .execute().actionGet(); - assertThat(getWarmersResponse.getWarmers().size(), equalTo(1)); - assertThat(getWarmersResponse.getWarmers().get("test").size(), equalTo(1)); - assertThat(getWarmersResponse.getWarmers().get("test").get(0).name(), equalTo("warmer_2")); - - getWarmersResponse = client().admin().indices().prepareGetWarmers("test").addTypes("a*").addWarmers("warmer_2") - .execute().actionGet(); - assertThat(getWarmersResponse.getWarmers().size(), equalTo(1)); - assertThat(getWarmersResponse.getWarmers().get("test").size(), equalTo(1)); - assertThat(getWarmersResponse.getWarmers().get("test").get(0).name(), equalTo("warmer_2")); - - getWarmersResponse = client().admin().indices().prepareGetWarmers("test").addTypes("a1").addWarmers("warmer_2") - .execute().actionGet(); - assertThat(getWarmersResponse.getWarmers().size(), equalTo(0)); - } - - public void testTtemplateWarmer() { - client().admin().indices().preparePutTemplate("template_1") - .setSource("{\n" + - " \"template\" : \"*\",\n" + - " \"warmers\" : {\n" + - " \"warmer_1\" : {\n" + - " \"types\" : [],\n" + - " \"source\" : {\n" + - " \"query\" : {\n" + - " \"match_all\" : {}\n" + - " }\n" + - " }\n" + - " }\n" + - " }\n" + - "}") - .execute().actionGet(); - - createIndex("test"); - ensureGreen(); - - ClusterState clusterState = client().admin().cluster().prepareState().execute().actionGet().getState(); - IndexWarmersMetaData warmersMetaData = clusterState.metaData().index("test").custom(IndexWarmersMetaData.TYPE); - assertThat(warmersMetaData, Matchers.notNullValue()); - assertThat(warmersMetaData.entries().size(), equalTo(1)); - - client().prepareIndex("test", "type1", "1").setSource("field", "value1").setRefresh(true).execute().actionGet(); - client().prepareIndex("test", "type1", "2").setSource("field", "value2").setRefresh(true).execute().actionGet(); - } - - public void testCreateIndexWarmer() { - assertAcked(prepareCreate("test") - .setSource("{\n" + - " \"warmers\" : {\n" + - " \"warmer_1\" : {\n" + - " \"types\" : [],\n" + - " \"source\" : {\n" + - " \"query\" : {\n" + - " \"match_all\" : {}\n" + - " }\n" + - " }\n" + - " }\n" + - " }\n" + - "}")); - - ClusterState clusterState = client().admin().cluster().prepareState().execute().actionGet().getState(); - IndexWarmersMetaData warmersMetaData = clusterState.metaData().index("test").custom(IndexWarmersMetaData.TYPE); - assertThat(warmersMetaData, Matchers.notNullValue()); - assertThat(warmersMetaData.entries().size(), equalTo(1)); - - client().prepareIndex("test", "type1", "1").setSource("field", "value1").setRefresh(true).execute().actionGet(); - client().prepareIndex("test", "type1", "2").setSource("field", "value2").setRefresh(true).execute().actionGet(); - } - - public void testDeleteNonExistentIndexWarmer() { - createIndex("test"); - try { - client().admin().indices().prepareDeleteWarmer().setIndices("test").setNames("foo").execute().actionGet(); - fail("warmer foo should not exist"); - } catch (IndexWarmerMissingException ex) { - assertThat(ex.names()[0], equalTo("foo")); - } - } - - // issue 8991 - public void testDeleteAllIndexWarmerDoesNotThrowWhenNoWarmers() { - createIndex("test"); - DeleteWarmerResponse deleteWarmerResponse = client().admin().indices().prepareDeleteWarmer() - .setIndices("test").setNames("_all").execute().actionGet(); - assertThat(deleteWarmerResponse.isAcknowledged(), equalTo(true)); - - deleteWarmerResponse = client().admin().indices().prepareDeleteWarmer() - .setIndices("test").setNames("foo", "_all", "bar").execute().actionGet(); - assertThat(deleteWarmerResponse.isAcknowledged(), equalTo(true)); - } - - public void testDeleteIndexWarmerTest() { - createIndex("test"); - ensureGreen(); - - PutWarmerResponse putWarmerResponse = client().admin().indices().preparePutWarmer("custom_warmer") - .setSearchRequest(client().prepareSearch("test").setTypes("test").setQuery(QueryBuilders.matchAllQuery())) - .get(); - assertThat(putWarmerResponse.isAcknowledged(), equalTo(true)); - - GetWarmersResponse getWarmersResponse = client().admin().indices().prepareGetWarmers("test").get(); - assertThat(getWarmersResponse.warmers().size(), equalTo(1)); - ObjectObjectCursor> entry = getWarmersResponse.warmers().iterator().next(); - assertThat(entry.key, equalTo("test")); - assertThat(entry.value.size(), equalTo(1)); - assertThat(entry.value.iterator().next().name(), equalTo("custom_warmer")); - - DeleteWarmerResponse deleteWarmerResponse = client().admin().indices().prepareDeleteWarmer().setIndices("test").setNames("custom_warmer").get(); - assertThat(deleteWarmerResponse.isAcknowledged(), equalTo(true)); - - getWarmersResponse = client().admin().indices().prepareGetWarmers("test").get(); - assertThat(getWarmersResponse.warmers().size(), equalTo(0)); - } - - // issue 3246 - public void testEnsureThatIndexWarmersCanBeChangedOnRuntime() throws Exception { - createIndex("test"); - ensureGreen(); - - PutWarmerResponse putWarmerResponse = client().admin().indices().preparePutWarmer("custom_warmer") - .setSearchRequest(client().prepareSearch("test").setTypes("test").setQuery(QueryBuilders.matchAllQuery())) - .execute().actionGet(); - assertThat(putWarmerResponse.isAcknowledged(), equalTo(true)); - - client().prepareIndex("test", "test", "1").setSource("foo", "bar").setRefresh(true).execute().actionGet(); - - logger.info("--> Disabling warmers execution"); - client().admin().indices().prepareUpdateSettings("test").setSettings(Settings.builder().put("index.warmer.enabled", false)).execute().actionGet(); - - long warmerRunsAfterDisabling = getWarmerRuns(); - assertThat(warmerRunsAfterDisabling, greaterThanOrEqualTo(1L)); - - client().prepareIndex("test", "test", "2").setSource("foo2", "bar2").setRefresh(true).execute().actionGet(); - - assertThat(getWarmerRuns(), equalTo(warmerRunsAfterDisabling)); - } - - public void testGettingAllWarmersUsingAllAndWildcardsShouldWork() throws Exception { - createIndex("test"); - ensureGreen(); - - PutWarmerResponse putWarmerResponse = client().admin().indices().preparePutWarmer("custom_warmer") - .setSearchRequest(client().prepareSearch("test").setTypes("test").setQuery(QueryBuilders.matchAllQuery())) - .execute().actionGet(); - assertThat(putWarmerResponse.isAcknowledged(), equalTo(true)); - - PutWarmerResponse anotherPutWarmerResponse = client().admin().indices().preparePutWarmer("second_custom_warmer") - .setSearchRequest(client().prepareSearch("test").setTypes("test").setQuery(QueryBuilders.matchAllQuery())) - .execute().actionGet(); - assertThat(anotherPutWarmerResponse.isAcknowledged(), equalTo(true)); - - GetWarmersResponse getWarmersResponse = client().admin().indices().prepareGetWarmers("*").addWarmers("*").get(); - assertThat(getWarmersResponse.warmers().size(), is(1)); - - getWarmersResponse = client().admin().indices().prepareGetWarmers("_all").addWarmers("_all").get(); - assertThat(getWarmersResponse.warmers().size(), is(1)); - - getWarmersResponse = client().admin().indices().prepareGetWarmers("t*").addWarmers("c*").get(); - assertThat(getWarmersResponse.warmers().size(), is(1)); - - getWarmersResponse = client().admin().indices().prepareGetWarmers("test").addWarmers("custom_warmer", "second_custom_warmer").get(); - assertThat(getWarmersResponse.warmers().size(), is(1)); - } - - private long getWarmerRuns() { - IndicesStatsResponse indicesStatsResponse = client().admin().indices().prepareStats("test").clear().setWarmer(true).execute().actionGet(); - return indicesStatsResponse.getIndex("test").getPrimaries().warmer.total(); - } - - public void testQueryCacheOnWarmer() { - createIndex("test"); - ensureGreen(); - - assertAcked(client().admin().indices().prepareUpdateSettings("test").setSettings(Settings.builder().put(IndicesRequestCache.INDEX_CACHE_REQUEST_ENABLED, false))); - logger.info("register warmer with no query cache, validate no cache is used"); - assertAcked(client().admin().indices().preparePutWarmer("warmer_1") - .setSearchRequest(client().prepareSearch("test").setTypes("a1").setQuery(QueryBuilders.matchAllQuery())) - .get()); - - client().prepareIndex("test", "type1", "1").setSource("field", "value1").setRefresh(true).execute().actionGet(); - assertThat(client().admin().indices().prepareStats("test").setRequestCache(true).get().getTotal().getRequestCache().getMemorySizeInBytes(), equalTo(0l)); - - logger.info("register warmer with query cache, validate caching happened"); - assertAcked(client().admin().indices().preparePutWarmer("warmer_1") - .setSearchRequest(client().prepareSearch("test").setTypes("a1").setQuery(QueryBuilders.matchAllQuery()).setRequestCache(true)) - .get()); - - // index again, to make sure it gets refreshed - client().prepareIndex("test", "type1", "1").setSource("field", "value1").setRefresh(true).execute().actionGet(); - assertThat(client().admin().indices().prepareStats("test").setRequestCache(true).get().getTotal().getRequestCache().getMemorySizeInBytes(), greaterThan(0l)); - - client().admin().indices().prepareClearCache().setRequestCache(true).get(); // clean the cache - assertThat(client().admin().indices().prepareStats("test").setRequestCache(true).get().getTotal().getRequestCache().getMemorySizeInBytes(), equalTo(0l)); - - logger.info("enable default query caching on the index level, and test that no flag on warmer still caches"); - assertAcked(client().admin().indices().prepareUpdateSettings("test").setSettings(Settings.builder().put(IndicesRequestCache.INDEX_CACHE_REQUEST_ENABLED, true))); - - assertAcked(client().admin().indices().preparePutWarmer("warmer_1") - .setSearchRequest(client().prepareSearch("test").setTypes("a1").setQuery(QueryBuilders.matchAllQuery())) - .get()); - - // index again, to make sure it gets refreshed - client().prepareIndex("test", "type1", "1").setSource("field", "value1").setRefresh(true).execute().actionGet(); - assertThat(client().admin().indices().prepareStats("test").setRequestCache(true).get().getTotal().getRequestCache().getMemorySizeInBytes(), greaterThan(0l)); - } -} diff --git a/core/src/test/java/org/elasticsearch/percolator/ConcurrentPercolatorIT.java b/core/src/test/java/org/elasticsearch/percolator/ConcurrentPercolatorIT.java index a7f50d33608..178f070927c 100644 --- a/core/src/test/java/org/elasticsearch/percolator/ConcurrentPercolatorIT.java +++ b/core/src/test/java/org/elasticsearch/percolator/ConcurrentPercolatorIT.java @@ -251,7 +251,7 @@ public class ConcurrentPercolatorIT extends ESIntegTestCase { .setSource(onlyField1Doc).execute().actionGet(); assertNoFailures(response); assertThat(response.getSuccessfulShards(), equalTo(response.getTotalShards())); - assertThat(response.getMatches().length, greaterThanOrEqualTo(atLeastExpected)); + assertThat(response.getCount(), greaterThanOrEqualTo((long) atLeastExpected)); break; case 1: atLeastExpected = type2.get(); @@ -259,7 +259,7 @@ public class ConcurrentPercolatorIT extends ESIntegTestCase { .setSource(onlyField2Doc).execute().actionGet(); assertNoFailures(response); assertThat(response.getSuccessfulShards(), equalTo(response.getTotalShards())); - assertThat(response.getMatches().length, greaterThanOrEqualTo(atLeastExpected)); + assertThat(response.getCount(), greaterThanOrEqualTo((long) atLeastExpected)); break; case 2: atLeastExpected = type3.get(); @@ -267,7 +267,7 @@ public class ConcurrentPercolatorIT extends ESIntegTestCase { .setSource(field1AndField2Doc).execute().actionGet(); assertNoFailures(response); assertThat(response.getSuccessfulShards(), equalTo(response.getTotalShards())); - assertThat(response.getMatches().length, greaterThanOrEqualTo(atLeastExpected)); + assertThat(response.getCount(), greaterThanOrEqualTo((long) atLeastExpected)); break; } } diff --git a/core/src/test/java/org/elasticsearch/percolator/RecoveryPercolatorIT.java b/core/src/test/java/org/elasticsearch/percolator/RecoveryPercolatorIT.java index 6ddd5b71b7c..57eb2e37ddf 100644 --- a/core/src/test/java/org/elasticsearch/percolator/RecoveryPercolatorIT.java +++ b/core/src/test/java/org/elasticsearch/percolator/RecoveryPercolatorIT.java @@ -223,6 +223,7 @@ public class RecoveryPercolatorIT extends ESIntegTestCase { percolatorRecovery(false); } + @AwaitsFix(bugUrl = "sometimes reprodes with: gradle :core:integTest -Dtests.seed=21DDCAA92013B00C -Dtests.class=org.elasticsearch.percolator.RecoveryPercolatorIT -Dtests.method=\"testMultiPercolatorRecovery\"") public void testMultiPercolatorRecovery() throws Exception { percolatorRecovery(true); } diff --git a/core/src/test/java/org/elasticsearch/rest/HeadersAndContextCopyClientTests.java b/core/src/test/java/org/elasticsearch/rest/HeadersAndContextCopyClientTests.java index 2a8299226c0..238e16d4b44 100644 --- a/core/src/test/java/org/elasticsearch/rest/HeadersAndContextCopyClientTests.java +++ b/core/src/test/java/org/elasticsearch/rest/HeadersAndContextCopyClientTests.java @@ -327,7 +327,6 @@ public class HeadersAndContextCopyClientTests extends ESTestCase { client.admin().indices().prepareCreate("test"), client.admin().indices().prepareAliases(), client.admin().indices().prepareAnalyze("text"), - client.admin().indices().prepareDeleteWarmer(), client.admin().indices().prepareTypesExists("type"), client.admin().indices().prepareClose() }; diff --git a/core/src/test/java/org/elasticsearch/search/geo/GeoShapeQueryTests.java b/core/src/test/java/org/elasticsearch/search/geo/GeoShapeQueryTests.java index 1ae211bc242..88943f87ee7 100644 --- a/core/src/test/java/org/elasticsearch/search/geo/GeoShapeQueryTests.java +++ b/core/src/test/java/org/elasticsearch/search/geo/GeoShapeQueryTests.java @@ -299,7 +299,7 @@ public class GeoShapeQueryTests extends ESSingleNodeTestCase { logger.info("Created Random GeometryCollection containing " + gcb.numShapes() + " shapes"); - client().admin().indices().prepareCreate("test").addMapping("type", "location", "type=geo_shape") + client().admin().indices().prepareCreate("test").addMapping("type", "location", "type=geo_shape,tree=quadtree") .execute().actionGet(); XContentBuilder docSource = gcb.toXContent(jsonBuilder().startObject().field("location"), null).endObject(); @@ -317,10 +317,10 @@ public class GeoShapeQueryTests extends ESSingleNodeTestCase { public void testContainsShapeQuery() throws Exception { // Create a random geometry collection. - Rectangle mbr = xRandomRectangle(getRandom(), xRandomPoint(getRandom())); + Rectangle mbr = xRandomRectangle(getRandom(), xRandomPoint(getRandom()), true); GeometryCollectionBuilder gcb = createGeometryCollectionWithin(getRandom(), mbr); - client().admin().indices().prepareCreate("test").addMapping("type", "location", "type=geo_shape") + client().admin().indices().prepareCreate("test").addMapping("type", "location", "type=geo_shape,tree=quadtree" ) .execute().actionGet(); XContentBuilder docSource = gcb.toXContent(jsonBuilder().startObject().field("location"), null).endObject(); @@ -333,7 +333,7 @@ public class GeoShapeQueryTests extends ESSingleNodeTestCase { ShapeBuilder filterShape = (gcb.getShapeAt(randomIntBetween(0, gcb.numShapes() - 1))); GeoShapeQueryBuilder filter = QueryBuilders.geoShapeQuery("location", filterShape) - .relation(ShapeRelation.INTERSECTS); + .relation(ShapeRelation.CONTAINS); SearchResponse response = client().prepareSearch("test").setTypes("type").setQuery(QueryBuilders.matchAllQuery()) .setPostFilter(filter).get(); assertSearchResponse(response); @@ -343,7 +343,7 @@ public class GeoShapeQueryTests extends ESSingleNodeTestCase { public void testShapeFilterWithDefinedGeoCollection() throws Exception { createIndex("shapes"); - client().admin().indices().prepareCreate("test").addMapping("type", "location", "type=geo_shape") + client().admin().indices().prepareCreate("test").addMapping("type", "location", "type=geo_shape,tree=quadtree") .execute().actionGet(); XContentBuilder docSource = jsonBuilder().startObject().startObject("location") diff --git a/core/src/test/java/org/elasticsearch/search/highlight/HighlighterSearchIT.java b/core/src/test/java/org/elasticsearch/search/highlight/HighlighterSearchIT.java index 41fe4975e4b..80636388f54 100644 --- a/core/src/test/java/org/elasticsearch/search/highlight/HighlighterSearchIT.java +++ b/core/src/test/java/org/elasticsearch/search/highlight/HighlighterSearchIT.java @@ -19,6 +19,7 @@ package org.elasticsearch.search.highlight; import com.carrotsearch.randomizedtesting.generators.RandomPicks; + import org.elasticsearch.action.index.IndexRequestBuilder; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; @@ -802,9 +803,8 @@ public class HighlighterSearchIT extends ESIntegTestCase { assertAcked(prepareCreate("test").addMapping("type1", type1TermVectorMapping())); ensureGreen(); - client().prepareIndex("test", "type1") - .setSource("field1", "this is a test", "field2", "The quick brown fox jumps over the lazy dog").get(); - refresh(); + indexRandom(true, client().prepareIndex("test", "type1") + .setSource("field1", "this is a test", "field2", "The quick brown fox jumps over the lazy dog")); logger.info("--> highlighting and searching on field1"); SearchSourceBuilder source = searchSource() @@ -822,7 +822,6 @@ public class HighlighterSearchIT extends ESIntegTestCase { searchResponse = client().prepareSearch("test").setSource(source).get(); - // LUCENE 3.1 UPGRADE: Caused adding the space at the end... assertHighlight(searchResponse, 0, "field1", 0, 1, equalTo("this is a test")); logger.info("--> searching on _all, highlighting on field2"); @@ -832,7 +831,6 @@ public class HighlighterSearchIT extends ESIntegTestCase { searchResponse = client().prepareSearch("test").setSource(source).get(); - // LUCENE 3.1 UPGRADE: Caused adding the space at the end... assertHighlight(searchResponse, 0, "field2", 0, 1, equalTo("The quick brown fox jumps over the lazy dog")); logger.info("--> searching on _all, highlighting on field2"); @@ -842,8 +840,26 @@ public class HighlighterSearchIT extends ESIntegTestCase { searchResponse = client().prepareSearch("test").setSource(source).get(); - // LUCENE 3.1 UPGRADE: Caused adding the space at the end... assertHighlight(searchResponse, 0, "field2", 0, 1, equalTo("The quick brown fox jumps over the lazy dog")); + + logger.info("--> searching with boundary characters"); + source = searchSource() + .query(matchQuery("field2", "quick")) + .highlighter(highlight().field("field2", 30, 1).boundaryChars(new char[] {' '})); + + searchResponse = client().prepareSearch("test").setSource(source).get(); + + assertHighlight(searchResponse, 0, "field2", 0, 1, equalTo("The quick brown fox jumps over")); + + logger.info("--> searching with boundary characters on the field"); + source = searchSource() + .query(matchQuery("field2", "quick")) + .highlighter(highlight().field(new Field("field2").fragmentSize(30).numOfFragments(1).boundaryChars(new char[] {' '}))); + + searchResponse = client().prepareSearch("test").setSource(source).get(); + + assertHighlight(searchResponse, 0, "field2", 0, 1, equalTo("The quick brown fox jumps over")); + } /** diff --git a/core/src/test/java/org/elasticsearch/test/geo/RandomShapeGenerator.java b/core/src/test/java/org/elasticsearch/test/geo/RandomShapeGenerator.java index 55744697b4d..cb0049dc84c 100644 --- a/core/src/test/java/org/elasticsearch/test/geo/RandomShapeGenerator.java +++ b/core/src/test/java/org/elasticsearch/test/geo/RandomShapeGenerator.java @@ -114,7 +114,7 @@ public class RandomShapeGenerator extends RandomGeoGenerator { throws InvalidShapeException { if (numGeometries <= 0) { // cap geometry collection at 4 shapes (to save test time) - numGeometries = RandomInts.randomIntBetween(r, 2, 5); + numGeometries = RandomInts.randomIntBetween(r, 2, 4); } if (nearPoint == null) { @@ -255,11 +255,31 @@ public class RandomShapeGenerator extends RandomGeoGenerator { return p; } - public static Rectangle xRandomRectangle(Random r, Point nearP) { - Rectangle bounds = ctx.getWorldBounds(); + private static Rectangle xRandomRectangle(Random r, Point nearP, Rectangle bounds, boolean small) { if (nearP == null) nearP = xRandomPointIn(r, bounds); + if (small == true) { + // between 3 and 6 degrees + final double latRange = 3 * r.nextDouble() + 3; + final double lonRange = 3 * r.nextDouble() + 3; + + double minX = nearP.getX(); + double maxX = minX + lonRange; + if (maxX > 180) { + maxX = minX; + minX -= lonRange; + } + double minY = nearP.getY(); + double maxY = nearP.getY() + latRange; + if (maxY > 90) { + maxY = minY; + minY -= latRange; + } + + return ctx.makeRectangle(minX, maxX, minY, maxY); + } + Range xRange = xRandomRange(r, rarely(r) ? 0 : nearP.getX(), Range.xRange(bounds, ctx)); Range yRange = xRandomRange(r, rarely(r) ? 0 : nearP.getY(), Range.yRange(bounds, ctx)); @@ -270,6 +290,14 @@ public class RandomShapeGenerator extends RandomGeoGenerator { xDivisible(yRange.getMax()*10e3)/10e3); } + public static Rectangle xRandomRectangle(Random r, Point nearP) { + return xRandomRectangle(r, nearP, ctx.getWorldBounds(), false); + } + + public static Rectangle xRandomRectangle(Random r, Point nearP, boolean small) { + return xRandomRectangle(r, nearP, ctx.getWorldBounds(), small); + } + private static boolean rarely(Random r) { return RandomInts.randomInt(r, 100) >= 90; } diff --git a/core/src/test/resources/indices/bwc/index-2.0.0.zip b/core/src/test/resources/indices/bwc/index-2.0.0.zip index 7110fb424a8..b16a37fffcd 100644 Binary files a/core/src/test/resources/indices/bwc/index-2.0.0.zip and b/core/src/test/resources/indices/bwc/index-2.0.0.zip differ diff --git a/core/src/test/resources/indices/bwc/index-2.0.1.zip b/core/src/test/resources/indices/bwc/index-2.0.1.zip index dccb7774fa6..3b1f32195e7 100644 Binary files a/core/src/test/resources/indices/bwc/index-2.0.1.zip and b/core/src/test/resources/indices/bwc/index-2.0.1.zip differ diff --git a/core/src/test/resources/indices/bwc/index-2.0.2.zip b/core/src/test/resources/indices/bwc/index-2.0.2.zip index 2f77405a831..447d37255d5 100644 Binary files a/core/src/test/resources/indices/bwc/index-2.0.2.zip and b/core/src/test/resources/indices/bwc/index-2.0.2.zip differ diff --git a/core/src/test/resources/indices/bwc/index-2.1.0.zip b/core/src/test/resources/indices/bwc/index-2.1.0.zip index 8c07e922260..23cc65b4ab5 100644 Binary files a/core/src/test/resources/indices/bwc/index-2.1.0.zip and b/core/src/test/resources/indices/bwc/index-2.1.0.zip differ diff --git a/core/src/test/resources/indices/bwc/index-2.1.1.zip b/core/src/test/resources/indices/bwc/index-2.1.1.zip index 74c967d2c61..fa255dfce1a 100644 Binary files a/core/src/test/resources/indices/bwc/index-2.1.1.zip and b/core/src/test/resources/indices/bwc/index-2.1.1.zip differ diff --git a/core/src/test/resources/indices/bwc/repo-2.0.0.zip b/core/src/test/resources/indices/bwc/repo-2.0.0.zip index 9605830a12c..60b01723f29 100644 Binary files a/core/src/test/resources/indices/bwc/repo-2.0.0.zip and b/core/src/test/resources/indices/bwc/repo-2.0.0.zip differ diff --git a/core/src/test/resources/indices/bwc/repo-2.0.1.zip b/core/src/test/resources/indices/bwc/repo-2.0.1.zip index 305820877bb..44701b8df59 100644 Binary files a/core/src/test/resources/indices/bwc/repo-2.0.1.zip and b/core/src/test/resources/indices/bwc/repo-2.0.1.zip differ diff --git a/core/src/test/resources/indices/bwc/repo-2.0.2.zip b/core/src/test/resources/indices/bwc/repo-2.0.2.zip index 696ffd939d5..eab763106f7 100644 Binary files a/core/src/test/resources/indices/bwc/repo-2.0.2.zip and b/core/src/test/resources/indices/bwc/repo-2.0.2.zip differ diff --git a/core/src/test/resources/indices/bwc/repo-2.1.0.zip b/core/src/test/resources/indices/bwc/repo-2.1.0.zip index 2f287ea3481..1165341de36 100644 Binary files a/core/src/test/resources/indices/bwc/repo-2.1.0.zip and b/core/src/test/resources/indices/bwc/repo-2.1.0.zip differ diff --git a/core/src/test/resources/indices/bwc/repo-2.1.1.zip b/core/src/test/resources/indices/bwc/repo-2.1.1.zip index 3253da62c3f..2b5bce15bc7 100644 Binary files a/core/src/test/resources/indices/bwc/repo-2.1.1.zip and b/core/src/test/resources/indices/bwc/repo-2.1.1.zip differ diff --git a/dev-tools/create_bwc_index.py b/dev-tools/create_bwc_index.py index 83a35941577..af5945a418e 100644 --- a/dev-tools/create_bwc_index.py +++ b/dev-tools/create_bwc_index.py @@ -257,10 +257,19 @@ def generate_index(client, version, index_name): # Same as ES default (5 GB), but missing the units to make sure they are inserted on upgrade: settings['merge.policy.max_merged_segment'] = '5368709120' + warmers = {} + warmers['warmer1'] = { + 'source': { + 'query': { + 'match_all': {} + } + } + } client.indices.create(index=index_name, body={ 'settings': settings, - 'mappings': mappings + 'mappings': mappings, + 'warmers': warmers }) health = client.cluster.health(wait_for_status='green', wait_for_relocating_shards=0) assert health['timed_out'] == False, 'cluster health timed out %s' % health diff --git a/distribution/src/main/resources/bin/elasticsearch b/distribution/src/main/resources/bin/elasticsearch index 459169bc3c4..9e4af4ccbb2 100755 --- a/distribution/src/main/resources/bin/elasticsearch +++ b/distribution/src/main/resources/bin/elasticsearch @@ -132,7 +132,7 @@ HOSTNAME=`hostname | cut -d. -f1` export HOSTNAME # manual parsing to find out, if process should be detached -daemonized=`echo $* | grep -E -- '(^-d |-d$| -d |--daemonize$|--daemonize )'` +daemonized=`echo $* | egrep -- '(^-d |-d$| -d |--daemonize$|--daemonize )'` if [ -z "$daemonized" ] ; then exec "$JAVA" $JAVA_OPTS $ES_JAVA_OPTS -Des.path.home="$ES_HOME" -cp "$ES_CLASSPATH" \ org.elasticsearch.bootstrap.Elasticsearch start "$@" diff --git a/docs/plugins/repository.asciidoc b/docs/plugins/repository.asciidoc index 5706fc74c12..73447bb07e5 100644 --- a/docs/plugins/repository.asciidoc +++ b/docs/plugins/repository.asciidoc @@ -28,7 +28,7 @@ The Hadoop HDFS Repository plugin adds support for using HDFS as a repository. The following plugin has been contributed by our community: -* https://github.com/wikimedia/search-repository-swift[Openstack Swift] (by http://en.cam4.es/youngqcmeat/Wikimedia Foundation) +* https://github.com/wikimedia/search-repository-swift[Openstack Swift] (by Wikimedia Foundation) This community plugin appears to have been abandoned: diff --git a/docs/reference/analysis/analyzers/lang-analyzer.asciidoc b/docs/reference/analysis/analyzers/lang-analyzer.asciidoc index 5d849807bc7..1ac3a7af244 100644 --- a/docs/reference/analysis/analyzers/lang-analyzer.asciidoc +++ b/docs/reference/analysis/analyzers/lang-analyzer.asciidoc @@ -621,11 +621,13 @@ The `french` analyzer could be reimplemented as a `custom` analyzer as follows: "analysis": { "filter": { "french_elision": { - "type": "elision", - "articles": [ "l", "m", "t", "qu", "n", "s", - "j", "d", "c", "jusqu", "quoiqu", - "lorsqu", "puisqu" - ] + "type": "elision", + "articles_case": true, + "articles": [ + "l", "m", "t", "qu", "n", "s", + "j", "d", "c", "jusqu", "quoiqu", + "lorsqu", "puisqu" + ] }, "french_stop": { "type": "stop", diff --git a/docs/reference/cat/thread_pool.asciidoc b/docs/reference/cat/thread_pool.asciidoc index f50dc369c3d..eb566f20fee 100644 --- a/docs/reference/cat/thread_pool.asciidoc +++ b/docs/reference/cat/thread_pool.asciidoc @@ -63,7 +63,7 @@ Currently available <>: |`search` |`s` |Thread pool used for <>/<> operations |`snapshot` |`sn` |Thread pool used for <> operations |`suggest` |`su` |Thread pool used for <> operations -|`warmer` |`w` |Thread pool used for <> operations +|`warmer` |`w` |Thread pool used for index warm-up operations |======================================================================= The thread pool name (or alias) must be combined with a thread pool field below diff --git a/docs/reference/indices.asciidoc b/docs/reference/indices.asciidoc index da41ac52df5..7543a3f0bbb 100644 --- a/docs/reference/indices.asciidoc +++ b/docs/reference/indices.asciidoc @@ -4,8 +4,7 @@ [partintro] -- The indices APIs are used to manage individual indices, -index settings, aliases, mappings, index templates -and warmers. +index settings, aliases, mappings, and index templates. [float] [[index-management]] @@ -38,7 +37,6 @@ and warmers. * <> * <> * <> -* <> [float] [[shadow-replicas]] @@ -92,8 +90,6 @@ include::indices/analyze.asciidoc[] include::indices/templates.asciidoc[] -include::indices/warmers.asciidoc[] - include::indices/shadow-replicas.asciidoc[] include::indices/stats.asciidoc[] diff --git a/docs/reference/indices/create-index.asciidoc b/docs/reference/indices/create-index.asciidoc index 52a867958ef..b5cd6c3aea1 100644 --- a/docs/reference/indices/create-index.asciidoc +++ b/docs/reference/indices/create-index.asciidoc @@ -86,27 +86,6 @@ curl -XPOST localhost:9200/test -d '{ }' -------------------------------------------------- -[float] -[[warmers]] -=== Warmers - -The create index API allows also to provide a set of <>: - -[source,js] --------------------------------------------------- -curl -XPUT localhost:9200/test -d '{ - "warmers" : { - "warmer_1" : { - "source" : { - "query" : { - ... - } - } - } - } -}' --------------------------------------------------- - [float] [[create-index-aliases]] === Aliases diff --git a/docs/reference/indices/get-index.asciidoc b/docs/reference/indices/get-index.asciidoc index 78cfa074550..b82bee05630 100644 --- a/docs/reference/indices/get-index.asciidoc +++ b/docs/reference/indices/get-index.asciidoc @@ -27,4 +27,4 @@ $ curl -XGET 'http://localhost:9200/twitter/_settings,_mappings' The above command will only return the settings and mappings for the index called `twitter`. -The available features are `_settings`, `_mappings`, `_warmers` and `_aliases`. \ No newline at end of file +The available features are `_settings`, `_mappings` and `_aliases`. diff --git a/docs/reference/indices/warmers.asciidoc b/docs/reference/indices/warmers.asciidoc deleted file mode 100644 index b8f670af73a..00000000000 --- a/docs/reference/indices/warmers.asciidoc +++ /dev/null @@ -1,194 +0,0 @@ -[[indices-warmers]] -== Warmers - -Index warming allows to run registered search requests to warm up the index -before it is available for search. With the near real time aspect of search, -cold data (segments) will be warmed up before they become available for search. -This includes things such as the filter cache, filesystem cache, and loading -field data for fields. - -Warmup searches typically include requests that require heavy loading of -data, such as aggregations or sorting on specific fields. The warmup APIs -allows to register warmup (search) under specific names, remove them, -and get them. - -Index warmup can be disabled by setting `index.warmer.enabled` to -`false`. It is supported as a realtime setting using update settings -API. This can be handy when doing initial bulk indexing: disable pre -registered warmers to make indexing faster and less expensive and then -enable it. - -[float] -[[creation]] -=== Index Creation / Templates - -Warmers can be registered when an index gets created, for example: - -[source,js] --------------------------------------------------- -curl -XPUT localhost:9200/test -d '{ - "warmers" : { - "warmer_1" : { - "types" : [], - "source" : { - "query" : { - ... - }, - "aggs" : { - ... - } - } - } - } -}' --------------------------------------------------- - -Or, in an index template: - -[source,js] --------------------------------------------------- -curl -XPUT localhost:9200/_template/template_1 -d ' -{ - "template" : "te*", - "warmers" : { - "warmer_1" : { - "types" : [], - "source" : { - "query" : { - ... - }, - "aggs" : { - ... - } - } - } - } -}' --------------------------------------------------- - -On the same level as `types` and `source`, the `request_cache` flag is supported -to enable request caching for the warmed search request. If not specified, it will -use the index level configuration of query caching. - -[float] -[[warmer-adding]] -=== Put Warmer - -Allows to put a warmup search request on a specific index (or indices), -with the body composing of a regular search request. Types can be -provided as part of the URI if the search request is designed to be run -only against the specific types. - -Here is an example that registers a warmup called `warmer_1` against -index `test` (can be alias or several indices), for a search request -that runs against all types: - -[source,js] --------------------------------------------------- -curl -XPUT localhost:9200/test/_warmer/warmer_1 -d '{ - "query" : { - "match_all" : {} - }, - "aggs" : { - "aggs_1" : { - "terms" : { - "field" : "field" - } - } - } -}' --------------------------------------------------- - -And an example that registers a warmup against specific types: - -[source,js] --------------------------------------------------- -curl -XPUT localhost:9200/test/type1/_warmer/warmer_1 -d '{ - "query" : { - "match_all" : {} - }, - "aggs" : { - "aggs_1" : { - "terms" : { - "field" : "field" - } - } - } -}' --------------------------------------------------- - -All options: - -[source,js] --------------------------------------------------- - -PUT _warmer/{warmer_name} - -PUT /{index}/_warmer/{warmer_name} - -PUT /{index}/{type}/_warmer/{warmer_name} - --------------------------------------------------- - - -where - -[horizontal] -`{index}`:: `* | _all | glob pattern | name1, name2, …` - -`{type}`:: `* | _all | glob pattern | name1, name2, …` - -Instead of `_warmer` you can also use the plural `_warmers`. - -The `request_cache` parameter can be used to enable request caching for -the search request. If not specified, it will use the index level configuration -of query caching. - - -[float] -[[removing]] -=== Delete Warmers - -Warmers can be deleted using the following endpoint: - - - -[source,js] --------------------------------------------------- - -[DELETE] /{index}/_warmer/{name} - --------------------------------------------------- - - -where - -[horizontal] -`{index}`:: `* | _all | glob pattern | name1, name2, …` - -`{name}`:: `* | _all | glob pattern | name1, name2, …` - -Instead of `_warmer` you can also use the plural `_warmers`. - -[float] -[[warmer-retrieving]] -=== GETting Warmer - -Getting a warmer for specific index (or alias, or several indices) based -on its name. The provided name can be a simple wildcard expression or -omitted to get all warmers. - -Some examples: - -[source,js] --------------------------------------------------- -# get warmer named warmer_1 on test index -curl -XGET localhost:9200/test/_warmer/warmer_1 - -# get all warmers that start with warm on test index -curl -XGET localhost:9200/test/_warmer/warm* - -# get all warmers for test index -curl -XGET localhost:9200/test/_warmer/ --------------------------------------------------- - diff --git a/docs/reference/mapping/dynamic-mapping.asciidoc b/docs/reference/mapping/dynamic-mapping.asciidoc index 0f445ac6152..beb7d4360d4 100644 --- a/docs/reference/mapping/dynamic-mapping.asciidoc +++ b/docs/reference/mapping/dynamic-mapping.asciidoc @@ -33,7 +33,7 @@ purposes with: Custom rules to configure the mapping for dynamically added fields. TIP: <> allow you to configure the default -mappings, settings, aliases, and warmers for new indices, whether created +mappings, settings and aliases for new indices, whether created automatically or explicitly. diff --git a/docs/reference/migration/migrate_1_0.asciidoc b/docs/reference/migration/migrate_1_0.asciidoc index c8750d11b82..f8cfad2f71c 100644 --- a/docs/reference/migration/migrate_1_0.asciidoc +++ b/docs/reference/migration/migrate_1_0.asciidoc @@ -144,7 +144,7 @@ In the future we will also provide plural versions to allow putting multiple map See <>, <>, <>, <>, <>, -<>, and <> for more details. +`warmers`, and <> for more details. === Index request diff --git a/docs/reference/migration/migrate_1_4.asciidoc b/docs/reference/migration/migrate_1_4.asciidoc index 03a4c1fe741..eecf9ca13e7 100644 --- a/docs/reference/migration/migrate_1_4.asciidoc +++ b/docs/reference/migration/migrate_1_4.asciidoc @@ -32,7 +32,7 @@ Add or update a mapping via the <> or [float] === Indices APIs -The <> will return a section for `warmers` even if there are +The get warmer api will return a section for `warmers` even if there are no warmers. This ensures that the following two examples are equivalent: [source,js] diff --git a/docs/reference/migration/migrate_3_0.asciidoc b/docs/reference/migration/migrate_3_0.asciidoc index e0e6c720401..d3c0b5a2d7a 100644 --- a/docs/reference/migration/migrate_3_0.asciidoc +++ b/docs/reference/migration/migrate_3_0.asciidoc @@ -17,6 +17,16 @@ your application to Elasticsearch 3.0. * <> [[breaking_30_search_changes]] +=== Warmers + +Thanks to several changes like doc values by default or disk-based norms, +warmers have become quite useless. As a consequence, warmers and the warmer +API have been removed: it is not possible anymore to register queries that +will run before a new IndexSearcher is published. + +Don't worry if you have warmers defined on your indices, they will simply be +ignored when upgrading to 3.0. + === Search changes ==== `search_type=count` removed @@ -593,4 +603,4 @@ The percolator by defaults sets the `size` option to `10` whereas before this wa The percolate api can no longer accept documents that have fields that don't exist in the mapping. When percolating an existing document then specifying a document in the source of the percolate request is not allowed -any more. \ No newline at end of file +any more. diff --git a/docs/reference/redirects.asciidoc b/docs/reference/redirects.asciidoc index 823bdb70d07..322c9e7308e 100644 --- a/docs/reference/redirects.asciidoc +++ b/docs/reference/redirects.asciidoc @@ -443,3 +443,9 @@ The `not` query has been replaced by using a `mustNot` clause in a Boolean query === Nested type The docs for the `nested` field datatype have moved to <>. + +[role="exclude",id="indices-warmers"] +=== Warmers + +Warmers have been removed. There have been significant improvements to the +index that make warmers not necessary anymore. diff --git a/modules/lang-expression/build.gradle b/modules/lang-expression/build.gradle index 9e3943a32b2..2fd6e53effa 100644 --- a/modules/lang-expression/build.gradle +++ b/modules/lang-expression/build.gradle @@ -35,6 +35,3 @@ dependencyLicenses { mapping from: /asm-.*/, to: 'asm' } -compileJava.options.compilerArgs << '-Xlint:-rawtypes' -compileTestJava.options.compilerArgs << '-Xlint:-rawtypes' - diff --git a/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/CountMethodValueSource.java b/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/CountMethodValueSource.java index c50aa4da289..043a11eebad 100644 --- a/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/CountMethodValueSource.java +++ b/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/CountMethodValueSource.java @@ -19,6 +19,10 @@ package org.elasticsearch.script.expression; +import java.io.IOException; +import java.util.Map; +import java.util.Objects; + import org.apache.lucene.index.LeafReaderContext; import org.apache.lucene.queries.function.FunctionValues; import org.apache.lucene.queries.function.ValueSource; @@ -26,10 +30,6 @@ import org.elasticsearch.index.fielddata.AtomicFieldData; import org.elasticsearch.index.fielddata.AtomicNumericFieldData; import org.elasticsearch.index.fielddata.IndexFieldData; -import java.io.IOException; -import java.util.Map; -import java.util.Objects; - /** * A ValueSource to create FunctionValues to get the count of the number of values in a field for a document. */ @@ -43,6 +43,7 @@ public class CountMethodValueSource extends ValueSource { } @Override + @SuppressWarnings("rawtypes") // ValueSource uses a rawtype public FunctionValues getValues(Map context, LeafReaderContext leaf) throws IOException { AtomicFieldData leafData = fieldData.load(leaf); assert(leafData instanceof AtomicNumericFieldData); diff --git a/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/DateMethodValueSource.java b/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/DateMethodValueSource.java index 9efeed54ff9..e6c9dcddc78 100644 --- a/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/DateMethodValueSource.java +++ b/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/DateMethodValueSource.java @@ -19,6 +19,10 @@ package org.elasticsearch.script.expression; +import java.io.IOException; +import java.util.Map; +import java.util.Objects; + import org.apache.lucene.index.LeafReaderContext; import org.apache.lucene.queries.function.FunctionValues; import org.elasticsearch.index.fielddata.AtomicFieldData; @@ -26,10 +30,6 @@ import org.elasticsearch.index.fielddata.AtomicNumericFieldData; import org.elasticsearch.index.fielddata.IndexFieldData; import org.elasticsearch.search.MultiValueMode; -import java.io.IOException; -import java.util.Map; -import java.util.Objects; - class DateMethodValueSource extends FieldDataValueSource { protected final String methodName; @@ -45,6 +45,7 @@ class DateMethodValueSource extends FieldDataValueSource { } @Override + @SuppressWarnings("rawtypes") // ValueSource uses a rawtype public FunctionValues getValues(Map context, LeafReaderContext leaf) throws IOException { AtomicFieldData leafData = fieldData.load(leaf); assert(leafData instanceof AtomicNumericFieldData); diff --git a/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/FieldDataValueSource.java b/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/FieldDataValueSource.java index 708cd0af152..ae84a5cbfe7 100644 --- a/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/FieldDataValueSource.java +++ b/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/FieldDataValueSource.java @@ -19,6 +19,10 @@ package org.elasticsearch.script.expression; +import java.io.IOException; +import java.util.Map; +import java.util.Objects; + import org.apache.lucene.index.LeafReaderContext; import org.apache.lucene.queries.function.FunctionValues; import org.apache.lucene.queries.function.ValueSource; @@ -27,10 +31,6 @@ import org.elasticsearch.index.fielddata.AtomicNumericFieldData; import org.elasticsearch.index.fielddata.IndexFieldData; import org.elasticsearch.search.MultiValueMode; -import java.io.IOException; -import java.util.Map; -import java.util.Objects; - /** * A {@link ValueSource} wrapper for field data. */ @@ -67,6 +67,7 @@ class FieldDataValueSource extends ValueSource { } @Override + @SuppressWarnings("rawtypes") // ValueSource uses a rawtype public FunctionValues getValues(Map context, LeafReaderContext leaf) throws IOException { AtomicFieldData leafData = fieldData.load(leaf); assert(leafData instanceof AtomicNumericFieldData); diff --git a/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/ReplaceableConstValueSource.java b/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/ReplaceableConstValueSource.java index c9bcc239f28..bb05ef2325d 100644 --- a/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/ReplaceableConstValueSource.java +++ b/modules/lang-expression/src/main/java/org/elasticsearch/script/expression/ReplaceableConstValueSource.java @@ -19,13 +19,13 @@ package org.elasticsearch.script.expression; +import java.io.IOException; +import java.util.Map; + import org.apache.lucene.index.LeafReaderContext; import org.apache.lucene.queries.function.FunctionValues; import org.apache.lucene.queries.function.ValueSource; -import java.io.IOException; -import java.util.Map; - /** * A {@link ValueSource} which has a stub {@link FunctionValues} that holds a dynamically replaceable constant double. */ @@ -37,6 +37,7 @@ class ReplaceableConstValueSource extends ValueSource { } @Override + @SuppressWarnings("rawtypes") // ValueSource uses a rawtype public FunctionValues getValues(Map map, LeafReaderContext atomicReaderContext) throws IOException { return fv; } diff --git a/modules/lang-expression/src/test/java/org/elasticsearch/script/expression/MoreExpressionTests.java b/modules/lang-expression/src/test/java/org/elasticsearch/script/expression/MoreExpressionTests.java index b4c0106abbe..a866f338e29 100644 --- a/modules/lang-expression/src/test/java/org/elasticsearch/script/expression/MoreExpressionTests.java +++ b/modules/lang-expression/src/test/java/org/elasticsearch/script/expression/MoreExpressionTests.java @@ -19,6 +19,12 @@ package org.elasticsearch.script.expression; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.apache.lucene.expressions.Expression; import org.apache.lucene.expressions.js.JavascriptCompiler; import org.elasticsearch.action.search.SearchPhaseExecutionException; @@ -47,12 +53,6 @@ import org.elasticsearch.search.sort.SortOrder; import org.elasticsearch.test.ESIntegTestCase; import org.elasticsearch.test.hamcrest.ElasticsearchAssertions; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import static org.elasticsearch.search.aggregations.AggregationBuilders.histogram; import static org.elasticsearch.search.aggregations.AggregationBuilders.sum; import static org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorBuilders.bucketScript; @@ -121,7 +121,7 @@ public class MoreExpressionTests extends ESIntegTestCase { client().prepareIndex("test", "doc", "1").setSource("text", "hello goodbye"), client().prepareIndex("test", "doc", "2").setSource("text", "hello hello hello goodbye"), client().prepareIndex("test", "doc", "3").setSource("text", "hello hello goodebye")); - ScoreFunctionBuilder score = ScoreFunctionBuilders.scriptFunction(new Script("1 / _score", ScriptType.INLINE, "expression", null)); + ScoreFunctionBuilder score = ScoreFunctionBuilders.scriptFunction(new Script("1 / _score", ScriptType.INLINE, "expression", null)); SearchRequestBuilder req = client().prepareSearch().setIndices("test"); req.setQuery(QueryBuilders.functionScoreQuery(QueryBuilders.termQuery("text", "hello"), score).boostMode(CombineFunction.REPLACE)); req.setSearchType(SearchType.DFS_QUERY_THEN_FETCH); // make sure DF is consistent diff --git a/plugins/analysis-phonetic/build.gradle b/plugins/analysis-phonetic/build.gradle index 13898be05a9..61c4fdbd583 100644 --- a/plugins/analysis-phonetic/build.gradle +++ b/plugins/analysis-phonetic/build.gradle @@ -30,6 +30,3 @@ dependencies { dependencyLicenses { mapping from: /lucene-.*/, to: 'lucene' } - -compileJava.options.compilerArgs << "-Xlint:-rawtypes,-unchecked" - diff --git a/plugins/analysis-phonetic/src/main/java/org/elasticsearch/index/analysis/PhoneticTokenFilterFactory.java b/plugins/analysis-phonetic/src/main/java/org/elasticsearch/index/analysis/PhoneticTokenFilterFactory.java index 9374410765d..e33f1f1e7e2 100644 --- a/plugins/analysis-phonetic/src/main/java/org/elasticsearch/index/analysis/PhoneticTokenFilterFactory.java +++ b/plugins/analysis-phonetic/src/main/java/org/elasticsearch/index/analysis/PhoneticTokenFilterFactory.java @@ -19,6 +19,9 @@ package org.elasticsearch.index.analysis; +import java.util.Arrays; +import java.util.HashSet; + import org.apache.commons.codec.Encoder; import org.apache.commons.codec.language.Caverphone1; import org.apache.commons.codec.language.Caverphone2; @@ -43,9 +46,6 @@ import org.elasticsearch.index.analysis.phonetic.HaasePhonetik; import org.elasticsearch.index.analysis.phonetic.KoelnerPhonetik; import org.elasticsearch.index.analysis.phonetic.Nysiis; -import java.util.Arrays; -import java.util.HashSet; - /** * */ @@ -122,7 +122,7 @@ public class PhoneticTokenFilterFactory extends AbstractTokenFilterFactory { if (encoder == null) { if (ruletype != null && nametype != null) { if (languageset != null) { - final LanguageSet languages = LanguageSet.from(new HashSet(Arrays.asList(languageset))); + final LanguageSet languages = LanguageSet.from(new HashSet<>(Arrays.asList(languageset))); return new BeiderMorseFilter(tokenStream, new PhoneticEngine(nametype, ruletype, true), languages); } return new BeiderMorseFilter(tokenStream, new PhoneticEngine(nametype, ruletype, true)); diff --git a/plugins/analysis-phonetic/src/main/java/org/elasticsearch/index/analysis/phonetic/KoelnerPhonetik.java b/plugins/analysis-phonetic/src/main/java/org/elasticsearch/index/analysis/phonetic/KoelnerPhonetik.java index 57195062cdd..3c658191524 100644 --- a/plugins/analysis-phonetic/src/main/java/org/elasticsearch/index/analysis/phonetic/KoelnerPhonetik.java +++ b/plugins/analysis-phonetic/src/main/java/org/elasticsearch/index/analysis/phonetic/KoelnerPhonetik.java @@ -19,9 +19,6 @@ package org.elasticsearch.index.analysis.phonetic; -import org.apache.commons.codec.EncoderException; -import org.apache.commons.codec.StringEncoder; - import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -31,6 +28,9 @@ import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.commons.codec.EncoderException; +import org.apache.commons.codec.StringEncoder; + /** * Kölner Phonetik * @@ -49,13 +49,13 @@ public class KoelnerPhonetik implements StringEncoder { private static final String[] POSTEL_VARIATIONS_REPLACEMENTS = {"OWN", "AUN", "RW", "RB", "RSK", "WSK"}; private Pattern[] variationsPatterns; private boolean primary = false; - private final Set csz = new HashSet(Arrays.asList( + private final Set csz = new HashSet<>(Arrays.asList( 'C', 'S', 'Z')); - private final Set ckq = new HashSet(Arrays.asList( + private final Set ckq = new HashSet<>(Arrays.asList( 'C', 'K', 'Q')); - private final Set aouhkxq = new HashSet(Arrays.asList( + private final Set aouhkxq = new HashSet<>(Arrays.asList( 'A', 'O', 'U', 'H', 'K', 'X', 'Q')); - private final Set ahkloqrux = new HashSet(Arrays.asList( + private final Set ahkloqrux = new HashSet<>(Arrays.asList( 'A', 'H', 'K', 'L', 'O', 'Q', 'R', 'U', 'X')); /** @@ -139,10 +139,10 @@ public class KoelnerPhonetik implements StringEncoder { private List partition(String str) { String primaryForm = str; - List parts = new ArrayList(); + List parts = new ArrayList<>(); parts.add(primaryForm.replaceAll("[^\\p{L}\\p{N}]", "")); if (!primary) { - List tmpParts = new ArrayList(); + List tmpParts = new ArrayList<>(); tmpParts.addAll((Arrays.asList(str.split("[\\p{Z}\\p{C}\\p{P}]")))); int numberOfParts = tmpParts.size(); while (tmpParts.size() > 0) { @@ -156,9 +156,9 @@ public class KoelnerPhonetik implements StringEncoder { tmpParts.remove(0); } } - List variations = new ArrayList(); + List variations = new ArrayList<>(); for (int i = 0; i < parts.size(); i++) { - List variation = getVariations(parts.get(i)); + List variation = getVariations(parts.get(i)); if (variation != null) { variations.addAll(variation); } @@ -166,9 +166,9 @@ public class KoelnerPhonetik implements StringEncoder { return variations; } - private List getVariations(String str) { + private List getVariations(String str) { int position = 0; - List variations = new ArrayList(); + List variations = new ArrayList<>(); variations.add(""); while (position < str.length()) { int i = 0; @@ -182,7 +182,7 @@ public class KoelnerPhonetik implements StringEncoder { } if (substPos >= position) { i--; - List varNew = new ArrayList(); + List varNew = new ArrayList<>(); String prevPart = str.substring(position, substPos); for (int ii = 0; ii < variations.size(); ii++) { String tmp = variations.get(ii); diff --git a/plugins/delete-by-query/src/main/java/org/elasticsearch/action/deletebyquery/DeleteByQueryRequest.java b/plugins/delete-by-query/src/main/java/org/elasticsearch/action/deletebyquery/DeleteByQueryRequest.java index fa83fb4fd3d..7103cf1a4e0 100644 --- a/plugins/delete-by-query/src/main/java/org/elasticsearch/action/deletebyquery/DeleteByQueryRequest.java +++ b/plugins/delete-by-query/src/main/java/org/elasticsearch/action/deletebyquery/DeleteByQueryRequest.java @@ -105,7 +105,7 @@ public class DeleteByQueryRequest extends ActionRequest im } @Override - public DeleteByQueryRequest indices(String[] indices) { + public DeleteByQueryRequest indices(String... indices) { this.indices = indices; return this; } diff --git a/plugins/discovery-azure/build.gradle b/plugins/discovery-azure/build.gradle index d85d08794ea..12b479eb487 100644 --- a/plugins/discovery-azure/build.gradle +++ b/plugins/discovery-azure/build.gradle @@ -56,11 +56,9 @@ dependencyLicenses { mapping from: /jaxb-.*/, to: 'jaxb' } -compileJava.options.compilerArgs << '-Xlint:-path,-serial,-static,-unchecked' +compileJava.options.compilerArgs << '-Xlint:-path,-serial,-unchecked' // TODO: why is deprecation needed here but not in maven....? compileJava.options.compilerArgs << '-Xlint:-deprecation' -// TODO: and why does this static not show up in maven... -compileTestJava.options.compilerArgs << '-Xlint:-static' thirdPartyAudit.excludes = [ // classes are missing diff --git a/plugins/discovery-azure/src/main/java/org/elasticsearch/cloud/azure/AzureDiscoveryModule.java b/plugins/discovery-azure/src/main/java/org/elasticsearch/cloud/azure/AzureDiscoveryModule.java index 35bb20bc8a7..5215b90e7e1 100644 --- a/plugins/discovery-azure/src/main/java/org/elasticsearch/cloud/azure/AzureDiscoveryModule.java +++ b/plugins/discovery-azure/src/main/java/org/elasticsearch/cloud/azure/AzureDiscoveryModule.java @@ -47,11 +47,7 @@ public class AzureDiscoveryModule extends AbstractModule { private Settings settings; // pkg private so it is settable by tests - static Class computeServiceImpl = AzureComputeServiceImpl.class; - - public static Class getComputeServiceImpl() { - return computeServiceImpl; - } + Class computeServiceImpl = AzureComputeServiceImpl.class; @Inject public AzureDiscoveryModule(Settings settings) { diff --git a/plugins/jvm-example/build.gradle b/plugins/jvm-example/build.gradle index f0dd69ff8c4..c5828d9c86d 100644 --- a/plugins/jvm-example/build.gradle +++ b/plugins/jvm-example/build.gradle @@ -25,8 +25,6 @@ esplugin { // no unit tests test.enabled = false -compileJava.options.compilerArgs << "-Xlint:-rawtypes" - configurations { exampleFixture } diff --git a/plugins/jvm-example/src/main/java/org/elasticsearch/plugin/example/JvmExamplePlugin.java b/plugins/jvm-example/src/main/java/org/elasticsearch/plugin/example/JvmExamplePlugin.java index c1bcc65bfe2..0c0e71dc1c0 100644 --- a/plugins/jvm-example/src/main/java/org/elasticsearch/plugin/example/JvmExamplePlugin.java +++ b/plugins/jvm-example/src/main/java/org/elasticsearch/plugin/example/JvmExamplePlugin.java @@ -19,6 +19,10 @@ package org.elasticsearch.plugin.example; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; + import org.elasticsearch.common.component.LifecycleComponent; import org.elasticsearch.common.inject.AbstractModule; import org.elasticsearch.common.inject.Module; @@ -28,10 +32,6 @@ import org.elasticsearch.plugins.Plugin; import org.elasticsearch.repositories.RepositoriesModule; import org.elasticsearch.rest.action.cat.AbstractCatAction; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; - /** * Example of a plugin. */ @@ -59,6 +59,7 @@ public class JvmExamplePlugin extends Plugin { } @Override + @SuppressWarnings("rawtypes") // Plugin use a rawtype public Collection> nodeServices() { Collection> services = new ArrayList<>(); return services; diff --git a/plugins/lang-javascript/build.gradle b/plugins/lang-javascript/build.gradle index ead459f29d1..cce5869341e 100644 --- a/plugins/lang-javascript/build.gradle +++ b/plugins/lang-javascript/build.gradle @@ -26,13 +26,9 @@ dependencies { compile 'org.mozilla:rhino:1.7.7' } -compileJava.options.compilerArgs << "-Xlint:-rawtypes,-unchecked" -compileTestJava.options.compilerArgs << "-Xlint:-rawtypes,-unchecked" - integTest { cluster { systemProperty 'es.script.inline', 'on' systemProperty 'es.script.indexed', 'on' } } - diff --git a/plugins/lang-javascript/src/main/java/org/elasticsearch/script/javascript/JavaScriptScriptEngineService.java b/plugins/lang-javascript/src/main/java/org/elasticsearch/script/javascript/JavaScriptScriptEngineService.java index eca1265766d..14124551e76 100644 --- a/plugins/lang-javascript/src/main/java/org/elasticsearch/script/javascript/JavaScriptScriptEngineService.java +++ b/plugins/lang-javascript/src/main/java/org/elasticsearch/script/javascript/JavaScriptScriptEngineService.java @@ -19,6 +19,18 @@ package org.elasticsearch.script.javascript; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.security.AccessControlContext; +import java.security.AccessController; +import java.security.CodeSource; +import java.security.PrivilegedAction; +import java.security.cert.Certificate; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicLong; + import org.apache.lucene.index.LeafReaderContext; import org.apache.lucene.search.Scorer; import org.elasticsearch.SpecialPermission; @@ -49,18 +61,6 @@ import org.mozilla.javascript.ScriptableObject; import org.mozilla.javascript.SecurityController; import org.mozilla.javascript.WrapFactory; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.security.AccessControlContext; -import java.security.AccessController; -import java.security.CodeSource; -import java.security.PrivilegedAction; -import java.security.cert.Certificate; -import java.util.List; -import java.util.Map; -import java.util.concurrent.atomic.AtomicLong; - /** * */ @@ -348,12 +348,14 @@ public class JavaScriptScriptEngineService extends AbstractComponent implements setJavaPrimitiveWrap(false); // RingoJS does that..., claims its annoying... } - public Scriptable wrapAsJavaObject(Context cx, Scriptable scope, Object javaObject, Class staticType) { + @Override + @SuppressWarnings("unchecked") + public Scriptable wrapAsJavaObject(Context cx, Scriptable scope, Object javaObject, Class staticType) { if (javaObject instanceof Map) { - return NativeMap.wrap(scope, (Map) javaObject); + return NativeMap.wrap(scope, (Map) javaObject); } if (javaObject instanceof List) { - return NativeList.wrap(scope, (List) javaObject, staticType); + return NativeList.wrap(scope, (List) javaObject, staticType); } return super.wrapAsJavaObject(cx, scope, javaObject, staticType); } diff --git a/plugins/lang-javascript/src/main/java/org/elasticsearch/script/javascript/support/NativeMap.java b/plugins/lang-javascript/src/main/java/org/elasticsearch/script/javascript/support/NativeMap.java index 1dbf3454900..ef9be14b0dd 100644 --- a/plugins/lang-javascript/src/main/java/org/elasticsearch/script/javascript/support/NativeMap.java +++ b/plugins/lang-javascript/src/main/java/org/elasticsearch/script/javascript/support/NativeMap.java @@ -19,12 +19,12 @@ package org.elasticsearch.script.javascript.support; -import org.mozilla.javascript.Scriptable; -import org.mozilla.javascript.Wrapper; - import java.util.Iterator; import java.util.Map; +import org.mozilla.javascript.Scriptable; +import org.mozilla.javascript.Wrapper; + /** * Wrapper for exposing maps in Rhino scripts. * @@ -55,26 +55,17 @@ public class NativeMap implements Scriptable, Wrapper { this.map = map; } - /* (non-Javadoc) - * @see org.mozilla.javascript.Wrapper#unwrap() - */ - + @Override public Object unwrap() { return map; } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#getClassName() - */ - + @Override public String getClassName() { return "NativeMap"; } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#get(java.lang.String, org.mozilla.javascript.Scriptable) - */ - + @Override public Object get(String name, Scriptable start) { // get the property from the underlying QName map if ("length".equals(name)) { @@ -84,69 +75,47 @@ public class NativeMap implements Scriptable, Wrapper { } } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#get(int, org.mozilla.javascript.Scriptable) - */ - + @Override public Object get(int index, Scriptable start) { Object value = null; int i = 0; - Iterator itrValues = map.values().iterator(); + Iterator itrValues = map.values().iterator(); while (i++ <= index && itrValues.hasNext()) { value = itrValues.next(); } return value; } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#has(java.lang.String, org.mozilla.javascript.Scriptable) - */ - + @Override public boolean has(String name, Scriptable start) { // locate the property in the underlying map return map.containsKey(name); } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#has(int, org.mozilla.javascript.Scriptable) - */ - + @Override public boolean has(int index, Scriptable start) { return (index >= 0 && map.values().size() > index); } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#put(java.lang.String, org.mozilla.javascript.Scriptable, java.lang.Object) - */ - - @SuppressWarnings("unchecked") + @Override public void put(String name, Scriptable start, Object value) { map.put(name, value); } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#put(int, org.mozilla.javascript.Scriptable, java.lang.Object) - */ - + @Override public void put(int index, Scriptable start, Object value) { // TODO: implement? } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#delete(java.lang.String) - */ - + @Override public void delete(String name) { map.remove(name); } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#delete(int) - */ - + @Override public void delete(int index) { int i = 0; - Iterator itrKeys = map.keySet().iterator(); + Iterator itrKeys = map.keySet().iterator(); while (i <= index && itrKeys.hasNext()) { Object key = itrKeys.next(); if (i == index) { @@ -156,58 +125,37 @@ public class NativeMap implements Scriptable, Wrapper { } } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#getPrototype() - */ - + @Override public Scriptable getPrototype() { return this.prototype; } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#setPrototype(org.mozilla.javascript.Scriptable) - */ - + @Override public void setPrototype(Scriptable prototype) { this.prototype = prototype; } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#getParentScope() - */ - + @Override public Scriptable getParentScope() { return this.parentScope; } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#setParentScope(org.mozilla.javascript.Scriptable) - */ - + @Override public void setParentScope(Scriptable parent) { this.parentScope = parent; } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#getIds() - */ - + @Override public Object[] getIds() { return map.keySet().toArray(); } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#getDefaultValue(java.lang.Class) - */ - - public Object getDefaultValue(Class hint) { + @Override + public Object getDefaultValue(Class hint) { return null; } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#hasInstance(org.mozilla.javascript.Scriptable) - */ - + @Override public boolean hasInstance(Scriptable value) { if (!(value instanceof Wrapper)) return false; diff --git a/plugins/lang-javascript/src/main/java/org/elasticsearch/script/javascript/support/ScriptValueConverter.java b/plugins/lang-javascript/src/main/java/org/elasticsearch/script/javascript/support/ScriptValueConverter.java index a90948c1877..111d2a22b87 100644 --- a/plugins/lang-javascript/src/main/java/org/elasticsearch/script/javascript/support/ScriptValueConverter.java +++ b/plugins/lang-javascript/src/main/java/org/elasticsearch/script/javascript/support/ScriptValueConverter.java @@ -19,13 +19,6 @@ package org.elasticsearch.script.javascript.support; -import org.mozilla.javascript.Context; -import org.mozilla.javascript.IdScriptableObject; -import org.mozilla.javascript.NativeArray; -import org.mozilla.javascript.ScriptRuntime; -import org.mozilla.javascript.Scriptable; -import org.mozilla.javascript.Wrapper; - import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -33,6 +26,13 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.mozilla.javascript.Context; +import org.mozilla.javascript.IdScriptableObject; +import org.mozilla.javascript.NativeArray; +import org.mozilla.javascript.ScriptRuntime; +import org.mozilla.javascript.Scriptable; +import org.mozilla.javascript.Wrapper; + /** * Value Converter to marshal objects between Java and Javascript. * @@ -126,6 +126,7 @@ public final class ScriptValueConverter { value = list; } else if (value instanceof Map) { // ensure each value in the Map is unwrapped (which may have been an unwrapped NativeMap!) + @SuppressWarnings("unchecked") Map map = (Map) value; Map copyMap = new HashMap(map.size()); for (Object key : map.keySet()) { @@ -157,6 +158,7 @@ public final class ScriptValueConverter { Context.getCurrentContext(), scope, TYPE_DATE, new Object[]{date.getTime()}); } else if (value instanceof Collection) { // recursively convert each value in the collection + @SuppressWarnings("unchecked") Collection collection = (Collection) value; Object[] array = new Object[collection.size()]; int index = 0; @@ -166,7 +168,9 @@ public final class ScriptValueConverter { // convert array to a native JavaScript Array value = Context.getCurrentContext().newArray(scope, array); } else if (value instanceof Map) { - value = NativeMap.wrap(scope, (Map) value); + @SuppressWarnings("unchecked") + Map map = (Map) value; + value = NativeMap.wrap(scope, map); } // simple numbers, strings and booleans are wrapped automatically by Rhino diff --git a/plugins/lang-javascript/src/main/java/org/elasticsearch/script/javascript/support/ScriptableLinkedHashMap.java b/plugins/lang-javascript/src/main/java/org/elasticsearch/script/javascript/support/ScriptableLinkedHashMap.java index 680b20a0256..f4df25f0861 100644 --- a/plugins/lang-javascript/src/main/java/org/elasticsearch/script/javascript/support/ScriptableLinkedHashMap.java +++ b/plugins/lang-javascript/src/main/java/org/elasticsearch/script/javascript/support/ScriptableLinkedHashMap.java @@ -19,12 +19,12 @@ package org.elasticsearch.script.javascript.support; -import org.mozilla.javascript.Scriptable; - import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; +import org.mozilla.javascript.Scriptable; + /** * Implementation of a Scriptable Map. This is the best choice for maps that want to represent * JavaScript associative arrays - allowing access via key and integer index. It maintains and @@ -53,6 +53,7 @@ public class ScriptableLinkedHashMap extends LinkedHashMap implement /** * @see org.mozilla.javascript.Scriptable#getClassName() */ + @Override public String getClassName() { return "ScriptableMap"; } @@ -60,6 +61,7 @@ public class ScriptableLinkedHashMap extends LinkedHashMap implement /** * @see org.mozilla.javascript.Scriptable#get(java.lang.String, org.mozilla.javascript.Scriptable) */ + @Override public Object get(String name, Scriptable start) { // get the property from the underlying QName map if ("length".equals(name)) { @@ -72,10 +74,11 @@ public class ScriptableLinkedHashMap extends LinkedHashMap implement /** * @see org.mozilla.javascript.Scriptable#get(int, org.mozilla.javascript.Scriptable) */ + @Override public Object get(int index, Scriptable start) { Object value = null; int i = 0; - Iterator itrValues = this.values().iterator(); + Iterator itrValues = this.values().iterator(); while (i++ <= index && itrValues.hasNext()) { value = itrValues.next(); } @@ -85,6 +88,7 @@ public class ScriptableLinkedHashMap extends LinkedHashMap implement /** * @see org.mozilla.javascript.Scriptable#has(java.lang.String, org.mozilla.javascript.Scriptable) */ + @Override public boolean has(String name, Scriptable start) { // locate the property in the underlying map return containsKey(name); @@ -93,6 +97,7 @@ public class ScriptableLinkedHashMap extends LinkedHashMap implement /** * @see org.mozilla.javascript.Scriptable#has(int, org.mozilla.javascript.Scriptable) */ + @Override public boolean has(int index, Scriptable start) { return (index >= 0 && this.values().size() > index); } @@ -100,6 +105,7 @@ public class ScriptableLinkedHashMap extends LinkedHashMap implement /** * @see org.mozilla.javascript.Scriptable#put(java.lang.String, org.mozilla.javascript.Scriptable, java.lang.Object) */ + @Override @SuppressWarnings("unchecked") public void put(String name, Scriptable start, Object value) { // add the property to the underlying QName map @@ -109,6 +115,7 @@ public class ScriptableLinkedHashMap extends LinkedHashMap implement /** * @see org.mozilla.javascript.Scriptable#put(int, org.mozilla.javascript.Scriptable, java.lang.Object) */ + @Override public void put(int index, Scriptable start, Object value) { // TODO: implement? } @@ -116,6 +123,7 @@ public class ScriptableLinkedHashMap extends LinkedHashMap implement /** * @see org.mozilla.javascript.Scriptable#delete(java.lang.String) */ + @Override public void delete(String name) { // remove the property from the underlying QName map remove(name); @@ -124,9 +132,10 @@ public class ScriptableLinkedHashMap extends LinkedHashMap implement /** * @see org.mozilla.javascript.Scriptable#delete(int) */ + @Override public void delete(int index) { int i = 0; - Iterator itrKeys = this.keySet().iterator(); + Iterator itrKeys = this.keySet().iterator(); while (i <= index && itrKeys.hasNext()) { Object key = itrKeys.next(); if (i == index) { @@ -139,6 +148,7 @@ public class ScriptableLinkedHashMap extends LinkedHashMap implement /** * @see org.mozilla.javascript.Scriptable#getPrototype() */ + @Override public Scriptable getPrototype() { return this.prototype; } @@ -146,6 +156,7 @@ public class ScriptableLinkedHashMap extends LinkedHashMap implement /** * @see org.mozilla.javascript.Scriptable#setPrototype(org.mozilla.javascript.Scriptable) */ + @Override public void setPrototype(Scriptable prototype) { this.prototype = prototype; } @@ -153,6 +164,7 @@ public class ScriptableLinkedHashMap extends LinkedHashMap implement /** * @see org.mozilla.javascript.Scriptable#getParentScope() */ + @Override public Scriptable getParentScope() { return this.parentScope; } @@ -160,6 +172,7 @@ public class ScriptableLinkedHashMap extends LinkedHashMap implement /** * @see org.mozilla.javascript.Scriptable#setParentScope(org.mozilla.javascript.Scriptable) */ + @Override public void setParentScope(Scriptable parent) { this.parentScope = parent; } @@ -167,6 +180,7 @@ public class ScriptableLinkedHashMap extends LinkedHashMap implement /** * @see org.mozilla.javascript.Scriptable#getIds() */ + @Override public Object[] getIds() { return keySet().toArray(); } @@ -174,13 +188,15 @@ public class ScriptableLinkedHashMap extends LinkedHashMap implement /** * @see org.mozilla.javascript.Scriptable#getDefaultValue(java.lang.Class) */ - public Object getDefaultValue(Class hint) { + @Override + public Object getDefaultValue(Class hint) { return null; } /** * @see org.mozilla.javascript.Scriptable#hasInstance(org.mozilla.javascript.Scriptable) */ + @Override public boolean hasInstance(Scriptable instance) { return instance instanceof ScriptableLinkedHashMap; } diff --git a/plugins/lang-javascript/src/main/java/org/elasticsearch/script/javascript/support/ScriptableWrappedMap.java b/plugins/lang-javascript/src/main/java/org/elasticsearch/script/javascript/support/ScriptableWrappedMap.java index 9ff1f61c8d5..1aa2326482a 100644 --- a/plugins/lang-javascript/src/main/java/org/elasticsearch/script/javascript/support/ScriptableWrappedMap.java +++ b/plugins/lang-javascript/src/main/java/org/elasticsearch/script/javascript/support/ScriptableWrappedMap.java @@ -19,14 +19,14 @@ package org.elasticsearch.script.javascript.support; -import org.mozilla.javascript.Scriptable; -import org.mozilla.javascript.Wrapper; - import java.util.Collection; import java.util.Iterator; import java.util.Map; import java.util.Set; +import org.mozilla.javascript.Scriptable; +import org.mozilla.javascript.Wrapper; + /** * Implementation of a Scriptable Map. This is the best choice where you want values to be * persisted directly to an underlying map supplied on construction. The class automatically @@ -37,8 +37,8 @@ import java.util.Set; * * */ -public class ScriptableWrappedMap implements ScriptableMap, Wrapper { - private Map map; +public class ScriptableWrappedMap implements ScriptableMap, Wrapper { + private Map map; private Scriptable parentScope; private Scriptable prototype; @@ -54,38 +54,29 @@ public class ScriptableWrappedMap implements ScriptableMap, Wrapper { /** * Construct */ - public ScriptableWrappedMap(Map map) { + public ScriptableWrappedMap(Map map) { this.map = map; } /** * Construct */ - public ScriptableWrappedMap(Scriptable scope, Map map) { + public ScriptableWrappedMap(Scriptable scope, Map map) { this.parentScope = scope; this.map = map; } - /* (non-Javadoc) - * @see org.mozilla.javascript.Wrapper#unwrap() - */ - + @Override public Object unwrap() { return map; } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#getClassName() - */ - + @Override public String getClassName() { return "ScriptableWrappedMap"; } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#get(java.lang.String, org.mozilla.javascript.Scriptable) - */ - + @Override public Object get(String name, Scriptable start) { // get the property from the underlying QName map if ("length".equals(name)) { @@ -95,69 +86,47 @@ public class ScriptableWrappedMap implements ScriptableMap, Wrapper { } } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#get(int, org.mozilla.javascript.Scriptable) - */ - + @Override public Object get(int index, Scriptable start) { Object value = null; int i = 0; - Iterator itrValues = map.values().iterator(); + Iterator itrValues = map.values().iterator(); while (i++ <= index && itrValues.hasNext()) { value = itrValues.next(); } return ScriptValueConverter.wrapValue(this.parentScope != null ? this.parentScope : start, value); } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#has(java.lang.String, org.mozilla.javascript.Scriptable) - */ - + @Override public boolean has(String name, Scriptable start) { // locate the property in the underlying map return map.containsKey(name); } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#has(int, org.mozilla.javascript.Scriptable) - */ - + @Override public boolean has(int index, Scriptable start) { return (index >= 0 && map.values().size() > index); } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#put(java.lang.String, org.mozilla.javascript.Scriptable, java.lang.Object) - */ - - @SuppressWarnings("unchecked") + @Override public void put(String name, Scriptable start, Object value) { map.put(name, ScriptValueConverter.unwrapValue(value)); } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#put(int, org.mozilla.javascript.Scriptable, java.lang.Object) - */ - + @Override public void put(int index, Scriptable start, Object value) { // TODO: implement? } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#delete(java.lang.String) - */ - + @Override public void delete(String name) { map.remove(name); } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#delete(int) - */ - + @Override public void delete(int index) { int i = 0; - Iterator itrKeys = map.keySet().iterator(); + Iterator itrKeys = map.keySet().iterator(); while (i <= index && itrKeys.hasNext()) { Object key = itrKeys.next(); if (i == index) { @@ -167,58 +136,37 @@ public class ScriptableWrappedMap implements ScriptableMap, Wrapper { } } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#getPrototype() - */ - + @Override public Scriptable getPrototype() { return this.prototype; } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#setPrototype(org.mozilla.javascript.Scriptable) - */ - + @Override public void setPrototype(Scriptable prototype) { this.prototype = prototype; } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#getParentScope() - */ - + @Override public Scriptable getParentScope() { return this.parentScope; } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#setParentScope(org.mozilla.javascript.Scriptable) - */ - + @Override public void setParentScope(Scriptable parent) { this.parentScope = parent; } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#getIds() - */ - + @Override public Object[] getIds() { return map.keySet().toArray(); } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#getDefaultValue(java.lang.Class) - */ - - public Object getDefaultValue(Class hint) { + @Override + public Object getDefaultValue(Class hint) { return null; } - /* (non-Javadoc) - * @see org.mozilla.javascript.Scriptable#hasInstance(org.mozilla.javascript.Scriptable) - */ - + @Override public boolean hasInstance(Scriptable value) { if (!(value instanceof Wrapper)) return false; @@ -226,106 +174,66 @@ public class ScriptableWrappedMap implements ScriptableMap, Wrapper { return Map.class.isInstance(instance); } - /* (non-Javadoc) - * @see java.util.Map#clear() - */ - + @Override public void clear() { this.map.clear(); } - /* (non-Javadoc) - * @see java.util.Map#containsKey(java.lang.Object) - */ - + @Override public boolean containsKey(Object key) { return this.map.containsKey(key); } - /* (non-Javadoc) - * @see java.util.Map#containsValue(java.lang.Object) - */ - + @Override public boolean containsValue(Object value) { return this.map.containsValue(value); } - /* (non-Javadoc) - * @see java.util.Map#entrySet() - */ - - public Set entrySet() { + @Override + public Set> entrySet() { return this.map.entrySet(); } - /* (non-Javadoc) - * @see java.util.Map#get(java.lang.Object) - */ - + @Override public Object get(Object key) { return this.map.get(key); } - /* (non-Javadoc) - * @see java.util.Map#isEmpty() - */ - + @Override public boolean isEmpty() { return (this.map.size() == 0); } - /* (non-Javadoc) - * @see java.util.Map#keySet() - */ - - public Set keySet() { + @Override + public Set keySet() { return this.map.keySet(); } - /* (non-Javadoc) - * @see java.util.Map#put(java.lang.Object, java.lang.Object) - */ - + @Override public Object put(Object key, Object value) { return this.map.put(key, value); } - /* (non-Javadoc) - * @see java.util.Map#putAll(java.util.Map) - */ - - public void putAll(Map t) { + @Override + public void putAll(Map t) { this.map.putAll(t); } - /* (non-Javadoc) - * @see java.util.Map#remove(java.lang.Object) - */ - + @Override public Object remove(Object key) { return this.map.remove(key); } - /* (non-Javadoc) - * @see java.util.Map#size() - */ - + @Override public int size() { return this.map.size(); } - /* (non-Javadoc) - * @see java.util.Map#values() - */ - - public Collection values() { + @Override + public Collection values() { return this.map.values(); } - /* (non-Javadoc) - * @see java.lang.Object#toString() - */ - @Override public String toString() { return (this.map != null ? this.map.toString() : super.toString()); diff --git a/plugins/lang-javascript/src/test/java/org/elasticsearch/script/javascript/JavaScriptScriptEngineTests.java b/plugins/lang-javascript/src/test/java/org/elasticsearch/script/javascript/JavaScriptScriptEngineTests.java index 9d8357bb582..5ed2e7e4cb8 100644 --- a/plugins/lang-javascript/src/test/java/org/elasticsearch/script/javascript/JavaScriptScriptEngineTests.java +++ b/plugins/lang-javascript/src/test/java/org/elasticsearch/script/javascript/JavaScriptScriptEngineTests.java @@ -19,6 +19,12 @@ package org.elasticsearch.script.javascript; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.elasticsearch.common.collect.MapBuilder; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.script.CompiledScript; @@ -28,12 +34,6 @@ import org.elasticsearch.test.ESTestCase; import org.junit.After; import org.junit.Before; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.instanceOf; @@ -59,6 +59,7 @@ public class JavaScriptScriptEngineTests extends ESTestCase { assertThat(((Number) o).intValue(), equalTo(3)); } + @SuppressWarnings("unchecked") public void testMapAccess() { Map vars = new HashMap(); @@ -75,15 +76,17 @@ public class JavaScriptScriptEngineTests extends ESTestCase { assertThat(((String) o), equalTo("2")); } + @SuppressWarnings("unchecked") public void testJavaScriptObjectToMap() { Map vars = new HashMap(); Object o = se.executable(new CompiledScript(ScriptService.ScriptType.INLINE, "testJavaScriptObjectToMap", "js", se.compile("var obj1 = {}; obj1.prop1 = 'value1'; obj1.obj2 = {}; obj1.obj2.prop2 = 'value2'; obj1", Collections.emptyMap())), vars).run(); - Map obj1 = (Map) o; + Map obj1 = (Map) o; assertThat((String) obj1.get("prop1"), equalTo("value1")); assertThat((String) ((Map) obj1.get("obj2")).get("prop2"), equalTo("value2")); } + @SuppressWarnings("unchecked") public void testJavaScriptObjectMapInter() { Map vars = new HashMap(); Map ctx = new HashMap(); @@ -102,6 +105,7 @@ public class JavaScriptScriptEngineTests extends ESTestCase { assertThat((String) ((Map) ctx.get("obj2")).get("prop2"), equalTo("value2")); } + @SuppressWarnings("unchecked") public void testJavaScriptInnerArrayCreation() { Map ctx = new HashMap(); Map doc = new HashMap(); @@ -115,9 +119,10 @@ public class JavaScriptScriptEngineTests extends ESTestCase { Map unwrap = (Map) script.unwrap(ctx); - assertThat(((Map) unwrap.get("doc")).get("field1"), instanceOf(List.class)); + assertThat(((Map) unwrap.get("doc")).get("field1"), instanceOf(List.class)); } + @SuppressWarnings("unchecked") public void testAccessListInScript() { Map vars = new HashMap(); Map obj2 = MapBuilder.newMapBuilder().put("prop2", "value2").map(); diff --git a/plugins/lang-plan-a/build.gradle b/plugins/lang-plan-a/build.gradle index dc0cfca2fa7..810f0df4e16 100644 --- a/plugins/lang-plan-a/build.gradle +++ b/plugins/lang-plan-a/build.gradle @@ -35,7 +35,7 @@ dependencyLicenses { mapping from: /asm-.*/, to: 'asm' } -compileJava.options.compilerArgs << '-Xlint:-cast,-fallthrough,-rawtypes' +compileJava.options.compilerArgs << '-Xlint:-cast,-rawtypes' compileTestJava.options.compilerArgs << '-Xlint:-unchecked' // regeneration logic, comes in via ant right now diff --git a/plugins/lang-plan-a/src/main/java/org/elasticsearch/plan/a/Analyzer.java b/plugins/lang-plan-a/src/main/java/org/elasticsearch/plan/a/Analyzer.java index a20c32965b2..eb2681cfba8 100644 --- a/plugins/lang-plan-a/src/main/java/org/elasticsearch/plan/a/Analyzer.java +++ b/plugins/lang-plan-a/src/main/java/org/elasticsearch/plan/a/Analyzer.java @@ -2223,12 +2223,15 @@ class Analyzer extends PlanAParserBaseVisitor { case LONG: incremd.preConst = positive ? 1L : -1L; incremd.from = definition.longType; + break; case FLOAT: incremd.preConst = positive ? 1.0F : -1.0F; incremd.from = definition.floatType; + break; case DOUBLE: incremd.preConst = positive ? 1.0 : -1.0; incremd.from = definition.doubleType; + break; default: incremd.preConst = positive ? 1 : -1; incremd.from = definition.intType; diff --git a/plugins/lang-python/build.gradle b/plugins/lang-python/build.gradle index 103a15784ea..dde9a63bad1 100644 --- a/plugins/lang-python/build.gradle +++ b/plugins/lang-python/build.gradle @@ -26,9 +26,6 @@ dependencies { compile 'org.python:jython-standalone:2.7.0' } -compileJava.options.compilerArgs << "-Xlint:-unchecked" -compileTestJava.options.compilerArgs << "-Xlint:-unchecked" - integTest { cluster { systemProperty 'es.script.inline', 'on' diff --git a/plugins/lang-python/src/test/java/org/elasticsearch/script/python/PythonScriptEngineTests.java b/plugins/lang-python/src/test/java/org/elasticsearch/script/python/PythonScriptEngineTests.java index a0bfab43c54..fd876d8cee8 100644 --- a/plugins/lang-python/src/test/java/org/elasticsearch/script/python/PythonScriptEngineTests.java +++ b/plugins/lang-python/src/test/java/org/elasticsearch/script/python/PythonScriptEngineTests.java @@ -19,6 +19,11 @@ package org.elasticsearch.script.python; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + import org.elasticsearch.common.collect.MapBuilder; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.script.CompiledScript; @@ -28,11 +33,6 @@ import org.elasticsearch.test.ESTestCase; import org.junit.After; import org.junit.Before; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.instanceOf; @@ -58,6 +58,7 @@ public class PythonScriptEngineTests extends ESTestCase { assertThat(((Number) o).intValue(), equalTo(3)); } + @SuppressWarnings("unchecked") public void testMapAccess() { Map vars = new HashMap(); @@ -74,6 +75,7 @@ public class PythonScriptEngineTests extends ESTestCase { assertThat(((String) o), equalTo("2")); } + @SuppressWarnings("unchecked") public void testObjectMapInter() { Map vars = new HashMap(); Map ctx = new HashMap(); @@ -92,6 +94,7 @@ public class PythonScriptEngineTests extends ESTestCase { assertThat((String) ((Map) ctx.get("obj2")).get("prop2"), equalTo("value2")); } + @SuppressWarnings("unchecked") public void testAccessListInScript() { Map vars = new HashMap(); Map obj2 = MapBuilder.newMapBuilder().put("prop2", "value2").map(); diff --git a/plugins/mapper-murmur3/build.gradle b/plugins/mapper-murmur3/build.gradle index ca93c118487..5b985d9138f 100644 --- a/plugins/mapper-murmur3/build.gradle +++ b/plugins/mapper-murmur3/build.gradle @@ -21,5 +21,3 @@ esplugin { description 'The Mapper Murmur3 plugin allows to compute hashes of a field\'s values at index-time and to store them in the index.' classname 'org.elasticsearch.plugin.mapper.MapperMurmur3Plugin' } - -compileJava.options.compilerArgs << "-Xlint:-rawtypes" diff --git a/plugins/mapper-murmur3/src/main/java/org/elasticsearch/index/mapper/murmur3/Murmur3FieldMapper.java b/plugins/mapper-murmur3/src/main/java/org/elasticsearch/index/mapper/murmur3/Murmur3FieldMapper.java index 03b00d2ac39..ce78c75d783 100644 --- a/plugins/mapper-murmur3/src/main/java/org/elasticsearch/index/mapper/murmur3/Murmur3FieldMapper.java +++ b/plugins/mapper-murmur3/src/main/java/org/elasticsearch/index/mapper/murmur3/Murmur3FieldMapper.java @@ -19,6 +19,10 @@ package org.elasticsearch.index.mapper.murmur3; +import java.io.IOException; +import java.util.List; +import java.util.Map; + import org.apache.lucene.document.Field; import org.apache.lucene.index.IndexOptions; import org.apache.lucene.util.BytesRef; @@ -35,10 +39,6 @@ import org.elasticsearch.index.mapper.ParseContext; import org.elasticsearch.index.mapper.core.LongFieldMapper; import org.elasticsearch.index.mapper.core.NumberFieldMapper; -import java.io.IOException; -import java.util.List; -import java.util.Map; - import static org.elasticsearch.index.mapper.core.TypeParsers.parseNumberField; public class Murmur3FieldMapper extends LongFieldMapper { @@ -93,8 +93,7 @@ public class Murmur3FieldMapper extends LongFieldMapper { public static class TypeParser implements Mapper.TypeParser { @Override - @SuppressWarnings("unchecked") - public Mapper.Builder parse(String name, Map node, ParserContext parserContext) throws MapperParsingException { + public Mapper.Builder parse(String name, Map node, ParserContext parserContext) throws MapperParsingException { Builder builder = new Builder(name); // tweaking these settings is no longer allowed, the entire purpose of murmur3 fields is to store a hash diff --git a/rest-api-spec/src/main/resources/rest-api-spec/api/indices.delete_warmer.json b/rest-api-spec/src/main/resources/rest-api-spec/api/indices.delete_warmer.json deleted file mode 100644 index 7284da6291a..00000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/api/indices.delete_warmer.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "indices.delete_warmer": { - "documentation": "http://www.elastic.co/guide/en/elasticsearch/reference/master/indices-warmers.html", - "methods": ["DELETE"], - "url": { - "path": "/{index}/_warmer/{name}", - "paths": ["/{index}/_warmer/{name}", "/{index}/_warmers/{name}"], - "parts": { - "index": { - "type" : "list", - "required" : true, - "description" : "A comma-separated list of index names to delete warmers from (supports wildcards); use `_all` to perform the operation on all indices." - }, - "name" : { - "type" : "list", - "required" : true, - "description" : "A comma-separated list of warmer names to delete (supports wildcards); use `_all` to delete all warmers in the specified indices. You must specify a name either in the uri or in the parameters." - } - }, - "params": { - "master_timeout": { - "type" : "time", - "description" : "Specify timeout for connection to master" - }, - "name" : { - "type" : "list", - "description" : "A comma-separated list of warmer names to delete (supports wildcards); use `_all` to delete all warmers in the specified indices. You must specify a name either in the uri or in the parameters." - } - } - }, - "body": null - } -} diff --git a/rest-api-spec/src/main/resources/rest-api-spec/api/indices.get.json b/rest-api-spec/src/main/resources/rest-api-spec/api/indices.get.json index 5c426f962a7..2c0c59f6898 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/api/indices.get.json +++ b/rest-api-spec/src/main/resources/rest-api-spec/api/indices.get.json @@ -14,7 +14,7 @@ "feature":{ "type":"list", "description":"A comma-separated list of features", - "options": ["_settings", "_mappings", "_warmers", "_aliases"] + "options": ["_settings", "_mappings", "_aliases"] } }, "params":{ diff --git a/rest-api-spec/src/main/resources/rest-api-spec/api/indices.get_warmer.json b/rest-api-spec/src/main/resources/rest-api-spec/api/indices.get_warmer.json deleted file mode 100644 index fbd7abbc34c..00000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/api/indices.get_warmer.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "indices.get_warmer": { - "documentation": "http://www.elastic.co/guide/en/elasticsearch/reference/master/indices-warmers.html", - "methods": ["GET"], - "url": { - "path": "/_warmer", - "paths": [ "/_warmer", "/{index}/_warmer", "/{index}/_warmer/{name}", "/_warmer/{name}", "/{index}/{type}/_warmer/{name}"], - "parts": { - "index": { - "type" : "list", - "description" : "A comma-separated list of index names to restrict the operation; use `_all` to perform the operation on all indices" - }, - "name": { - "type" : "list", - "description" : "The name of the warmer (supports wildcards); leave empty to get all warmers" - }, - "type": { - "type" : "list", - "description" : "A comma-separated list of document types to restrict the operation; leave empty to perform the operation on all types" - } - }, - "params": { - "ignore_unavailable": { - "type" : "boolean", - "description" : "Whether specified concrete indices should be ignored when unavailable (missing or closed)" - }, - "allow_no_indices": { - "type" : "boolean", - "description" : "Whether to ignore if a wildcard indices expression resolves into no concrete indices. (This includes `_all` string or when no indices have been specified)" - }, - "expand_wildcards": { - "type" : "enum", - "options" : ["open","closed","none","all"], - "default" : "open", - "description" : "Whether to expand wildcard expression to concrete indices that are open, closed or both." - }, - "local": { - "type": "boolean", - "description": "Return local information, do not retrieve the state from master node (default: false)" - } - } - }, - "body": null - } -} diff --git a/rest-api-spec/src/main/resources/rest-api-spec/api/indices.put_warmer.json b/rest-api-spec/src/main/resources/rest-api-spec/api/indices.put_warmer.json deleted file mode 100644 index 9039367d15f..00000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/api/indices.put_warmer.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "indices.put_warmer": { - "documentation": "http://www.elastic.co/guide/en/elasticsearch/reference/master/indices-warmers.html", - "methods": ["PUT", "POST"], - "url": { - "path": "/{index}/_warmer/{name}", - "paths": ["/_warmer/{name}", "/{index}/_warmer/{name}", "/{index}/{type}/_warmer/{name}", "/_warmers/{name}", "/{index}/_warmers/{name}", "/{index}/{type}/_warmers/{name}"], - "parts": { - "index": { - "type" : "list", - "description" : "A comma-separated list of index names to register the warmer for; use `_all` or omit to perform the operation on all indices" - }, - "name": { - "type" : "string", - "required" : true, - "description" : "The name of the warmer" - }, - "type": { - "type" : "list", - "description" : "A comma-separated list of document types to register the warmer for; leave empty to perform the operation on all types" - } - }, - "params": { - "master_timeout": { - "type" : "time", - "description" : "Specify timeout for connection to master" - }, - "ignore_unavailable": { - "type" : "boolean", - "description" : "Whether specified concrete indices should be ignored when unavailable (missing or closed) in the search request to warm" - }, - "allow_no_indices": { - "type" : "boolean", - "description" : "Whether to ignore if a wildcard indices expression resolves into no concrete indices in the search request to warm. (This includes `_all` string or when no indices have been specified)" - }, - "expand_wildcards": { - "type" : "enum", - "options" : ["open","closed","none","all"], - "default" : "open", - "description" : "Whether to expand wildcard expression to concrete indices that are open, closed or both, in the search request to warm." - }, - "request_cache": { - "type" : "boolean", - "description" : "Specify whether the request to be warmed should use the request cache, defaults to index level setting" - } - } - }, - "body": { - "description" : "The search request definition for the warmer (query, filters, facets, sorting, etc)", - "required" : true - } - } -} diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.create/10_basic.yaml b/rest-api-spec/src/main/resources/rest-api-spec/test/indices.create/10_basic.yaml index acb4da22716..3fc0e00d637 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.create/10_basic.yaml +++ b/rest-api-spec/src/main/resources/rest-api-spec/test/indices.create/10_basic.yaml @@ -30,25 +30,6 @@ - match: { test_index.settings.index.number_of_replicas: "0"} ---- -"Create index with warmers": - - - do: - indices.create: - index: test_index - body: - warmers: - test_warmer: - source: - query: - match_all: {} - - - do: - indices.get_warmer: - index: test_index - - - match: {test_index.warmers.test_warmer.source.query.match_all: {}} - --- "Create index with aliases": @@ -81,49 +62,3 @@ - match: {test_index.aliases.test_clias.filter.term.field: value} - is_false: test_index.aliases.test_clias.index_routing - is_false: test_index.aliases.test_clias.search_routing - ---- -"Create index with mappings, settings, warmers and aliases": - - - do: - indices.create: - index: test_index - body: - mappings: - type_1: {} - settings: - number_of_replicas: "0" - warmers: - test_warmer: - source: - query: - match_all: {} - aliases: - test_alias: {} - test_blias: {routing: b} - - - do: - indices.get_mapping: - index: test_index - - - match: { test_index.mappings.type_1: {}} - - - do: - indices.get_settings: - index: test_index - - - match: { test_index.settings.index.number_of_replicas: "0"} - - - do: - indices.get_warmer: - index: test_index - - - match: { test_index.warmers.test_warmer.source.query.match_all: {}} - - - do: - indices.get_alias: - index: test_index - - - match: { test_index.aliases.test_alias: {}} - - match: { test_index.aliases.test_blias.search_routing: b} - - match: { test_index.aliases.test_blias.index_routing: b} diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.delete_warmer/all_path_options.yaml b/rest-api-spec/src/main/resources/rest-api-spec/test/indices.delete_warmer/all_path_options.yaml deleted file mode 100644 index 603b01c15a6..00000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.delete_warmer/all_path_options.yaml +++ /dev/null @@ -1,218 +0,0 @@ -setup: - - do: - indices.create: - index: test_index1 - body: - warmers: - test_warmer1: - source: - query: - match_all: {} - test_warmer2: - source: - query: - match_all: {} - - - do: - indices.create: - index: test_index2 - body: - warmers: - test_warmer1: - source: - query: - match_all: {} - test_warmer2: - source: - query: - match_all: {} - - - do: - indices.create: - index: foo - body: - warmers: - test_warmer1: - source: - query: - match_all: {} - test_warmer2: - source: - query: - match_all: {} - ---- -"Check setup": - - - do: - indices.get_warmer: { index: _all, name: '*' } - - - match: {test_index1.warmers.test_warmer1.source.query.match_all: {}} - - match: {test_index1.warmers.test_warmer2.source.query.match_all: {}} - - match: {test_index2.warmers.test_warmer1.source.query.match_all: {}} - - match: {test_index2.warmers.test_warmer2.source.query.match_all: {}} - - match: {foo.warmers.test_warmer1.source.query.match_all: {}} - - match: {foo.warmers.test_warmer2.source.query.match_all: {}} - - ---- -"check delete with _all index": - - do: - indices.delete_warmer: - index: _all - name: test_warmer1 - - - do: - indices.get_warmer: {} - - - match: {test_index1.warmers.test_warmer2.source.query.match_all: {}} - - match: {test_index2.warmers.test_warmer2.source.query.match_all: {}} - - match: {foo.warmers.test_warmer2.source.query.match_all: {}} - ---- -"check delete with * index": - - do: - indices.delete_warmer: - index: "*" - name: test_warmer1 - - - do: - indices.get_warmer: {} - - - match: {test_index1.warmers.test_warmer2.source.query.match_all: {}} - - match: {test_index2.warmers.test_warmer2.source.query.match_all: {}} - - match: {foo.warmers.test_warmer2.source.query.match_all: {}} - ---- -"check delete with index list": - - do: - indices.delete_warmer: - index: "test_index1,test_index2" - name: test_warmer1 - - - do: - indices.get_warmer: { index: _all, name: 'test_warmer1' } - - - match: {foo.warmers.test_warmer1.source.query.match_all: {}} - - is_false: test_index1 - - is_false: test_index2 - - - do: - indices.get_warmer: { index: _all, name: 'test_warmer2' } - - - match: {test_index1.warmers.test_warmer2.source.query.match_all: {}} - - match: {test_index2.warmers.test_warmer2.source.query.match_all: {}} - - match: {foo.warmers.test_warmer2.source.query.match_all: {}} - ---- -"check delete with prefix* index": - - do: - indices.delete_warmer: - index: "test_*" - name: test_warmer1 - - - do: - indices.get_warmer: { index: _all, name: 'test_warmer1' } - - - match: {foo.warmers.test_warmer1.source.query.match_all: {}} - - is_false: test_index1 - - is_false: test_index2 - - - do: - indices.get_warmer: { index: _all, name: 'test_warmer2' } - - - match: {test_index1.warmers.test_warmer2.source.query.match_all: {}} - - match: {test_index2.warmers.test_warmer2.source.query.match_all: {}} - - match: {foo.warmers.test_warmer2.source.query.match_all: {}} - - ---- -"check delete with index list and * warmers": - - do: - indices.delete_warmer: - index: "test_index1,test_index2" - name: "*" - - - do: - indices.get_warmer: { index: _all, name: 'test_warmer1' } - - - match: {foo.warmers.test_warmer1.source.query.match_all: {}} - - is_false: test_index1 - - is_false: test_index2 - - - do: - indices.get_warmer: { index: _all, name: 'test_warmer2' } - - - match: {foo.warmers.test_warmer2.source.query.match_all: {}} - - is_false: test_index1 - - is_false: test_index2 - ---- -"check delete with index list and _all warmers": - - do: - indices.delete_warmer: - index: "test_index1,test_index2" - name: _all - - - do: - indices.get_warmer: { index: _all, name: 'test_warmer1' } - - - match: {foo.warmers.test_warmer1.source.query.match_all: {}} - - is_false: test_index1 - - is_false: test_index2 - - - do: - indices.get_warmer: { index: _all, name: 'test_warmer2' } - - - match: {foo.warmers.test_warmer2.source.query.match_all: {}} - - is_false: test_index1 - - is_false: test_index2 - ---- -"check delete with index list and wildcard warmers": - - do: - indices.delete_warmer: - index: "test_index1,test_index2" - name: "*1" - - - do: - indices.get_warmer: { index: _all, name: 'test_warmer1' } - - - match: {foo.warmers.test_warmer1.source.query.match_all: {}} - - is_false: test_index1 - - is_false: test_index2 - - - do: - indices.get_warmer: { index: _all, name: 'test_warmer2' } - - - match: {test_index1.warmers.test_warmer2.source.query.match_all: {}} - - match: {test_index2.warmers.test_warmer2.source.query.match_all: {}} - - match: {foo.warmers.test_warmer2.source.query.match_all: {}} - ---- -"check 404 on no matching test_warmer": - - do: - catch: missing - indices.delete_warmer: - index: "*" - name: "non_existent" - - - do: - catch: missing - indices.delete_warmer: - index: "non_existent" - name: "test_warmer1" - - ---- -"check delete with blank index and blank test_warmer": - - do: - catch: param - indices.delete_warmer: - name: "test_warmer1" - - - do: - catch: param - indices.delete_warmer: - index: "test_index1" - diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.get/10_basic.yaml b/rest-api-spec/src/main/resources/rest-api-spec/test/indices.get/10_basic.yaml index 4c5251b36a3..218d1e0433c 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.get/10_basic.yaml +++ b/rest-api-spec/src/main/resources/rest-api-spec/test/indices.get/10_basic.yaml @@ -10,11 +10,6 @@ setup: test_blias: {} mappings: type_1: {} - warmers: - test_warmer: - source: - query: - match_all: {} settings: number_of_shards: 1 number_of_replicas: 1 @@ -59,7 +54,6 @@ setup: - is_true: test_index.aliases - is_true: test_index.settings - - is_true: test_index.warmers - is_true: test_index.mappings --- @@ -73,20 +67,6 @@ setup: - is_true: test_index.mappings - is_false: test_index.aliases - is_false: test_index.settings - - is_false: test_index.warmers - ---- -"Get index infos for mappings and warmers only": - - - do: - indices.get: - index: test_index - feature: _mapping,_warmer - - - is_true: test_index.mappings - - is_true: test_index.warmers - - is_false: test_index.aliases - - is_false: test_index.settings --- "Get index infos should work on aliases": @@ -94,10 +74,9 @@ setup: - do: indices.get: index: test_blias - feature: _mapping,_warmer + feature: _mapping - is_true: test_index.mappings - - is_true: test_index.warmers - is_false: test_index.aliases - is_false: test_index.settings @@ -113,7 +92,6 @@ setup: - is_true: test_index.settings - is_true: test_index_2.settings - is_false: test_index.aliases - - is_false: test_index.warmers --- "Get index infos with human settings should return index creation date and version in readable format": diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.get_warmer/10_basic.yaml b/rest-api-spec/src/main/resources/rest-api-spec/test/indices.get_warmer/10_basic.yaml deleted file mode 100644 index 668a6119c3d..00000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.get_warmer/10_basic.yaml +++ /dev/null @@ -1,201 +0,0 @@ ---- -setup: - - do: - indices.create: - index: test_1 - body: - warmers: - warmer_1: - source: { query: { match_all: { }}} - warmer_2: - source: { query: { match_all: { }}} - - - - do: - indices.create: - index: test_2 - body: - warmers: - warmer_2: - source: { query: { match_all: { }}} - warmer_3: - source: { query: { match_all: { }}} - - - do: - cluster.health: - wait_for_status: yellow - ---- -"Get /_warmer": - - - do: - indices.get_warmer: {} - - - match: { test_1.warmers.warmer_1.source.query.match_all: {}} - - match: { test_1.warmers.warmer_2.source.query.match_all: {}} - - match: { test_2.warmers.warmer_2.source.query.match_all: {}} - - match: { test_2.warmers.warmer_3.source.query.match_all: {}} - ---- -"Get /{index}/_warmer": - - - do: - indices.get_warmer: - index: test_1 - - - match: { test_1.warmers.warmer_1.source.query.match_all: {}} - - match: { test_1.warmers.warmer_2.source.query.match_all: {}} - - is_false: test_2 - - ---- -"Get /{index}/_warmer/_all": - - - do: - indices.get_warmer: - index: test_1 - name: _all - - - match: { test_1.warmers.warmer_1.source.query.match_all: {}} - - match: { test_1.warmers.warmer_2.source.query.match_all: {}} - - is_false: test_2 - ---- -"Get /{index}/_warmer/*": - - - do: - indices.get_warmer: - index: test_1 - name: '*' - - - match: { test_1.warmers.warmer_1.source.query.match_all: {}} - - match: { test_1.warmers.warmer_2.source.query.match_all: {}} - - is_false: test_2 - ---- -"Get /{index}/_warmer/{name}": - - - do: - indices.get_warmer: - index: test_1 - name: warmer_1 - - - match: { test_1.warmers.warmer_1.source.query.match_all: {}} - - is_false: test_1.warmers.warmer_2 - - is_false: test_2 - ---- -"Get /{index}/_warmer/{name,name}": - - - do: - indices.get_warmer: - index: test_1 - name: warmer_1,warmer_2 - - - match: { test_1.warmers.warmer_1.source.query.match_all: {}} - - match: { test_1.warmers.warmer_2.source.query.match_all: {}} - - is_false: test_2 - ---- -"Get /{index}/_warmer/{name*}": - - - do: - indices.get_warmer: - index: test_1 - name: '*2' - - - match: { test_1.warmers.warmer_2.source.query.match_all: {}} - - is_false: test_1.warmers.warmer_1 - - is_false: test_2 - ---- -"Get /_warmer/{name}": - - - do: - indices.get_warmer: - name: warmer_2 - - - match: { test_1.warmers.warmer_2.source.query.match_all: {}} - - match: { test_2.warmers.warmer_2.source.query.match_all: {}} - - is_false: test_1.warmers.warmer_1 - - is_false: test_2.warmers.warmer_3 - ---- -"Get /_all/_warmer/{name}": - - - do: - indices.get_warmer: - index: _all - name: warmer_2 - - - match: { test_1.warmers.warmer_2.source.query.match_all: {}} - - match: { test_2.warmers.warmer_2.source.query.match_all: {}} - - is_false: test_1.warmers.warmer_1 - - is_false: test_2.warmers.warmer_3 - ---- -"Get /*/_warmer/{name}": - - - do: - indices.get_warmer: - index: '*' - name: warmer_2 - - - match: { test_1.warmers.warmer_2.source.query.match_all: {}} - - match: { test_2.warmers.warmer_2.source.query.match_all: {}} - - is_false: test_1.warmers.warmer_1 - - is_false: test_2.warmers.warmer_3 - ---- -"Get /index,index/_warmer/{name}": - - - do: - indices.get_warmer: - index: test_1,test_2 - name: warmer_2 - - - match: { test_1.warmers.warmer_2.source.query.match_all: {}} - - match: { test_2.warmers.warmer_2.source.query.match_all: {}} - - is_false: test_2.warmers.warmer_3 - ---- -"Get /index*/_warmer/{name}": - - - do: - indices.get_warmer: - index: '*2' - name: warmer_2 - - - match: { test_2.warmers.warmer_2.source.query.match_all: {}} - - is_false: test_1 - - is_false: test_2.warmers.warmer_3 - ---- -"Empty response when no matching warmer": - - - do: - indices.get_warmer: - index: '*' - name: non_existent - - - match: { '': {}} - ---- -"Throw 404 on missing index": - - - do: - catch: missing - indices.get_warmer: - index: non_existent - name: '*' - ---- -"Get /_warmer with local flag": - - - do: - indices.get_warmer: - local: true - - - is_true: test_1 - - is_true: test_2 - diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.get_warmer/20_empty.yaml b/rest-api-spec/src/main/resources/rest-api-spec/test/indices.get_warmer/20_empty.yaml deleted file mode 100644 index 702b0cd01d1..00000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.get_warmer/20_empty.yaml +++ /dev/null @@ -1,19 +0,0 @@ ---- -setup: - - - do: - indices.create: - index: test_1 - - - do: - indices.create: - index: test_2 - ---- -"Check empty warmers when getting all warmers via /_warmer": - - - do: - indices.get_warmer: {} - - - match: { test_1.warmers: {}} - - match: { test_2.warmers: {}} diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.put_warmer/10_basic.yaml b/rest-api-spec/src/main/resources/rest-api-spec/test/indices.put_warmer/10_basic.yaml deleted file mode 100644 index 7e4c57429ec..00000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.put_warmer/10_basic.yaml +++ /dev/null @@ -1,145 +0,0 @@ ---- -setup: - - do: - indices.create: - index: test_index - - - do: - indices.create: - index: test_idx - - - do: - cluster.health: - wait_for_status: yellow - - - do: - indices.put_warmer: - index: test_idx - name: test_warmer2 - body: - query: - match_all: {} - - - do: - indices.put_warmer: - index: test_index - name: test_warmer - body: - query: - match_all: {} - ---- -"Basic test for warmers": - - do: - indices.get_warmer: - index: test_index - name: test_warmer - - - match: {test_index.warmers.test_warmer.source.query.match_all: {boost: 1.0}} - - - do: - indices.delete_warmer: - index: test_index - name: test_warmer - - - do: - indices.get_warmer: - index: test_index - name: test_warmer - - - match: { '': {}} - ---- -"Getting all warmers via /_warmer should work": - - - do: - indices.get_warmer: {} - - - match: {test_index.warmers.test_warmer.source.query.match_all: {boost: 1.0}} - - match: {test_idx.warmers.test_warmer2.source.query.match_all: {boost: 1.0}} - - ---- -"Getting warmers for several indices should work using *": - - - do: - indices.get_warmer: - index: '*' - name: '*' - - - match: {test_index.warmers.test_warmer.source.query.match_all: {boost: 1.0}} - - match: {test_idx.warmers.test_warmer2.source.query.match_all: {boost: 1.0}} - ---- -"Getting warmers for several indices should work using _all": - - - do: - indices.get_warmer: - index: _all - name: _all - - - match: {test_index.warmers.test_warmer.source.query.match_all: {boost: 1.0}} - - match: {test_idx.warmers.test_warmer2.source.query.match_all: {boost: 1.0}} - ---- -"Getting all warmers without specifying index should work": - - - do: - indices.get_warmer: - name: _all - - - match: {test_index.warmers.test_warmer.source.query.match_all: {boost: 1.0}} - - match: {test_idx.warmers.test_warmer2.source.query.match_all: {boost: 1.0}} - ---- -"Getting warmers for several indices should work using prefix*": - - - do: - indices.get_warmer: - index: test_i* - name: test_w* - - - match: {test_index.warmers.test_warmer.source.query.match_all: {boost: 1.0}} - - match: {test_idx.warmers.test_warmer2.source.query.match_all: {boost: 1.0}} - ---- -"Getting warmers for several indices should work using comma-separated lists": - - - do: - indices.get_warmer: - index: test_index,test_idx - name: test_warmer,test_warmer2 - - - match: {test_index.warmers.test_warmer.source.query.match_all: {boost: 1.0}} - - match: {test_idx.warmers.test_warmer2.source.query.match_all: {boost: 1.0}} - ---- -"Getting a non-existent warmer on an existing index should return an empty body": - - - do: - indices.get_warmer: - index: test_index - name: non-existent - - - match: { '': {}} - ---- -"Getting an existent and non-existent warmer should return the existent and no data about the non-existent warmer": - - - do: - indices.get_warmer: - index: test_index - name: test_warmer,non-existent - - - match: {test_index.warmers.test_warmer.source.query.match_all: {boost: 1.0}} - - is_false: test_index.warmers.non-existent - ---- -"Getting warmer on an non-existent index should return 404": - - - do: - catch: missing - indices.get_warmer: - index: non-existent - name: foo - diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.put_warmer/20_aliases.yaml b/rest-api-spec/src/main/resources/rest-api-spec/test/indices.put_warmer/20_aliases.yaml deleted file mode 100644 index b8a2fa6b27e..00000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.put_warmer/20_aliases.yaml +++ /dev/null @@ -1,30 +0,0 @@ ---- -"Getting warmer for aliases should return the real index as key": - - - do: - indices.create: - index: test_index - - - do: - cluster.health: - wait_for_status: yellow - - - do: - indices.put_warmer: - index: test_index - name: test_warmer - body: - query: - match_all: {} - - - do: - indices.put_alias: - index: test_index - name: test_alias - - - do: - indices.get_warmer: - index: test_alias - - - match: {test_index.warmers.test_warmer.source.query.match_all: {boost: 1.0}} - diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.put_warmer/all_path_options.yaml b/rest-api-spec/src/main/resources/rest-api-spec/test/indices.put_warmer/all_path_options.yaml deleted file mode 100644 index ffad427101a..00000000000 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.put_warmer/all_path_options.yaml +++ /dev/null @@ -1,134 +0,0 @@ ---- -setup: - - - do: - indices.create: - index: test_index1 - - - do: - indices.create: - index: test_index2 - - - do: - indices.create: - index: foo - - - do: - cluster.health: - wait_for_status: yellow - ---- -"put warmer per index": - - - do: - indices.put_warmer: - index: test_index1 - name: warmer - body: - query: - match_all: {} - - do: - indices.put_warmer: - index: test_index2 - name: warmer - body: - query: - match_all: {} - - - do: - indices.get_warmer: { index: _all, name: '*' } - - - match: {test_index1.warmers.warmer.source.query.match_all: {boost: 1.0}} - - match: {test_index2.warmers.warmer.source.query.match_all: {boost: 1.0}} - - is_false: foo - ---- -"put warmer in _all index": - - do: - indices.put_warmer: - index: _all - name: warmer - body: - query: - match_all: {} - - do: - indices.get_warmer: { index: _all, name: '*' } - - - match: {test_index1.warmers.warmer.source.query.match_all: {boost: 1.0}} - - match: {test_index2.warmers.warmer.source.query.match_all: {boost: 1.0}} - - match: {foo.warmers.warmer.source.query.match_all: {boost: 1.0}} - ---- -"put warmer in * index": - - do: - indices.put_warmer: - index: "*" - name: warmer - body: - query: - match_all: {} - - do: - indices.get_warmer: { index: _all, name: '*' } - - - match: {test_index1.warmers.warmer.source.query.match_all: {boost: 1.0}} - - match: {test_index2.warmers.warmer.source.query.match_all: {boost: 1.0}} - - match: {foo.warmers.warmer.source.query.match_all: {boost: 1.0}} - ---- -"put warmer prefix* index": - - do: - indices.put_warmer: - index: "test_index*" - name: warmer - body: - query: - match_all: {} - - do: - indices.get_warmer: { index: _all, name: '*' } - - - match: {test_index1.warmers.warmer.source.query.match_all: {boost: 1.0}} - - match: {test_index2.warmers.warmer.source.query.match_all: {boost: 1.0}} - - is_false: foo - ---- -"put warmer in list of indices": - - do: - indices.put_warmer: - index: [test_index1, test_index2] - name: warmer - body: - query: - match_all: {} - - do: - indices.get_warmer: { index: _all, name: '*' } - - - match: {test_index1.warmers.warmer.source.query.match_all: {boost: 1.0}} - - match: {test_index2.warmers.warmer.source.query.match_all: {boost: 1.0}} - - is_false: foo - ---- -"put warmer with blank index": - - do: - indices.put_warmer: - name: warmer - body: - query: - match_all: {} - - do: - indices.get_warmer: { index: _all, name: '*' } - - - match: {test_index1.warmers.warmer.source.query.match_all: {boost: 1.0}} - - match: {test_index2.warmers.warmer.source.query.match_all: {boost: 1.0}} - - match: {foo.warmers.warmer.source.query.match_all: {boost: 1.0}} - ---- -"put warmer with missing name": - - - - do: - catch: param - indices.put_warmer: - body: - query: - match_all: {} - diff --git a/test/framework/build.gradle b/test/framework/build.gradle index 7356a384574..5c607e1aa61 100644 --- a/test/framework/build.gradle +++ b/test/framework/build.gradle @@ -33,7 +33,7 @@ dependencies { compile 'org.elasticsearch:securemock:1.2' } -compileJava.options.compilerArgs << '-Xlint:-cast,-deprecation,-fallthrough,-overrides,-rawtypes,-serial,-try,-unchecked' +compileJava.options.compilerArgs << '-Xlint:-cast,-deprecation,-rawtypes,-serial,-try,-unchecked' compileTestJava.options.compilerArgs << '-Xlint:-rawtypes' // the main files are actually test files, so use the appopriate forbidden api sigs