Search in sources :

Example 1 with ThreadPoolStats

use of org.opensearch.threadpool.ThreadPoolStats in project OpenSearch by opensearch-project.

the class RestThreadPoolAction method buildTable.

private Table buildTable(RestRequest req, ClusterStateResponse state, NodesInfoResponse nodesInfo, NodesStatsResponse nodesStats) {
    final String[] threadPools = req.paramAsStringArray("thread_pool_patterns", new String[] { "*" });
    final DiscoveryNodes nodes = state.getState().nodes();
    final Table table = getTableWithHeader(req);
    // collect all thread pool names that we see across the nodes
    final Set<String> candidates = new HashSet<>();
    for (final NodeStats nodeStats : nodesStats.getNodes()) {
        for (final ThreadPoolStats.Stats threadPoolStats : nodeStats.getThreadPool()) {
            candidates.add(threadPoolStats.getName());
        }
    }
    // collect all thread pool names that match the specified thread pool patterns
    final Set<String> included = new HashSet<>();
    for (final String candidate : candidates) {
        if (Regex.simpleMatch(threadPools, candidate)) {
            included.add(candidate);
        }
    }
    for (final DiscoveryNode node : nodes) {
        final NodeInfo info = nodesInfo.getNodesMap().get(node.getId());
        final NodeStats stats = nodesStats.getNodesMap().get(node.getId());
        final Map<String, ThreadPoolStats.Stats> poolThreadStats;
        final Map<String, ThreadPool.Info> poolThreadInfo;
        if (stats == null) {
            poolThreadStats = Collections.emptyMap();
            poolThreadInfo = Collections.emptyMap();
        } else {
            // we use a sorted map to ensure that thread pools are sorted by name
            poolThreadStats = new TreeMap<>();
            poolThreadInfo = new HashMap<>();
            ThreadPoolStats threadPoolStats = stats.getThreadPool();
            for (ThreadPoolStats.Stats threadPoolStat : threadPoolStats) {
                poolThreadStats.put(threadPoolStat.getName(), threadPoolStat);
            }
            if (info != null) {
                for (ThreadPool.Info threadPoolInfo : info.getInfo(ThreadPoolInfo.class)) {
                    poolThreadInfo.put(threadPoolInfo.getName(), threadPoolInfo);
                }
            }
        }
        for (Map.Entry<String, ThreadPoolStats.Stats> entry : poolThreadStats.entrySet()) {
            if (!included.contains(entry.getKey()))
                continue;
            table.startRow();
            table.addCell(node.getName());
            table.addCell(node.getId());
            table.addCell(node.getEphemeralId());
            table.addCell(info == null ? null : info.getInfo(ProcessInfo.class).getId());
            table.addCell(node.getHostName());
            table.addCell(node.getHostAddress());
            table.addCell(node.getAddress().address().getPort());
            final ThreadPoolStats.Stats poolStats = entry.getValue();
            final ThreadPool.Info poolInfo = poolThreadInfo.get(entry.getKey());
            Long maxQueueSize = null;
            String keepAlive = null;
            Integer core = null;
            Integer max = null;
            Integer size = null;
            if (poolInfo != null) {
                if (poolInfo.getQueueSize() != null) {
                    maxQueueSize = poolInfo.getQueueSize().singles();
                }
                if (poolInfo.getKeepAlive() != null) {
                    keepAlive = poolInfo.getKeepAlive().toString();
                }
                if (poolInfo.getThreadPoolType() == ThreadPool.ThreadPoolType.SCALING) {
                    assert poolInfo.getMin() >= 0;
                    core = poolInfo.getMin();
                    assert poolInfo.getMax() > 0;
                    max = poolInfo.getMax();
                } else {
                    assert poolInfo.getMin() == poolInfo.getMax() && poolInfo.getMax() > 0;
                    size = poolInfo.getMax();
                }
            }
            table.addCell(entry.getKey());
            table.addCell(poolInfo == null ? null : poolInfo.getThreadPoolType().getType());
            table.addCell(poolStats == null ? null : poolStats.getActive());
            table.addCell(poolStats == null ? null : poolStats.getThreads());
            table.addCell(poolStats == null ? null : poolStats.getQueue());
            table.addCell(maxQueueSize == null ? -1 : maxQueueSize);
            table.addCell(poolStats == null ? null : poolStats.getRejected());
            table.addCell(poolStats == null ? null : poolStats.getLargest());
            table.addCell(poolStats == null ? null : poolStats.getCompleted());
            table.addCell(core);
            table.addCell(max);
            table.addCell(size);
            table.addCell(keepAlive);
            table.endRow();
        }
    }
    return table;
}
Also used : DiscoveryNode(org.opensearch.cluster.node.DiscoveryNode) Table(org.opensearch.common.Table) ThreadPool(org.opensearch.threadpool.ThreadPool) ProcessInfo(org.opensearch.monitor.process.ProcessInfo) ThreadPoolInfo(org.opensearch.threadpool.ThreadPoolInfo) ProcessInfo(org.opensearch.monitor.process.ProcessInfo) NodeInfo(org.opensearch.action.admin.cluster.node.info.NodeInfo) NodeStats(org.opensearch.action.admin.cluster.node.stats.NodeStats) ThreadPoolStats(org.opensearch.threadpool.ThreadPoolStats) NodeInfo(org.opensearch.action.admin.cluster.node.info.NodeInfo) ThreadPoolStats(org.opensearch.threadpool.ThreadPoolStats) NodeStats(org.opensearch.action.admin.cluster.node.stats.NodeStats) HashMap(java.util.HashMap) Map(java.util.Map) TreeMap(java.util.TreeMap) DiscoveryNodes(org.opensearch.cluster.node.DiscoveryNodes) HashSet(java.util.HashSet)

