@InterfaceAudience.Private public abstract class RegionTransitionProcedure extends org.apache.hadoop.hbase.procedure2.Procedure<MasterProcedureEnv> implements TableProcedureInterface, org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure<MasterProcedureEnv,org.apache.hadoop.hbase.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.
org.apache.hadoop.hbase.procedure2.Procedure.LockStateTableProcedureInterface.TableOperationType| Modifier and Type | Field and Description |
|---|---|
protected AtomicBoolean |
aborted |
| Constructor and Description |
|---|
RegionTransitionProcedure() |
RegionTransitionProcedure(org.apache.hadoop.hbase.client.RegionInfo regionInfo,
boolean override) |
| Modifier and Type | Method and Description |
|---|---|
protected boolean |
abort(MasterProcedureEnv env) |
protected org.apache.hadoop.hbase.procedure2.Procedure.LockState |
acquireLock(MasterProcedureEnv env) |
protected boolean |
addToRemoteDispatcher(MasterProcedureEnv env,
org.apache.hadoop.hbase.ServerName targetServer)
Be careful! At the end of this method, the procedure has either succeeded
and this procedure has been set into a suspended state OR, we failed and
this procedure has been put back on the scheduler ready for another worker
to pick it up.
|
protected void |
bypass(MasterProcedureEnv env) |
protected org.apache.hadoop.hbase.procedure2.Procedure[] |
execute(MasterProcedureEnv env) |
protected abstract void |
finishTransition(MasterProcedureEnv env,
RegionStates.RegionStateNode regionNode) |
protected int |
getAttempt() |
org.apache.hadoop.hbase.client.RegionInfo |
getRegionInfo() |
RegionStates.RegionStateNode |
getRegionState(MasterProcedureEnv env) |
abstract org.apache.hadoop.hbase.ServerName |
getServer(MasterProcedureEnv env)
Used by ServerCrashProcedure to see if this Assign/Unassign needs processing.
|
org.apache.hadoop.hbase.TableName |
getTableName() |
protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState |
getTransitionState() |
protected boolean |
holdLock(MasterProcedureEnv env) |
boolean |
isMeta() |
protected abstract boolean |
isRollbackSupported(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState state) |
protected boolean |
isServerOnline(MasterProcedureEnv env,
RegionStates.RegionStateNode regionNode) |
protected boolean |
isServerOnline(MasterProcedureEnv env,
org.apache.hadoop.hbase.ServerName serverName) |
protected void |
releaseLock(MasterProcedureEnv env) |
abstract org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteOperation |
remoteCallBuild(MasterProcedureEnv env,
org.apache.hadoop.hbase.ServerName serverName) |
protected abstract boolean |
remoteCallFailed(MasterProcedureEnv env,
RegionStates.RegionStateNode regionNode,
IOException exception) |
boolean |
remoteCallFailed(MasterProcedureEnv env,
org.apache.hadoop.hbase.ServerName serverName,
IOException exception) |
void |
remoteOperationCompleted(MasterProcedureEnv env) |
void |
remoteOperationFailed(MasterProcedureEnv env,
org.apache.hadoop.hbase.procedure2.RemoteProcedureException error) |
protected abstract void |
reportTransition(MasterProcedureEnv env,
RegionStates.RegionStateNode regionNode,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode code,
long seqId) |
protected void |
reportTransition(MasterProcedureEnv env,
org.apache.hadoop.hbase.ServerName serverName,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode code,
long seqId) |
protected void |
rollback(MasterProcedureEnv env) |
protected void |
setAttempt(int attempt)
This setter is for subclasses to call in their
Procedure.deserializeStateData(ProcedureStateSerializer) method. |
protected void |
setOverride(boolean override)
This setter is for subclasses to call in their
Procedure.deserializeStateData(ProcedureStateSerializer) method. |
protected void |
setRegionInfo(org.apache.hadoop.hbase.client.RegionInfo regionInfo)
This setter is for subclasses to call in their
Procedure.deserializeStateData(ProcedureStateSerializer) method. |
protected boolean |
setTimeoutFailure(MasterProcedureEnv env)
At end of timeout, wake ourselves up so we run again.
|
protected boolean |
shouldWaitClientAck(MasterProcedureEnv env) |
protected abstract boolean |
startTransition(MasterProcedureEnv env,
RegionStates.RegionStateNode regionNode) |
void |
toStringClassDetails(StringBuilder sb) |
protected void |
toStringState(StringBuilder builder) |
protected abstract boolean |
updateTransition(MasterProcedureEnv env,
RegionStates.RegionStateNode regionNode)
Called when the Procedure is in the REGION_TRANSITION_DISPATCH state.
|
protected boolean |
waitInitialized(MasterProcedureEnv env) |
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(org.apache.hadoop.hbase.client.RegionInfo regionInfo,
boolean override)
public org.apache.hadoop.hbase.client.RegionInfo getRegionInfo()
protected void setRegionInfo(org.apache.hadoop.hbase.client.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.setRegionInfo(RegionInfo)protected int getAttempt()
public org.apache.hadoop.hbase.TableName getTableName()
getTableName in interface TableProcedureInterfacepublic boolean isMeta()
public void toStringClassDetails(StringBuilder sb)
toStringClassDetails in class org.apache.hadoop.hbase.procedure2.Procedure<MasterProcedureEnv>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, org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException
IOExceptionorg.apache.hadoop.hbase.procedure2.ProcedureSuspendedExceptionprotected abstract boolean updateTransition(MasterProcedureEnv env, RegionStates.RegionStateNode regionNode) throws IOException, org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException
IOExceptionorg.apache.hadoop.hbase.procedure2.ProcedureSuspendedExceptionprotected abstract void finishTransition(MasterProcedureEnv env, RegionStates.RegionStateNode regionNode) throws IOException, org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException
IOExceptionorg.apache.hadoop.hbase.procedure2.ProcedureSuspendedExceptionprotected abstract void reportTransition(MasterProcedureEnv env, RegionStates.RegionStateNode regionNode, org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode code, long seqId) throws org.apache.hadoop.hbase.exceptions.UnexpectedStateException
org.apache.hadoop.hbase.exceptions.UnexpectedStateExceptionpublic abstract org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteOperation remoteCallBuild(MasterProcedureEnv env, org.apache.hadoop.hbase.ServerName serverName)
remoteCallBuild in interface org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure<MasterProcedureEnv,org.apache.hadoop.hbase.ServerName>protected abstract boolean remoteCallFailed(MasterProcedureEnv env, RegionStates.RegionStateNode regionNode, IOException exception)
public boolean remoteCallFailed(MasterProcedureEnv env, org.apache.hadoop.hbase.ServerName serverName, IOException exception)
remoteCallFailed in interface org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure<MasterProcedureEnv,org.apache.hadoop.hbase.ServerName>protected boolean addToRemoteDispatcher(MasterProcedureEnv env, org.apache.hadoop.hbase.ServerName targetServer)
protected void reportTransition(MasterProcedureEnv env, org.apache.hadoop.hbase.ServerName serverName, org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode code, long seqId) throws org.apache.hadoop.hbase.exceptions.UnexpectedStateException
org.apache.hadoop.hbase.exceptions.UnexpectedStateExceptionprotected boolean isServerOnline(MasterProcedureEnv env, RegionStates.RegionStateNode regionNode)
protected boolean isServerOnline(MasterProcedureEnv env, org.apache.hadoop.hbase.ServerName serverName)
protected void toStringState(StringBuilder builder)
toStringState in class org.apache.hadoop.hbase.procedure2.Procedure<MasterProcedureEnv>protected org.apache.hadoop.hbase.procedure2.Procedure[] execute(MasterProcedureEnv env) throws org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException
execute in class org.apache.hadoop.hbase.procedure2.Procedure<MasterProcedureEnv>org.apache.hadoop.hbase.procedure2.ProcedureSuspendedExceptionprotected boolean setTimeoutFailure(MasterProcedureEnv env)
setTimeoutFailure in class org.apache.hadoop.hbase.procedure2.Procedure<MasterProcedureEnv>protected void rollback(MasterProcedureEnv env)
rollback in class org.apache.hadoop.hbase.procedure2.Procedure<MasterProcedureEnv>protected abstract boolean isRollbackSupported(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState state)
protected boolean abort(MasterProcedureEnv env)
abort in class org.apache.hadoop.hbase.procedure2.Procedure<MasterProcedureEnv>protected boolean waitInitialized(MasterProcedureEnv env)
waitInitialized in class org.apache.hadoop.hbase.procedure2.Procedure<MasterProcedureEnv>protected org.apache.hadoop.hbase.procedure2.Procedure.LockState acquireLock(MasterProcedureEnv env)
acquireLock in class org.apache.hadoop.hbase.procedure2.Procedure<MasterProcedureEnv>protected void releaseLock(MasterProcedureEnv env)
releaseLock in class org.apache.hadoop.hbase.procedure2.Procedure<MasterProcedureEnv>protected boolean holdLock(MasterProcedureEnv env)
holdLock in class org.apache.hadoop.hbase.procedure2.Procedure<MasterProcedureEnv>protected boolean shouldWaitClientAck(MasterProcedureEnv env)
shouldWaitClientAck in class org.apache.hadoop.hbase.procedure2.Procedure<MasterProcedureEnv>public abstract org.apache.hadoop.hbase.ServerName getServer(MasterProcedureEnv env)
public void remoteOperationCompleted(MasterProcedureEnv env)
remoteOperationCompleted in interface org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure<MasterProcedureEnv,org.apache.hadoop.hbase.ServerName>public void remoteOperationFailed(MasterProcedureEnv env, org.apache.hadoop.hbase.procedure2.RemoteProcedureException error)
remoteOperationFailed in interface org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure<MasterProcedureEnv,org.apache.hadoop.hbase.ServerName>protected void bypass(MasterProcedureEnv env)
bypass in class org.apache.hadoop.hbase.procedure2.Procedure<MasterProcedureEnv>Copyright © 2007–2020 The Apache Software Foundation. All rights reserved.