use of org.elasticsearch.action.admin.cluster.node.hotthreads.NodesHotThreadsRequestBuilder in project elasticsearch by elastic.
the class HotThreadsIT method testHotThreadsDontFail.
public void testHotThreadsDontFail() throws ExecutionException, InterruptedException {
/**
* This test just checks if nothing crashes or gets stuck etc.
*/
createIndex("test");
final int iters = scaledRandomIntBetween(2, 20);
final AtomicBoolean hasErrors = new AtomicBoolean(false);
for (int i = 0; i < iters; i++) {
final String type;
NodesHotThreadsRequestBuilder nodesHotThreadsRequestBuilder = client().admin().cluster().prepareNodesHotThreads();
if (randomBoolean()) {
TimeValue timeValue = new TimeValue(rarely() ? randomIntBetween(500, 5000) : randomIntBetween(20, 500));
nodesHotThreadsRequestBuilder.setInterval(timeValue);
}
if (randomBoolean()) {
nodesHotThreadsRequestBuilder.setThreads(rarely() ? randomIntBetween(500, 5000) : randomIntBetween(1, 500));
}
nodesHotThreadsRequestBuilder.setIgnoreIdleThreads(randomBoolean());
if (randomBoolean()) {
switch(randomIntBetween(0, 2)) {
case 2:
type = "cpu";
break;
case 1:
type = "wait";
break;
default:
type = "block";
break;
}
assertThat(type, notNullValue());
nodesHotThreadsRequestBuilder.setType(type);
} else {
type = null;
}
final CountDownLatch latch = new CountDownLatch(1);
nodesHotThreadsRequestBuilder.execute(new ActionListener<NodesHotThreadsResponse>() {
@Override
public void onResponse(NodesHotThreadsResponse nodeHotThreads) {
boolean success = false;
try {
assertThat(nodeHotThreads, notNullValue());
Map<String, NodeHotThreads> nodesMap = nodeHotThreads.getNodesMap();
assertThat(nodesMap.size(), equalTo(cluster().size()));
for (NodeHotThreads ht : nodeHotThreads.getNodes()) {
assertNotNull(ht.getHotThreads());
//logger.info(ht.getHotThreads());
}
success = true;
} finally {
if (!success) {
hasErrors.set(true);
}
latch.countDown();
}
}
@Override
public void onFailure(Exception e) {
logger.error("FAILED", e);
hasErrors.set(true);
latch.countDown();
fail();
}
});
indexRandom(true, client().prepareIndex("test", "type1", "1").setSource("field1", "value1"), client().prepareIndex("test", "type1", "2").setSource("field1", "value2"), client().prepareIndex("test", "type1", "3").setSource("field1", "value3"));
ensureSearchable();
while (latch.getCount() > 0) {
assertHitCount(client().prepareSearch().setQuery(matchAllQuery()).setPostFilter(boolQuery().must(matchAllQuery()).mustNot(boolQuery().must(termQuery("field1", "value1")).must(termQuery("field1", "value2")))).get(), 3L);
}
latch.await();
assertThat(hasErrors.get(), is(false));
}
}
use of org.elasticsearch.action.admin.cluster.node.hotthreads.NodesHotThreadsRequestBuilder in project elasticsearch by elastic.
the class HotThreadsIT method testIgnoreIdleThreads.
public void testIgnoreIdleThreads() throws ExecutionException, InterruptedException {
assumeTrue("no support for hot_threads on FreeBSD", Constants.FREE_BSD == false);
// First time, don't ignore idle threads:
NodesHotThreadsRequestBuilder builder = client().admin().cluster().prepareNodesHotThreads();
builder.setIgnoreIdleThreads(false);
builder.setThreads(Integer.MAX_VALUE);
NodesHotThreadsResponse response = builder.execute().get();
int totSizeAll = 0;
for (NodeHotThreads node : response.getNodesMap().values()) {
totSizeAll += node.getHotThreads().length();
}
// Second time, do ignore idle threads:
builder = client().admin().cluster().prepareNodesHotThreads();
builder.setThreads(Integer.MAX_VALUE);
// Make sure default is true:
assertEquals(true, builder.request().ignoreIdleThreads());
response = builder.execute().get();
int totSizeIgnoreIdle = 0;
for (NodeHotThreads node : response.getNodesMap().values()) {
totSizeIgnoreIdle += node.getHotThreads().length();
}
// The filtered stacks should be smaller than unfiltered ones:
assertThat(totSizeIgnoreIdle, lessThan(totSizeAll));
}
Aggregations