private void update0(UpdateMasterRegion action) throws IOException {
    for (int tries = 0; tries < maxRetriesForRegionUpdates; tries++) {
      try {
        // If the update is successful, return immediately.
        action.update(region);
        flusherAndCompactor.onUpdate();
        return;
      } catch (RegionTooBusyException e) {
        // RegionTooBusyException is the type of IOException for which we can retry
        // for few times before aborting the active master. The master region might
        // have genuine case for delayed flushes and/or some procedure bug causing
        // heavy pressure on the memstore.
        flusherAndCompactor.onUpdate();
        if (tries == (maxRetriesForRegionUpdates - 1)) {
          abortServer(e);
        }
        LOG.info("Master region {} is too busy... retry attempt: {}", region, tries);
        // Exponential backoff is performed by ConnectionUtils.getPauseTime().
        // It uses HConstants.RETRY_BACKOFF array for the backoff multiplier, the
        // same array is used as backoff multiplier with RPC retries.
        Threads.sleep(ConnectionUtils.getPauseTime(regionUpdateRetryPauseTime, tries));
      } catch (IOException e) {
        // We catch IOException here to ensure that if the mutation is not successful
        // even after the internal retries done within AbstractFSWAL, we better abort
        // the active master so that the new active master can take care of resuming
        // the procedure state which could not be persisted successfully by previously
        // aborted master. Refer to Jira: HBASE-29251.
        abortServer(e);
      }
    }
  }
A region that stores data in a separated directory, which can be used to store master local data.
<p/>
FileSystem layout:

<pre>
hbase
  |
  --&lt;region dir&gt;
      |
      --data
      |  |
      |  --/&lt;ns&gt/&lt;table&gt/&lt;encoded-region-name&gt; <---- The region data
      |      |
      |      --replay <---- The edits to replay
      |
      --WALs
         |
         --&lt;master-server-name&gt; <---- The WAL dir for active master
         |
         --&lt;master-server-name&gt;-dead <---- The WAL dir for dead master
</pre>

Notice that, you can use different root file system and WAL file system. Then the above directory
will be on two file systems, the root file system will have the data directory while the WAL
filesystem will have the WALs directory. The archived HFile will be moved to the global HFile
archived directory with the {@link MasterRegionParams#archivedHFileSuffix()} suffix. The archived
WAL will be moved to the global WAL archived directory with the
{@link MasterRegionParams#archivedWalSuffix()} suffix.
hbase-server/src/main/java/org/apache/hadoop/hbase/master/region/MasterRegion.java