[7.x] Add test for component templates updated after cluster restart (#58883) (#58914)

This commit adds an integration test that component templates used to form a composite template can
still be updated after a cluster restart.

In #58643 an issue arose where mappings were causing problems because of the way we unwrap `_doc` in
template mappings. This was also related to the mappings being merged manually rather than using the
`MapperService` to do the merging. #58643 was fixed in 7.9 and master with the #58521 change, since
mappings now are read and digested by the actual mapper service.

This test passes for 7.x and master, and I intend to open a separate PR including this test for
7.8.1 along with a bug fix for #58643. This test is to ensure we don't have any regression in the
future.
This commit is contained in:
Lee Hinman 2020-07-02 08:23:34 -06:00 committed by GitHub
parent 62152852dc
commit e32623ef52
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 86 additions and 0 deletions

View File

@ -0,0 +1,86 @@
/*
* 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.template;
import org.elasticsearch.action.admin.indices.template.put.PutComponentTemplateAction;
import org.elasticsearch.action.admin.indices.template.put.PutComposableIndexTemplateAction;
import org.elasticsearch.cluster.metadata.ComponentTemplate;
import org.elasticsearch.cluster.metadata.ComposableIndexTemplate;
import org.elasticsearch.cluster.metadata.Template;
import org.elasticsearch.common.compress.CompressedXContent;
import org.elasticsearch.test.ESIntegTestCase;
import java.util.Collections;
public class ComposableTemplateIT extends ESIntegTestCase {
// See: https://github.com/elastic/elasticsearch/issues/58643
public void testComponentTemplatesCanBeUpdatedAfterRestart() throws Exception {
ComponentTemplate ct = new ComponentTemplate(new Template(null, new CompressedXContent("{\n" +
" \"dynamic\": false,\n" +
" \"properties\": {\n" +
" \"foo\": {\n" +
" \"type\": \"text\"\n" +
" }\n" +
" }\n" +
" }"), null), 3L, Collections.singletonMap("eggplant", "potato"));
client().execute(PutComponentTemplateAction.INSTANCE, new PutComponentTemplateAction.Request("my-ct").componentTemplate(ct)).get();
ComposableIndexTemplate cit = new ComposableIndexTemplate(Collections.singletonList("coleslaw"),
new Template(null, new CompressedXContent("{\n" +
" \"dynamic\": false,\n" +
" \"properties\": {\n" +
" \"foo\": {\n" +
" \"type\": \"keyword\"\n" +
" }\n" +
" }\n" +
" }"), null), Collections.singletonList("my-ct"),
4L, 5L, Collections.singletonMap("egg", "bread"));
client().execute(PutComposableIndexTemplateAction.INSTANCE,
new PutComposableIndexTemplateAction.Request("my-it").indexTemplate(cit)).get();
internalCluster().fullRestart();
ensureGreen();
ComponentTemplate ct2 = new ComponentTemplate(new Template(null, new CompressedXContent("{\n" +
" \"dynamic\": true,\n" +
" \"properties\": {\n" +
" \"foo\": {\n" +
" \"type\": \"keyword\"\n" +
" }\n" +
" }\n" +
" }"), null), 3L, Collections.singletonMap("eggplant", "potato"));
client().execute(PutComponentTemplateAction.INSTANCE,
new PutComponentTemplateAction.Request("my-ct").componentTemplate(ct2)).get();
ComposableIndexTemplate cit2 = new ComposableIndexTemplate(Collections.singletonList("coleslaw"),
new Template(null, new CompressedXContent("{\n" +
" \"dynamic\": true,\n" +
" \"properties\": {\n" +
" \"foo\": {\n" +
" \"type\": \"integer\"\n" +
" }\n" +
" }\n" +
" }"), null), Collections.singletonList("my-ct"),
4L, 5L, Collections.singletonMap("egg", "bread"));
client().execute(PutComposableIndexTemplateAction.INSTANCE,
new PutComposableIndexTemplateAction.Request("my-it").indexTemplate(cit2)).get();
}
}