Add Shrink request source parser to parse create index request body
Follow up to https://github.com/elastic/elasticsearch/pull/18732#discussion_r66407196
This commit is contained in:
parent
053a615686
commit
ce211119d0
|
@ -18,15 +18,25 @@
|
||||||
*/
|
*/
|
||||||
package org.elasticsearch.action.admin.indices.shrink;
|
package org.elasticsearch.action.admin.indices.shrink;
|
||||||
|
|
||||||
|
import org.elasticsearch.ElasticsearchParseException;
|
||||||
import org.elasticsearch.action.ActionRequestValidationException;
|
import org.elasticsearch.action.ActionRequestValidationException;
|
||||||
import org.elasticsearch.action.IndicesRequest;
|
import org.elasticsearch.action.IndicesRequest;
|
||||||
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
|
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
|
||||||
import org.elasticsearch.action.support.IndicesOptions;
|
import org.elasticsearch.action.support.IndicesOptions;
|
||||||
import org.elasticsearch.action.support.master.AcknowledgedRequest;
|
import org.elasticsearch.action.support.master.AcknowledgedRequest;
|
||||||
|
import org.elasticsearch.common.ParseField;
|
||||||
|
import org.elasticsearch.common.ParseFieldMatcher;
|
||||||
|
import org.elasticsearch.common.ParseFieldMatcherSupplier;
|
||||||
|
import org.elasticsearch.common.bytes.BytesReference;
|
||||||
import org.elasticsearch.common.io.stream.StreamInput;
|
import org.elasticsearch.common.io.stream.StreamInput;
|
||||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||||
|
import org.elasticsearch.common.xcontent.ObjectParser;
|
||||||
|
import org.elasticsearch.common.xcontent.XContentFactory;
|
||||||
|
import org.elasticsearch.common.xcontent.XContentParser;
|
||||||
|
import org.elasticsearch.common.xcontent.XContentType;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import static org.elasticsearch.action.ValidateActions.addValidationError;
|
import static org.elasticsearch.action.ValidateActions.addValidationError;
|
||||||
|
@ -36,6 +46,17 @@ import static org.elasticsearch.action.ValidateActions.addValidationError;
|
||||||
*/
|
*/
|
||||||
public class ShrinkRequest extends AcknowledgedRequest<ShrinkRequest> implements IndicesRequest {
|
public class ShrinkRequest extends AcknowledgedRequest<ShrinkRequest> implements IndicesRequest {
|
||||||
|
|
||||||
|
public static ObjectParser<ShrinkRequest, ParseFieldMatcherSupplier> PARSER =
|
||||||
|
new ObjectParser<>("shrink_request", null);
|
||||||
|
static {
|
||||||
|
PARSER.declareField((parser, request, parseFieldMatcherSupplier) ->
|
||||||
|
request.getShrinkIndexRequest().settings(parser.map()),
|
||||||
|
new ParseField("settings"), ObjectParser.ValueType.OBJECT);
|
||||||
|
PARSER.declareField((parser, request, parseFieldMatcherSupplier) ->
|
||||||
|
request.getShrinkIndexRequest().aliases(parser.map()),
|
||||||
|
new ParseField("aliases"), ObjectParser.ValueType.OBJECT);
|
||||||
|
}
|
||||||
|
|
||||||
private CreateIndexRequest shrinkIndexRequest;
|
private CreateIndexRequest shrinkIndexRequest;
|
||||||
private String sourceIndex;
|
private String sourceIndex;
|
||||||
|
|
||||||
|
@ -104,4 +125,17 @@ public class ShrinkRequest extends AcknowledgedRequest<ShrinkRequest> implements
|
||||||
public String getSourceIndex() {
|
public String getSourceIndex() {
|
||||||
return sourceIndex;
|
return sourceIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void source(BytesReference source) {
|
||||||
|
XContentType xContentType = XContentFactory.xContentType(source);
|
||||||
|
if (xContentType != null) {
|
||||||
|
try (XContentParser parser = XContentFactory.xContent(xContentType).createParser(source)) {
|
||||||
|
PARSER.parse(parser, this, () -> ParseFieldMatcher.EMPTY);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ElasticsearchParseException("failed to parse source for shrink index", e);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new ElasticsearchParseException("failed to parse content type for shrink index source");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,7 @@ public class RestShrinkIndexAction extends BaseRestHandler {
|
||||||
}
|
}
|
||||||
ShrinkRequest shrinkIndexRequest = new ShrinkRequest(request.param("target"), request.param("index"));
|
ShrinkRequest shrinkIndexRequest = new ShrinkRequest(request.param("target"), request.param("index"));
|
||||||
if (request.hasContent()) {
|
if (request.hasContent()) {
|
||||||
shrinkIndexRequest.getShrinkIndexRequest().source(request.content());
|
shrinkIndexRequest.source(request.content());
|
||||||
}
|
}
|
||||||
shrinkIndexRequest.timeout(request.paramAsTime("timeout", shrinkIndexRequest.timeout()));
|
shrinkIndexRequest.timeout(request.paramAsTime("timeout", shrinkIndexRequest.timeout()));
|
||||||
shrinkIndexRequest.masterNodeTimeout(request.paramAsTime("master_timeout", shrinkIndexRequest.masterNodeTimeout()));
|
shrinkIndexRequest.masterNodeTimeout(request.paramAsTime("master_timeout", shrinkIndexRequest.masterNodeTimeout()));
|
||||||
|
|
|
@ -54,7 +54,8 @@
|
||||||
index: "source"
|
index: "source"
|
||||||
target: "target"
|
target: "target"
|
||||||
body:
|
body:
|
||||||
index.number_of_replicas: 0
|
settings:
|
||||||
|
index.number_of_replicas: 0
|
||||||
|
|
||||||
- do:
|
- do:
|
||||||
cluster.health:
|
cluster.health:
|
||||||
|
|
Loading…
Reference in New Issue