z3n3r commented on a change in pull request #2445:
URL: https://github.com/apache/hbase/pull/2445#discussion_r506779022
##########
File path:
hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignmentManager.java
##########
@@ -1926,6 +2225,27 @@ public void markRegionAsMerged(final RegionInfo child,
final ServerName serverNa
}
TableDescriptor td = master.getTableDescriptors().get(child.getTable());
regionStateStore.mergeRegions(child, mergeParents, serverName, td);
+
+ //Split meta assignment event
+ if (td.isMetaTable()) {
+ ProcedureEvent<?> parentEvent[] = new
ProcedureEvent[mergeParents.length];
+ for (int i=0; i<parentEvent.length; i++) {
+ parentEvent[i] = metaAssignEventMap.get(mergeParents[i].getStartKey());
+ }
+
+ metaAssignEventMap.put(child.getStartKey(),
+ new ProcedureEvent<>("meta assign: " + child.getRegionNameAsString()));
+
+ //wake the procedures waiting on parent event, the procedures will awaken
+ //and wait on newly created child event
+ for (int i= mergeParents.length-1; i>=1; i--) {
+ metaAssignEventMap.remove(mergeParents[i].getStartKey());
+ parentEvent[i].wake(getProcedureScheduler());
+ }
+ //for the first key we don't remove since we already replaced it
+ parentEvent[0].wake(getProcedureScheduler());
+ }
+
if (shouldAssignFavoredNodes(child)) {
getFavoredNodePromoter().generateFavoredNodesForMergedRegion(child,
mergeParents);
}
Review comment:
That's true today tho? Or I'm missing something? Let me know so I can
see if that scenario is covered in UT.
##########
File path:
hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java
##########
@@ -257,46 +327,62 @@ private void cleanupSplitDir(MasterProcedureEnv env) {
// old hbase:meta tenancy on this server; clean these up if any before
trying to remove the
// WAL directory of this server or we will fail. See archiveMetaLog
comment for more details
// on this condition.
-
env.getMasterServices().getMasterWalManager().archiveMetaLog(this.serverName);
+
env.getMasterServices().getMasterWalManager().archiveCatalogLog(this.serverName,
false);
}
splitWALManager.deleteWALDir(serverName);
} catch (IOException e) {
LOG.warn("Remove WAL directory for {} failed, ignore...{}", serverName,
e.getMessage());
}
}
- private boolean isSplittingDone(MasterProcedureEnv env, boolean splitMeta) {
+ private boolean isSplittingDone(MasterProcedureEnv env,
SplitWALManager.SplitType splitType) {
SplitWALManager splitWALManager =
env.getMasterServices().getSplitWALManager();
try {
- int wals = splitWALManager.getWALsToSplit(serverName, splitMeta).size();
- LOG.debug("Check if {} WAL splitting is done? wals={}, meta={}",
serverName, wals, splitMeta);
+ int wals = splitWALManager.getWALsToSplit(serverName, splitType).size();
+ LOG.debug("Check if {} WAL splitting is done? wals={}, SplitType={}",
+ serverName, wals, splitType);
return wals == 0;
} catch (IOException e) {
LOG.warn("Get WALs of {} failed, retry...", serverName, e);
return false;
}
}
- private Procedure[] createSplittingWalProcedures(MasterProcedureEnv env,
boolean splitMeta)
+ private Procedure[] createSplittingWalProcedures(MasterProcedureEnv env,
+ SplitWALManager.SplitType splitType)
throws IOException {
- LOG.info("Splitting WALs {}, isMeta: {}", this, splitMeta);
+ LOG.info("Splitting WALs {}, SplitType: {}", this, splitType);
SplitWALManager splitWALManager =
env.getMasterServices().getSplitWALManager();
- List<Procedure> procedures = splitWALManager.splitWALs(serverName,
splitMeta);
+ List<Procedure> procedures = splitWALManager.splitWALs(serverName,
splitType);
return procedures.toArray(new Procedure[procedures.size()]);
}
private boolean filterDefaultMetaRegions() {
if (regionsOnCrashedServer == null) {
return false;
}
- regionsOnCrashedServer.removeIf(this::isDefaultMetaRegion);
+ regionsOnCrashedServer.removeIf((x) -> isDefaultMetaRegion(x) ||
isDefaultRootRegion(x));
return !regionsOnCrashedServer.isEmpty();
}
+ private boolean isDefaultRootRegion(RegionInfo hri) {
+ return hri.isRootRegion() && RegionReplicaUtil.isDefaultReplica(hri);
+ }
+
private boolean isDefaultMetaRegion(RegionInfo hri) {
return hri.isMetaRegion() && RegionReplicaUtil.isDefaultReplica(hri);
}
+ private void zkCoordinatedSplitRootLogs(MasterProcedureEnv env) throws
IOException {
+ LOG.debug("Splitting root WALs {}", this);
+ MasterWalManager mwm = env.getMasterServices().getMasterWalManager();
+ AssignmentManager am = env.getMasterServices().getAssignmentManager();
+ am.getRegionStates().rootLogSplitting(serverName);
+ mwm.splitRootLog(serverName);
+ am.getRegionStates().rootLogSplit(serverName);
+ LOG.debug("Done splitting root WALs {}", this);
+ }
Review comment:
thanks will update.
----------------------------------------------------------------
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:
[email protected]