Skip to content

Commit 4d7061f

Browse files
committed
Added UT for replica shard recovery
Signed-off-by: Ashish Singh <ssashish@amazon.com>
1 parent 057a8fe commit 4d7061f

1 file changed

Lines changed: 36 additions & 0 deletions

File tree

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,15 @@
1010

1111
import org.opensearch.cluster.metadata.IndexMetadata;
1212
import org.opensearch.common.settings.Settings;
13+
import org.opensearch.index.engine.DocIdSeqNoAndSource;
14+
import org.opensearch.index.engine.NRTReplicationEngine;
1315
import org.opensearch.index.engine.NRTReplicationEngineFactory;
1416
import org.opensearch.index.replication.OpenSearchIndexLevelReplicationTestCase;
17+
import org.opensearch.index.translog.WriteOnlyTranslogManager;
1518
import org.opensearch.indices.replication.common.ReplicationType;
1619

20+
import java.util.List;
21+
1722
public class ReplicaRecoveryWithRemoteTranslogOnPrimaryTests extends OpenSearchIndexLevelReplicationTestCase {
1823

1924
private static final Settings settings = Settings.builder()
@@ -56,4 +61,35 @@ public void testReplicaShardRecoveryUptoLastFlushedCommit() throws Exception {
5661
shards.assertAllEqual(numDocs + moreDocs);
5762
}
5863
}
64+
65+
public void testNoTranslogHistoryTransferred() throws Exception {
66+
try (ReplicationGroup shards = createGroup(0, settings, new NRTReplicationEngineFactory())) {
67+
68+
// Step1 - Start primary, index docs, flush, index more docs, check translog in primary as expected
69+
shards.startPrimary();
70+
final IndexShard primary = shards.getPrimary();
71+
int numDocs = shards.indexDocs(randomIntBetween(10, 100));
72+
shards.flush();
73+
List<DocIdSeqNoAndSource> docIdAndSeqNosAfterFlush = getDocIdAndSeqNos(primary);
74+
int moreDocs = shards.indexDocs(randomIntBetween(20, 100));
75+
assertEquals(moreDocs, getTranslog(primary).totalOperations());
76+
77+
// Step 2 - Start replica, recovery happens, check docs recovered till last flush
78+
final IndexShard replica = shards.addReplica();
79+
shards.startAll();
80+
assertEquals(docIdAndSeqNosAfterFlush, getDocIdAndSeqNos(replica));
81+
assertDocCount(replica, numDocs);
82+
assertEquals(NRTReplicationEngine.class, replica.getEngine().getClass());
83+
84+
// Step 3 - Check replica's translog has no operations
85+
assertEquals(WriteOnlyTranslogManager.class, replica.getEngine().translogManager().getClass());
86+
WriteOnlyTranslogManager replicaTranslogManager = (WriteOnlyTranslogManager) replica.getEngine().translogManager();
87+
assertEquals(0, replicaTranslogManager.getTranslog().totalOperations());
88+
89+
// Adding this for close to succeed
90+
shards.flush();
91+
replicateSegments(primary, shards.getReplicas());
92+
shards.assertAllEqual(numDocs + moreDocs);
93+
}
94+
}
5995
}

0 commit comments

Comments
 (0)