During the development and review process of the disk health indicator we noticed that it was hard to understand. Since we learnt a lot from the first round of development we want to go through the code one more time and restructure it.
server/src/main/java/org/elasticsearch/health/node/DiskHealthIndicatorService.java
Set<String> indicesOnYellowNodes = getIndicesForNodes(nodesReportingYellow, clusterState);
            Set<String> redDataNodes = getNodesWithDataRole(nodesReportingRed, clusterState);
            Set<String> yellowDataNodes = getNodesWithDataRole(nodesReportingYellow, clusterState);
            Set<String> redMasterNodes = getNodesWithMasterRole(nodesReportingRed, clusterState);
            Set<String> yellowMasterNodes = getNodesWithMasterRole(nodesReportingYellow, clusterState);
            Set<String> redNonDataNonMasterNodes = getNodesWithNonDataNonMasterRoles(nodesReportingRed, clusterState);
            Set<String> yellowNonDataNonMasterNodes = getNodesWithNonDataNonMasterRoles(nodesReportingYellow, clusterState);
            String symptom = getSymptom(
                indicesWithBlock,
                redDataNodes,
                yellowDataNodes,
                nodesReportingRed,
                nodesReportingYellow,
                clusterState
            );
            List<HealthIndicatorImpact> impacts = getImpacts(
                indicesWithBlock,
                Sets.union(indicesOnYellowNodes, indicesOnRedNodes),
                nodesReportingRed,
                nodesReportingYellow,
                clusterState
            );
            List<Diagnosis> diagnosisList = getDiagnoses(
                indicesWithBlock,
                indicesOnRedNodes,
                indicesOnYellowNodes,
                nodesWithBlockedIndices,
                redDataNodes,
                yellowDataNodes,
                redMasterNodes,