diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSClient.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSClient.java index cbe7516b0ede0..4056ae97d356d 100755 --- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSClient.java +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSClient.java @@ -2103,6 +2103,24 @@ public long getCorruptBlocksCount() throws IOException { GET_STATS_CORRUPT_BLOCKS_IDX); } + /** + * Returns count of blocks with one or more replicas missing. + * @throws IOException + */ + public long getNormalLowRedundancyBlocksCount() throws IOException { + return getStateByIndex(ClientProtocol. + GET_STATS_NORMAL_LOW_REDUNDANCY_BLOCKS_IDX); + } + + /** + * Returns count of blocks that are badly distributed as per BPP. + * @throws IOException + */ + public long getBadlyDistributedBlocksCount() throws IOException { + return getStateByIndex(ClientProtocol. + GET_STATS_BADLY_DISTRIBUTED_BLOCKS_IDX); + } + /** * Returns number of bytes that reside in Blocks with future generation * stamps. diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/protocol/ClientProtocol.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/protocol/ClientProtocol.java index b56b7916ff798..5e7ab879641c3 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/protocol/ClientProtocol.java +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/protocol/ClientProtocol.java @@ -804,7 +804,9 @@ SnapshotStatus[] getSnapshotListing(String snapshotRoot) int GET_STATS_MISSING_REPL_ONE_BLOCKS_IDX = 6; int GET_STATS_BYTES_IN_FUTURE_BLOCKS_IDX = 7; int GET_STATS_PENDING_DELETION_BLOCKS_IDX = 8; - int STATS_ARRAY_LENGTH = 9; + int GET_STATS_BADLY_DISTRIBUTED_BLOCKS_IDX = 9; + int GET_STATS_NORMAL_LOW_REDUNDANCY_BLOCKS_IDX = 10; + int STATS_ARRAY_LENGTH = 11; /** * Get an array of aggregated statistics combining blocks of both type diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/HeartbeatManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/HeartbeatManager.java index 43ded22dbceaf..c7ac0fad194ce 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/HeartbeatManager.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/HeartbeatManager.java @@ -210,6 +210,8 @@ public synchronized long[] getStats() { -1L, -1L, -1L, + -1L, + -1L, -1L}; } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java index f359d86df7b2a..04a90cb11b79b 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java @@ -4848,6 +4848,13 @@ long[] getStats() { blockManager.getBytesInFuture(); stats[ClientProtocol.GET_STATS_PENDING_DELETION_BLOCKS_IDX] = blockManager.getPendingDeletionBlocksCount(); + stats[ClientProtocol.GET_STATS_BADLY_DISTRIBUTED_BLOCKS_IDX] = + getBadlyDistributedBlocksCount(); + // GET_STATS_LOW_REDUNDANCY_IDX uses getLowRedundancyBlocksCount() which gives us the count of + // all types of low redundancy blocks. GET_STATS_NORMAL_LOW_REDUNDANCY_BLOCKS_IDX will give the count + // of normal low redundancy blocks only using getLowRedundancyBlocks(). + stats[ClientProtocol.GET_STATS_NORMAL_LOW_REDUNDANCY_BLOCKS_IDX] = + blockManager.getLowRedundancyBlocks(); return stats; }