diff --git a/modules/reindex/src/test/java/org/elasticsearch/index/reindex/ReindexSourceTargetValidationTests.java b/modules/reindex/src/test/java/org/elasticsearch/index/reindex/ReindexSourceTargetValidationTests.java
index 3616206037c43..b89c2b0120813 100644
--- a/modules/reindex/src/test/java/org/elasticsearch/index/reindex/ReindexSourceTargetValidationTests.java
+++ b/modules/reindex/src/test/java/org/elasticsearch/index/reindex/ReindexSourceTargetValidationTests.java
@@ -46,13 +46,15 @@
*/
public class ReindexSourceTargetValidationTests extends ESTestCase {
private static final ClusterState STATE = ClusterState.builder(new ClusterName("test")).metaData(MetaData.builder()
- .put(index("target", "target_alias", "target_multi"), true)
- .put(index("target2", "target_multi"), true)
- .put(index("foo"), true)
- .put(index("bar"), true)
- .put(index("baz"), true)
- .put(index("source", "source_multi"), true)
- .put(index("source2", "source_multi"), true)).build();
+ .put(index("target", false, "target_alias", "target_multi"), true)
+ .put(index("target2", false, "target_multi"), true)
+ .put(index("target3", true, "target_multi_with_write"), true)
+ .put(index("target4", false, "target_multi_with_write"), true)
+ .put(index("foo", false), true)
+ .put(index("bar", false), true)
+ .put(index("baz", false), true)
+ .put(index("source", false, "source_multi"), true)
+ .put(index("source2", false, "source_multi"), true)).build();
private static final IndexNameExpressionResolver INDEX_NAME_EXPRESSION_RESOLVER = new IndexNameExpressionResolver(Settings.EMPTY);
private static final AutoCreateIndex AUTO_CREATE_INDEX = new AutoCreateIndex(Settings.EMPTY,
new ClusterSettings(Settings.EMPTY, ClusterSettings.BUILT_IN_CLUSTER_SETTINGS), INDEX_NAME_EXPRESSION_RESOLVER);
@@ -80,7 +82,11 @@ public void testAliasesContainTarget() {
public void testTargetIsAlias() {
Exception e = expectThrows(IllegalArgumentException.class, () -> succeeds("target_multi", "foo"));
- assertThat(e.getMessage(), containsString("Alias [target_multi] points to multiple indices"));
+ assertThat(e.getMessage(), containsString("Alias [target_multi] has more than one indices associated with it [["));
+ // The index names can come in either order
+ assertThat(e.getMessage(), containsString("target"));
+ assertThat(e.getMessage(), containsString("target2"));
+ succeeds("target_multi_with_write", "foo"); // should this be allowed?
}
public void testRemoteInfoSkipsValidation() {
@@ -106,7 +112,7 @@ private void succeeds(RemoteInfo remoteInfo, String target, String... sources) {
INDEX_NAME_EXPRESSION_RESOLVER, AUTO_CREATE_INDEX, STATE);
}
- private static IndexMetaData index(String name, String... aliases) {
+ private static IndexMetaData index(String name, boolean isWriteIndex, String... aliases) {
IndexMetaData.Builder builder = IndexMetaData.builder(name).settings(Settings.builder()
.put("index.version.created", Version.CURRENT.id)
.put("index.number_of_shards", 1)
diff --git a/server/src/main/java/org/elasticsearch/action/bulk/TransportBulkAction.java b/server/src/main/java/org/elasticsearch/action/bulk/TransportBulkAction.java
index 3c79f700bdf9c..72303cf36325b 100644
--- a/server/src/main/java/org/elasticsearch/action/bulk/TransportBulkAction.java
+++ b/server/src/main/java/org/elasticsearch/action/bulk/TransportBulkAction.java
@@ -474,7 +474,7 @@ Index getConcreteIndex(String indexOrAlias) {
Index resolveIfAbsent(DocWriteRequest> request) {
Index concreteIndex = indices.get(request.index());
if (concreteIndex == null) {
- concreteIndex = indexNameExpressionResolver.concreteSingleIndex(state, request);
+ concreteIndex = indexNameExpressionResolver.concreteWriteIndex(state, request);
indices.put(request.index(), concreteIndex);
}
return concreteIndex;
diff --git a/server/src/main/java/org/elasticsearch/action/index/IndexRequest.java b/server/src/main/java/org/elasticsearch/action/index/IndexRequest.java
index e711135994e8e..5b4cc94077009 100644
--- a/server/src/main/java/org/elasticsearch/action/index/IndexRequest.java
+++ b/server/src/main/java/org/elasticsearch/action/index/IndexRequest.java
@@ -25,7 +25,6 @@
import org.elasticsearch.action.CompositeIndicesRequest;
import org.elasticsearch.action.DocWriteRequest;
import org.elasticsearch.action.RoutingMissingException;
-import org.elasticsearch.action.support.IndicesOptions;
import org.elasticsearch.action.support.replication.ReplicatedWriteRequest;
import org.elasticsearch.action.support.replication.ReplicationRequest;
import org.elasticsearch.client.Requests;
@@ -189,11 +188,6 @@ public ActionRequestValidationException validate() {
return validationException;
}
- @Override
- public IndicesOptions indicesOptions() {
- return IndicesOptions.strictAliasToWriteIndexNoExpandForbidClosed();
- }
-
/**
* The content type. This will be used when generating a document from user provided objects like Maps and when parsing the
* source at index time
diff --git a/server/src/main/java/org/elasticsearch/action/support/IndicesOptions.java b/server/src/main/java/org/elasticsearch/action/support/IndicesOptions.java
index d3dd91cc71c48..b284ec87dd42c 100644
--- a/server/src/main/java/org/elasticsearch/action/support/IndicesOptions.java
+++ b/server/src/main/java/org/elasticsearch/action/support/IndicesOptions.java
@@ -77,8 +77,7 @@ public enum Option {
IGNORE_ALIASES,
ALLOW_NO_INDICES,
FORBID_ALIASES_TO_MULTIPLE_INDICES,
- FORBID_CLOSED_INDICES,
- REQUIRE_ALIASES_TO_WRITE_INDEX;
+ FORBID_CLOSED_INDICES;
public static final EnumSet