@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 reach hreshold 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.
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.LockState
TableProcedureInterface.TableOperationType
Modifier and Type | Field and Description |
---|---|
protected AtomicBoolean |
aborted |
NO_PROC_ID, NO_TIMEOUT
Constructor and Description |
---|
RegionTransitionProcedure() |
RegionTransitionProcedure(HRegionInfo 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, setTimeoutFailure, toString, toStringClass, toStringDetails, toStringSimpleSB, updateMetricsOnFinish, updateMetricsOnSubmit, updateTimestamp, wasExecuted
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
getTableOperationType
protected final AtomicBoolean aborted
public RegionTransitionProcedure()
public RegionTransitionProcedure(HRegionInfo regionInfo)
public HRegionInfo getRegionInfo()
protected void setRegionInfo(HRegionInfo regionInfo)
public TableName getTableName()
getTableName
in interface TableProcedureInterface
public boolean isMeta()
public void toStringClassDetails(StringBuilder sb)
toStringClassDetails
in class Procedure<MasterProcedureEnv>
public RegionStates.RegionStateNode getRegionState(MasterProcedureEnv env)
protected void setTransitionState(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState state)
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
UnexpectedStateException
public 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
UnexpectedStateException
protected 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>
ProcedureSuspendedException
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–2017 The Apache Software Foundation. All rights reserved.