You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by nd...@apache.org on 2023/03/01 14:10:28 UTC

[hbase] branch branch-2 updated (9a23d4a3b2d -> 13e06c7184e)

This is an automated email from the ASF dual-hosted git repository.

ndimiduk pushed a change to branch branch-2
in repository https://gitbox.apache.org/repos/asf/hbase.git


    from 9a23d4a3b2d HBASE-27673 Fix mTLS client hostname verification (#5066)
     new 5f54d9cbad3 HBASE-23561 Look up of Region in Master by encoded region name is O(n) (#1193)
     new 13e06c7184e HBASE-23561 acquire lock before update regionsMap (#1263)

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../hbase/master/assignment/RegionStates.java      | 37 +++++++++++++++-------
 1 file changed, 26 insertions(+), 11 deletions(-)


[hbase] 01/02: HBASE-23561 Look up of Region in Master by encoded region name is O(n) (#1193)

Posted by nd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ndimiduk pushed a commit to branch branch-2
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit 5f54d9cbad3e22df2bd65f4112fef2d2f5cba755
Author: Minwoo Kang <mi...@outlook.com>
AuthorDate: Sat Feb 22 01:40:45 2020 +0900

    HBASE-23561 Look up of Region in Master by encoded region name is O(n) (#1193)
    
    Signed-off-by: Wellington Chevreuil <wc...@apache.org>
    Signed-off-by: Viraj Jasani <vj...@apache.org>
---
 .../hbase/master/assignment/RegionStates.java      | 30 ++++++++++++++--------
 1 file changed, 20 insertions(+), 10 deletions(-)

diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java
index 1ee326e044c..f6c77dd39ec 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java
@@ -73,10 +73,17 @@ public class RegionStates {
    * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}
    */
   private final ConcurrentSkipListMap<byte[], RegionStateNode> regionsMap =
-    new ConcurrentSkipListMap<byte[], RegionStateNode>(Bytes.BYTES_COMPARATOR);
+    new ConcurrentSkipListMap<>(Bytes.BYTES_COMPARATOR);
+
+  /**
+   * this map is a hack to lookup of region in master by encoded region name is O(n). must put and
+   * remove with regionsMap.
+   */
+  private final ConcurrentSkipListMap<String, RegionStateNode> encodedRegionsMap =
+    new ConcurrentSkipListMap<>();
 
   private final ConcurrentSkipListMap<RegionInfo, RegionStateNode> regionInTransition =
-    new ConcurrentSkipListMap<RegionInfo, RegionStateNode>(RegionInfo.COMPARATOR);
+    new ConcurrentSkipListMap<>(RegionInfo.COMPARATOR);
 
   /**
    * Regions marked as offline on a read of hbase:meta. Unused or at least, once offlined, regions
@@ -99,6 +106,7 @@ public class RegionStates {
    */
   public void clear() {
     regionsMap.clear();
+    encodedRegionsMap.clear();
     regionInTransition.clear();
     regionOffline.clear();
     serverMap.clear();
@@ -113,8 +121,11 @@ public class RegionStates {
   // RegionStateNode helpers
   // ==========================================================================
   RegionStateNode createRegionStateNode(RegionInfo regionInfo) {
-    return regionsMap.computeIfAbsent(regionInfo.getRegionName(),
-      key -> new RegionStateNode(regionInfo, regionInTransition));
+    return regionsMap.computeIfAbsent(regionInfo.getRegionName(), key -> {
+      final RegionStateNode node = new RegionStateNode(regionInfo, regionInTransition);
+      encodedRegionsMap.putIfAbsent(regionInfo.getEncodedName(), node);
+      return node;
+    });
   }
 
   public RegionStateNode getOrCreateRegionStateNode(RegionInfo regionInfo) {
@@ -132,6 +143,7 @@ public class RegionStates {
 
   public void deleteRegion(final RegionInfo regionInfo) {
     regionsMap.remove(regionInfo.getRegionName());
+    encodedRegionsMap.remove(regionInfo.getEncodedName());
     // See HBASE-20860
     // After master restarts, merged regions' RIT state may not be cleaned,
     // making sure they are cleaned here
@@ -199,13 +211,11 @@ public class RegionStates {
   }
 
   public RegionState getRegionState(final String encodedRegionName) {
-    // TODO: Need a map <encodedName, ...> but it is just dispatch merge...
-    for (RegionStateNode node : regionsMap.values()) {
-      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {
-        return node.toRegionState();
-      }
+    final RegionStateNode node = encodedRegionsMap.get(encodedRegionName);
+    if (node == null) {
+      return null;
     }
-    return null;
+    return node.toRegionState();
   }
 
   // ============================================================================================


[hbase] 02/02: HBASE-23561 acquire lock before update regionsMap (#1263)

Posted by nd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ndimiduk pushed a commit to branch branch-2
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit 13e06c7184e717443d5a134172216d65bddadee9
Author: Minwoo Kang <mi...@outlook.com>
AuthorDate: Thu Mar 12 08:57:21 2020 +0900

    HBASE-23561 acquire lock before update regionsMap (#1263)
    
    Addendum: tie add and delete of regionMap and encodedRegionsMap
    
    Signed-off-by: stack <st...@apache.org>
---
 .../hadoop/hbase/master/assignment/RegionStates.java      | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java
index f6c77dd39ec..3ad61d426b7 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java
@@ -68,6 +68,8 @@ public class RegionStates {
   public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =
     new RegionStateStampComparator();
 
+  private final Object regionsMapLock = new Object();
+
   // TODO: Replace the ConcurrentSkipListMaps
   /**
    * RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}
@@ -121,11 +123,12 @@ public class RegionStates {
   // RegionStateNode helpers
   // ==========================================================================
   RegionStateNode createRegionStateNode(RegionInfo regionInfo) {
-    return regionsMap.computeIfAbsent(regionInfo.getRegionName(), key -> {
-      final RegionStateNode node = new RegionStateNode(regionInfo, regionInTransition);
+    synchronized (regionsMapLock) {
+      RegionStateNode node = regionsMap.computeIfAbsent(regionInfo.getRegionName(),
+        key -> new RegionStateNode(regionInfo, regionInTransition));
       encodedRegionsMap.putIfAbsent(regionInfo.getEncodedName(), node);
       return node;
-    });
+    }
   }
 
   public RegionStateNode getOrCreateRegionStateNode(RegionInfo regionInfo) {
@@ -142,8 +145,10 @@ public class RegionStates {
   }
 
   public void deleteRegion(final RegionInfo regionInfo) {
-    regionsMap.remove(regionInfo.getRegionName());
-    encodedRegionsMap.remove(regionInfo.getEncodedName());
+    synchronized (regionsMapLock) {
+      regionsMap.remove(regionInfo.getRegionName());
+      encodedRegionsMap.remove(regionInfo.getEncodedName());
+    }
     // See HBASE-20860
     // After master restarts, merged regions' RIT state may not be cleaned,
     // making sure they are cleaned here