Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
-
Reviewed
-
Introduced a new config key for the snapshot taking/restoring operations at master side: hbase.master.executor.snapshot.threads, its default value is 3. means we can have 3 snapshot operations running at the same time.
Description
In EventType class, we have the following definition, means taking snapshot & restoring snapshot are use the MASTER_TABLE_OPERATIONS Executor now.
/** * Messages originating from Client to Master.<br> * C_M_SNAPSHOT_TABLE<br> * Client asking Master to snapshot an offline table. */ C_M_SNAPSHOT_TABLE (48, ExecutorType.MASTER_TABLE_OPERATIONS), /** * Messages originating from Client to Master.<br> * C_M_RESTORE_SNAPSHOT<br> * Client asking Master to restore a snapshot. */ C_M_RESTORE_SNAPSHOT (49, ExecutorType.MASTER_TABLE_OPERATIONS),
But when I checked the MASTER_TABLE_OPERATIONS thread pool initialization, I see :
private void startServiceThreads() throws IOException{ // ... some other code initializing .... // We depend on there being only one instance of this executor running // at a time. To do concurrency, would need fencing of enable/disable of // tables. // Any time changing this maxThreads to > 1, pls see the comment at // AccessController#postCompletedCreateTableAction this.executorService.startExecutorService(ExecutorType.MASTER_TABLE_OPERATIONS, 1); startProcedureExecutor();
That's to say, for CPs enable or disable table sequencely, we will create a ThreadPoolExecutor with threadPoolSize=1. Then we actually cann't accomplish the snapshoting concurrence even if they are total difference tables, says if there are two table snapshoting request, and the Table A cost 5min for snapshoting, then the Table B need to wait 5min and once Table A finish its snapshot , then Table B will start the snapshot.
While we've setting the snapshot timeout, so it will be easy to timeout for table B snapshoting . Actually, we can create a separate thead pool for snapshot operations only.
Attachments
Issue Links
- breaks
-
HBASE-22901 TestFlushSnapshotFromClient is failing
- Resolved
- is related to
-
HBASE-22882 TestFlushSnapshotFromClient#testConcurrentSnapshottingAttempts is flakey (was written flakey)
- Resolved
- links to