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/03 09:42:46 UTC

[hbase] branch branch-2.5 updated (79a7bf770a6 -> cbfdbff8410)

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

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


    from 79a7bf770a6 HBASE-27458 Use ReadWriteLock for region scanner readpoint map (#5069)
     new 26dcc133e2b HBASE-23561 Look up of Region in Master by encoded region name is O(n) (#1193)
     new cbfdbff8410 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.5
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit 26dcc133e2ba779bfcc9f46ed3ad1ebbd8001474
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.5
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit cbfdbff841005017b4c5771fc1f671f6e4029cf4
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