Skip to content

Commit 1afbf63

Browse files
committed
Experiment setting settings on data stream
1 parent e55b972 commit 1afbf63

File tree

11 files changed

+374
-37
lines changed

11 files changed

+374
-37
lines changed

modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportGetDataStreamsAction.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -257,18 +257,18 @@ static GetDataStreamAction.Response innerOperation(
257257
indexTemplatePreferIlmValue = PREFER_ILM_SETTING.get(settings);
258258
}
259259
} else {
260+
ComposableIndexTemplate effectiveTemplate = dataStream.getEffectiveIndexTemplate(state.metadata());
260261
indexTemplate = MetadataIndexTemplateService.findV2Template(state.metadata(), dataStream.getName(), false);
261-
if (indexTemplate != null) {
262-
Settings settings = MetadataIndexTemplateService.resolveSettings(state.metadata(), indexTemplate);
262+
if (effectiveTemplate != null && effectiveTemplate.template() != null) {
263+
Settings settings;
264+
if (effectiveTemplate.template() != null && effectiveTemplate.template().settings() != null) {
265+
settings = effectiveTemplate.template().settings();
266+
} else {
267+
settings = Settings.EMPTY;
268+
}
263269
ilmPolicyName = settings.get(IndexMetadata.LIFECYCLE_NAME);
264-
if (indexMode == null && state.metadata().templatesV2().get(indexTemplate) != null) {
265-
indexMode = resolveMode(
266-
state,
267-
indexSettingProviders,
268-
dataStream,
269-
settings,
270-
state.metadata().templatesV2().get(indexTemplate)
271-
);
270+
if (indexMode == null) {
271+
indexMode = resolveMode(state, indexSettingProviders, dataStream, settings, effectiveTemplate);
272272
}
273273
indexTemplatePreferIlmValue = PREFER_ILM_SETTING.get(settings);
274274
} else {

server/src/main/java/org/elasticsearch/TransportVersions.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ static TransportVersion def(int id) {
214214
public static final TransportVersion ESQL_REMOVE_AGGREGATE_TYPE = def(9_045_0_00);
215215
public static final TransportVersion ADD_PROJECT_ID_TO_DSL_ERROR_INFO = def(9_046_0_00);
216216
public static final TransportVersion SEMANTIC_TEXT_CHUNKING_CONFIG = def(9_047_00_0);
217+
public static final TransportVersion TEMPLATES_IN_DATA_STREAMS = def(9_048_0_00);
217218

218219
/*
219220
* STOP! READ THIS FIRST! No, really,

server/src/main/java/org/elasticsearch/action/admin/indices/rollover/MetadataRolloverService.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@
6666

6767
import static org.elasticsearch.cluster.metadata.IndexAbstraction.Type.ALIAS;
6868
import static org.elasticsearch.cluster.metadata.IndexAbstraction.Type.DATA_STREAM;
69-
import static org.elasticsearch.cluster.metadata.MetadataCreateDataStreamService.lookupTemplateForDataStream;
7069
import static org.elasticsearch.cluster.metadata.MetadataIndexTemplateService.findV1Templates;
7170
import static org.elasticsearch.cluster.metadata.MetadataIndexTemplateService.findV2Template;
7271
import static org.elasticsearch.cluster.routing.allocation.allocator.AllocationActionListener.rerouteCompletionIsNotRequired;
@@ -325,7 +324,7 @@ private RolloverResult rolloverDataStream(
325324
final SystemDataStreamDescriptor systemDataStreamDescriptor;
326325
if (dataStream.isSystem() == false) {
327326
systemDataStreamDescriptor = null;
328-
templateV2 = lookupTemplateForDataStream(dataStreamName, metadata);
327+
templateV2 = dataStream.getEffectiveIndexTemplate(projectState.metadata());
329328
} else {
330329
systemDataStreamDescriptor = systemIndices.findMatchingDataStreamDescriptor(dataStreamName);
331330
if (systemDataStreamDescriptor == null) {

server/src/main/java/org/elasticsearch/action/admin/indices/settings/put/TransportUpdateSettingsAction.java

Lines changed: 41 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,15 @@
1414
import org.elasticsearch.action.ActionListener;
1515
import org.elasticsearch.action.ActionType;
1616
import org.elasticsearch.action.support.ActionFilters;
17+
import org.elasticsearch.action.support.IndicesOptions;
1718
import org.elasticsearch.action.support.master.AcknowledgedResponse;
1819
import org.elasticsearch.action.support.master.AcknowledgedTransportMasterNodeAction;
1920
import org.elasticsearch.cluster.ClusterState;
2021
import org.elasticsearch.cluster.block.ClusterBlockException;
2122
import org.elasticsearch.cluster.block.ClusterBlockLevel;
2223
import org.elasticsearch.cluster.metadata.IndexMetadata;
2324
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
25+
import org.elasticsearch.cluster.metadata.MetadataDataStreamsService;
2426
import org.elasticsearch.cluster.metadata.MetadataUpdateSettingsService;
2527
import org.elasticsearch.cluster.metadata.ProjectMetadata;
2628
import org.elasticsearch.cluster.project.ProjectResolver;
@@ -55,6 +57,7 @@ public class TransportUpdateSettingsAction extends AcknowledgedTransportMasterNo
5557
private final ProjectResolver projectResolver;
5658
private final IndexNameExpressionResolver indexNameExpressionResolver;
5759
private final SystemIndices systemIndices;
60+
private final MetadataDataStreamsService metadataDataStreamsService;
5861

5962
@Inject
6063
public TransportUpdateSettingsAction(
@@ -65,7 +68,8 @@ public TransportUpdateSettingsAction(
6568
ActionFilters actionFilters,
6669
ProjectResolver projectResolver,
6770
IndexNameExpressionResolver indexNameExpressionResolver,
68-
SystemIndices systemIndices
71+
SystemIndices systemIndices,
72+
MetadataDataStreamsService metadataDataStreamsService
6973
) {
7074
super(
7175
TYPE.name(),
@@ -80,6 +84,7 @@ public TransportUpdateSettingsAction(
8084
this.projectResolver = projectResolver;
8185
this.indexNameExpressionResolver = indexNameExpressionResolver;
8286
this.systemIndices = systemIndices;
87+
this.metadataDataStreamsService = metadataDataStreamsService;
8388
}
8489

8590
@Override
@@ -100,7 +105,7 @@ protected ClusterBlockException checkBlock(UpdateSettingsRequest request, Cluste
100105
.indicesBlockedException(
101106
projectMetadata.id(),
102107
ClusterBlockLevel.METADATA_WRITE,
103-
indexNameExpressionResolver.concreteIndexNames(projectMetadata, request)
108+
indexNameExpressionResolver.concreteIndexNames(projectMetadata, request) // TODO does not work with data streams
104109
);
105110
}
106111

@@ -134,26 +139,41 @@ protected void masterOperation(
134139
listener.onFailure(new IllegalStateException(message));
135140
return;
136141
}
142+
List<String> dataStreamNames = indexNameExpressionResolver.dataStreamNames(state, IndicesOptions.DEFAULT, request.indices());
143+
metadataDataStreamsService.updateSettings(projectResolver, request, dataStreamNames, requestSettings, new ActionListener<>() {
144+
@Override
145+
public void onResponse(AcknowledgedResponse acknowledgedResponse) {
146+
updateSettingsService.updateSettings(
147+
new UpdateSettingsClusterStateUpdateRequest(
148+
projectResolver.getProjectId(),
149+
request.masterNodeTimeout(),
150+
request.ackTimeout(),
151+
requestSettings,
152+
request.isPreserveExisting()
153+
? UpdateSettingsClusterStateUpdateRequest.OnExisting.PRESERVE
154+
: UpdateSettingsClusterStateUpdateRequest.OnExisting.OVERWRITE,
155+
request.reopen()
156+
? UpdateSettingsClusterStateUpdateRequest.OnStaticSetting.REOPEN_INDICES
157+
: UpdateSettingsClusterStateUpdateRequest.OnStaticSetting.REJECT,
158+
concreteIndices
159+
),
160+
listener.delegateResponse((l, e) -> {
161+
logger.debug(() -> "failed to update settings on indices [" + Arrays.toString(concreteIndices) + "]", e);
162+
if (dataStreamNames.isEmpty() == false && e instanceof IllegalArgumentException) {
163+
l.onResponse(AcknowledgedResponse.TRUE); // TODO provide info about failures within successful response
164+
} else {
165+
l.onFailure(e);
166+
}
167+
})
168+
);
169+
}
170+
171+
@Override
172+
public void onFailure(Exception e) {
173+
listener.onFailure(e);
174+
}
175+
});
137176

138-
updateSettingsService.updateSettings(
139-
new UpdateSettingsClusterStateUpdateRequest(
140-
projectResolver.getProjectId(),
141-
request.masterNodeTimeout(),
142-
request.ackTimeout(),
143-
requestSettings,
144-
request.isPreserveExisting()
145-
? UpdateSettingsClusterStateUpdateRequest.OnExisting.PRESERVE
146-
: UpdateSettingsClusterStateUpdateRequest.OnExisting.OVERWRITE,
147-
request.reopen()
148-
? UpdateSettingsClusterStateUpdateRequest.OnStaticSetting.REOPEN_INDICES
149-
: UpdateSettingsClusterStateUpdateRequest.OnStaticSetting.REJECT,
150-
concreteIndices
151-
),
152-
listener.delegateResponse((l, e) -> {
153-
logger.debug(() -> "failed to update settings on indices [" + Arrays.toString(concreteIndices) + "]", e);
154-
l.onFailure(e);
155-
})
156-
);
157177
}
158178

159179
/**

server/src/main/java/org/elasticsearch/action/datastreams/GetDataStreamAction.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,8 @@ public static class DataStreamInfo implements SimpleDiffable<DataStreamInfo>, To
213213

214214
public static final ParseField STATUS_FIELD = new ParseField("status");
215215
public static final ParseField INDEX_TEMPLATE_FIELD = new ParseField("template");
216+
public static final ParseField INDEX_TEMPLATE_OVERRIDES_FIELD = new ParseField("index_template_overrides");
217+
public static final ParseField EFFECTIVE_INDEX_TEMPLATE_FIELD = new ParseField("effective_index_template");
216218
public static final ParseField PREFER_ILM = new ParseField("prefer_ilm");
217219
public static final ParseField MANAGED_BY = new ParseField("managed_by");
218220
public static final ParseField NEXT_GENERATION_INDEX_MANAGED_BY = new ParseField("next_generation_managed_by");
@@ -427,6 +429,15 @@ public XContentBuilder toXContent(
427429
addAutoShardingEvent(builder, params, dataStream.getFailureComponent().getAutoShardingEvent());
428430
builder.endObject();
429431
}
432+
if (dataStream.getIndexTemplateOverrides() != null) {
433+
builder.field(INDEX_TEMPLATE_OVERRIDES_FIELD.getPreferredName());
434+
dataStream.getIndexTemplateOverrides().toXContent(builder, params);
435+
}
436+
// ComposableIndexTemplate effectiveTemplate = dataStream.getEffectiveIndexTemplate(pr);
437+
// if (effectiveTemplate != null) {
438+
// builder.field(EFFECTIVE_INDEX_TEMPLATE_FIELD.getPreferredName());
439+
// effectiveTemplate.toXContent(builder, params);
440+
// }
430441
builder.endObject();
431442
return builder;
432443
}

0 commit comments

Comments
 (0)