@InterfaceAudience.Private public abstract class RegionTransitionProcedure extends Procedure<MasterProcedureEnv> implements TableProcedureInterface, RemoteProcedureDispatcher.RemoteProcedure<MasterProcedureEnv,ServerName>
This procedure is asynchronous and responds to external events. The AssignmentManager will notify this procedure when the RS completes the operation and reports the transitioned state (see the Assign and Unassign class for more detail).
Procedures move from the REGION_TRANSITION_QUEUE state when they are first submitted, to the REGION_TRANSITION_DISPATCH state when the request to remote server is sent and the Procedure is suspended waiting on external event to be woken again. Once the external event is triggered, Procedure moves to the REGION_TRANSITION_FINISH state.
NOTE: AssignProcedure and UnassignProcedure should not be thought of
as being asymmetric, at least currently.
AssignProcedure moves through all the above described states and implements methods
associated with each while UnassignProcedure starts at state
REGION_TRANSITION_DISPATCH and state REGION_TRANSITION_QUEUE is not supported.AssignProcedure fails, failure handler
AssignProcedure#handleFailure(MasterProcedureEnv, RegionStateNode) re-attempts the
assignment by setting the procedure state to REGION_TRANSITION_QUEUE and forces
assignment to a different target server by setting AssignProcedure.forceNewPlan. When
the number of attempts reaches threshold configuration 'hbase.assignment.maximum.attempts',
the procedure is aborted. For UnassignProcedure, similar re-attempts are
intentionally not implemented. It is a 'one shot' procedure. See its class doc for how it
handles failure.
regionInfo.
TODO: Considering it is a priority doing all we can to get make a region available as soon as
possible, re-attempting with any target makes sense if specified target fails in case of
AssignProcedure. For UnassignProcedure, our concern is preventing data loss
on failed unassign. See class doc for explanation.
Procedure.LockStateTableProcedureInterface.TableOperationType| 限定符和类型 | 字段和说明 |
|---|---|
protected AtomicBoolean |
aborted |
NO_PROC_ID, NO_TIMEOUT| 构造器和说明 |
|---|
RegionTransitionProcedure() |
RegionTransitionProcedure(RegionInfo regionInfo,
boolean override) |
addStackIndex, afterReplay, beforeReplay, compareTo, completionCleanup, deserializeStateData, doExecute, doRollback, elapsedTime, getChildrenLatch, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcedureMetrics, 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, isYieldAfterExecutionStep, removeStackIndex, serializeStateData, setAbortFailure, setChildrenLatch, setFailure, setFailure, setLastUpdate, setNonceKey, setOwner, setOwner, setParentProcId, setProcId, setResult, setRootProcId, setStackIndexes, setState, setSubmittedTime, setTimeout, skipPersistence, toString, toStringClass, toStringDetails, toStringSimpleSB, updateMetricsOnFinish, updateMetricsOnSubmit, updateTimestamp, wasExecutedclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitgetTableOperationTypeprotected final AtomicBoolean aborted
public RegionTransitionProcedure()
public RegionTransitionProcedure(RegionInfo regionInfo, boolean override)
public RegionInfo getRegionInfo()
protected void setRegionInfo(RegionInfo regionInfo)
Procedure.deserializeStateData(ProcedureStateSerializer) method. Expectation is that
subclasses will persist `regioninfo` in their
Procedure.serializeStateData(ProcedureStateSerializer) method and then restore `regionInfo` on
deserialization by calling this.protected void setOverride(boolean override)
Procedure.deserializeStateData(ProcedureStateSerializer) method. Expectation is that
subclasses will persist `override` in their
Procedure.serializeStateData(ProcedureStateSerializer) method and then restore `override` on
deserialization by calling this.protected void setAttempt(int attempt)
Procedure.deserializeStateData(ProcedureStateSerializer) method.protected int getAttempt()
public TableName getTableName()
getTableName 在接口中 TableProcedureInterfacepublic boolean isMeta()
public void toStringClassDetails(StringBuilder sb)
public RegionStates.RegionStateNode getRegionState(MasterProcedureEnv env)
protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState getTransitionState()
protected abstract boolean startTransition(MasterProcedureEnv env, RegionStates.RegionStateNode regionNode) throws IOException, ProcedureSuspendedException
protected abstract boolean updateTransition(MasterProcedureEnv env, RegionStates.RegionStateNode regionNode) throws IOException, ProcedureSuspendedException
protected abstract void finishTransition(MasterProcedureEnv env, RegionStates.RegionStateNode regionNode) throws IOException, ProcedureSuspendedException
protected abstract void reportTransition(MasterProcedureEnv env, RegionStates.RegionStateNode regionNode, org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode code, long seqId) throws UnexpectedStateException
public abstract RemoteProcedureDispatcher.RemoteOperation remoteCallBuild(MasterProcedureEnv env, ServerName serverName)
protected abstract boolean remoteCallFailed(MasterProcedureEnv env, RegionStates.RegionStateNode regionNode, IOException exception)
public boolean remoteCallFailed(MasterProcedureEnv env, ServerName serverName, IOException exception)
protected boolean addToRemoteDispatcher(MasterProcedureEnv env, ServerName targetServer)
protected void reportTransition(MasterProcedureEnv env, ServerName serverName, org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode code, long seqId) throws UnexpectedStateException
protected boolean isServerOnline(MasterProcedureEnv env, RegionStates.RegionStateNode regionNode)
protected boolean isServerOnline(MasterProcedureEnv env, ServerName serverName)
protected void toStringState(StringBuilder builder)
toStringState 在类中 Procedure<MasterProcedureEnv>protected Procedure[] execute(MasterProcedureEnv env) throws ProcedureSuspendedException
execute 在类中 Procedure<MasterProcedureEnv>ProcedureSuspendedExceptionprotected boolean setTimeoutFailure(MasterProcedureEnv env)
setTimeoutFailure 在类中 Procedure<MasterProcedureEnv>protected void rollback(MasterProcedureEnv env)
rollback 在类中 Procedure<MasterProcedureEnv>protected abstract boolean isRollbackSupported(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState state)
protected boolean abort(MasterProcedureEnv env)
abort 在类中 Procedure<MasterProcedureEnv>protected boolean waitInitialized(MasterProcedureEnv env)
waitInitialized 在类中 Procedure<MasterProcedureEnv>protected Procedure.LockState acquireLock(MasterProcedureEnv env)
acquireLock 在类中 Procedure<MasterProcedureEnv>protected void releaseLock(MasterProcedureEnv env)
releaseLock 在类中 Procedure<MasterProcedureEnv>protected boolean holdLock(MasterProcedureEnv env)
holdLock 在类中 Procedure<MasterProcedureEnv>protected boolean shouldWaitClientAck(MasterProcedureEnv env)
public abstract ServerName getServer(MasterProcedureEnv env)
public void remoteOperationCompleted(MasterProcedureEnv env)
public void remoteOperationFailed(MasterProcedureEnv env, RemoteProcedureException error)
protected void bypass(MasterProcedureEnv env)
bypass 在类中 Procedure<MasterProcedureEnv>Copyright © 2007–2019 The Apache Software Foundation. All rights reserved.