You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by vj...@apache.org on 2020/09/01 13:01:13 UTC
[hbase] branch branch-2.3 updated: HBASE-24569 Get hostAndWeights
in addition using localhost if it is null in local mode
This is an automated email from the ASF dual-hosted git repository.
vjasani pushed a commit to branch branch-2.3
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2.3 by this push:
new d62d44c HBASE-24569 Get hostAndWeights in addition using localhost if it is null in local mode
d62d44c is described below
commit d62d44ca3544ce8ec424bea602d04a3f53870ffd
Author: Zheng Wang <18...@qq.com>
AuthorDate: Tue Sep 1 15:51:33 2020 +0530
HBASE-24569 Get hostAndWeights in addition using localhost if it is null in local mode
Closes #1909
Signed-off-by: Duo Zhang <zh...@apache.org>
Signed-off-by: Viraj Jasani <vj...@apache.org>
---
.../apache/hadoop/hbase/HDFSBlocksDistribution.java | 15 +++++++++++++--
.../hadoop/hbase/TestHDFSBlocksDistribution.java | 19 ++++++++++++++++++-
2 files changed, 31 insertions(+), 3 deletions(-)
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/HDFSBlocksDistribution.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/HDFSBlocksDistribution.java
index aa25fef..e44b68f 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/HDFSBlocksDistribution.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/HDFSBlocksDistribution.java
@@ -25,10 +25,9 @@ import java.util.Map;
import java.util.NavigableSet;
import java.util.TreeMap;
import java.util.TreeSet;
-
+import org.apache.hadoop.hbase.util.DNS;
import org.apache.yetus.audience.InterfaceAudience;
-
/**
* Data structure to describe the distribution of HDFS blocks among hosts.
*
@@ -201,6 +200,18 @@ public class HDFSBlocksDistribution {
public float getBlockLocalityIndex(String host) {
float localityIndex = 0;
HostAndWeight hostAndWeight = this.hostAndWeights.get(host);
+ // Compatible with local mode, see HBASE-24569
+ if (hostAndWeight == null) {
+ String currentHost = "";
+ try {
+ currentHost = DNS.getDefaultHost("default", "default");
+ } catch (Exception e) {
+ // Just ignore, it's ok, avoid too many log info
+ }
+ if (host.equals(currentHost)) {
+ hostAndWeight = this.hostAndWeights.get(HConstants.LOCALHOST);
+ }
+ }
if (hostAndWeight != null && uniqueBlocksTotalWeight != 0) {
localityIndex=(float)hostAndWeight.weight/(float)uniqueBlocksTotalWeight;
}
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHDFSBlocksDistribution.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHDFSBlocksDistribution.java
index e9ec333..9c39396 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHDFSBlocksDistribution.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestHDFSBlocksDistribution.java
@@ -17,12 +17,14 @@
*/
package org.apache.hadoop.hbase;
-import static junit.framework.Assert.assertEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
import java.util.HashMap;
import java.util.Map;
import org.apache.hadoop.hbase.testclassification.MiscTests;
import org.apache.hadoop.hbase.testclassification.SmallTests;
+import org.apache.hadoop.hbase.util.DNS;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
@@ -73,4 +75,19 @@ public class TestHDFSBlocksDistribution {
assertEquals("Should be one host", 1, distribution.getHostAndWeights().size());
assertEquals("Total weight should be 10", 10, distribution.getUniqueBlocksTotalWeight());
}
+
+ @Test
+ public void testLocalHostCompatibility() throws Exception {
+ String currentHost = DNS.getDefaultHost("default", "default");
+ HDFSBlocksDistribution distribution = new HDFSBlocksDistribution();
+ assertEquals("Locality should be 0.0", 0.0,
+ distribution.getBlockLocalityIndex(currentHost), 0.01);
+ distribution.addHostsAndBlockWeight(new String[] { "localhost" }, 10);
+ assertEquals("Should be one host", 1, distribution.getHostAndWeights().size());
+ assertEquals("Locality should be 0.0", 0.0,
+ distribution.getBlockLocalityIndex("test"), 0.01);
+ assertNotEquals("Locality should be 0.0", 0.0,
+ distribution.getBlockLocalityIndex(currentHost), 0.01);
+ }
+
}