Support unknown fields in ingest pipeline map configuration (#38352)
We already support unknown objects in the list of pipelines, this changes the `PipelineConfiguration` to support fields other than just `id` and `config`. Relates to #36938
This commit is contained in:
parent
638ba4a59a
commit
d862453d68
|
@ -20,6 +20,7 @@
|
|||
package org.elasticsearch.action.ingest;
|
||||
|
||||
import org.elasticsearch.action.ActionResponse;
|
||||
import org.elasticsearch.common.Strings;
|
||||
import org.elasticsearch.common.bytes.BytesReference;
|
||||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||
|
@ -109,13 +110,12 @@ public class GetPipelineResponse extends ActionResponse implements StatusToXCont
|
|||
while(parser.nextToken().equals(Token.FIELD_NAME)) {
|
||||
String pipelineId = parser.currentName();
|
||||
parser.nextToken();
|
||||
XContentBuilder contentBuilder = XContentBuilder.builder(parser.contentType().xContent());
|
||||
contentBuilder.generator().copyCurrentStructure(parser);
|
||||
PipelineConfiguration pipeline =
|
||||
new PipelineConfiguration(
|
||||
pipelineId, BytesReference.bytes(contentBuilder), contentBuilder.contentType()
|
||||
);
|
||||
pipelines.add(pipeline);
|
||||
try (XContentBuilder contentBuilder = XContentBuilder.builder(parser.contentType().xContent())) {
|
||||
contentBuilder.generator().copyCurrentStructure(parser);
|
||||
PipelineConfiguration pipeline =
|
||||
new PipelineConfiguration(pipelineId, BytesReference.bytes(contentBuilder), contentBuilder.contentType());
|
||||
pipelines.add(pipeline);
|
||||
}
|
||||
}
|
||||
ensureExpectedToken(XContentParser.Token.END_OBJECT, parser.currentToken(), parser::getTokenLocation);
|
||||
return new GetPipelineResponse(pipelines);
|
||||
|
@ -148,6 +148,11 @@ public class GetPipelineResponse extends ActionResponse implements StatusToXCont
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return Strings.toString(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = 1;
|
||||
|
|
|
@ -22,6 +22,7 @@ package org.elasticsearch.ingest;
|
|||
import org.elasticsearch.cluster.AbstractDiffable;
|
||||
import org.elasticsearch.cluster.Diff;
|
||||
import org.elasticsearch.common.ParseField;
|
||||
import org.elasticsearch.common.Strings;
|
||||
import org.elasticsearch.common.bytes.BytesReference;
|
||||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||
|
@ -41,7 +42,7 @@ import java.util.Objects;
|
|||
*/
|
||||
public final class PipelineConfiguration extends AbstractDiffable<PipelineConfiguration> implements ToXContentObject {
|
||||
|
||||
private static final ObjectParser<Builder, Void> PARSER = new ObjectParser<>("pipeline_config", Builder::new);
|
||||
private static final ObjectParser<Builder, Void> PARSER = new ObjectParser<>("pipeline_config", true, Builder::new);
|
||||
static {
|
||||
PARSER.declareString(Builder::setId, new ParseField("id"));
|
||||
PARSER.declareField((parser, builder, aVoid) -> {
|
||||
|
@ -123,6 +124,11 @@ public final class PipelineConfiguration extends AbstractDiffable<PipelineConfig
|
|||
return readDiffFrom(PipelineConfiguration::readFrom, in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return Strings.toString(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeTo(StreamOutput out) throws IOException {
|
||||
out.writeString(id);
|
||||
|
|
|
@ -31,12 +31,13 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
|
|||
import org.elasticsearch.common.xcontent.XContentHelper;
|
||||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.common.xcontent.XContentType;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.AbstractXContentTestCase;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
public class PipelineConfigurationTests extends ESTestCase {
|
||||
public class PipelineConfigurationTests extends AbstractXContentTestCase<PipelineConfiguration> {
|
||||
|
||||
public void testSerialization() throws IOException {
|
||||
PipelineConfiguration configuration = new PipelineConfiguration("1",
|
||||
|
@ -68,4 +69,30 @@ public class PipelineConfigurationTests extends ESTestCase {
|
|||
assertEquals("{}", XContentHelper.convertToJson(parsed.getConfig(), false, parsed.getXContentType()));
|
||||
assertEquals("1", parsed.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PipelineConfiguration createTestInstance() {
|
||||
BytesArray config;
|
||||
if (randomBoolean()) {
|
||||
config = new BytesArray("{}".getBytes(StandardCharsets.UTF_8));
|
||||
} else {
|
||||
config = new BytesArray("{\"foo\": \"bar\"}".getBytes(StandardCharsets.UTF_8));
|
||||
}
|
||||
return new PipelineConfiguration(randomAlphaOfLength(4), config, XContentType.JSON);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PipelineConfiguration doParseInstance(XContentParser parser) throws IOException {
|
||||
return PipelineConfiguration.getParser().parse(parser, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean supportsUnknownFields() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Predicate<String> getRandomFieldsExcludeFilter() {
|
||||
return field -> field.equals("config");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue