Skip to content

Commit f78bf84

Browse files
mwkangndimiduk
authored andcommitted
HBASE-23561 acquire lock before update regionsMap (#1263)
Addendum: tie add and delete of regionMap and encodedRegionsMap Signed-off-by: stack <stack@apache.org>
1 parent 574a76e commit f78bf84

File tree

1 file changed

+10
-5
lines changed
  • hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment

1 file changed

+10
-5
lines changed

hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/RegionStates.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ public int compare(final RegionState l, final RegionState r) {
6868
public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =
6969
new RegionStateStampComparator();
7070

71+
private final Object regionsMapLock = new Object();
72+
7173
// TODO: Replace the ConcurrentSkipListMaps
7274
/**
7375
* RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}
@@ -121,11 +123,12 @@ public boolean isRegionInRegionStates(final RegionInfo hri) {
121123
// RegionStateNode helpers
122124
// ==========================================================================
123125
RegionStateNode createRegionStateNode(RegionInfo regionInfo) {
124-
return regionsMap.computeIfAbsent(regionInfo.getRegionName(), key -> {
125-
final RegionStateNode node = new RegionStateNode(regionInfo, regionInTransition);
126+
synchronized (regionsMapLock) {
127+
RegionStateNode node = regionsMap.computeIfAbsent(regionInfo.getRegionName(),
128+
key -> new RegionStateNode(regionInfo, regionInTransition));
126129
encodedRegionsMap.putIfAbsent(regionInfo.getEncodedName(), node);
127130
return node;
128-
});
131+
}
129132
}
130133

131134
public RegionStateNode getOrCreateRegionStateNode(RegionInfo regionInfo) {
@@ -142,8 +145,10 @@ public RegionStateNode getRegionStateNode(RegionInfo regionInfo) {
142145
}
143146

144147
public void deleteRegion(final RegionInfo regionInfo) {
145-
regionsMap.remove(regionInfo.getRegionName());
146-
encodedRegionsMap.remove(regionInfo.getEncodedName());
148+
synchronized (regionsMapLock) {
149+
regionsMap.remove(regionInfo.getRegionName());
150+
encodedRegionsMap.remove(regionInfo.getEncodedName());
151+
}
147152
// See HBASE-20860
148153
// After master restarts, merged regions' RIT state may not be cleaned,
149154
// making sure they are cleaned here

0 commit comments

Comments
 (0)