Skip to content

Commit 46223a3

Browse files
committed
Fixing StreamsMetadata xcontent serialization
1 parent d356685 commit 46223a3

File tree

3 files changed

+62
-1
lines changed

3 files changed

+62
-1
lines changed

server/src/main/java/org/elasticsearch/cluster/ClusterModule.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,13 @@ public static List<NamedXContentRegistry.Entry> getNamedXWriteables() {
380380
DesiredNodesMetadata::fromXContent
381381
)
382382
);
383+
entries.add(
384+
new NamedXContentRegistry.Entry(
385+
Metadata.ProjectCustom.class,
386+
new ParseField(StreamsMetadata.TYPE),
387+
StreamsMetadata::fromXContent
388+
)
389+
);
383390
return entries;
384391
}
385392

server/src/main/java/org/elasticsearch/cluster/metadata/StreamsMetadata.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,15 @@
1313
import org.elasticsearch.TransportVersions;
1414
import org.elasticsearch.cluster.AbstractNamedDiffable;
1515
import org.elasticsearch.cluster.NamedDiff;
16+
import org.elasticsearch.common.collect.ImmutableOpenMap;
1617
import org.elasticsearch.common.collect.Iterators;
1718
import org.elasticsearch.common.io.stream.StreamInput;
1819
import org.elasticsearch.common.io.stream.StreamOutput;
1920
import org.elasticsearch.common.xcontent.ChunkedToXContentHelper;
21+
import org.elasticsearch.xcontent.ConstructingObjectParser;
22+
import org.elasticsearch.xcontent.ParseField;
2023
import org.elasticsearch.xcontent.ToXContent;
24+
import org.elasticsearch.xcontent.XContentParser;
2125

2226
import java.io.IOException;
2327
import java.util.EnumSet;
@@ -32,6 +36,14 @@ public class StreamsMetadata extends AbstractNamedDiffable<Metadata.ProjectCusto
3236

3337
public static final String TYPE = "streams";
3438
public static final StreamsMetadata EMPTY = new StreamsMetadata(false);
39+
private static final ParseField LOGS_ENABLED = new ParseField("logs_enabled");
40+
private static final ConstructingObjectParser<StreamsMetadata, Void> PARSER = new ConstructingObjectParser<>(TYPE, false, args -> {
41+
boolean logsEnabled = (boolean) args[0];
42+
return new StreamsMetadata(logsEnabled);
43+
});
44+
static {
45+
PARSER.declareBoolean(ConstructingObjectParser.constructorArg(), LOGS_ENABLED);
46+
}
3547

3648
public boolean logsEnabled;
3749

@@ -79,7 +91,7 @@ public void writeTo(StreamOutput out) throws IOException {
7991

8092
@Override
8193
public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params) {
82-
return Iterators.concat(ChunkedToXContentHelper.chunk((builder, bParams) -> builder.field("logs_enabled", logsEnabled)));
94+
return Iterators.concat(ChunkedToXContentHelper.chunk((builder, bParams) -> builder.field(LOGS_ENABLED.getPreferredName(), logsEnabled)));
8395
}
8496

8597
@Override
@@ -95,4 +107,8 @@ public boolean equals(Object o) {
95107
public int hashCode() {
96108
return Objects.hashCode(logsEnabled);
97109
}
110+
111+
public static StreamsMetadata fromXContent(XContentParser parser) throws IOException {
112+
return PARSER.parse(parser, null);
113+
}
98114
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.cluster.metadata;
11+
12+
import org.elasticsearch.common.io.stream.Writeable;
13+
import org.elasticsearch.test.AbstractChunkedSerializingTestCase;
14+
import org.elasticsearch.xcontent.XContentParser;
15+
16+
import java.io.IOException;
17+
18+
public class StreamsMetadataTests extends AbstractChunkedSerializingTestCase<StreamsMetadata> {
19+
@Override
20+
protected StreamsMetadata doParseInstance(XContentParser parser) throws IOException {
21+
return StreamsMetadata.fromXContent(parser);
22+
}
23+
24+
@Override
25+
protected Writeable.Reader<StreamsMetadata> instanceReader() {
26+
return StreamsMetadata::new;
27+
}
28+
29+
@Override
30+
protected StreamsMetadata createTestInstance() {
31+
return new StreamsMetadata(randomBoolean());
32+
}
33+
34+
@Override
35+
protected StreamsMetadata mutateInstance(StreamsMetadata instance) throws IOException {
36+
return new StreamsMetadata(instance.logsEnabled == false);
37+
}
38+
}

0 commit comments

Comments
 (0)