Skip to content

Commit 0d208f0

Browse files
mch2Rishikesh1159
authored andcommitted
Segment Replication - Add additional unit tests for update & delete ops. (#4237)
* Segment Replication - Add additional unit tests for update & delete operations. Signed-off-by: Marc Handalian <handalm@amazon.com> * Fix spotless. Signed-off-by: Marc Handalian <handalm@amazon.com> Signed-off-by: Marc Handalian <handalm@amazon.com>
1 parent 360405e commit 0d208f0

2 files changed

Lines changed: 60 additions & 1 deletion

File tree

server/src/test/java/org/opensearch/index/shard/SegmentReplicationIndexShardTests.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,23 @@
88

99
package org.opensearch.index.shard;
1010

11+
import org.opensearch.action.delete.DeleteRequest;
12+
import org.opensearch.action.index.IndexRequest;
1113
import org.opensearch.cluster.metadata.IndexMetadata;
1214
import org.opensearch.common.settings.Settings;
1315
import org.opensearch.common.unit.TimeValue;
16+
import org.opensearch.common.xcontent.XContentType;
1417
import org.opensearch.index.IndexSettings;
18+
import org.opensearch.index.engine.DocIdSeqNoAndSource;
1519
import org.opensearch.index.engine.NRTReplicationEngineFactory;
20+
import org.opensearch.index.mapper.MapperService;
1621
import org.opensearch.index.replication.OpenSearchIndexLevelReplicationTestCase;
1722
import org.opensearch.indices.replication.checkpoint.SegmentReplicationCheckpointPublisher;
1823
import org.opensearch.indices.replication.checkpoint.ReplicationCheckpoint;
1924
import org.opensearch.indices.replication.common.ReplicationType;
2025

2126
import java.io.IOException;
27+
import java.util.List;
2228

2329
import static org.mockito.ArgumentMatchers.any;
2430
import static org.mockito.Mockito.verify;
@@ -52,6 +58,54 @@ public void testReplicationCheckpointNotNullForSegReb() throws IOException {
5258
closeShards(indexShard);
5359
}
5460

61+
public void testSegmentReplication_Index_Update_Delete() throws Exception {
62+
String mappings = "{ \"" + MapperService.SINGLE_MAPPING_NAME + "\": { \"properties\": { \"foo\": { \"type\": \"keyword\"} }}}";
63+
try (ReplicationGroup shards = createGroup(2, settings, mappings, new NRTReplicationEngineFactory())) {
64+
shards.startAll();
65+
final IndexShard primaryShard = shards.getPrimary();
66+
67+
final int numDocs = randomIntBetween(100, 200);
68+
for (int i = 0; i < numDocs; i++) {
69+
shards.index(new IndexRequest(index.getName()).id(String.valueOf(i)).source("{\"foo\": \"bar\"}", XContentType.JSON));
70+
}
71+
72+
primaryShard.refresh("Test");
73+
replicateSegments(primaryShard, shards.getReplicas());
74+
75+
shards.assertAllEqual(numDocs);
76+
77+
for (int i = 0; i < numDocs; i++) {
78+
// randomly update docs.
79+
if (randomBoolean()) {
80+
shards.index(
81+
new IndexRequest(index.getName()).id(String.valueOf(i)).source("{ \"foo\" : \"baz\" }", XContentType.JSON)
82+
);
83+
}
84+
}
85+
86+
primaryShard.refresh("Test");
87+
replicateSegments(primaryShard, shards.getReplicas());
88+
shards.assertAllEqual(numDocs);
89+
90+
final List<DocIdSeqNoAndSource> docs = getDocIdAndSeqNos(primaryShard);
91+
for (IndexShard shard : shards.getReplicas()) {
92+
assertEquals(getDocIdAndSeqNos(shard), docs);
93+
}
94+
for (int i = 0; i < numDocs; i++) {
95+
// randomly delete.
96+
if (randomBoolean()) {
97+
shards.delete(new DeleteRequest(index.getName()).id(String.valueOf(i)));
98+
}
99+
}
100+
primaryShard.refresh("Test");
101+
replicateSegments(primaryShard, shards.getReplicas());
102+
final List<DocIdSeqNoAndSource> docsAfterDelete = getDocIdAndSeqNos(primaryShard);
103+
for (IndexShard shard : shards.getReplicas()) {
104+
assertEquals(getDocIdAndSeqNos(shard), docsAfterDelete);
105+
}
106+
}
107+
}
108+
55109
public void testIgnoreShardIdle() throws Exception {
56110
try (ReplicationGroup shards = createGroup(1, settings, new NRTReplicationEngineFactory())) {
57111
shards.startAll();

test/framework/src/main/java/org/opensearch/index/replication/OpenSearchIndexLevelReplicationTestCase.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,12 @@ protected ReplicationGroup createGroup(int replicas, Settings settings) throws I
141141
}
142142

143143
protected ReplicationGroup createGroup(int replicas, Settings settings, EngineFactory engineFactory) throws IOException {
144-
IndexMetadata metadata = buildIndexMetadata(replicas, settings, indexMapping);
144+
return createGroup(replicas, settings, indexMapping, engineFactory);
145+
}
146+
147+
protected ReplicationGroup createGroup(int replicas, Settings settings, String mappings, EngineFactory engineFactory)
148+
throws IOException {
149+
IndexMetadata metadata = buildIndexMetadata(replicas, settings, mappings);
145150
return new ReplicationGroup(metadata) {
146151
@Override
147152
protected EngineFactory getEngineFactory(ShardRouting routing) {

0 commit comments

Comments
 (0)