@InterfaceAudience.Private public class SplitTableRegionProcedure extends AbstractStateMachineRegionProcedure<org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState>
Throws exception on construction if determines context hostile to spllt (cluster going down or master is shutting down or table is disabled).
| Modifier and Type | Class and Description |
|---|---|
private class |
SplitTableRegionProcedure.StoreFileSplitter
Utility class used to do the file splitting / reference writing
in parallel instead of sequentially.
|
StateMachineProcedure.FlowProcedure.LockStateTableProcedureInterface.TableOperationType| Modifier and Type | Field and Description |
|---|---|
private byte[] |
bestSplitRow |
private RegionInfo |
daughter_1_RI |
private RegionInfo |
daughter_2_RI |
private static RegionState.State[] |
EXPECTED_SPLIT_STATES |
private static org.slf4j.Logger |
LOG |
private RegionSplitPolicy |
splitPolicy |
private Boolean |
traceEnabled |
stateCountNO_PROC_ID, NO_TIMEOUT| Constructor and Description |
|---|
SplitTableRegionProcedure() |
SplitTableRegionProcedure(MasterProcedureEnv env,
RegionInfo regionToSplit,
byte[] splitRow) |
| Modifier and Type | Method and Description |
|---|---|
protected boolean |
abort(MasterProcedureEnv env)
The abort() call is asynchronous and each procedure must decide how to deal
with it, if they want to be abortable.
|
private void |
assertReferenceFileCount(org.apache.hadoop.fs.FileSystem fs,
int expectedReferenceFileCount,
org.apache.hadoop.fs.Path dir) |
private void |
checkSplittable(MasterProcedureEnv env,
RegionInfo regionToSplit,
byte[] splitRow)
Check whether the region is splittable
|
private AssignProcedure[] |
createAssignProcedures(MasterProcedureEnv env,
int regionReplication) |
void |
createDaughterRegions(MasterProcedureEnv env)
Create daughter regions
|
private UnassignProcedure[] |
createUnassignProcedures(MasterProcedureEnv env,
int regionReplication) |
protected void |
deserializeStateData(ProcedureStateSerializer serializer)
Called on store load to allow the user to decode the previously serialized
state.
|
protected StateMachineProcedure.Flow |
executeFromState(MasterProcedureEnv env,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState state)
called to perform a single step of the specified 'state' of the procedure
|
private static long |
getDaughterRegionIdTimestamp(RegionInfo hri)
Calculate daughter regionid to use.
|
protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState |
getInitialState()
Return the initial state object that will be used for the first call to executeFromState().
|
private RegionInfo |
getParentRegion() |
private ServerName |
getParentRegionServerName(MasterProcedureEnv env) |
protected ProcedureMetrics |
getProcedureMetrics(MasterProcedureEnv env)
Override this method to provide procedure specific counters for submitted count, failed
count and time histogram.
|
private int |
getRegionReplication(MasterProcedureEnv env) |
private byte[] |
getSplitRow() |
protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState |
getState(int stateId)
Convert an ordinal (or state id) to an Enum (or more descriptive) state object.
|
protected int |
getStateId(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState state)
Convert the Enum (or more descriptive) state object to an ordinal (or state id).
|
TableProcedureInterface.TableOperationType |
getTableOperationType()
Given an operation type we can take decisions about what to do with pending operations.
|
(package private) static boolean |
hasRecoveredEdits(MasterProcedureEnv env,
RegionInfo ri)
Check whether there are recovered.edits in the parent closed region.
|
protected boolean |
isRollbackSupported(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState state)
Used by the default implementation of abort() to know if the current state can be aborted
and rollback can be triggered.
|
private boolean |
isTraceEnabled()
The procedure could be restarted from a different machine.
|
private void |
openParentRegion(MasterProcedureEnv env)
Rollback close parent region
|
private void |
postRollBackSplitRegion(MasterProcedureEnv env)
Action after rollback a split table region action.
|
private void |
postSplitRegion(MasterProcedureEnv env)
Post split region actions
|
boolean |
prepareSplitRegion(MasterProcedureEnv env)
Prepare to Split region.
|
private void |
preSplitRegion(MasterProcedureEnv env)
Action before splitting region in a table.
|
private void |
preSplitRegionAfterMETA(MasterProcedureEnv env)
Pre split region actions after the Point-of-No-Return step
|
private void |
preSplitRegionBeforeMETA(MasterProcedureEnv env)
Post split region actions before the Point-of-No-Return step
|
protected void |
rollbackState(MasterProcedureEnv env,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState state)
To rollback
SplitTableRegionProcedure, an AssignProcedure is asynchronously
submitted for parent region to be split (rollback doesn't wait on the completion of the
AssignProcedure) . |
protected void |
serializeStateData(ProcedureStateSerializer serializer)
The user-level code of the procedure may have some state to
persist (e.g.
|
private Pair<org.apache.hadoop.fs.Path,org.apache.hadoop.fs.Path> |
splitStoreFile(HRegionFileSystem regionFs,
byte[] family,
HStoreFile sf) |
private Pair<Integer,Integer> |
splitStoreFiles(MasterProcedureEnv env,
HRegionFileSystem regionFs)
Create Split directory
|
void |
toStringClassDetails(StringBuilder sb)
Extend the toString() information with the procedure details
e.g.
|
private void |
updateMetaForDaughterRegions(MasterProcedureEnv env)
Add daughter regions to META
|
private void |
writeMaxSequenceIdFile(MasterProcedureEnv env) |
acquireLock, checkTableModifiable, getRegion, getTableName, holdLock, releaseLock, setFailure, setRegioncheckOnline, getRegionDir, getUser, getWALRegionDir, preflightChecks, releaseSyncLatch, setUser, waitInitializedaddChildProcedure, execute, failIfAborted, getCurrentState, getCurrentStateId, getCycles, isEofState, isYieldAfterExecutionStep, isYieldBeforeExecuteFromState, rollback, setNextState, toStringStateaddStackIndex, afterReplay, beforeReplay, bypass, compareTo, completionCleanup, doExecute, doRollback, elapsedTime, getChildrenLatch, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcId, getProcIdHashCode, getProcName, getResult, getRootProcedureId, getRootProcId, getStackIndexes, getState, getSubmittedTime, getTimeout, getTimeoutTimestamp, hasChildren, hasException, hasLock, hasOwner, hasParent, hasTimeout, haveSameParent, incChildrenLatch, isBypass, isFailed, isFinished, isInitializing, isLockedWhenLoading, isRunnable, isSuccess, isWaiting, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setLastUpdate, setNonceKey, setOwner, setOwner, setParentProcId, setProcId, setResult, setRootProcId, setStackIndexes, setState, setSubmittedTime, setTimeout, setTimeoutFailure, shouldWaitClientAck, skipPersistence, toString, toStringClass, toStringDetails, toStringSimpleSB, updateMetricsOnFinish, updateMetricsOnSubmit, updateTimestamp, wasExecutedprivate static final org.slf4j.Logger LOG
private Boolean traceEnabled
private RegionInfo daughter_1_RI
private RegionInfo daughter_2_RI
private byte[] bestSplitRow
private RegionSplitPolicy splitPolicy
private static final RegionState.State[] EXPECTED_SPLIT_STATES
public SplitTableRegionProcedure()
public SplitTableRegionProcedure(MasterProcedureEnv env, RegionInfo regionToSplit, byte[] splitRow) throws IOException
IOExceptionstatic boolean hasRecoveredEdits(MasterProcedureEnv env, RegionInfo ri) throws IOException
env - master envIOException - IOExceptionprivate void checkSplittable(MasterProcedureEnv env, RegionInfo regionToSplit, byte[] splitRow) throws IOException
env - MasterProcedureEnvregionToSplit - parent Region to be splitsplitRow - if splitRow is not specified, will first try to get bestSplitRow from RSIOExceptionprivate static long getDaughterRegionIdTimestamp(RegionInfo hri)
hri - Parent RegionInfoprotected StateMachineProcedure.Flow executeFromState(MasterProcedureEnv env, org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState state) throws InterruptedException
StateMachineProcedureexecuteFromState in class StateMachineProcedure<MasterProcedureEnv,org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState>state - state to executeInterruptedExceptionprotected void rollbackState(MasterProcedureEnv env, org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState state) throws IOException, InterruptedException
SplitTableRegionProcedure, an AssignProcedure is asynchronously
submitted for parent region to be split (rollback doesn't wait on the completion of the
AssignProcedure) . This can be improved by changing rollback() to support sub-procedures.
See HBASE-19851 for details.rollbackState in class StateMachineProcedure<MasterProcedureEnv,org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState>state - state to rollbackIOException - temporary failure, the rollback will retry laterInterruptedExceptionprotected boolean isRollbackSupported(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState state)
StateMachineProcedureisRollbackSupported in class StateMachineProcedure<MasterProcedureEnv,org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState getState(int stateId)
StateMachineProceduregetState in class StateMachineProcedure<MasterProcedureEnv,org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState>stateId - the ordinal() of the state enum (or state id)protected int getStateId(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState state)
StateMachineProceduregetStateId in class StateMachineProcedure<MasterProcedureEnv,org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState>state - the state enum objectprotected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState getInitialState()
StateMachineProceduregetInitialState in class StateMachineProcedure<MasterProcedureEnv,org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState>protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException
ProcedureserializeStateData in class AbstractStateMachineRegionProcedure<org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState>serializer - stores the serializable stateIOExceptionprotected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException
ProceduredeserializeStateData in class AbstractStateMachineRegionProcedure<org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState>serializer - contains the serialized stateIOExceptionpublic void toStringClassDetails(StringBuilder sb)
ProceduretoStringClassDetails in class AbstractStateMachineRegionProcedure<org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState>sb - the string builder to use to append the proc specific informationprivate RegionInfo getParentRegion()
public TableProcedureInterface.TableOperationType getTableOperationType()
TableProcedureInterfacegetTableOperationType in interface TableProcedureInterfacegetTableOperationType in class AbstractStateMachineRegionProcedure<org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState>protected ProcedureMetrics getProcedureMetrics(MasterProcedureEnv env)
ProceduregetProcedureMetrics in class Procedure<MasterProcedureEnv>env - The environment passed to the procedure executorprivate byte[] getSplitRow()
public boolean prepareSplitRegion(MasterProcedureEnv env) throws IOException
env - MasterProcedureEnvIOExceptionprivate void preSplitRegion(MasterProcedureEnv env) throws IOException, InterruptedException
env - MasterProcedureEnvIOExceptionInterruptedExceptionprivate void postRollBackSplitRegion(MasterProcedureEnv env) throws IOException
env - MasterProcedureEnvIOExceptionprivate void openParentRegion(MasterProcedureEnv env) throws IOException
env - MasterProcedureEnvIOExceptionpublic void createDaughterRegions(MasterProcedureEnv env) throws IOException
env - MasterProcedureEnvIOExceptionprivate Pair<Integer,Integer> splitStoreFiles(MasterProcedureEnv env, HRegionFileSystem regionFs) throws IOException
env - MasterProcedureEnvIOExceptionprivate void assertReferenceFileCount(org.apache.hadoop.fs.FileSystem fs, int expectedReferenceFileCount, org.apache.hadoop.fs.Path dir) throws IOException
IOExceptionprivate Pair<org.apache.hadoop.fs.Path,org.apache.hadoop.fs.Path> splitStoreFile(HRegionFileSystem regionFs, byte[] family, HStoreFile sf) throws IOException
IOExceptionprivate void preSplitRegionBeforeMETA(MasterProcedureEnv env) throws IOException, InterruptedException
env - MasterProcedureEnvIOExceptionInterruptedExceptionprivate void updateMetaForDaughterRegions(MasterProcedureEnv env) throws IOException
env - MasterProcedureEnvIOExceptionprivate void preSplitRegionAfterMETA(MasterProcedureEnv env) throws IOException, InterruptedException
env - MasterProcedureEnvIOExceptionInterruptedExceptionprivate void postSplitRegion(MasterProcedureEnv env) throws IOException
env - MasterProcedureEnvIOExceptionprivate ServerName getParentRegionServerName(MasterProcedureEnv env)
private UnassignProcedure[] createUnassignProcedures(MasterProcedureEnv env, int regionReplication)
private AssignProcedure[] createAssignProcedures(MasterProcedureEnv env, int regionReplication)
private int getRegionReplication(MasterProcedureEnv env) throws IOException
IOExceptionprivate void writeMaxSequenceIdFile(MasterProcedureEnv env) throws IOException
IOExceptionprivate boolean isTraceEnabled()
protected boolean abort(MasterProcedureEnv env)
ProcedureNOTE: abort() is not like Thread.interrupt(). It is just a notification that allows the procedure implementor abort.
abort in class StateMachineProcedure<MasterProcedureEnv,org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState>Copyright © 2007–2019 The Apache Software Foundation. All rights reserved.