Skip to content

Commit f8515c7

Browse files
authored
[BUG] Bug fix for checksum validation for mapping metadata (opensearch-project#15885)
* Bug fix for checksum validation for mapping metadata Signed-off-by: Himshikha Gupta <himshikh@amazon.com>
1 parent 107f0ce commit f8515c7

File tree

4 files changed

+81
-3
lines changed

4 files changed

+81
-3
lines changed

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

+39-1
Original file line numberDiff line numberDiff line change
@@ -1278,7 +1278,7 @@ public void writeVerifiableTo(BufferedChecksumStreamOutput out) throws IOExcepti
12781278
out.writeByte(state.id());
12791279
writeSettingsToStream(settings, out);
12801280
out.writeVLongArray(primaryTerms);
1281-
out.writeMapValues(mappings, (stream, val) -> val.writeTo(stream));
1281+
out.writeMapValues(mappings, (stream, val) -> val.writeVerifiableTo((BufferedChecksumStreamOutput) stream));
12821282
out.writeMapValues(aliases, (stream, val) -> val.writeTo(stream));
12831283
out.writeMap(customData, StreamOutput::writeString, (stream, val) -> val.writeTo(stream));
12841284
out.writeMap(
@@ -1293,6 +1293,44 @@ public void writeVerifiableTo(BufferedChecksumStreamOutput out) throws IOExcepti
12931293
}
12941294
}
12951295

1296+
@Override
1297+
public String toString() {
1298+
return new StringBuilder().append("IndexMetadata{routingNumShards=")
1299+
.append(routingNumShards)
1300+
.append(", index=")
1301+
.append(index)
1302+
.append(", version=")
1303+
.append(version)
1304+
.append(", state=")
1305+
.append(state)
1306+
.append(", settingsVersion=")
1307+
.append(settingsVersion)
1308+
.append(", mappingVersion=")
1309+
.append(mappingVersion)
1310+
.append(", aliasesVersion=")
1311+
.append(aliasesVersion)
1312+
.append(", primaryTerms=")
1313+
.append(Arrays.toString(primaryTerms))
1314+
.append(", aliases=")
1315+
.append(aliases)
1316+
.append(", settings=")
1317+
.append(settings)
1318+
.append(", mappings=")
1319+
.append(mappings)
1320+
.append(", customData=")
1321+
.append(customData)
1322+
.append(", inSyncAllocationIds=")
1323+
.append(inSyncAllocationIds)
1324+
.append(", rolloverInfos=")
1325+
.append(rolloverInfos)
1326+
.append(", isSystem=")
1327+
.append(isSystem)
1328+
.append(", context=")
1329+
.append(context)
1330+
.append("}")
1331+
.toString();
1332+
}
1333+
12961334
public boolean isSystem() {
12971335
return isSystem;
12981336
}

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

