Skip to content

Commit 35a2460

Browse files
masseykeelasticsearchmachine
andauthored
[8.19] Fixing StreamsMetadata xcontent serialization (#132953) (#132983)
* Fixing StreamsMetadata xcontent serialization (#132953) (cherry picked from commit d33dceb) # Conflicts: # server/src/main/java/org/elasticsearch/cluster/metadata/StreamsMetadata.java * removing reference to project * [CI] Auto commit changes from spotless --------- Co-authored-by: elasticsearchmachine <[email protected]>
1 parent 4d59bce commit 35a2460

File tree

3 files changed

+59
-1
lines changed

3 files changed

+59
-1
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,9 @@ public static List<NamedXContentRegistry.Entry> getNamedXWriteables() {
316316
DesiredNodesMetadata::fromXContent
317317
)
318318
);
319+
entries.add(
320+
new NamedXContentRegistry.Entry(Metadata.Custom.class, new ParseField(StreamsMetadata.TYPE), StreamsMetadata::fromXContent)
321+
);
319322
return entries;
320323
}
321324

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@
1717
import org.elasticsearch.common.io.stream.StreamInput;
1818
import org.elasticsearch.common.io.stream.StreamOutput;
1919
import org.elasticsearch.common.xcontent.ChunkedToXContentHelper;
20+
import org.elasticsearch.xcontent.ConstructingObjectParser;
21+
import org.elasticsearch.xcontent.ParseField;
2022
import org.elasticsearch.xcontent.ToXContent;
23+
import org.elasticsearch.xcontent.XContentParser;
2124

2225
import java.io.IOException;
2326
import java.util.EnumSet;
@@ -32,6 +35,14 @@ public class StreamsMetadata extends AbstractNamedDiffable<Metadata.Custom> impl
3235

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

3647
public boolean logsEnabled;
3748

@@ -77,7 +88,9 @@ public void writeTo(StreamOutput out) throws IOException {
7788

7889
@Override
7990
public Iterator<? extends ToXContent> toXContentChunked(ToXContent.Params params) {
80-
return Iterators.concat(ChunkedToXContentHelper.singleChunk((builder, bParams) -> builder.field("logs_enabled", logsEnabled)));
91+
return Iterators.concat(
92+
ChunkedToXContentHelper.singleChunk((builder, bParams) -> builder.field(LOGS_ENABLED.getPreferredName(), logsEnabled))
93+
);
8194
}
8295

8396
@Override
@@ -93,4 +106,8 @@ public boolean equals(Object o) {
93106
public int hashCode() {
94107
return Objects.hashCode(logsEnabled);
95108
}
109+
110+
public static StreamsMetadata fromXContent(XContentParser parser) throws IOException {
111+
return PARSER.parse(parser, null);
112+
}
96113
}
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)