diff --git a/server/src/main/java/org/elasticsearch/cluster/ClusterModule.java b/server/src/main/java/org/elasticsearch/cluster/ClusterModule.java index 5a3a7e0a5ead5..3c201b7399aa9 100644 --- a/server/src/main/java/org/elasticsearch/cluster/ClusterModule.java +++ b/server/src/main/java/org/elasticsearch/cluster/ClusterModule.java @@ -316,6 +316,9 @@ public static List getNamedXWriteables() { DesiredNodesMetadata::fromXContent ) ); + entries.add( + new NamedXContentRegistry.Entry(Metadata.Custom.class, new ParseField(StreamsMetadata.TYPE), StreamsMetadata::fromXContent) + ); return entries; } diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/StreamsMetadata.java b/server/src/main/java/org/elasticsearch/cluster/metadata/StreamsMetadata.java index b035fcb4b7755..e9315f781a79c 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/StreamsMetadata.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/StreamsMetadata.java @@ -17,7 +17,10 @@ import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.xcontent.ChunkedToXContentHelper; +import org.elasticsearch.xcontent.ConstructingObjectParser; +import org.elasticsearch.xcontent.ParseField; import org.elasticsearch.xcontent.ToXContent; +import org.elasticsearch.xcontent.XContentParser; import java.io.IOException; import java.util.EnumSet; @@ -32,6 +35,14 @@ public class StreamsMetadata extends AbstractNamedDiffable impl public static final String TYPE = "streams"; public static final StreamsMetadata EMPTY = new StreamsMetadata(false); + private static final ParseField LOGS_ENABLED = new ParseField("logs_enabled"); + private static final ConstructingObjectParser PARSER = new ConstructingObjectParser<>(TYPE, false, args -> { + boolean logsEnabled = (boolean) args[0]; + return new StreamsMetadata(logsEnabled); + }); + static { + PARSER.declareBoolean(ConstructingObjectParser.constructorArg(), LOGS_ENABLED); + } public boolean logsEnabled; @@ -77,7 +88,9 @@ public void writeTo(StreamOutput out) throws IOException { @Override public Iterator toXContentChunked(ToXContent.Params params) { - return Iterators.concat(ChunkedToXContentHelper.singleChunk((builder, bParams) -> builder.field("logs_enabled", logsEnabled))); + return Iterators.concat( + ChunkedToXContentHelper.singleChunk((builder, bParams) -> builder.field(LOGS_ENABLED.getPreferredName(), logsEnabled)) + ); } @Override @@ -93,4 +106,8 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hashCode(logsEnabled); } + + public static StreamsMetadata fromXContent(XContentParser parser) throws IOException { + return PARSER.parse(parser, null); + } } diff --git a/server/src/test/java/org/elasticsearch/cluster/metadata/StreamsMetadataTests.java b/server/src/test/java/org/elasticsearch/cluster/metadata/StreamsMetadataTests.java new file mode 100644 index 0000000000000..033814048a36c --- /dev/null +++ b/server/src/test/java/org/elasticsearch/cluster/metadata/StreamsMetadataTests.java @@ -0,0 +1,38 @@ +/* + * 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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +package org.elasticsearch.cluster.metadata; + +import org.elasticsearch.common.io.stream.Writeable; +import org.elasticsearch.test.AbstractChunkedSerializingTestCase; +import org.elasticsearch.xcontent.XContentParser; + +import java.io.IOException; + +public class StreamsMetadataTests extends AbstractChunkedSerializingTestCase { + @Override + protected StreamsMetadata doParseInstance(XContentParser parser) throws IOException { + return StreamsMetadata.fromXContent(parser); + } + + @Override + protected Writeable.Reader instanceReader() { + return StreamsMetadata::new; + } + + @Override + protected StreamsMetadata createTestInstance() { + return new StreamsMetadata(randomBoolean()); + } + + @Override + protected StreamsMetadata mutateInstance(StreamsMetadata instance) throws IOException { + return new StreamsMetadata(instance.logsEnabled == false); + } +}