Skip to content

Commit f3f47ae

Browse files
committed
Using a temp IndexService for template validation (elastic#129507)
1 parent f02d15c commit f3f47ae

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
@@ -1862,45 +1859,28 @@ private static void validateTemplate(Settings validateSettings, CompressedXConte
18621859
settings = Settings.EMPTY;
18631860
}
18641861

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

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

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

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

0 commit comments

Comments
 (0)