@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| Modifier and Type | Field and Description |
|---|---|
protected AtomicBoolean |
aborted |
NO_PROC_ID, NO_TIMEOUT| Constructor and Description |
|---|
RegionTransitionProcedure() |
RegionTransitionProcedure(RegionInfo regionInfo) |
addStackIndex, afterReplay, beforeReplay, compareTo, completionCleanup, deserializeStateData, doAcquireLock, doExecute, doReleaseLock, doRollback, elapsedTime, getChildrenLatch, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcedureMetrics, getProcId, getProcIdHashCode, getProcName, getResult, getRootProcedureId, getRootProcId, getStackIndexes, getState, getSubmittedTime, getTimeout, getTimeoutTimestamp, hasChildren, hasException, hasOwner, hasParent, hasTimeout, haveSameParent, incChildrenLatch, isFailed, isFinished, isInitializing, isRunnable, isSuccess, isWaiting, isYieldAfterExecutionStep, removeStackIndex, serializeStateData, setAbortFailure, setChildrenLatch, setFailure, setFailure, setLastUpdate, setNonceKey, setOwner, setOwner, setParentProcId, setProcId, setResult, setRootProcId, setStackIndexes, setState, setSubmittedTime, setTimeout, 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)
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.protected void setAttempt(int attempt)
Procedure.deserializeStateData(ProcedureStateSerializer) method.setRegionInfo(RegionInfo)protected int getAttempt()
public TableName getTableName()
getTableName in interface TableProcedureInterfacepublic boolean isMeta()
public void toStringClassDetails(StringBuilder sb)
toStringClassDetails in class Procedure<MasterProcedureEnv>public RegionStates.RegionStateNode getRegionState(MasterProcedureEnv env)
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
UnexpectedStateExceptionpublic abstract RemoteProcedureDispatcher.RemoteOperation remoteCallBuild(MasterProcedureEnv env, ServerName serverName)
remoteCallBuild in interface RemoteProcedureDispatcher.RemoteProcedure<MasterProcedureEnv,ServerName>protected abstract boolean remoteCallFailed(MasterProcedureEnv env, RegionStates.RegionStateNode regionNode, IOException exception)
public void remoteCallCompleted(MasterProcedureEnv env, ServerName serverName, RemoteProcedureDispatcher.RemoteOperation response)
remoteCallCompleted in interface RemoteProcedureDispatcher.RemoteProcedure<MasterProcedureEnv,ServerName>public void remoteCallFailed(MasterProcedureEnv env, ServerName serverName, IOException exception)
remoteCallFailed in interface RemoteProcedureDispatcher.RemoteProcedure<MasterProcedureEnv,ServerName>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
UnexpectedStateExceptionprotected boolean isServerOnline(MasterProcedureEnv env, RegionStates.RegionStateNode regionNode)
protected boolean isServerOnline(MasterProcedureEnv env, ServerName serverName)
protected void toStringState(StringBuilder builder)
toStringState in class Procedure<MasterProcedureEnv>protected Procedure[] execute(MasterProcedureEnv env) throws ProcedureSuspendedException
execute in class Procedure<MasterProcedureEnv>ProcedureSuspendedExceptionprotected boolean setTimeoutFailure(MasterProcedureEnv env)
setTimeoutFailure in class Procedure<MasterProcedureEnv>protected void rollback(MasterProcedureEnv env)
rollback in class Procedure<MasterProcedureEnv>protected abstract boolean isRollbackSupported(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState state)
protected boolean abort(MasterProcedureEnv env)
abort in class Procedure<MasterProcedureEnv>protected Procedure.LockState acquireLock(MasterProcedureEnv env)
acquireLock in class Procedure<MasterProcedureEnv>protected void releaseLock(MasterProcedureEnv env)
releaseLock in class Procedure<MasterProcedureEnv>protected boolean holdLock(MasterProcedureEnv env)
holdLock in class Procedure<MasterProcedureEnv>protected boolean hasLock(MasterProcedureEnv env)
hasLock in class Procedure<MasterProcedureEnv>protected boolean shouldWaitClientAck(MasterProcedureEnv env)
shouldWaitClientAck in class Procedure<MasterProcedureEnv>public abstract ServerName getServer(MasterProcedureEnv env)
Copyright © 2007–2018 The Apache Software Foundation. All rights reserved.