+10-1
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,10 @@
4040
import org.opensearch.common.xcontent.XContentFactory;
4141
import org.opensearch.common.xcontent.XContentHelper;
4242
import org.opensearch.core.common.bytes.BytesReference;
43+
import org.opensearch.core.common.io.stream.BufferedChecksumStreamOutput;
4344
import org.opensearch.core.common.io.stream.StreamInput;
4445
import org.opensearch.core.common.io.stream.StreamOutput;
46+
import org.opensearch.core.common.io.stream.VerifiableWriteable;
4547
import org.opensearch.core.xcontent.XContentBuilder;
4648
import org.opensearch.index.mapper.DocumentMapper;
4749
import org.opensearch.index.mapper.MapperService;
@@ -60,7 +62,7 @@
6062
* @opensearch.api
6163
*/
6264
@PublicApi(since = "1.0.0")
63-
public class MappingMetadata extends AbstractDiffable<MappingMetadata> {
65+
public class MappingMetadata extends AbstractDiffable<MappingMetadata> implements VerifiableWriteable {
6466
public static final MappingMetadata EMPTY_MAPPINGS = new MappingMetadata(MapperService.SINGLE_MAPPING_NAME, Collections.emptyMap());
6567

6668
private final String type;
@@ -164,6 +166,13 @@ public void writeTo(StreamOutput out) throws IOException {
164166
out.writeBoolean(routingRequired);
165167
}
166168

169+
@Override
170+
public void writeVerifiableTo(BufferedChecksumStreamOutput out) throws IOException {
171+
out.writeString(type());
172+
source().writeVerifiableTo(out);
173+
out.writeBoolean(routingRequired);
174+
}
175+
167176
@Override
168177
public boolean equals(Object o) {
169178
if (this == o) return true;

server/src/main/java/org/opensearch/common/compress/CompressedXContent.java

+5
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import org.opensearch.common.xcontent.XContentFactory;
3939
import org.opensearch.core.common.bytes.BytesArray;
4040
import org.opensearch.core.common.bytes.BytesReference;
41+
import org.opensearch.core.common.io.stream.BufferedChecksumStreamOutput;
4142
import org.opensearch.core.common.io.stream.StreamInput;
4243
import org.opensearch.core.common.io.stream.StreamOutput;
4344
import org.opensearch.core.compress.Compressor;
@@ -169,6 +170,10 @@ public void writeTo(StreamOutput out) throws IOException {
169170
out.writeByteArray(bytes);
170171
}
171172

173+
public void writeVerifiableTo(BufferedChecksumStreamOutput out) throws IOException {
174+
out.writeInt(crc32);
175+
}
176+
172177
@Override
173178
public boolean equals(Object o) {
174179
if (this == o) return true;

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

+27-1
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,30 @@ public void testWriteVerifiableTo() throws IOException {
199199
),
200200
randomNonNegativeLong()
201201
);
202-
202+
String mappings = " {\n"
203+
+ " \"_doc\": {\n"
204+
+ " \"properties\": {\n"
205+
+ " \"actiongroups\": {\n"
206+
+ " \"type\": \"text\",\n"
207+
+ " \"fields\": {\n"
208+
+ " \"keyword\": {\n"
209+
+ " \"type\": \"keyword\",\n"
210+
+ " \"ignore_above\": 256\n"
211+
+ " }\n"
212+
+ " }\n"
213+
+ " },\n"
214+
+ " \"allowlist\": {\n"
215+
+ " \"type\": \"text\",\n"
216+
+ " \"fields\": {\n"
217+
+ " \"keyword\": {\n"
218+
+ " \"type\": \"keyword\",\n"
219+
+ " \"ignore_above\": 256\n"
220+
+ " }\n"
221+
+ " }\n"
222+
+ " }\n"
223+
+ " }\n"
224+
+ " }\n"
225+
+ " }";
203226
IndexMetadata metadata1 = IndexMetadata.builder("foo")
204227
.settings(
205228
Settings.builder()
@@ -220,11 +243,13 @@ public void testWriteVerifiableTo() throws IOException {
220243
.putRolloverInfo(info1)
221244
.putRolloverInfo(info2)
222245
.putInSyncAllocationIds(0, Set.of("1", "2", "3"))
246+
.putMapping(mappings)
223247
.build();
224248

225249
BytesStreamOutput out = new BytesStreamOutput();
226250
BufferedChecksumStreamOutput checksumOut = new BufferedChecksumStreamOutput(out);
227251
metadata1.writeVerifiableTo(checksumOut);
252+
assertNotNull(metadata1.toString());
228253

229254
IndexMetadata metadata2 = IndexMetadata.builder(metadata1.getIndex().getName())
230255
.settings(
@@ -246,6 +271,7 @@ public void testWriteVerifiableTo() throws IOException {
246271
.putRolloverInfo(info2)
247272
.putRolloverInfo(info1)
248273
.putInSyncAllocationIds(0, Set.of("3", "1", "2"))
274+
.putMapping(mappings)
249275
.build();
250276

251277
BytesStreamOutput out2 = new BytesStreamOutput();

0 commit comments

Comments
 (0)