Skip to content

Commit e5e5ab7

Browse files
committed
Make TransportPromoteDataStreamAction project-aware
Allows the API to run on multiple projects. Note that this API is not available in Serverless so it will currently not be used with multiple projects.
1 parent ec7f77b commit e5e5ab7

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed

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

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
import org.elasticsearch.cluster.block.ClusterBlockException;
2222
import org.elasticsearch.cluster.block.ClusterBlockLevel;
2323
import org.elasticsearch.cluster.metadata.DataStream;
24-
import org.elasticsearch.cluster.metadata.Metadata;
24+
import org.elasticsearch.cluster.metadata.ProjectMetadata;
25+
import org.elasticsearch.cluster.project.ProjectResolver;
2526
import org.elasticsearch.cluster.service.ClusterService;
2627
import org.elasticsearch.common.Priority;
2728
import org.elasticsearch.common.logging.HeaderWarning;
@@ -41,14 +42,16 @@ public class TransportPromoteDataStreamAction extends AcknowledgedTransportMaste
4142
private static final Logger logger = LogManager.getLogger(TransportPromoteDataStreamAction.class);
4243

4344
private final SystemIndices systemIndices;
45+
private final ProjectResolver projectResolver;
4446

4547
@Inject
4648
public TransportPromoteDataStreamAction(
4749
TransportService transportService,
4850
ClusterService clusterService,
4951
ThreadPool threadPool,
5052
ActionFilters actionFilters,
51-
SystemIndices systemIndices
53+
SystemIndices systemIndices,
54+
ProjectResolver projectResolver
5255
) {
5356
super(
5457
PromoteDataStreamAction.NAME,
@@ -60,6 +63,7 @@ public TransportPromoteDataStreamAction(
6063
EsExecutors.DIRECT_EXECUTOR_SERVICE
6164
);
6265
this.systemIndices = systemIndices;
66+
this.projectResolver = projectResolver;
6367
}
6468

6569
@Override
@@ -70,6 +74,7 @@ protected void masterOperation(
7074
ActionListener<AcknowledgedResponse> listener
7175
) throws Exception {
7276
systemIndices.validateDataStreamAccess(request.getName(), threadPool.getThreadContext());
77+
final var projectId = projectResolver.getProjectId();
7378
submitUnbatchedTask(
7479
"promote-data-stream [" + request.getName() + "]",
7580
new ClusterStateUpdateTask(Priority.HIGH, request.masterNodeTimeout()) {
@@ -81,7 +86,9 @@ public void onFailure(Exception e) {
8186

8287
@Override
8388
public ClusterState execute(ClusterState currentState) {
84-
return promoteDataStream(currentState, request);
89+
final var currentProject = currentState.metadata().getProject(projectId);
90+
final var updatedProject = promoteDataStream(currentProject, request);
91+
return ClusterState.builder(currentState).putProjectMetadata(updatedProject).build();
8592
}
8693

8794
@Override
@@ -97,27 +104,23 @@ private void submitUnbatchedTask(@SuppressWarnings("SameParameterValue") String
97104
clusterService.submitUnbatchedStateUpdateTask(source, task);
98105
}
99106

100-
static ClusterState promoteDataStream(ClusterState currentState, PromoteDataStreamAction.Request request) {
101-
DataStream dataStream = currentState.getMetadata().getProject().dataStreams().get(request.getName());
107+
static ProjectMetadata promoteDataStream(ProjectMetadata project, PromoteDataStreamAction.Request request) {
108+
DataStream dataStream = project.dataStreams().get(request.getName());
102109

103110
if (dataStream == null) {
104111
throw new ResourceNotFoundException("data stream [" + request.getName() + "] does not exist");
105112
}
106113

107-
warnIfTemplateMissingForDatastream(dataStream, currentState);
114+
warnIfTemplateMissingForDatastream(dataStream, project);
108115

109116
DataStream promotedDataStream = dataStream.promoteDataStream();
110-
Metadata.Builder metadata = Metadata.builder(currentState.metadata());
111-
metadata.put(promotedDataStream);
112-
return ClusterState.builder(currentState).metadata(metadata).build();
117+
return ProjectMetadata.builder(project).put(promotedDataStream).build();
113118
}
114119

115-
private static void warnIfTemplateMissingForDatastream(DataStream dataStream, ClusterState currentState) {
120+
private static void warnIfTemplateMissingForDatastream(DataStream dataStream, ProjectMetadata project) {
116121
var datastreamName = dataStream.getName();
117122

118-
var matchingIndex = currentState.metadata()
119-
.getProject()
120-
.templatesV2()
123+
var matchingIndex = project.templatesV2()
121124
.values()
122125
.stream()
123126
.filter(cit -> cit.getDataStreamTemplate() != null)

0 commit comments

Comments
 (0)