private void loadRegionsFromRSReport(final HbckReport report) {
    int numRegions = 0;
    Map<ServerName, Set<byte[]>> rsReports = master.getAssignmentManager().getRSReports();
    for (Map.Entry<ServerName, Set<byte[]>> entry : rsReports.entrySet()) {
      ServerName serverName = entry.getKey();
      for (byte[] regionName : entry.getValue()) {
        String encodedRegionName = RegionInfo.encodeRegionName(regionName);
        HbckRegionInfo hri = report.getRegionInfoMap().get(encodedRegionName);
        if (hri == null) {
          report.getOrphanRegionsOnRS().put(RegionInfo.getRegionNameAsString(regionName),
            serverName);
          continue;
        }
        hri.addServer(hri.getMetaEntry().getRegionInfo(), serverName);
      }
      numRegions += entry.getValue().size();
    }
    LOG.info("Loaded {} regions from {} regionservers' reports and found {} orphan regions",
      numRegions, rsReports.size(), report.getOrphanRegionsOnRS().size());

    for (Map.Entry<String, HbckRegionInfo> entry : report.getRegionInfoMap().entrySet()) {
      HbckRegionInfo hri = entry.getValue();
      ServerName locationInMeta = hri.getMetaEntry().getRegionServer(); // can be null
      if (hri.getDeployedOn().size() == 0) {
        // skip the offline region which belong to disabled table.
        if (report.getDisabledTableRegions().contains(hri.getRegionNameAsString())) {
          continue;
        }
        // skip the split parent regions
        if (report.getSplitParentRegions().contains(hri.getRegionNameAsString())) {
          continue;
        }
        // Master thought this region opened, but no regionserver reported it.
        report.getInconsistentRegions().put(hri.getRegionNameAsString(),
          new Pair<>(locationInMeta, new LinkedList<>()));
      } else if (hri.getDeployedOn().size() > 1) {
        // More than one regionserver reported opened this region
        report.getInconsistentRegions().put(hri.getRegionNameAsString(),
          new Pair<>(locationInMeta, hri.getDeployedOn()));
      } else if (!hri.getDeployedOn().get(0).equals(locationInMeta)) {
        // Master thought this region opened on Server1, but regionserver reported Server2
        report.getInconsistentRegions().put(hri.getRegionNameAsString(),
          new Pair<>(locationInMeta, hri.getDeployedOn()));
      }
    }
  }
Scan hbase:meta to get set of merged parent regions, this is a very heavy scan.
@return Return generated {@link HashSet}
hbase-server/src/main/java/org/apache/hadoop/hbase/master/hbck/HbckChore.java