You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by GitBox <gi...@apache.org> on 2020/01/09 20:45:00 UTC

[GitHub] [hbase] saintstack commented on a change in pull request #917: HBASE-23383 [hbck2] `fixHoles` should queue assignment procedures for any regions its fixing

saintstack commented on a change in pull request #917: HBASE-23383 [hbck2] `fixHoles` should queue assignment procedures for any regions its fixing
URL: https://github.com/apache/hbase/pull/917#discussion_r364949411
 
 

 ##########
 File path: hbase-server/src/main/java/org/apache/hadoop/hbase/master/MetaFixer.java
 ##########
 @@ -86,74 +84,133 @@ void fix() throws IOException {
    * If hole, it papers it over by adding a region in the filesystem and to hbase:meta.
    * Does not assign.
    */
-  void fixHoles(CatalogJanitor.Report report) throws IOException {
-    List<Pair<RegionInfo, RegionInfo>> holes = report.getHoles();
+  void fixHoles(CatalogJanitor.Report report) {
+    final List<Pair<RegionInfo, RegionInfo>> holes = report.getHoles();
     if (holes.isEmpty()) {
-      LOG.debug("No holes.");
+      LOG.info("CatalogJanitor Report contains no holes to fix. Skipping.");
       return;
     }
-    for (Pair<RegionInfo, RegionInfo> p: holes) {
-      RegionInfo ri = getHoleCover(p);
-      if (ri == null) {
-        continue;
-      }
-      Configuration configuration = this.masterServices.getConfiguration();
-      HRegion.createRegionDir(configuration, ri, FSUtils.getRootDir(configuration));
-      // If an error here, then we'll have a region in the filesystem but not
-      // in hbase:meta (if the below fails). Should be able to rerun the fix.
-      // Add to hbase:meta and then update in-memory state so it knows of new
-      // Region; addRegionToMeta adds region and adds a state column set to CLOSED.
-      MetaTableAccessor.addRegionToMeta(this.masterServices.getConnection(), ri);
-      this.masterServices.getAssignmentManager().getRegionStates().
-          updateRegionState(ri, RegionState.State.CLOSED);
-      LOG.info("Fixed hole by adding {} in CLOSED state; region NOT assigned (assign to ONLINE).",
-          ri);
-    }
+
+    LOG.info("Identified {} region holes to fix. Detailed fixup progress logged at DEBUG.",
+      holes.size());
+
+    final List<RegionInfo> newRegionInfos = createRegionInfosForHoles(holes);
+    final List<RegionInfo> newMetaEntries = createMetaEntries(masterServices, newRegionInfos);
+    final TransitRegionStateProcedure[] assignProcedures = masterServices
+      .getAssignmentManager()
+      .createRoundRobinAssignProcedures(newMetaEntries);
+
+    masterServices.getMasterProcedureExecutor().submitProcedures(assignProcedures);
+    LOG.info(
 
 Review comment:
   Superfluous? Doesn't procedure spew out logs itself?

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services