use of org.elasticsearch.action.admin.cluster.node.hotthreads.NodeHotThreads in project elasticsearch by elastic.
the class HotThreadsIT method testTimestampAndParams.
public void testTimestampAndParams() throws ExecutionException, InterruptedException {
NodesHotThreadsResponse response = client().admin().cluster().prepareNodesHotThreads().execute().get();
if (Constants.FREE_BSD) {
for (NodeHotThreads node : response.getNodesMap().values()) {
String result = node.getHotThreads();
assertTrue(result.indexOf("hot_threads is not supported") != -1);
}
} else {
for (NodeHotThreads node : response.getNodesMap().values()) {
String result = node.getHotThreads();
assertTrue(result.indexOf("Hot threads at") != -1);
assertTrue(result.indexOf("interval=500ms") != -1);
assertTrue(result.indexOf("busiestThreads=3") != -1);
assertTrue(result.indexOf("ignoreIdleThreads=true") != -1);
}
}
}
use of org.elasticsearch.action.admin.cluster.node.hotthreads.NodeHotThreads in project elasticsearch by elastic.
the class RestNodesHotThreadsAction method prepareRequest.
@Override
public RestChannelConsumer prepareRequest(final RestRequest request, final NodeClient client) throws IOException {
String[] nodesIds = Strings.splitStringByCommaToArray(request.param("nodeId"));
NodesHotThreadsRequest nodesHotThreadsRequest = new NodesHotThreadsRequest(nodesIds);
nodesHotThreadsRequest.threads(request.paramAsInt("threads", nodesHotThreadsRequest.threads()));
nodesHotThreadsRequest.ignoreIdleThreads(request.paramAsBoolean("ignore_idle_threads", nodesHotThreadsRequest.ignoreIdleThreads()));
nodesHotThreadsRequest.type(request.param("type", nodesHotThreadsRequest.type()));
nodesHotThreadsRequest.interval(TimeValue.parseTimeValue(request.param("interval"), nodesHotThreadsRequest.interval(), "interval"));
nodesHotThreadsRequest.snapshots(request.paramAsInt("snapshots", nodesHotThreadsRequest.snapshots()));
nodesHotThreadsRequest.timeout(request.param("timeout"));
return channel -> client.admin().cluster().nodesHotThreads(nodesHotThreadsRequest, new RestResponseListener<NodesHotThreadsResponse>(channel) {
@Override
public RestResponse buildResponse(NodesHotThreadsResponse response) throws Exception {
StringBuilder sb = new StringBuilder();
for (NodeHotThreads node : response.getNodes()) {
sb.append("::: ").append(node.getNode().toString()).append("\n");
Strings.spaceify(3, node.getHotThreads(), sb);
sb.append('\n');
}
return new BytesRestResponse(RestStatus.OK, sb.toString());
}
});
}
use of org.elasticsearch.action.admin.cluster.node.hotthreads.NodeHotThreads 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.NodeHotThreads 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