in src/main/java/org/opensearch/performanceanalyzer/rca/store/rca/HighHeapUsageClusterRca.java [94:139]
private List<HotNodeSummary> getUnhealthyNodeList() {
List<HotNodeSummary> unhealthyNodeList = new ArrayList<>();
ConcurrentMap<String, ImmutableList<ResourceFlowUnit<HotNodeSummary>>> currentMap =
this.nodeStateCache.asMap();
for (InstanceDetails nodeDetails : getDataNodeInstances()) {
ImmutableList<ResourceFlowUnit<HotNodeSummary>> nodeStateList =
currentMap.get(nodeDetails.getInstanceId().toString());
if (nodeStateList != null) {
List<HotResourceSummary> oldGenSummaries = new ArrayList<>();
List<HotResourceSummary> youngGenSummaries = new ArrayList<>();
for (ResourceFlowUnit<HotNodeSummary> flowUnit : nodeStateList) {
if (flowUnit.getResourceContext().getState() == Resources.State.UNHEALTHY) {
HotNodeSummary currentNodSummary = flowUnit.getSummary();
for (HotResourceSummary resourceSummary :
currentNodSummary.getHotResourceSummaryList()) {
if (resourceSummary.getResource().getResourceEnum()
== ResourceEnum.YOUNG_GEN) {
youngGenSummaries.add(resourceSummary);
} else if (resourceSummary.getResource().getResourceEnum()
== ResourceEnum.OLD_GEN) {
oldGenSummaries.add(resourceSummary);
}
}
}
}
// youngGenSummaries can have multiple elements but we will only consider it as
// unhealthy if
// three consecutive summaries are all unhealthy and we will then pick the first
// element as the summary for output.
if (youngGenSummaries.size() >= UNHEALTHY_FLOWUNIT_THRESHOLD
|| oldGenSummaries.size() >= UNHEALTHY_FLOWUNIT_THRESHOLD) {
HotNodeSummary nodeSummary =
new HotNodeSummary(
nodeDetails.getInstanceId(), nodeDetails.getInstanceIp());
if (youngGenSummaries.size() >= UNHEALTHY_FLOWUNIT_THRESHOLD) {
nodeSummary.appendNestedSummary(youngGenSummaries.get(0));
}
if (oldGenSummaries.size() >= UNHEALTHY_FLOWUNIT_THRESHOLD) {
nodeSummary.appendNestedSummary(oldGenSummaries.get(0));
}
unhealthyNodeList.add(nodeSummary);
}
}
}
return unhealthyNodeList;
}