diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/DatanodeInfo.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/DatanodeInfo.java index a2d8bb2dffe8..7893e90812dc 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/DatanodeInfo.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/DatanodeInfo.java @@ -53,11 +53,12 @@ public class DatanodeInfo extends DatanodeDetails { private volatile long lastHeartbeatTime; private long lastStatsUpdatedTime; + private int failedVolumeCount; private List storageReports; private List metadataStorageReports; private LayoutVersionProto lastKnownLayoutVersion; - private Map commandCounts; + private final Map commandCounts; private NodeStatus nodeStatus; @@ -155,9 +156,14 @@ public LayoutVersionProto getLastKnownLayoutVersion() { * @param reports list of storage report */ public void updateStorageReports(List reports) { + final int failedCount = (int) reports.stream() + .filter(e -> e.hasFailed() && e.getFailed()) + .count(); + try { lock.writeLock().lock(); lastStatsUpdatedTime = Time.monotonicNow(); + failedVolumeCount = failedCount; storageReports = reports; } finally { lock.writeLock().unlock(); @@ -215,7 +221,7 @@ public List getMetadataStorageReports() { public int getHealthyVolumeCount() { try { lock.readLock().lock(); - return storageReports.size() - getFailedVolumeCount(); + return storageReports.size() - failedVolumeCount; } finally { lock.readLock().unlock(); } @@ -234,15 +240,6 @@ public int getMetaDataVolumeCount() { } } - /** - * Returns count of failed volumes reported from datanode. - * @return count of failed volumes - */ - private int getFailedVolumeCount() { - return (int) storageReports.stream(). - filter(e -> e.hasFailed() ? e.getFailed() : false).count(); - } - /** * Returns the last updated time of datanode info. * @return the last updated time of datanode info.