Example 2 with ThreadPoolStats

use of org.opensearch.threadpool.ThreadPoolStats in project OpenSearch by opensearch-project.

the class NodeStatsTests method createNodeStats.

public static NodeStats createNodeStats() {
    DiscoveryNode node = new DiscoveryNode("test_node", buildNewFakeTransportAddress(), emptyMap(), emptySet(), VersionUtils.randomVersion(random()));
    OsStats osStats = null;
    if (frequently()) {
        double[] loadAverages = new double[3];
        for (int i = 0; i < 3; i++) {
            loadAverages[i] = randomBoolean() ? randomDouble() : -1;
        }
        long memTotal = randomNonNegativeLong();
        long swapTotal = randomNonNegativeLong();
        osStats = new OsStats(System.currentTimeMillis(), new OsStats.Cpu(randomShort(), loadAverages), new OsStats.Mem(memTotal, randomLongBetween(0, memTotal)), new OsStats.Swap(swapTotal, randomLongBetween(0, swapTotal)), new OsStats.Cgroup(randomAlphaOfLength(8), randomNonNegativeLong(), randomAlphaOfLength(8), randomNonNegativeLong(), randomNonNegativeLong(), new OsStats.Cgroup.CpuStat(randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong()), randomAlphaOfLength(8), Long.toString(randomNonNegativeLong()), Long.toString(randomNonNegativeLong())));
    }
    ProcessStats processStats = frequently() ? new ProcessStats(randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), new ProcessStats.Cpu(randomShort(), randomNonNegativeLong()), new ProcessStats.Mem(randomNonNegativeLong())) : null;
    JvmStats jvmStats = null;
    if (frequently()) {
        int numMemoryPools = randomIntBetween(0, 10);
        List<JvmStats.MemoryPool> memoryPools = new ArrayList<>(numMemoryPools);
        for (int i = 0; i < numMemoryPools; i++) {
            memoryPools.add(new JvmStats.MemoryPool(randomAlphaOfLengthBetween(3, 10), randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), new JvmStats.MemoryPoolGcStats(randomNonNegativeLong(), randomNonNegativeLong())));
        }
        JvmStats.Threads threads = new JvmStats.Threads(randomIntBetween(1, 1000), randomIntBetween(1, 1000));
        int numGarbageCollectors = randomIntBetween(0, 10);
        JvmStats.GarbageCollector[] garbageCollectorsArray = new JvmStats.GarbageCollector[numGarbageCollectors];
        for (int i = 0; i < numGarbageCollectors; i++) {
            garbageCollectorsArray[i] = new JvmStats.GarbageCollector(randomAlphaOfLengthBetween(3, 10), randomNonNegativeLong(), randomNonNegativeLong());
        }
        JvmStats.GarbageCollectors garbageCollectors = new JvmStats.GarbageCollectors(garbageCollectorsArray);
        int numBufferPools = randomIntBetween(0, 10);
        List<JvmStats.BufferPool> bufferPoolList = new ArrayList<>();
        for (int i = 0; i < numBufferPools; i++) {
            bufferPoolList.add(new JvmStats.BufferPool(randomAlphaOfLengthBetween(3, 10), randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong()));
        }
        JvmStats.Classes classes = new JvmStats.Classes(randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong());
        jvmStats = frequently() ? new JvmStats(randomNonNegativeLong(), randomNonNegativeLong(), new JvmStats.Mem(randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), memoryPools), threads, garbageCollectors, randomBoolean() ? Collections.emptyList() : bufferPoolList, classes) : null;
    }
    ThreadPoolStats threadPoolStats = null;
    if (frequently()) {
        int numThreadPoolStats = randomIntBetween(0, 10);
        List<ThreadPoolStats.Stats> threadPoolStatsList = new ArrayList<>();
        for (int i = 0; i < numThreadPoolStats; i++) {
            threadPoolStatsList.add(new ThreadPoolStats.Stats(randomAlphaOfLengthBetween(3, 10), randomIntBetween(1, 1000), randomIntBetween(1, 1000), randomIntBetween(1, 1000), randomNonNegativeLong(), randomIntBetween(1, 1000), randomIntBetween(1, 1000)));
        }
        threadPoolStats = new ThreadPoolStats(threadPoolStatsList);
    }
    FsInfo fsInfo = null;
    if (frequently()) {
        int numDeviceStats = randomIntBetween(0, 10);
        FsInfo.DeviceStats[] deviceStatsArray = new FsInfo.DeviceStats[numDeviceStats];
        for (int i = 0; i < numDeviceStats; i++) {
            FsInfo.DeviceStats previousDeviceStats = randomBoolean() ? null : new FsInfo.DeviceStats(randomInt(), randomInt(), randomAlphaOfLengthBetween(3, 10), randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), null);
            deviceStatsArray[i] = new FsInfo.DeviceStats(randomInt(), randomInt(), randomAlphaOfLengthBetween(3, 10), randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), previousDeviceStats);
        }
        FsInfo.IoStats ioStats = new FsInfo.IoStats(deviceStatsArray);
        int numPaths = randomIntBetween(0, 10);
        FsInfo.Path[] paths = new FsInfo.Path[numPaths];
        for (int i = 0; i < numPaths; i++) {
            paths[i] = new FsInfo.Path(randomAlphaOfLengthBetween(3, 10), randomBoolean() ? randomAlphaOfLengthBetween(3, 10) : null, randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong());
        }
        fsInfo = new FsInfo(randomNonNegativeLong(), ioStats, paths);
    }
    TransportStats transportStats = frequently() ? new TransportStats(randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong()) : null;
    HttpStats httpStats = frequently() ? new HttpStats(randomNonNegativeLong(), randomNonNegativeLong()) : null;
    AllCircuitBreakerStats allCircuitBreakerStats = null;
    if (frequently()) {
        int numCircuitBreakerStats = randomIntBetween(0, 10);
        CircuitBreakerStats[] circuitBreakerStatsArray = new CircuitBreakerStats[numCircuitBreakerStats];
        for (int i = 0; i < numCircuitBreakerStats; i++) {
            circuitBreakerStatsArray[i] = new CircuitBreakerStats(randomAlphaOfLengthBetween(3, 10), randomNonNegativeLong(), randomNonNegativeLong(), randomDouble(), randomNonNegativeLong());
        }
        allCircuitBreakerStats = new AllCircuitBreakerStats(circuitBreakerStatsArray);
    }
    ScriptStats scriptStats = frequently() ? new ScriptStats(randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong()) : null;
    DiscoveryStats discoveryStats = frequently() ? new DiscoveryStats(randomBoolean() ? new PendingClusterStateStats(randomInt(), randomInt(), randomInt()) : null, randomBoolean() ? new PublishClusterStateStats(randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong()) : null) : null;
    IngestStats ingestStats = null;
    if (frequently()) {
        IngestStats.Stats totalStats = new IngestStats.Stats(randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong());
        int numPipelines = randomIntBetween(0, 10);
        int numProcessors = randomIntBetween(0, 10);
        List<IngestStats.PipelineStat> ingestPipelineStats = new ArrayList<>(numPipelines);
        Map<String, List<IngestStats.ProcessorStat>> ingestProcessorStats = new HashMap<>(numPipelines);
        for (int i = 0; i < numPipelines; i++) {
            String pipelineId = randomAlphaOfLengthBetween(3, 10);
            ingestPipelineStats.add(new IngestStats.PipelineStat(pipelineId, new IngestStats.Stats(randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong())));
            List<IngestStats.ProcessorStat> processorPerPipeline = new ArrayList<>(numProcessors);
            for (int j = 0; j < numProcessors; j++) {
                IngestStats.Stats processorStats = new IngestStats.Stats(randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong(), randomNonNegativeLong());
                processorPerPipeline.add(new IngestStats.ProcessorStat(randomAlphaOfLengthBetween(3, 10), randomAlphaOfLengthBetween(3, 10), processorStats));
            }
            ingestProcessorStats.put(pipelineId, processorPerPipeline);
        }
        ingestStats = new IngestStats(totalStats, ingestPipelineStats, ingestProcessorStats);
    }
    AdaptiveSelectionStats adaptiveSelectionStats = null;
    if (frequently()) {
        int numNodes = randomIntBetween(0, 10);
        Map<String, Long> nodeConnections = new HashMap<>();
        Map<String, ResponseCollectorService.ComputedNodeStats> nodeStats = new HashMap<>();
        for (int i = 0; i < numNodes; i++) {
            String nodeId = randomAlphaOfLengthBetween(3, 10);
            // add outgoing connection info
            if (frequently()) {
                nodeConnections.put(nodeId, randomLongBetween(0, 100));
            }
            // add node calculations
            if (frequently()) {
                ResponseCollectorService.ComputedNodeStats stats = new ResponseCollectorService.ComputedNodeStats(nodeId, randomIntBetween(1, 10), randomIntBetween(0, 2000), randomDoubleBetween(1.0, 10000000.0, true), randomDoubleBetween(1.0, 10000000.0, true));
                nodeStats.put(nodeId, stats);
            }
        }
        adaptiveSelectionStats = new AdaptiveSelectionStats(nodeConnections, nodeStats);
    }
    ScriptCacheStats scriptCacheStats = scriptStats != null ? scriptStats.toScriptCacheStats() : null;
    // TODO NodeIndicesStats are not tested here, way too complicated to create, also they need to be migrated to Writeable yet
    return new NodeStats(node, randomNonNegativeLong(), null, osStats, processStats, jvmStats, threadPoolStats, fsInfo, transportStats, httpStats, allCircuitBreakerStats, scriptStats, discoveryStats, ingestStats, adaptiveSelectionStats, scriptCacheStats, null, null);
}
Also used : HashMap(java.util.HashMap) DiscoveryStats(org.opensearch.discovery.DiscoveryStats) ArrayList(java.util.ArrayList) ResponseCollectorService(org.opensearch.node.ResponseCollectorService) ThreadPoolStats(org.opensearch.threadpool.ThreadPoolStats) TransportStats(org.opensearch.transport.TransportStats) CircuitBreakerStats(org.opensearch.indices.breaker.CircuitBreakerStats) AllCircuitBreakerStats(org.opensearch.indices.breaker.AllCircuitBreakerStats) ArrayList(java.util.ArrayList) List(java.util.List) ScriptStats(org.opensearch.script.ScriptStats) PublishClusterStateStats(org.opensearch.cluster.coordination.PublishClusterStateStats) PendingClusterStateStats(org.opensearch.cluster.coordination.PendingClusterStateStats) AdaptiveSelectionStats(org.opensearch.node.AdaptiveSelectionStats) IngestStats(org.opensearch.ingest.IngestStats) IngestStats(org.opensearch.ingest.IngestStats) PendingClusterStateStats(org.opensearch.cluster.coordination.PendingClusterStateStats) CircuitBreakerStats(org.opensearch.indices.breaker.CircuitBreakerStats) OsStats(org.opensearch.monitor.os.OsStats) ScriptCacheStats(org.opensearch.script.ScriptCacheStats) DiscoveryStats(org.opensearch.discovery.DiscoveryStats) AllCircuitBreakerStats(org.opensearch.indices.breaker.AllCircuitBreakerStats) JvmStats(org.opensearch.monitor.jvm.JvmStats) HttpStats(org.opensearch.http.HttpStats) TransportStats(org.opensearch.transport.TransportStats) ScriptStats(org.opensearch.script.ScriptStats) ThreadPoolStats(org.opensearch.threadpool.ThreadPoolStats) AdaptiveSelectionStats(org.opensearch.node.AdaptiveSelectionStats) PublishClusterStateStats(org.opensearch.cluster.coordination.PublishClusterStateStats) ProcessStats(org.opensearch.monitor.process.ProcessStats) DiscoveryNode(org.opensearch.cluster.node.DiscoveryNode) FsInfo(org.opensearch.monitor.fs.FsInfo) HttpStats(org.opensearch.http.HttpStats) JvmStats(org.opensearch.monitor.jvm.JvmStats) ProcessStats(org.opensearch.monitor.process.ProcessStats) OsStats(org.opensearch.monitor.os.OsStats) ScriptCacheStats(org.opensearch.script.ScriptCacheStats) AllCircuitBreakerStats(org.opensearch.indices.breaker.AllCircuitBreakerStats)

Example 3 with ThreadPoolStats

use of org.opensearch.threadpool.ThreadPoolStats in project OpenSearch by opensearch-project.

the class InternalSnapshotsInfoServiceTests method waitForMaxActiveGenericThreads.

private void waitForMaxActiveGenericThreads(final int nbActive) throws Exception {
    assertBusy(() -> {
        final ThreadPoolStats threadPoolStats = clusterService.getClusterApplierService().threadPool().stats();
        ThreadPoolStats.Stats generic = null;
        for (ThreadPoolStats.Stats threadPoolStat : threadPoolStats) {
            if (ThreadPool.Names.GENERIC.equals(threadPoolStat.getName())) {
                generic = threadPoolStat;
            }
        }
        assertThat(generic, notNullValue());
        assertThat(generic.getActive(), equalTo(nbActive));
    }, 30L, TimeUnit.SECONDS);
}
Also used : ThreadPoolStats(org.opensearch.threadpool.ThreadPoolStats)

Aggregations

ThreadPoolStats (org.opensearch.threadpool.ThreadPoolStats)3 HashMap (java.util.HashMap)2 DiscoveryNode (org.opensearch.cluster.node.DiscoveryNode)2 ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Map (java.util.Map)1 TreeMap (java.util.TreeMap)1 NodeInfo (org.opensearch.action.admin.cluster.node.info.NodeInfo)1 NodeStats (org.opensearch.action.admin.cluster.node.stats.NodeStats)1 PendingClusterStateStats (org.opensearch.cluster.coordination.PendingClusterStateStats)1 PublishClusterStateStats (org.opensearch.cluster.coordination.PublishClusterStateStats)1 DiscoveryNodes (org.opensearch.cluster.node.DiscoveryNodes)1 Table (org.opensearch.common.Table)1 DiscoveryStats (org.opensearch.discovery.DiscoveryStats)1 HttpStats (org.opensearch.http.HttpStats)1 AllCircuitBreakerStats (org.opensearch.indices.breaker.AllCircuitBreakerStats)1 CircuitBreakerStats (org.opensearch.indices.breaker.CircuitBreakerStats)1 IngestStats (org.opensearch.ingest.IngestStats)1 FsInfo (org.opensearch.monitor.fs.FsInfo)1