org.elasticsearch.action.datastreams.ModifyDataStreamsAction Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of elasticsearch Show documentation
Show all versions of elasticsearch Show documentation
Elasticsearch - Open Source, Distributed, RESTful Search Engine
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
package org.elasticsearch.action.datastreams;
import org.elasticsearch.action.ActionRequestValidationException;
import org.elasticsearch.action.ActionType;
import org.elasticsearch.action.IndicesRequest;
import org.elasticsearch.action.support.IndicesOptions;
import org.elasticsearch.action.support.master.AcknowledgedRequest;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.cluster.metadata.DataStreamAction;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput;
import org.elasticsearch.xcontent.ConstructingObjectParser;
import org.elasticsearch.xcontent.ParseField;
import org.elasticsearch.xcontent.ToXContentObject;
import org.elasticsearch.xcontent.XContentBuilder;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import static org.elasticsearch.action.ValidateActions.addValidationError;
public class ModifyDataStreamsAction extends ActionType {
public static final ModifyDataStreamsAction INSTANCE = new ModifyDataStreamsAction();
public static final String NAME = "indices:admin/data_stream/modify";
private ModifyDataStreamsAction() {
super(NAME, AcknowledgedResponse::readFrom);
}
public static final class Request extends AcknowledgedRequest implements IndicesRequest, ToXContentObject {
// The actual DataStreamAction don't support wildcards, so supporting it doesn't make sense.
// Also supporting wildcards it would prohibit this api from removing broken references to backing indices. (in case of bugs).
// For this case, when removing broken backing indices references that don't exist, we need to allow ignore_unavailable and
// allow_no_indices. Otherwise, the data stream can't be repaired.
private static final IndicesOptions INDICES_OPTIONS = IndicesOptions.fromOptions(
true,
true,
false,
false,
false,
false,
true,
false
);
private final List actions;
public Request(StreamInput in) throws IOException {
super(in);
actions = in.readList(DataStreamAction::new);
}
@Override
public void writeTo(StreamOutput out) throws IOException {
super.writeTo(out);
out.writeList(actions);
}
public Request(List actions) {
this.actions = Collections.unmodifiableList(actions);
}
public List getActions() {
return actions;
}
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
builder.startArray("actions");
for (DataStreamAction action : actions) {
action.toXContent(builder, params);
}
builder.endArray();
builder.endObject();
return builder;
}
@Override
public ActionRequestValidationException validate() {
if (actions.isEmpty()) {
return addValidationError("must specify at least one data stream modification action", null);
}
return null;
}
@SuppressWarnings("unchecked")
public static final ConstructingObjectParser PARSER = new ConstructingObjectParser<>(
"data_stream_actions",
args -> new Request(((List) args[0]))
);
static {
PARSER.declareObjectArray(ConstructingObjectParser.constructorArg(), DataStreamAction.PARSER, new ParseField("actions"));
}
@Override
public String[] indices() {
// Return the indices instead of data streams, this api can be used to repair a broken data stream definition and
// in that case, exceptions can occur while resolving data streams for doing authorization or looking up index blocks.
return actions.stream().map(DataStreamAction::getIndex).toArray(String[]::new);
}
@Override
public IndicesOptions indicesOptions() {
return INDICES_OPTIONS;
}
@Override
public boolean includeDataStreams() {
return true;
}
@Override
public boolean equals(Object obj) {
if (obj == null || obj.getClass() != getClass()) {
return false;
}
Request other = (Request) obj;
return Arrays.equals(actions.toArray(), other.actions.toArray());
}
@Override
public int hashCode() {
return Objects.hash(actions);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy