|
117 | 117 | import java.util.Arrays;
|
118 | 118 | import java.util.Collection;
|
119 | 119 | import java.util.Collections;
|
| 120 | +import java.util.Comparator; |
120 | 121 | import java.util.EnumSet;
|
121 | 122 | import java.util.HashMap;
|
122 | 123 | import java.util.HashSet;
|
|
128 | 129 | import java.util.UUID;
|
129 | 130 | import java.util.concurrent.Callable;
|
130 | 131 | import java.util.concurrent.ConcurrentHashMap;
|
| 132 | +import java.util.concurrent.ConcurrentMap; |
131 | 133 | import java.util.concurrent.ExecutionException;
|
132 | 134 | import java.util.concurrent.ExecutorService;
|
133 | 135 | import java.util.concurrent.Executors;
|
@@ -2630,7 +2632,29 @@ public int getActiveTransferThreadCount() {
|
2630 | 2632 |
|
2631 | 2633 | @Override // DataNodeMXBean
|
2632 | 2634 | public Map<String, Map<String, Long>> getDatanodeNetworkCounts() {
|
2633 |
| - return datanodeNetworkCounts.asMap(); |
| 2635 | + int maxDisplay = getConf().getInt(DFSConfigKeys.DFS_DATANODE_NETWORKERRORS_DISPLAY_TOPCOUNT, |
| 2636 | + DFSConfigKeys.DFS_DATANODE_NETWORKERRORS_DISPLAY_TOPCOUNT_DEFAULT); |
| 2637 | + ConcurrentMap<String, Map<String, Long>> map = datanodeNetworkCounts.asMap(); |
| 2638 | + Set<Map.Entry<String, Map<String, Long>>> entries = map.entrySet(); |
| 2639 | + List<Map.Entry<String, Map<String, Long>>> list = new ArrayList<>(entries); |
| 2640 | + Collections.sort(list, new Comparator<Entry<String, Map<String, Long>>>() { |
| 2641 | + @Override |
| 2642 | + public int compare(Map.Entry<String, Map<String, Long>> o1, |
| 2643 | + Map.Entry<String, Map<String, Long>> o2) { |
| 2644 | + Map<String, Long> value1Map = o1.getValue(); |
| 2645 | + Map<String, Long> value2Map = o2.getValue(); |
| 2646 | + long compared = value2Map.getOrDefault(DataNode.NETWORK_ERRORS, 0L) - |
| 2647 | + value1Map.getOrDefault(DataNode.NETWORK_ERRORS, 0L); |
| 2648 | + return (int)compared; |
| 2649 | + } |
| 2650 | + }); |
| 2651 | + Map<String, Map<String, Long>> resultMap = new ConcurrentHashMap<>(); |
| 2652 | + maxDisplay = list.size() > maxDisplay ? maxDisplay : list.size(); |
| 2653 | + for (int i = 0; i < maxDisplay; i++) { |
| 2654 | + resultMap.put(list.get(i).getKey(), list.get(i).getValue()); |
| 2655 | + } |
| 2656 | + list.clear(); |
| 2657 | + return resultMap; |
2634 | 2658 | }
|
2635 | 2659 |
|
2636 | 2660 | void incrDatanodeNetworkErrors(String host) {
|
|
0 commit comments