Search in sources :

Example 1 with BusyMasterServiceDisruption

use of org.opensearch.test.disruption.BusyMasterServiceDisruption in project OpenSearch by opensearch-project.

the class DedicatedClusterSnapshotRestoreIT method testDataNodeRestartWithBusyMasterDuringSnapshot.

public void testDataNodeRestartWithBusyMasterDuringSnapshot() throws Exception {
    logger.info("-->  starting a master node and two data nodes");
    internalCluster().startMasterOnlyNode();
    internalCluster().startDataOnlyNodes(2);
    final Path repoPath = randomRepoPath();
    createRepository("test-repo", "mock", repoPath);
    maybeInitWithOldSnapshotVersion("test-repo", repoPath);
    assertAcked(prepareCreate("test-idx", 0, indexSettingsNoReplicas(5)));
    ensureGreen();
    indexRandomDocs("test-idx", randomIntBetween(50, 100));
    final String dataNode = blockNodeWithIndex("test-repo", "test-idx");
    logger.info("-->  snapshot");
    ServiceDisruptionScheme disruption = new BusyMasterServiceDisruption(random(), Priority.HIGH);
    setDisruptionScheme(disruption);
    client(internalCluster().getMasterName()).admin().cluster().prepareCreateSnapshot("test-repo", "test-snap").setWaitForCompletion(false).setIndices("test-idx").get();
    disruption.startDisrupting();
    logger.info("-->  restarting data node, which should cause primary shards to be failed");
    internalCluster().restartNode(dataNode, InternalTestCluster.EMPTY_CALLBACK);
    logger.info("-->  wait for shard snapshots to show as failed");
    assertBusy(() -> assertThat(clusterAdmin().prepareSnapshotStatus("test-repo").setSnapshots("test-snap").get().getSnapshots().get(0).getShardsStats().getFailedShards(), greaterThanOrEqualTo(1)), 60L, TimeUnit.SECONDS);
    unblockNode("test-repo", dataNode);
    disruption.stopDisrupting();
    // check that snapshot completes
    assertBusy(() -> {
        GetSnapshotsResponse snapshotsStatusResponse = clusterAdmin().prepareGetSnapshots("test-repo").setSnapshots("test-snap").setIgnoreUnavailable(true).get();
        assertEquals(1, snapshotsStatusResponse.getSnapshots().size());
        SnapshotInfo snapshotInfo = snapshotsStatusResponse.getSnapshots().get(0);
        assertTrue(snapshotInfo.state().toString(), snapshotInfo.state().completed());
    }, 60L, TimeUnit.SECONDS);
}
Also used : Path(java.nio.file.Path) BusyMasterServiceDisruption(org.opensearch.test.disruption.BusyMasterServiceDisruption) GetSnapshotsResponse(org.opensearch.action.admin.cluster.snapshots.get.GetSnapshotsResponse) ServiceDisruptionScheme(org.opensearch.test.disruption.ServiceDisruptionScheme) Matchers.containsString(org.hamcrest.Matchers.containsString)

Aggregations

Path (java.nio.file.Path)1 Matchers.containsString (org.hamcrest.Matchers.containsString)1 GetSnapshotsResponse (org.opensearch.action.admin.cluster.snapshots.get.GetSnapshotsResponse)1 BusyMasterServiceDisruption (org.opensearch.test.disruption.BusyMasterServiceDisruption)1 ServiceDisruptionScheme (org.opensearch.test.disruption.ServiceDisruptionScheme)1