@@ -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