|
35 | 35 | import org.elasticsearch.cluster.routing.RoutingTable;
|
36 | 36 | import org.elasticsearch.cluster.routing.allocation.AllocationService;
|
37 | 37 | import org.elasticsearch.cluster.routing.allocation.DataTier;
|
| 38 | +import org.elasticsearch.cluster.routing.allocation.ExistingShardsAllocator; |
38 | 39 | import org.elasticsearch.cluster.routing.allocation.allocator.BalancedShardsAllocator;
|
39 | 40 | import org.elasticsearch.cluster.routing.allocation.decider.AllocationDeciders;
|
40 | 41 | import org.elasticsearch.cluster.routing.allocation.decider.MaxRetryAllocationDecider;
|
@@ -791,6 +792,55 @@ public boolean overrulesTemplateAndRequestSettings() {
|
791 | 792 | assertThat(aggregatedIndexSettings.get("other_setting"), equalTo("other_value"));
|
792 | 793 | }
|
793 | 794 |
|
| 795 | + /** |
| 796 | + * When a failure store index is created, we must filter out any unsupported settings from the create request or from the template that |
| 797 | + * may have been provided by users in the create request or from the original data stream template. An exception to this is any settings |
| 798 | + * that have been provided by index setting providers which should be considered default values on indices. |
| 799 | + */ |
| 800 | + public void testAggregateSettingsProviderIsNotFilteredOnFailureStore() { |
| 801 | + IndexTemplateMetadata templateMetadata = addMatchingTemplate(builder -> { |
| 802 | + builder.settings(Settings.builder().put("template_setting", "value1")); |
| 803 | + }); |
| 804 | + ProjectMetadata projectMetadata = ProjectMetadata.builder(projectId).templates(Map.of("template_1", templateMetadata)).build(); |
| 805 | + ClusterState clusterState = ClusterState.builder(ClusterName.DEFAULT).putProjectMetadata(projectMetadata).build(); |
| 806 | + var request = new CreateIndexClusterStateUpdateRequest("create index", projectId, "test", "test").settings( |
| 807 | + Settings.builder().put("request_setting", "value2").build() |
| 808 | + ).isFailureIndex(true); |
| 809 | + |
| 810 | + Settings aggregatedIndexSettings = aggregateIndexSettings( |
| 811 | + clusterState, |
| 812 | + request, |
| 813 | + templateMetadata.settings(), |
| 814 | + null, |
| 815 | + null, |
| 816 | + Settings.EMPTY, |
| 817 | + IndexScopedSettings.DEFAULT_SCOPED_SETTINGS, |
| 818 | + randomShardLimitService(), |
| 819 | + Set.of(new IndexSettingProvider() { |
| 820 | + @Override |
| 821 | + public Settings getAdditionalIndexSettings( |
| 822 | + String indexName, |
| 823 | + String dataStreamName, |
| 824 | + IndexMode templateIndexMode, |
| 825 | + ProjectMetadata projectMetadata, |
| 826 | + Instant resolvedAt, |
| 827 | + Settings indexTemplateAndCreateRequestSettings, |
| 828 | + List<CompressedXContent> combinedTemplateMappings |
| 829 | + ) { |
| 830 | + return Settings.builder().put(ExistingShardsAllocator.EXISTING_SHARDS_ALLOCATOR_SETTING.getKey(), "override").build(); |
| 831 | + } |
| 832 | + |
| 833 | + @Override |
| 834 | + public boolean overrulesTemplateAndRequestSettings() { |
| 835 | + return true; |
| 836 | + } |
| 837 | + }) |
| 838 | + ); |
| 839 | + |
| 840 | + assertThat(aggregatedIndexSettings.get("template_setting"), nullValue()); |
| 841 | + assertThat(aggregatedIndexSettings.get(ExistingShardsAllocator.EXISTING_SHARDS_ALLOCATOR_SETTING.getKey()), equalTo("override")); |
| 842 | + } |
| 843 | + |
794 | 844 | public void testAggregateSettingsProviderOverrulesNullFromRequest() {
|
795 | 845 | IndexTemplateMetadata templateMetadata = addMatchingTemplate(builder -> {
|
796 | 846 | builder.settings(Settings.builder().put("template_setting", "value1"));
|
|
0 commit comments