|
30 | 30 | import org.elasticsearch.cluster.routing.RoutingTable;
|
31 | 31 | import org.elasticsearch.cluster.routing.allocation.AllocationService;
|
32 | 32 | import org.elasticsearch.cluster.routing.allocation.DataTier;
|
| 33 | +import org.elasticsearch.cluster.routing.allocation.ExistingShardsAllocator; |
33 | 34 | import org.elasticsearch.cluster.routing.allocation.allocator.BalancedShardsAllocator;
|
34 | 35 | import org.elasticsearch.cluster.routing.allocation.decider.AllocationDeciders;
|
35 | 36 | import org.elasticsearch.cluster.routing.allocation.decider.MaxRetryAllocationDecider;
|
@@ -735,6 +736,55 @@ public boolean overrulesTemplateAndRequestSettings() {
|
735 | 736 | assertThat(aggregatedIndexSettings.get("other_setting"), equalTo("other_value"));
|
736 | 737 | }
|
737 | 738 |
|
| 739 | + /** |
| 740 | + * When a failure store index is created, we must filter out any unsupported settings from the create request or from the template that |
| 741 | + * may have been provided by users in the create request or from the original data stream template. An exception to this is any settings |
| 742 | + * that have been provided by index setting providers which should be considered default values on indices. |
| 743 | + */ |
| 744 | + public void testAggregateSettingsProviderIsNotFilteredOnFailureStore() { |
| 745 | + IndexTemplateMetadata templateMetadata = addMatchingTemplate(builder -> { |
| 746 | + builder.settings(Settings.builder().put("template_setting", "value1")); |
| 747 | + }); |
| 748 | + ProjectMetadata projectMetadata = ProjectMetadata.builder(projectId).templates(Map.of("template_1", templateMetadata)).build(); |
| 749 | + ClusterState clusterState = ClusterState.builder(ClusterName.DEFAULT).putProjectMetadata(projectMetadata).build(); |
| 750 | + var request = new CreateIndexClusterStateUpdateRequest("create index", projectId, "test", "test").settings( |
| 751 | + Settings.builder().put("request_setting", "value2").build() |
| 752 | + ).isFailureIndex(true); |
| 753 | + |
| 754 | + Settings aggregatedIndexSettings = aggregateIndexSettings( |
| 755 | + clusterState, |
| 756 | + request, |
| 757 | + templateMetadata.settings(), |
| 758 | + null, |
| 759 | + null, |
| 760 | + Settings.EMPTY, |
| 761 | + IndexScopedSettings.DEFAULT_SCOPED_SETTINGS, |
| 762 | + randomShardLimitService(), |
| 763 | + Set.of(new IndexSettingProvider() { |
| 764 | + @Override |
| 765 | + public Settings getAdditionalIndexSettings( |
| 766 | + String indexName, |
| 767 | + String dataStreamName, |
| 768 | + IndexMode templateIndexMode, |
| 769 | + ProjectMetadata projectMetadata, |
| 770 | + Instant resolvedAt, |
| 771 | + Settings indexTemplateAndCreateRequestSettings, |
| 772 | + List<CompressedXContent> combinedTemplateMappings |
| 773 | + ) { |
| 774 | + return Settings.builder().put(ExistingShardsAllocator.EXISTING_SHARDS_ALLOCATOR_SETTING.getKey(), "override").build(); |
| 775 | + } |
| 776 | + |
| 777 | + @Override |
| 778 | + public boolean overrulesTemplateAndRequestSettings() { |
| 779 | + return true; |
| 780 | + } |
| 781 | + }) |
| 782 | + ); |
| 783 | + |
| 784 | + assertThat(aggregatedIndexSettings.get("template_setting"), nullValue()); |
| 785 | + assertThat(aggregatedIndexSettings.get(ExistingShardsAllocator.EXISTING_SHARDS_ALLOCATOR_SETTING.getKey()), equalTo("override")); |
| 786 | + } |
| 787 | + |
738 | 788 | public void testAggregateSettingsProviderOverrulesNullFromRequest() {
|
739 | 789 | IndexTemplateMetadata templateMetadata = addMatchingTemplate(builder -> {
|
740 | 790 | builder.settings(Settings.builder().put("template_setting", "value1"));
|
|
0 commit comments