|
@@ -30,15 +30,15 @@ import static org.hamcrest.Matchers.equalTo;
|
|
|
@ESIntegTestCase.ClusterScope(scope = ESIntegTestCase.Scope.TEST, numDataNodes = 0)
|
|
|
public class DiskThresholdMonitorIT extends DiskUsageIntegTestCase {
|
|
|
|
|
|
- private static final long FLOODSTAGE_BYTES = new ByteSizeValue(10, ByteSizeUnit.KB).getBytes();
|
|
|
+ private static final long FLOOD_STAGE_BYTES = new ByteSizeValue(10, ByteSizeUnit.KB).getBytes();
|
|
|
|
|
|
@Override
|
|
|
protected Settings nodeSettings(int nodeOrdinal, Settings otherSettings) {
|
|
|
return Settings.builder()
|
|
|
.put(super.nodeSettings(nodeOrdinal, otherSettings))
|
|
|
- .put(DiskThresholdSettings.CLUSTER_ROUTING_ALLOCATION_LOW_DISK_WATERMARK_SETTING.getKey(), FLOODSTAGE_BYTES * 2 + "b")
|
|
|
- .put(DiskThresholdSettings.CLUSTER_ROUTING_ALLOCATION_HIGH_DISK_WATERMARK_SETTING.getKey(), FLOODSTAGE_BYTES * 2 + "b")
|
|
|
- .put(DiskThresholdSettings.CLUSTER_ROUTING_ALLOCATION_DISK_FLOOD_STAGE_WATERMARK_SETTING.getKey(), FLOODSTAGE_BYTES + "b")
|
|
|
+ .put(DiskThresholdSettings.CLUSTER_ROUTING_ALLOCATION_LOW_DISK_WATERMARK_SETTING.getKey(), FLOOD_STAGE_BYTES * 2 + "b")
|
|
|
+ .put(DiskThresholdSettings.CLUSTER_ROUTING_ALLOCATION_HIGH_DISK_WATERMARK_SETTING.getKey(), FLOOD_STAGE_BYTES * 2 + "b")
|
|
|
+ .put(DiskThresholdSettings.CLUSTER_ROUTING_ALLOCATION_DISK_FLOOD_STAGE_WATERMARK_SETTING.getKey(), FLOOD_STAGE_BYTES + "b")
|
|
|
.put(DiskThresholdSettings.CLUSTER_ROUTING_ALLOCATION_REROUTE_INTERVAL_SETTING.getKey(), "0ms")
|
|
|
.build();
|
|
|
}
|
|
@@ -67,15 +67,7 @@ public class DiskThresholdMonitorIT extends DiskUsageIntegTestCase {
|
|
|
client().prepareIndex().setIndex(indexName).setId("1").setSource("f", "g"),
|
|
|
IndexMetadata.INDEX_READ_ONLY_ALLOW_DELETE_BLOCK
|
|
|
);
|
|
|
- assertThat(
|
|
|
- client().admin()
|
|
|
- .indices()
|
|
|
- .prepareGetSettings(indexName)
|
|
|
- .setNames(IndexMetadata.SETTING_READ_ONLY_ALLOW_DELETE)
|
|
|
- .get()
|
|
|
- .getSetting(indexName, IndexMetadata.SETTING_READ_ONLY_ALLOW_DELETE),
|
|
|
- equalTo("true")
|
|
|
- );
|
|
|
+ assertThat(getIndexBlock(indexName, IndexMetadata.SETTING_READ_ONLY_ALLOW_DELETE), equalTo("true"));
|
|
|
});
|
|
|
|
|
|
// Verify that we can adjust things like allocation filters even while blocked
|
|
@@ -112,13 +104,58 @@ public class DiskThresholdMonitorIT extends DiskUsageIntegTestCase {
|
|
|
// Verify that the block is removed once the shard migration is complete
|
|
|
refreshClusterInfo();
|
|
|
assertFalse(client().admin().cluster().prepareHealth().setWaitForEvents(Priority.LANGUID).get().isTimedOut());
|
|
|
- assertNull(
|
|
|
- client().admin()
|
|
|
- .indices()
|
|
|
- .prepareGetSettings(indexName)
|
|
|
- .setNames(IndexMetadata.SETTING_READ_ONLY_ALLOW_DELETE)
|
|
|
- .get()
|
|
|
- .getSetting(indexName, IndexMetadata.SETTING_READ_ONLY_ALLOW_DELETE)
|
|
|
+ assertNull(getIndexBlock(indexName, IndexMetadata.SETTING_READ_ONLY_ALLOW_DELETE));
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testRemoveExistingIndexBlocksWhenDiskThresholdMonitorIsDisabled() throws Exception {
|
|
|
+ internalCluster().startMasterOnlyNode();
|
|
|
+ final String dataNodeName = internalCluster().startDataOnlyNode();
|
|
|
+
|
|
|
+ final String indexName = randomAlphaOfLength(10).toLowerCase(Locale.ROOT);
|
|
|
+ createIndex(
|
|
|
+ indexName,
|
|
|
+ Settings.builder()
|
|
|
+ .put(IndexMetadata.SETTING_NUMBER_OF_REPLICAS, 0)
|
|
|
+ .put(IndexMetadata.SETTING_NUMBER_OF_SHARDS, 1)
|
|
|
+ .put(INDEX_STORE_STATS_REFRESH_INTERVAL_SETTING.getKey(), "0ms")
|
|
|
+ .put(INDEX_ROUTING_REQUIRE_GROUP_SETTING.getConcreteSettingForNamespace("_name").getKey(), dataNodeName)
|
|
|
+ .build()
|
|
|
);
|
|
|
+ // ensure we have a system index on the data node too.
|
|
|
+ assertAcked(client().admin().indices().prepareCreate(TaskResultsService.TASK_INDEX));
|
|
|
+
|
|
|
+ getTestFileStore(dataNodeName).setTotalSpace(1L);
|
|
|
+ refreshClusterInfo();
|
|
|
+ assertBusy(() -> {
|
|
|
+ assertBlocked(
|
|
|
+ client().prepareIndex().setIndex(indexName).setId("1").setSource("f", "g"),
|
|
|
+ IndexMetadata.INDEX_READ_ONLY_ALLOW_DELETE_BLOCK
|
|
|
+ );
|
|
|
+ assertThat(getIndexBlock(indexName, IndexMetadata.SETTING_READ_ONLY_ALLOW_DELETE), equalTo("true"));
|
|
|
+ });
|
|
|
+
|
|
|
+ // Disable disk threshold monitoring
|
|
|
+ updateClusterSettings(
|
|
|
+ Settings.builder().put(DiskThresholdSettings.CLUSTER_ROUTING_ALLOCATION_DISK_THRESHOLD_ENABLED_SETTING.getKey(), false)
|
|
|
+ );
|
|
|
+
|
|
|
+ // Verify that the block is removed
|
|
|
+ refreshClusterInfo();
|
|
|
+ assertFalse(client().admin().cluster().prepareHealth().setWaitForEvents(Priority.LANGUID).get().isTimedOut());
|
|
|
+ assertNull(getIndexBlock(indexName, IndexMetadata.SETTING_READ_ONLY_ALLOW_DELETE));
|
|
|
+
|
|
|
+ // Re-enable and the blocks should be back!
|
|
|
+ updateClusterSettings(
|
|
|
+ Settings.builder().put(DiskThresholdSettings.CLUSTER_ROUTING_ALLOCATION_DISK_THRESHOLD_ENABLED_SETTING.getKey(), true)
|
|
|
+ );
|
|
|
+ refreshClusterInfo();
|
|
|
+ assertFalse(client().admin().cluster().prepareHealth().setWaitForEvents(Priority.LANGUID).get().isTimedOut());
|
|
|
+ assertThat(getIndexBlock(indexName, IndexMetadata.SETTING_READ_ONLY_ALLOW_DELETE), equalTo("true"));
|
|
|
}
|
|
|
+
|
|
|
+ // Retrieves the value of the given block on an index.
|
|
|
+ private static String getIndexBlock(String indexName, String blockName) {
|
|
|
+ return client().admin().indices().prepareGetSettings(indexName).setNames(blockName).get().getSetting(indexName, blockName);
|
|
|
+ }
|
|
|
+
|
|
|
}
|