Skip to content

Commit 067fc37

Browse files
masseykemridula-s109
authored andcommitted
Correctly handling data stream settings when component templates are used (elastic#130394)
1 parent cd7b647 commit 067fc37

File tree

2 files changed

+100
-10
lines changed

2 files changed

+100
-10
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 & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -480,10 +480,9 @@ private DataStream createDataStreamForUpdatedDataStreamSettings(
480480
ProjectMetadata projectMetadata = clusterState.metadata().getProject(projectId);
481481
Map<String, DataStream> dataStreamMap = projectMetadata.dataStreams();
482482
DataStream dataStream = dataStreamMap.get(dataStreamName);
483-
Settings existingSettings = dataStream.getSettings();
483+
Settings existingDataStreamSettings = dataStream.getSettings();
484484

485-
Template.Builder templateBuilder = Template.builder();
486-
Settings.Builder mergedSettingsBuilder = Settings.builder().put(existingSettings).put(settingsOverrides);
485+
Settings.Builder mergedSettingsBuilder = Settings.builder().put(existingDataStreamSettings).put(settingsOverrides);
487486
/*
488487
* 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)
489488
* be used.
@@ -493,18 +492,18 @@ private DataStream createDataStreamForUpdatedDataStreamSettings(
493492
mergedSettingsBuilder.remove(key);
494493
}
495494
});
496-
Settings mergedSettings = mergedSettingsBuilder.build();
495+
Settings mergedDataStreamSettings = mergedSettingsBuilder.build();
497496

498497
final ComposableIndexTemplate template = lookupTemplateForDataStream(dataStreamName, projectMetadata);
499-
ComposableIndexTemplate mergedTemplate = template.mergeSettings(mergedSettings);
498+
Settings templateSettings = MetadataIndexTemplateService.resolveSettings(template, projectMetadata.componentTemplates());
499+
Settings mergedEffectiveSettings = templateSettings.merge(mergedDataStreamSettings);
500500
MetadataIndexTemplateService.validateTemplate(
501-
mergedTemplate.template().settings(),
501+
mergedEffectiveSettings,
502502
dataStream.getEffectiveMappings(projectMetadata),
503503
indicesService
504504
);
505505

506-
templateBuilder.settings(mergedSettingsBuilder);
507-
return dataStream.copy().setSettings(mergedSettings).build();
506+
return dataStream.copy().setSettings(mergedDataStreamSettings).build();
508507
}
509508

510509
private DataStream createDataStreamForUpdatedDataStreamMappings(

0 commit comments

Comments
 (0)