Jelajahi Sumber

mget with an alias shouldn't ignore alias routing (#25697)

Closes #25696
Igor Motov 8 tahun lalu
induk
melakukan
6125f535ae

+ 1 - 1
core/src/main/java/org/elasticsearch/action/get/TransportMultiGetAction.java

@@ -68,7 +68,7 @@ public class TransportMultiGetAction extends HandledTransportAction<MultiGetRequ
             try {
                 concreteSingleIndex = indexNameExpressionResolver.concreteSingleIndex(clusterState, item).getName();
 
-                item.routing(clusterState.metaData().resolveIndexRouting(item.parent(), item.routing(), concreteSingleIndex));
+                item.routing(clusterState.metaData().resolveIndexRouting(item.parent(), item.routing(), item.index()));
                 if ((item.routing() == null) && (clusterState.getMetaData().routingRequired(concreteSingleIndex, item.type()))) {
                     String message = "routing is required for [" + concreteSingleIndex + "]/[" + item.type() + "]/[" + item.id() + "]";
                     responses.set(i, newItemFailure(concreteSingleIndex, item.type(), item.id(), new IllegalArgumentException(message)));

+ 17 - 0
core/src/test/java/org/elasticsearch/mget/SimpleMgetIT.java

@@ -106,6 +106,23 @@ public class SimpleMgetIT extends ESIntegTestCase {
         assertThat(mgetResponse.getResponses()[0].getFailure().getMessage(), containsString("more than one indices"));
     }
 
+    public void testThatMgetShouldWorkWithAliasRouting() throws IOException {
+        assertAcked(prepareCreate("test").addAlias(new Alias("alias1").routing("abc"))
+            .addMapping("test", jsonBuilder()
+                .startObject().startObject("test").startObject("_routing").field("required", true).endObject().endObject().endObject()));
+
+        client().prepareIndex("alias1", "test", "1").setSource(jsonBuilder().startObject().field("foo", "bar").endObject())
+            .setRefreshPolicy(IMMEDIATE).get();
+
+        MultiGetResponse mgetResponse = client().prepareMultiGet()
+            .add(new MultiGetRequest.Item("alias1", "test", "1"))
+            .get();
+        assertEquals(1, mgetResponse.getResponses().length);
+
+        assertEquals("test", mgetResponse.getResponses()[0].getIndex());
+        assertFalse(mgetResponse.getResponses()[0].isFailed());
+    }
+
     public void testThatParentPerDocumentIsSupported() throws Exception {
         assertAcked(prepareCreate("test").addAlias(new Alias("alias"))
                 .addMapping("test", jsonBuilder()