Skip to content

Commit bf4d88f

Browse files
authored
[8.19] Correctly handling data stream settings when component templates are used (elastic#130394) (elastic#130407)
1 parent 462e4f9 commit bf4d88f

File tree

2 files changed

+100
-14
lines changed

2 files changed

+100
-14
lines changed

modules/data-streams/src/yamlRestTest/resources/rest-api-spec/test/data_stream/240_data_stream_settings.yml

Lines changed: 93 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -327,8 +327,6 @@ setup:
327327
index: "my-data-stream-1"
328328
wait_for_status: green
329329

330-
331-
332330
- do:
333331
indices.get_data_stream:
334332
name: my-data-stream-1
@@ -398,3 +396,96 @@ setup:
398396
- match: { .$idx0name.settings.index.number_of_shards: "1" }
399397
- match: { .$idx0name.settings.index.lifecycle.name: "my-policy" }
400398
- match: { .$idx0name.settings.index.lifecycle.prefer_ilm: "true" }
399+
400+
---
401+
"Test null out settings component templates only":
402+
- requires:
403+
cluster_features: [ "logs_stream" ]
404+
reason: requires setting 'logs_stream' to get or set data stream settings
405+
406+
- do:
407+
cluster.put_component_template:
408+
name: settings-template
409+
body:
410+
template:
411+
settings:
412+
lifecycle.name: my-policy
413+
414+
- do:
415+
allowed_warnings:
416+
- "index template [my-component-only-template] has index patterns [my-component-only-data-stream-*] matching patterns from existing older templates [global] with patterns (global => [*]); this template [my-component-only-template] will take precedence during new index creation"
417+
indices.put_index_template:
418+
name: my-component-only-template
419+
body:
420+
index_patterns: [ my-component-only-data-stream-* ]
421+
data_stream: { }
422+
composed_of:
423+
- settings-template
424+
425+
- do:
426+
indices.create_data_stream:
427+
name: my-component-only-data-stream-1
428+
429+
- do:
430+
cluster.health:
431+
index: "my-component-only-data-stream-1"
432+
wait_for_status: green
433+
434+
- do:
435+
indices.get_data_stream:
436+
name: my-component-only-data-stream-1
437+
- match: { data_streams.0.name: my-component-only-data-stream-1 }
438+
- match: { data_streams.0.settings: {} }
439+
- match: { data_streams.0.effective_settings: null }
440+
441+
- do:
442+
indices.put_data_stream_settings:
443+
name: my-component-only-data-stream-1
444+
body:
445+
index:
446+
lifecycle:
447+
name: my-new-policy
448+
prefer_ilm: true
449+
- match: { data_streams.0.name: my-component-only-data-stream-1 }
450+
- match: { data_streams.0.applied_to_data_stream: true }
451+
- length: { data_streams.0.index_settings_results.applied_to_data_stream_and_backing_indices: 2 }
452+
- match: { data_streams.0.settings.index.lifecycle.name: "my-new-policy" }
453+
- match: { data_streams.0.settings.index.lifecycle.prefer_ilm: "true" }
454+
- match: { data_streams.0.effective_settings.index.lifecycle.name: "my-new-policy" }
455+
- match: { data_streams.0.effective_settings.index.lifecycle.prefer_ilm: "true" }
456+
457+
- do:
458+
indices.put_data_stream_settings:
459+
name: my-component-only-data-stream-1
460+
body:
461+
index:
462+
lifecycle:
463+
name: null
464+
prefer_ilm: null
465+
- match: { data_streams.0.name: my-component-only-data-stream-1 }
466+
- match: { data_streams.0.applied_to_data_stream: true }
467+
- length: { data_streams.0.index_settings_results.applied_to_data_stream_and_backing_indices: 2 }
468+
- match: { data_streams.0.settings.index.lifecycle.name: null }
469+
- match: { data_streams.0.settings.index.lifecycle.prefer_ilm: null }
470+
- match: { data_streams.0.effective_settings.index.lifecycle.name: "my-policy" }
471+
- match: { data_streams.0.effective_settings.index.lifecycle.prefer_ilm: null }
472+
473+
- do:
474+
indices.get_data_stream_settings:
475+
name: my-component-only-data-stream-1
476+
- match: { data_streams.0.name: my-component-only-data-stream-1 }
477+
- match: { data_streams.0.settings.index.lifecycle.name: null }
478+
- match: { data_streams.0.settings.index.lifecycle.prefer_ilm: null }
479+
- match: { data_streams.0.effective_settings.index.lifecycle.name: "my-policy" }
480+
- match: { data_streams.0.effective_settings.index.lifecycle.prefer_ilm: null }
481+
482+
- do:
483+
indices.get_data_stream:
484+
name: my-component-only-data-stream-1
485+
- set: { data_streams.0.indices.0.index_name: idx0name }
486+
487+
- do:
488+
indices.get_settings:
489+
index: my-component-only-data-stream-1
490+
- match: { .$idx0name.settings.index.lifecycle.name: "my-policy" }
491+
- match: { .$idx0name.settings.index.lifecycle.prefer_ilm: null }

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

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -416,10 +416,9 @@ private DataStream createDataStreamForUpdatedDataStreamSettings(
416416
Metadata metadata = clusterState.metadata();
417417
Map<String, DataStream> dataStreamMap = metadata.dataStreams();
418418
DataStream dataStream = dataStreamMap.get(dataStreamName);
419-
Settings existingSettings = dataStream.getSettings();
419+
Settings existingDataStreamSettings = dataStream.getSettings();
420420

421-
Template.Builder templateBuilder = Template.builder();
422-
Settings.Builder mergedSettingsBuilder = Settings.builder().put(existingSettings).put(settingsOverrides);
421+
Settings.Builder mergedSettingsBuilder = Settings.builder().put(existingDataStreamSettings).put(settingsOverrides);
423422
/*
424423
* A null value for a setting override means that we remove it from the data stream, and let the value from the template (if any)
425424
* be used.
@@ -429,18 +428,14 @@ private DataStream createDataStreamForUpdatedDataStreamSettings(
429428
mergedSettingsBuilder.remove(key);
430429
}
431430
});
432-
Settings mergedSettings = mergedSettingsBuilder.build();
431+
Settings mergedDataStreamSettings = mergedSettingsBuilder.build();
433432

434433
final ComposableIndexTemplate template = lookupTemplateForDataStream(dataStreamName, metadata);
435-
ComposableIndexTemplate mergedTemplate = template.mergeSettings(mergedSettings);
436-
MetadataIndexTemplateService.validateTemplate(
437-
mergedTemplate.template().settings(),
438-
mergedTemplate.template().mappings(),
439-
indicesService
440-
);
434+
Settings templateSettings = MetadataIndexTemplateService.resolveSettings(template, metadata.componentTemplates());
435+
Settings mergedEffectiveSettings = templateSettings.merge(mergedDataStreamSettings);
436+
MetadataIndexTemplateService.validateTemplate(mergedEffectiveSettings, null, indicesService);
441437

442-
templateBuilder.settings(mergedSettingsBuilder);
443-
return dataStream.copy().setSettings(mergedSettings).build();
438+
return dataStream.copy().setSettings(mergedDataStreamSettings).build();
444439
}
445440

446441
private static void addBackingIndex(

0 commit comments

Comments
 (0)