frostruan commented on a change in pull request #4115:
URL: https://github.com/apache/hbase/pull/4115#discussion_r814902123
##########
File path:
hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/SnapshotManager.java
##########
@@ -1214,11 +1358,27 @@ public void initialize(MasterServices master,
MetricsMaster metricsMaster) throw
this.coordinator = new ProcedureCoordinator(comms, tpool, timeoutMillis,
wakeFrequency);
this.executorService = master.getExecutorService();
+ this.verifyWorkerAssigner = new WorkerAssigner(master,
+ conf.getInt("hbase.snapshot.verify.task.max", 3),
+ new ProcedureEvent<>("snapshot-verify-worker-assigning"));
+ restoreUnfinishedSnapshotProcedure();
+ restoreWorkers();
resetTempDir();
snapshotHandlerChoreCleanerTask =
scheduleThreadPool.scheduleAtFixedRate(this::cleanupSentinels, 10, 10,
TimeUnit.SECONDS);
}
+ private void restoreUnfinishedSnapshotProcedure() {
Review comment:
Yes. I also think that it is the most elegant way to restore the procid
in afterReplay method, but because of the startup order of master, there will
be a NPE problem if we do that.
We can see the startup order in HMaster#finishActiveMasterInitialization().
1. we replay procedures in the method HMaster#createProcedureExecutor()
2. we create the snapshot manager instance in the method
HMaster#initializeZKBasedSystemTrackers()
3. we start the procedure executor in the method
HMaster#startServiceThreads()
Since these three methods are executed in the same thread, so I think it's
safe here.
--
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.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]