Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.ClusterStateTaskConfig;
import org.elasticsearch.cluster.ClusterStateTaskExecutor;
import org.elasticsearch.cluster.ClusterStateUpdateTask;
import org.elasticsearch.cluster.ClusterStateTaskListener;
import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.common.Priority;
import org.elasticsearch.common.Strings;
Expand All @@ -35,7 +35,6 @@
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.util.set.Sets;
import org.elasticsearch.core.Nullable;
import org.elasticsearch.core.SuppressForbidden;
import org.elasticsearch.core.TimeValue;
import org.elasticsearch.index.Index;
import org.elasticsearch.index.IndexMode;
Expand Down Expand Up @@ -132,7 +131,7 @@ public class MetadataIndexTemplateService {
try {
final var task = taskContext.getTask();
state = task.execute(state);
taskContext.success(new ClusterStateTaskExecutor.LegacyClusterTaskResultActionListener(task, currentState));
taskContext.success(task.listener.map(ignored -> AcknowledgedResponse.TRUE));
} catch (Exception e) {
taskContext.onFailure(e);
}
Expand All @@ -144,20 +143,14 @@ public class MetadataIndexTemplateService {
* A specialized cluster state update task that always takes a listener handling an
* AcknowledgedResponse, as all template actions have simple acknowledged yes/no responses.
*/
private abstract static class TemplateClusterStateUpdateTask extends ClusterStateUpdateTask {
private final ActionListener<AcknowledgedResponse> listener;
private abstract static class TemplateClusterStateUpdateTask implements ClusterStateTaskListener {
final ActionListener<AcknowledgedResponse> listener;

TemplateClusterStateUpdateTask(Priority priority, TimeValue timeout, ActionListener<AcknowledgedResponse> listener) {
super(priority, timeout);
TemplateClusterStateUpdateTask(ActionListener<AcknowledgedResponse> listener) {
this.listener = listener;
}

public abstract ClusterState doExecute(ClusterState currentState) throws Exception;

@Override
public ClusterState execute(ClusterState currentState) throws Exception {
return doExecute(currentState);
}
public abstract ClusterState execute(ClusterState currentState) throws Exception;

@Override
public void onFailure(Exception e) {
Expand All @@ -166,7 +159,7 @@ public void onFailure(Exception e) {

@Override
public void clusterStateProcessed(ClusterState oldState, ClusterState newState) {
listener.onResponse(AcknowledgedResponse.TRUE);
assert false : "not called";
}
}

Expand All @@ -189,43 +182,33 @@ public MetadataIndexTemplateService(
this.indexSettingProviders = indexSettingProviders.getIndexSettingProviders();
}

@SuppressForbidden(reason = "legacy usage of unbatched task") // TODO add support for batching here
private void submitUnbatchedTask(String source, ClusterStateUpdateTask task) {
clusterService.submitUnbatchedStateUpdateTask(source, task);
}

public void removeTemplates(final RemoveRequest request, final ActionListener<AcknowledgedResponse> listener) {
clusterService.submitStateUpdateTask(
"remove-index-template [" + request.name + "]",
new TemplateClusterStateUpdateTask(Priority.URGENT, request.masterTimeout, listener) {
@Override
public ClusterState doExecute(ClusterState currentState) {
Set<String> templateNames = new HashSet<>();
for (Map.Entry<String, IndexTemplateMetadata> cursor : currentState.metadata().templates().entrySet()) {
String templateName = cursor.getKey();
if (Regex.simpleMatch(request.name, templateName)) {
templateNames.add(templateName);
}
}
if (templateNames.isEmpty()) {
// if its a match all pattern, and no templates are found (we have none), don't
// fail with index missing...
if (Regex.isMatchAllPattern(request.name)) {
return currentState;
}
throw new IndexTemplateMissingException(request.name);
clusterService.submitStateUpdateTask("remove-index-template [" + request.name + "]", new TemplateClusterStateUpdateTask(listener) {
@Override
public ClusterState execute(ClusterState currentState) {
Set<String> templateNames = new HashSet<>();
for (Map.Entry<String, IndexTemplateMetadata> cursor : currentState.metadata().templates().entrySet()) {
String templateName = cursor.getKey();
if (Regex.simpleMatch(request.name, templateName)) {
templateNames.add(templateName);
}
Metadata.Builder metadata = Metadata.builder(currentState.metadata());
for (String templateName : templateNames) {
logger.info("removing template [{}]", templateName);
metadata.removeTemplate(templateName);
}
if (templateNames.isEmpty()) {
// if its a match all pattern, and no templates are found (we have none), don't
// fail with index missing...
if (Regex.isMatchAllPattern(request.name)) {
return currentState;
}
return ClusterState.builder(currentState).metadata(metadata).build();
throw new IndexTemplateMissingException(request.name);
}
},
ClusterStateTaskConfig.build(Priority.URGENT, request.masterTimeout),
TEMPLATE_TASK_EXECUTOR
);
Metadata.Builder metadata = Metadata.builder(currentState.metadata());
for (String templateName : templateNames) {
logger.info("removing template [{}]", templateName);
metadata.removeTemplate(templateName);
}
return ClusterState.builder(currentState).metadata(metadata).build();
}
}, ClusterStateTaskConfig.build(Priority.URGENT, request.masterTimeout), TEMPLATE_TASK_EXECUTOR);
}

/**
Expand All @@ -242,9 +225,9 @@ public void putComponentTemplate(
) {
clusterService.submitStateUpdateTask(
"create-component-template [" + name + "], cause [" + cause + "]",
new TemplateClusterStateUpdateTask(Priority.URGENT, masterTimeout, listener) {
new TemplateClusterStateUpdateTask(listener) {
@Override
public ClusterState doExecute(ClusterState currentState) throws Exception {
public ClusterState execute(ClusterState currentState) throws Exception {
return addComponentTemplate(currentState, create, name, template);
}
},
Expand Down Expand Up @@ -404,9 +387,9 @@ public void removeComponentTemplate(
validateNotInUse(state.metadata(), names);
clusterService.submitStateUpdateTask(
"remove-component-template [" + String.join(",", names) + "]",
new TemplateClusterStateUpdateTask(Priority.URGENT, masterTimeout, listener) {
new TemplateClusterStateUpdateTask(listener) {
@Override
public ClusterState doExecute(ClusterState currentState) {
public ClusterState execute(ClusterState currentState) {
return innerRemoveComponentTemplate(currentState, names);
}
},
Expand Down Expand Up @@ -511,9 +494,9 @@ public void putIndexTemplateV2(
validateV2TemplateRequest(clusterService.state().metadata(), name, template);
clusterService.submitStateUpdateTask(
"create-index-template-v2 [" + name + "], cause [" + cause + "]",
new TemplateClusterStateUpdateTask(Priority.URGENT, masterTimeout, listener) {
new TemplateClusterStateUpdateTask(listener) {
@Override
public ClusterState doExecute(ClusterState currentState) throws Exception {
public ClusterState execute(ClusterState currentState) throws Exception {
return addIndexTemplateV2(currentState, create, name, template);
}
},
Expand Down Expand Up @@ -895,9 +878,9 @@ public void removeIndexTemplateV2(
) {
clusterService.submitStateUpdateTask(
"remove-index-template-v2 [" + String.join(",", names) + "]",
new TemplateClusterStateUpdateTask(Priority.URGENT, masterTimeout, listener) {
new TemplateClusterStateUpdateTask(listener) {
@Override
public ClusterState doExecute(ClusterState currentState) {
public ClusterState execute(ClusterState currentState) {
return innerRemoveIndexTemplateV2(currentState, names);
}
},
Expand Down Expand Up @@ -1019,9 +1002,9 @@ public void putTemplate(final PutRequest request, final ActionListener<Acknowled

clusterService.submitStateUpdateTask(
"create-index-template [" + request.name + "], cause [" + request.cause + "]",
new TemplateClusterStateUpdateTask(Priority.URGENT, request.masterTimeout, listener) {
new TemplateClusterStateUpdateTask(listener) {
@Override
public ClusterState doExecute(ClusterState currentState) throws Exception {
public ClusterState execute(ClusterState currentState) throws Exception {
validateTemplate(request.settings, request.mappings, indicesService);
return innerPutTemplate(currentState, request, templateBuilder);
}
Expand Down