Skip to content

Commit d73d771

Browse files
authored
Using a temp IndexService for template validation (#129507) (#129588)
1 parent 5b51ddc commit d73d771

File tree

2 files changed

+22
-36
lines changed

2 files changed

+22
-36
lines changed

docs/changelog/129507.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
pr: 129507
2+
summary: Using a temp `IndexService` for template validation
3+
area: Indices APIs
4+
type: bug
5+
issues:
6+
- 129473

server/src/main/java/org/elasticsearch/cluster/metadata/MetadataIndexTemplateService.java

Lines changed: 16 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@
3737
import org.elasticsearch.core.Nullable;
3838
import org.elasticsearch.core.TimeValue;
3939
import org.elasticsearch.core.Tuple;
40-
import org.elasticsearch.index.CloseUtils;
41-
import org.elasticsearch.index.Index;
4240
import org.elasticsearch.index.IndexService;
4341
import org.elasticsearch.index.IndexSettingProvider;
4442
import org.elasticsearch.index.IndexSettingProviders;
@@ -82,7 +80,6 @@
8280

8381
import static java.util.Collections.emptyMap;
8482
import static org.elasticsearch.cluster.metadata.MetadataCreateDataStreamService.validateTimestampFieldMapping;
85-
import static org.elasticsearch.indices.cluster.IndexRemovalReason.NO_LONGER_ASSIGNED;
8683

8784
/**
8885
* Service responsible for submitting index templates updates
@@ -1861,45 +1858,28 @@ static void validateTemplate(Settings validateSettings, CompressedXContent mappi
18611858
settings = Settings.EMPTY;
18621859
}
18631860

1864-
Index createdIndex = null;
18651861
final String temporaryIndexName = UUIDs.randomBase64UUID();
1866-
try {
1867-
// use the provided values, otherwise just pick valid dummy values
1868-
int dummyPartitionSize = IndexMetadata.INDEX_ROUTING_PARTITION_SIZE_SETTING.get(settings);
1869-
int dummyShards = settings.getAsInt(
1870-
IndexMetadata.SETTING_NUMBER_OF_SHARDS,
1871-
dummyPartitionSize == 1 ? 1 : dummyPartitionSize + 1
1872-
);
1873-
int shardReplicas = settings.getAsInt(IndexMetadata.SETTING_NUMBER_OF_REPLICAS, 0);
1874-
1875-
// create index service for parsing and validating "mappings"
1876-
Settings dummySettings = Settings.builder()
1877-
.put(IndexMetadata.SETTING_VERSION_CREATED, IndexVersion.current())
1878-
.put(settings)
1879-
.put(IndexMetadata.SETTING_NUMBER_OF_SHARDS, dummyShards)
1880-
.put(IndexMetadata.SETTING_NUMBER_OF_REPLICAS, shardReplicas)
1881-
.put(IndexMetadata.SETTING_INDEX_UUID, UUIDs.randomBase64UUID())
1882-
.build();
1862+
int dummyPartitionSize = IndexMetadata.INDEX_ROUTING_PARTITION_SIZE_SETTING.get(settings);
1863+
int dummyShards = settings.getAsInt(IndexMetadata.SETTING_NUMBER_OF_SHARDS, dummyPartitionSize == 1 ? 1 : dummyPartitionSize + 1);
1864+
int shardReplicas = settings.getAsInt(IndexMetadata.SETTING_NUMBER_OF_REPLICAS, 0);
18831865

1884-
final IndexMetadata tmpIndexMetadata = IndexMetadata.builder(temporaryIndexName).settings(dummySettings).build();
1885-
IndexService dummyIndexService = indicesService.createIndex(tmpIndexMetadata, Collections.emptyList(), false);
1886-
createdIndex = dummyIndexService.index();
1866+
// create index service for parsing and validating "mappings"
1867+
Settings dummySettings = Settings.builder()
1868+
.put(IndexMetadata.SETTING_VERSION_CREATED, IndexVersion.current())
1869+
.put(settings)
1870+
.put(IndexMetadata.SETTING_NUMBER_OF_SHARDS, dummyShards)
1871+
.put(IndexMetadata.SETTING_NUMBER_OF_REPLICAS, shardReplicas)
1872+
.put(IndexMetadata.SETTING_INDEX_UUID, UUIDs.randomBase64UUID())
1873+
.build();
18871874

1875+
final IndexMetadata tmpIndexMetadata = IndexMetadata.builder(temporaryIndexName).settings(dummySettings).build();
1876+
1877+
indicesService.withTempIndexService(tmpIndexMetadata, dummyIndexService -> {
18881878
if (mappings != null) {
18891879
dummyIndexService.mapperService().merge(MapperService.SINGLE_MAPPING_NAME, mappings, MergeReason.INDEX_TEMPLATE);
18901880
}
1891-
1892-
} finally {
1893-
if (createdIndex != null) {
1894-
indicesService.removeIndex(
1895-
createdIndex,
1896-
NO_LONGER_ASSIGNED,
1897-
" created for parsing template mapping",
1898-
CloseUtils.NO_SHARDS_CREATED_EXECUTOR,
1899-
ActionListener.noop()
1900-
);
1901-
}
1902-
}
1881+
return null;
1882+
});
19031883
}
19041884

19051885
private void validate(String name, ComponentTemplate template) {

0 commit comments

Comments
 (0)