Skip to content

Commit bcd09ab

Browse files
authored
Fix missing order field in TemplatesMetadata deserialization (opensearch-project#15509)
Signed-off-by: Sooraj Sinha <soosinha@amazon.com>
1 parent 925f41b commit bcd09ab

File tree

3 files changed

+52
-8
lines changed

3 files changed

+52
-8
lines changed

server/src/main/java/org/opensearch/cluster/metadata/TemplatesMetadata.java

+7-8
Original file line numberDiff line numberDiff line change
@@ -133,16 +133,15 @@ public static TemplatesMetadata fromXContent(XContentParser parser) throws IOExc
133133
String currentFieldName = parser.currentName();
134134
if (currentFieldName == null) {
135135
token = parser.nextToken();
136-
if (token == XContentParser.Token.START_OBJECT) {
137-
// move to the field name
138-
token = parser.nextToken();
139-
}
140-
currentFieldName = parser.currentName();
141136
}
142-
if (currentFieldName != null) {
143-
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
137+
if (token == XContentParser.Token.START_OBJECT) {
138+
// move to the field name
139+
token = parser.nextToken();
140+
}
141+
if (parser.currentName() != null && token != XContentParser.Token.END_OBJECT) {
142+
do {
144143
builder.put(IndexTemplateMetadata.Builder.fromXContent(parser, parser.currentName()));
145-
}
144+
} while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT);
146145
}
147146
return builder.build();
148147
}

server/src/test/java/org/opensearch/cluster/metadata/MetadataTests.java

+35
Original file line numberDiff line numberDiff line change
@@ -1536,6 +1536,41 @@ public static Metadata randomMetadata() {
15361536
return md.build();
15371537
}
15381538

1539+
public void testXContentWithTemplateMetadata() throws IOException {
1540+
final TemplatesMetadata templatesMetadata = getTemplatesMetadata(0);
1541+
verifyTemplatesMetadata(templatesMetadata);
1542+
final TemplatesMetadata templatesMetadata2 = getTemplatesMetadata(2);
1543+
verifyTemplatesMetadata(templatesMetadata2);
1544+
}
1545+
1546+
private void verifyTemplatesMetadata(TemplatesMetadata templatesMetadata) throws IOException {
1547+
final Metadata originalMeta = Metadata.builder().templates(templatesMetadata).build();
1548+
final XContentBuilder builder = JsonXContent.contentBuilder();
1549+
builder.startObject();
1550+
Metadata.FORMAT.toXContent(builder, originalMeta);
1551+
builder.endObject();
1552+
try (XContentParser parser = createParser(JsonXContent.jsonXContent, BytesReference.bytes(builder))) {
1553+
final Metadata fromXContentMeta = Metadata.fromXContent(parser);
1554+
assertThat(fromXContentMeta.templates(), equalTo(originalMeta.templates()));
1555+
}
1556+
}
1557+
1558+
private static TemplatesMetadata getTemplatesMetadata(int numberOfTemplates) {
1559+
TemplatesMetadata.Builder builder = TemplatesMetadata.builder();
1560+
for (int i = 0; i < numberOfTemplates; i++) {
1561+
builder.put(
1562+
IndexTemplateMetadata.builder("template" + i)
1563+
.order(1234)
1564+
.patterns(Arrays.asList(randomAlphaOfLength(3) + "-*"))
1565+
.settings(
1566+
Settings.builder().put("index.random_index_setting_" + randomAlphaOfLength(3), randomAlphaOfLength(5)).build()
1567+
)
1568+
.build()
1569+
);
1570+
}
1571+
return builder.build();
1572+
}
1573+
15391574
private static CreateIndexResult createIndices(int numIndices, int numBackingIndices, String dataStreamName) {
15401575
// create some indices that do not back a data stream
15411576
final List<Index> indices = new ArrayList<>();

server/src/test/java/org/opensearch/gateway/remote/model/RemoteTemplatesMetadataTests.java

+10
Original file line numberDiff line numberDiff line change
@@ -231,12 +231,22 @@ public static TemplatesMetadata getTemplatesMetadata() {
231231
return TemplatesMetadata.builder()
232232
.put(
233233
IndexTemplateMetadata.builder("template" + randomAlphaOfLength(3))
234+
.order(1234)
234235
.patterns(Arrays.asList("bar-*", "foo-*"))
235236
.settings(
236237
Settings.builder().put("index.random_index_setting_" + randomAlphaOfLength(3), randomAlphaOfLength(5)).build()
237238
)
238239
.build()
239240
)
241+
.put(
242+
IndexTemplateMetadata.builder("template" + randomAlphaOfLength(3))
243+
.order(5678)
244+
.patterns(Arrays.asList("test-*"))
245+
.settings(
246+
Settings.builder().put("index.random_index_setting_" + randomAlphaOfLength(3), randomAlphaOfLength(5)).build()
247+
)
248+
.build()
249+
)
240250
.build();
241251
}
242252
}

0 commit comments

Comments
 (0)