@@ -71,6 +71,8 @@ public int compare(final RegionState l, final RegionState r) {
71
71
public final static RegionStateStampComparator REGION_STATE_STAMP_COMPARATOR =
72
72
new RegionStateStampComparator ();
73
73
74
+ private final Object regionsMapLock = new Object ();
75
+
74
76
// TODO: Replace the ConcurrentSkipListMaps
75
77
/**
76
78
* RegionName -- i.e. RegionInfo.getRegionName() -- as bytes to {@link RegionStateNode}
@@ -125,11 +127,12 @@ public boolean isRegionInRegionStates(final RegionInfo hri) {
125
127
// ==========================================================================
126
128
@ VisibleForTesting
127
129
RegionStateNode createRegionStateNode (RegionInfo regionInfo ) {
128
- return regionsMap .computeIfAbsent (regionInfo .getRegionName (), key -> {
129
- final RegionStateNode node = new RegionStateNode (regionInfo , regionInTransition );
130
+ synchronized (regionsMapLock ) {
131
+ RegionStateNode node = regionsMap .computeIfAbsent (regionInfo .getRegionName (),
132
+ key -> new RegionStateNode (regionInfo , regionInTransition ));
130
133
encodedRegionsMap .putIfAbsent (regionInfo .getEncodedName (), node );
131
134
return node ;
132
- });
135
+ }
133
136
}
134
137
135
138
public RegionStateNode getOrCreateRegionStateNode (RegionInfo regionInfo ) {
@@ -146,8 +149,10 @@ public RegionStateNode getRegionStateNode(RegionInfo regionInfo) {
146
149
}
147
150
148
151
public void deleteRegion (final RegionInfo regionInfo ) {
149
- regionsMap .remove (regionInfo .getRegionName ());
150
- encodedRegionsMap .remove (regionInfo .getEncodedName ());
152
+ synchronized (regionsMapLock ) {
153
+ regionsMap .remove (regionInfo .getRegionName ());
154
+ encodedRegionsMap .remove (regionInfo .getEncodedName ());
155
+ }
151
156
// See HBASE-20860
152
157
// After master restarts, merged regions' RIT state may not be cleaned,
153
158
// making sure they are cleaned here
0 commit comments