Skip to content

Commit 3e146dc

Browse files
committed
add IT test
Signed-off-by: guojialiang <[email protected]>
1 parent 19b97fa commit 3e146dc

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

server/src/internalClusterTest/java/org/opensearch/indices/replication/WarmIndexSegmentReplicationIT.java

+54
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.opensearch.action.search.SearchResponse;
3535
import org.opensearch.action.search.SearchType;
3636
import org.opensearch.action.support.WriteRequest;
37+
import org.opensearch.action.support.replication.TransportReplicationAction;
3738
import org.opensearch.action.termvectors.TermVectorsRequestBuilder;
3839
import org.opensearch.action.termvectors.TermVectorsResponse;
3940
import org.opensearch.action.update.UpdateResponse;
@@ -53,9 +54,11 @@
5354
import org.opensearch.common.util.set.Sets;
5455
import org.opensearch.core.common.unit.ByteSizeUnit;
5556
import org.opensearch.core.common.unit.ByteSizeValue;
57+
import org.opensearch.core.concurrency.OpenSearchRejectedExecutionException;
5658
import org.opensearch.core.index.shard.ShardId;
5759
import org.opensearch.core.xcontent.XContentBuilder;
5860
import org.opensearch.index.IndexModule;
61+
import org.opensearch.index.IndexSettings;
5962
import org.opensearch.index.ReplicationStats;
6063
import org.opensearch.index.SegmentReplicationPerGroupStats;
6164
import org.opensearch.index.SegmentReplicationPressureService;
@@ -65,6 +68,7 @@
6568
import org.opensearch.index.shard.IndexShard;
6669
import org.opensearch.index.store.remote.file.CleanerDaemonThreadLeakFilter;
6770
import org.opensearch.index.store.remote.filecache.FileCache;
71+
import org.opensearch.indices.replication.checkpoint.PublishCheckpointAction;
6872
import org.opensearch.indices.replication.common.ReplicationType;
6973
import org.opensearch.node.Node;
7074
import org.opensearch.search.sort.SortOrder;
@@ -73,6 +77,7 @@
7377
import org.opensearch.test.OpenSearchIntegTestCase;
7478
import org.opensearch.test.junit.annotations.TestLogging;
7579
import org.opensearch.test.transport.MockTransportService;
80+
import org.opensearch.transport.RemoteTransportException;
7681
import org.opensearch.transport.TransportService;
7782
import org.opensearch.transport.client.Requests;
7883
import org.junit.After;
@@ -89,6 +94,7 @@
8994
import java.util.Set;
9095
import java.util.concurrent.CountDownLatch;
9196
import java.util.concurrent.TimeUnit;
97+
import java.util.concurrent.atomic.AtomicBoolean;
9298
import java.util.concurrent.atomic.AtomicReference;
9399
import java.util.stream.Collectors;
94100

@@ -175,6 +181,54 @@ public void teardown() throws Exception {
175181
clusterAdmin().prepareCleanupRepository(REPOSITORY_NAME).get();
176182
}
177183

184+
public void testPublishCheckPointFail() throws Exception {
185+
Settings mockNodeSetting = Settings.builder()
186+
.put(TransportReplicationAction.REPLICATION_RETRY_TIMEOUT.getKey(), TimeValue.timeValueSeconds(0))
187+
.build();
188+
189+
final String primaryNode = internalCluster().startDataOnlyNode(mockNodeSetting);
190+
createIndex(INDEX_NAME);
191+
ensureYellowAndNoInitializingShards(INDEX_NAME);
192+
final String replicaNode = internalCluster().startDataOnlyNode(mockNodeSetting);
193+
ensureGreen(INDEX_NAME);
194+
195+
MockTransportService replicaTransportService = ((MockTransportService) internalCluster().getInstance(
196+
TransportService.class,
197+
replicaNode
198+
));
199+
AtomicBoolean mockReplicaReceivePublishCheckpointException = new AtomicBoolean(true);
200+
replicaTransportService.addRequestHandlingBehavior(
201+
PublishCheckpointAction.ACTION_NAME + TransportReplicationAction.REPLICA_ACTION_SUFFIX,
202+
(handler, request, channel, task) -> {
203+
if (mockReplicaReceivePublishCheckpointException.get()) {
204+
logger.info("mock remote transport exception");
205+
throw new RemoteTransportException("mock remote transport exception", new OpenSearchRejectedExecutionException());
206+
}
207+
logger.info("replica receive publish checkpoint request");
208+
handler.messageReceived(request, channel, task);
209+
}
210+
);
211+
212+
client().prepareIndex(INDEX_NAME).setId("1").setSource("foo", "bar").setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE).get();
213+
logger.info("ensure publish checkpoint request can be process");
214+
Thread.sleep(3000);
215+
mockReplicaReceivePublishCheckpointException.set(false);
216+
217+
assertAcked(
218+
client().admin()
219+
.indices()
220+
.prepareUpdateSettings(INDEX_NAME)
221+
.setSettings(
222+
Settings.builder()
223+
.put(IndexSettings.INDEX_PUBLISH_CHECKPOINT_INTERVAL_SETTING.getKey(), TimeValue.timeValueSeconds(1))
224+
.put(IndexSettings.INDEX_LAG_TIME_BEFORE_RESEND_CHECKPOINT_SETTING.getKey(), TimeValue.timeValueSeconds(1))
225+
)
226+
);
227+
228+
waitForSearchableDocs(1, primaryNode, replicaNode);
229+
replicaTransportService.clearAllRules();
230+
}
231+
178232
@AwaitsFix(bugUrl = "https://github.com/opensearch-project/OpenSearch/issues/17526")
179233
public void testRestartPrimary_NoReplicas() throws Exception {
180234
final String primary = internalCluster().startDataAndWarmNodes(1).get(0);

0 commit comments

Comments
 (0)