Skip to content

Commit

Permalink
Support unknown fields in ingest pipeline map
Browse files Browse the repository at this point in the history
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 elastic#36938
  • Loading branch information
dakrone committed Feb 4, 2019
1 parent 1899658 commit 49a5ef5
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -109,13 +110,12 @@ public static GetPipelineResponse fromXContent(XContentParser parser) throws IOE
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);
Expand Down Expand Up @@ -148,6 +148,11 @@ public boolean equals(Object other) {
}
}

@Override
public String toString() {
return Strings.toString(this);
}

@Override
public int hashCode() {
int result = 1;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
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;
Expand All @@ -41,7 +42,7 @@
*/
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) -> {
Expand Down Expand Up @@ -123,6 +124,11 @@ public static Diff<PipelineConfiguration> readDiffFrom(StreamInput in) throws IO
return readDiffFrom(PipelineConfiguration::readFrom, in);
}

@Override
public String toString() {
return Strings.toString(this);
}

@Override
public void writeTo(StreamOutput out) throws IOException {
out.writeString(id);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,13 @@
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",
Expand Down Expand Up @@ -68,4 +69,30 @@ public void testParser() throws IOException {
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");
}
}

0 comments on commit 49a5ef5

Please sign in to comment.