@InterfaceAudience.Private public class AssignmentManager extends Object implements ServerListener
RegionStates
.RegionStateStore
.Modifier and Type | Class and Description |
---|---|
private static class |
AssignmentManager.RegionInTransitionChore |
static class |
AssignmentManager.RegionInTransitionStat |
Constructor and Description |
---|
AssignmentManager(MasterServices master) |
AssignmentManager(MasterServices master,
RegionStateStore stateStore) |
Modifier and Type | Method and Description |
---|---|
private void |
acceptPlan(HashMap<RegionInfo,RegionStates.RegionStateNode> regions,
Map<ServerName,List<RegionInfo>> plan) |
protected boolean |
addRegionInTransition(RegionStates.RegionStateNode regionNode,
RegionTransitionProcedure procedure) |
private void |
addToPendingAssignment(HashMap<RegionInfo,RegionStates.RegionStateNode> regions,
Collection<RegionInfo> pendingRegions) |
void |
assign(RegionInfo regionInfo) |
void |
assign(RegionInfo regionInfo,
ServerName sn) |
private void |
assignQueueSignal() |
void |
checkIfShouldMoveSystemRegionAsync()
Start a new thread to check if there are region servers whose versions are higher than others.
|
private void |
checkMetaLoaded(RegionInfo hri)
Used to check if the meta loading is done.
|
(package private) void |
checkOnlineRegionsReport(RegionStates.ServerStateNode serverNode,
Set<byte[]> regionNames) |
(package private) void |
checkOnlineRegionsReportForMeta(ServerName serverName,
Set<byte[]> regionNames) |
AssignmentManager.RegionInTransitionStat |
computeRegionInTransitionStat() |
AssignProcedure |
createAssignProcedure(RegionInfo regionInfo)
Called by things like DisableTableProcedure to get a list of UnassignProcedure
to unassign the regions of the table.
|
AssignProcedure |
createAssignProcedure(RegionInfo regionInfo,
boolean override) |
AssignProcedure |
createAssignProcedure(RegionInfo regionInfo,
ServerName targetServer) |
AssignProcedure |
createAssignProcedure(RegionInfo regionInfo,
ServerName targetServer,
boolean override) |
AssignProcedure[] |
createAssignProcedures(List<RegionInfo> hris)
Create an array of AssignProcedures w/o specifying a target server.
|
private AssignProcedure[] |
createAssignProcedures(Map<ServerName,List<RegionInfo>> assignments,
int size) |
MergeTableRegionsProcedure |
createMergeProcedure(RegionInfo... ris) |
private MoveRegionProcedure |
createMoveRegionProcedure(RegionPlan plan) |
AssignProcedure[] |
createRoundRobinAssignProcedures(List<RegionInfo> hris)
Create round-robin assigns.
|
SplitTableRegionProcedure |
createSplitProcedure(RegionInfo regionToSplit,
byte[] splitKey) |
UnassignProcedure |
createUnassignProcedure(RegionInfo regionInfo) |
UnassignProcedure |
createUnassignProcedure(RegionInfo regionInfo,
boolean override) |
(package private) UnassignProcedure |
createUnassignProcedure(RegionInfo regionInfo,
ServerName destinationServer,
boolean force) |
(package private) UnassignProcedure |
createUnassignProcedure(RegionInfo regionInfo,
ServerName destinationServer,
boolean force,
boolean removeAfterUnassigning) |
(package private) UnassignProcedure[] |
createUnassignProcedures(Collection<RegionStates.RegionStateNode> nodes) |
UnassignProcedure[] |
createUnassignProcedures(TableName tableName) |
void |
deleteTable(TableName tableName)
Delete the region states.
|
List<RegionInfo> |
getAssignedRegions() |
(package private) int |
getAssignMaxAttempts() |
MetricsAssignmentManager |
getAssignmentManagerMetrics() |
private LoadBalancer |
getBalancer() |
org.apache.hadoop.conf.Configuration |
getConfiguration() |
List<ServerName> |
getExcludedServersForSystemTable()
Get a list of servers that this region cannot be assigned to.
|
List<ServerName> |
getFavoredNodes(RegionInfo regionInfo) |
(package private) MasterServices |
getMaster() |
private ProcedureEvent<?> |
getMetaAssignEvent(RegionInfo metaRegionInfo) |
private RegionInfo |
getMetaForRegion(RegionInfo regionInfo) |
RegionInfo |
getMetaRegionFromName(byte[] regionName) |
Set<RegionInfo> |
getMetaRegionSet() |
int |
getNumRegionsOpened() |
private MasterProcedureEnv |
getProcedureEnvironment() |
private MasterProcedureScheduler |
getProcedureScheduler() |
RegionInfo |
getRegionInfo(byte[] regionName) |
List<RegionStates.RegionStateNode> |
getRegionsInTransition() |
RegionStates |
getRegionStates() |
RegionStateStore |
getRegionStateStore() |
Pair<Integer,Integer> |
getReopenStatus(TableName tableName)
Used by the client (via master) to identify if all regions have the schema updates
|
Map<ServerName,Set<byte[]>> |
getRSReports() |
Map<ServerName,List<RegionInfo>> |
getSnapShotOfAssignment(Collection<RegionInfo> regions) |
private List<RegionInfo> |
getSystemTables(ServerName serverName) |
(package private) TableStateManager |
getTableStateManager() |
private void |
handleRegionOverStuckWarningThreshold(RegionInfo regionInfo) |
boolean |
hasRegionsInTransition() |
boolean |
isCarryingMeta(ServerName serverName) |
private boolean |
isCarryingRegion(ServerName serverName,
RegionInfo regionInfo) |
(package private) boolean |
isLogSplittingDone(ServerName serverName,
boolean meta)
This is a very particular check.
|
boolean |
isMetaAssigned()
Notice that, this only means the meta region is available on a RS, but the AM may still be
loading the region states from meta, so usually you need to check
isMetaLoaded() first
before checking this method, unless you can make sure that your piece of code can only be
executed after AM builds the region states. |
boolean |
isMetaLoaded()
Return whether AM finishes the meta loading, i.e, the region states rebuilding.
|
boolean |
isMetaRegion(byte[] regionName) |
private boolean |
isMetaRegion(RegionInfo regionInfo) |
boolean |
isMetaRegionInTransition() |
boolean |
isRunning() |
boolean |
isTableDisabled(TableName tableName) |
boolean |
isTableEnabled(TableName tableName) |
void |
joinCluster() |
private void |
killRegionServer(ServerName serverName) |
private void |
loadMeta() |
void |
markRegionAsClosed(RegionStates.RegionStateNode regionNode) |
void |
markRegionAsClosing(RegionStates.RegionStateNode regionNode) |
void |
markRegionAsMerged(RegionInfo child,
ServerName serverName,
RegionInfo[] mergeParents)
When called here, the merge has happened.
|
void |
markRegionAsOpened(RegionStates.RegionStateNode regionNode) |
void |
markRegionAsOpening(RegionStates.RegionStateNode regionNode) |
void |
markRegionAsSplit(RegionInfo parent,
ServerName serverName,
RegionInfo daughterA,
RegionInfo daughterB) |
void |
move(RegionInfo regionInfo) |
Future<byte[]> |
moveAsync(RegionPlan regionPlan) |
void |
offlineRegion(RegionInfo regionInfo) |
void |
onlineRegion(RegionInfo regionInfo,
ServerName serverName) |
private void |
processAssignmentPlans(HashMap<RegionInfo,RegionStates.RegionStateNode> regions,
HashMap<RegionInfo,ServerName> retainMap,
List<RegionInfo> hris,
List<ServerName> servers) |
private void |
processAssignQueue() |
void |
processOfflineRegions()
Create assign procedure for offline regions.
|
protected void |
queueAssign(RegionStates.RegionStateNode regionNode)
Add the assign operation to the assignment queue.
|
void |
registerListener(AssignmentListener listener)
Add the listener to the notification list.
|
protected void |
removeRegionInTransition(RegionStates.RegionStateNode regionNode,
RegionTransitionProcedure procedure) |
void |
reportOnlineRegions(ServerName serverName,
Set<byte[]> regionNames)
the master will call this method when the RS send the regionServerReport().
|
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse |
reportRegionStateTransition(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest req) |
private boolean |
reportTransition(RegionStates.RegionStateNode regionNode,
ServerName serverName,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode state,
long seqId) |
private void |
sendRegionClosedNotification(RegionInfo regionInfo) |
private void |
sendRegionOpenedNotification(RegionInfo regionInfo,
ServerName serverName) |
void |
serverAdded(ServerName serverName)
The server has joined the cluster.
|
void |
serverRemoved(ServerName serverName)
The server was removed from the cluster.
|
private void |
setMetaAssigned(RegionInfo metaRegionInfo,
boolean assigned) |
private boolean |
shouldAssignFavoredNodes(RegionInfo region) |
void |
start() |
private void |
startAssignmentThread() |
void |
stop() |
private void |
stopAssignmentThread() |
long |
submitServerCrash(ServerName serverName,
boolean shouldSplitWal) |
void |
unassign(RegionInfo regionInfo) |
void |
unassign(RegionInfo regionInfo,
boolean forceNewPlan) |
void |
undoRegionAsClosing(RegionStates.RegionStateNode regionNode) |
void |
undoRegionAsOpening(RegionStates.RegionStateNode regionNode) |
boolean |
unregisterListener(AssignmentListener listener)
Remove the listener from the notification list.
|
private void |
updateRegionMergeTransition(ServerName serverName,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode state,
RegionInfo merged,
RegionInfo hriA,
RegionInfo hriB) |
private void |
updateRegionsInTransitionMetrics(AssignmentManager.RegionInTransitionStat ritStat) |
private void |
updateRegionSplitTransition(ServerName serverName,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode state,
RegionInfo parent,
RegionInfo hriA,
RegionInfo hriB) |
private void |
updateRegionTransition(ServerName serverName,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode state,
RegionInfo regionInfo,
long seqId)
Called when the RegionServer wants to report a Procedure transition.
|
boolean |
waitMetaAssigned(Procedure<?> proc,
RegionInfo regionInfo)
Notice that this event does not mean the AM has already finished region state rebuilding.
|
boolean |
waitMetaLoaded(Procedure<?> proc)
Wait until AM finishes the meta loading, i.e, the region states rebuilding.
|
private HashMap<RegionInfo,RegionStates.RegionStateNode> |
waitOnAssignQueue() |
protected boolean |
waitServerReportEvent(ServerName serverName,
Procedure<?> proc) |
(package private) void |
wakeMetaLoadedEvent() |
protected void |
wakeServerReportEvent(RegionStates.ServerStateNode serverNode) |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
waiting
private static final org.slf4j.Logger LOG
public static final String BOOTSTRAP_THREAD_POOL_SIZE_CONF_KEY
public static final String ASSIGN_DISPATCH_WAIT_MSEC_CONF_KEY
private static final int DEFAULT_ASSIGN_DISPATCH_WAIT_MSEC
public static final String ASSIGN_DISPATCH_WAITQ_MAX_CONF_KEY
private static final int DEFAULT_ASSIGN_DISPATCH_WAITQ_MAX
public static final String RIT_CHORE_INTERVAL_MSEC_CONF_KEY
private static final int DEFAULT_RIT_CHORE_INTERVAL_MSEC
public static final String ASSIGN_MAX_ATTEMPTS
private static final int DEFAULT_ASSIGN_MAX_ATTEMPTS
public static final String METRICS_RIT_STUCK_WARNING_THRESHOLD
private static final int DEFAULT_RIT_STUCK_WARNING_THRESHOLD
private final ProcedureEvent<?> metaAssignEvent
private final ProcedureEvent<?> metaLoadEvent
private final CopyOnWriteArrayList<AssignmentListener> listeners
private final MetricsAssignmentManager metrics
private final AssignmentManager.RegionInTransitionChore ritChore
private final MasterServices master
private final AtomicBoolean running
private final RegionStates regionStates
private final RegionStateStore regionStateStore
private final Map<ServerName,Set<byte[]>> rsReports
private final boolean shouldAssignRegionsWithFavoredNodes
private final int assignDispatchWaitQueueMaxSize
private final int assignDispatchWaitMillis
private final int assignMaxAttempts
private final Object checkIfShouldMoveSystemRegionLock
private Thread assignThread
private static final Set<RegionInfo> META_REGION_SET
private static final AssignProcedure[] ASSIGN_PROCEDURE_ARRAY_TYPE
private static final UnassignProcedure[] UNASSIGN_PROCEDURE_ARRAY_TYPE
private final ArrayList<RegionStates.RegionStateNode> pendingAssignQueue
private final ReentrantLock assignQueueLock
private final Condition assignQueueFullCond
public AssignmentManager(MasterServices master)
public AssignmentManager(MasterServices master, RegionStateStore stateStore)
public void start() throws IOException, org.apache.zookeeper.KeeperException
IOException
org.apache.zookeeper.KeeperException
public void stop()
public boolean isRunning()
public org.apache.hadoop.conf.Configuration getConfiguration()
public MetricsAssignmentManager getAssignmentManagerMetrics()
private LoadBalancer getBalancer()
private MasterProcedureEnv getProcedureEnvironment()
private MasterProcedureScheduler getProcedureScheduler()
int getAssignMaxAttempts()
public void registerListener(AssignmentListener listener)
listener
- The AssignmentListener to registerpublic boolean unregisterListener(AssignmentListener listener)
listener
- The AssignmentListener to unregisterpublic RegionStates getRegionStates()
public RegionStateStore getRegionStateStore()
public List<ServerName> getFavoredNodes(RegionInfo regionInfo)
TableStateManager getTableStateManager()
public boolean isTableEnabled(TableName tableName)
public boolean isTableDisabled(TableName tableName)
private boolean isMetaRegion(RegionInfo regionInfo)
public boolean isMetaRegion(byte[] regionName)
public RegionInfo getMetaRegionFromName(byte[] regionName)
public boolean isCarryingMeta(ServerName serverName)
private boolean isCarryingRegion(ServerName serverName, RegionInfo regionInfo)
private RegionInfo getMetaForRegion(RegionInfo regionInfo)
public Set<RegionInfo> getMetaRegionSet()
public boolean isMetaAssigned()
isMetaLoaded()
first
before checking this method, unless you can make sure that your piece of code can only be
executed after AM builds the region states.isMetaLoaded()
public boolean isMetaRegionInTransition()
public boolean waitMetaAssigned(Procedure<?> proc, RegionInfo regionInfo)
isMetaAssigned()
for more details.isMetaAssigned()
private void setMetaAssigned(RegionInfo metaRegionInfo, boolean assigned)
private ProcedureEvent<?> getMetaAssignEvent(RegionInfo metaRegionInfo)
public boolean waitMetaLoaded(Procedure<?> proc)
void wakeMetaLoadedEvent()
public boolean isMetaLoaded()
isMetaAssigned()
,
waitMetaLoaded(Procedure)
public void checkIfShouldMoveSystemRegionAsync()
This method is called when a new RegionServer is added to cluster only.
private List<RegionInfo> getSystemTables(ServerName serverName)
public void assign(RegionInfo regionInfo, ServerName sn) throws IOException
IOException
public void assign(RegionInfo regionInfo) throws IOException
IOException
public void unassign(RegionInfo regionInfo) throws IOException
IOException
public void unassign(RegionInfo regionInfo, boolean forceNewPlan) throws IOException
IOException
public void move(RegionInfo regionInfo) throws IOException
IOException
public Future<byte[]> moveAsync(RegionPlan regionPlan) throws HBaseIOException
HBaseIOException
public AssignProcedure[] createRoundRobinAssignProcedures(List<RegionInfo> hris)
hris
and a call
to the balancer to populate the assigns with targets chosen using round-robin (default
balancer scheme). If at assign-time, the target chosen is no longer up, thats fine,
the AssignProcedure will ask the balancer for a new target, and so on.public AssignProcedure[] createAssignProcedures(List<RegionInfo> hris)
ServerCrashProcedure
assigning regions on a server that has crashed (SCP is
also used across a cluster-restart just-in-case to ensure we do cleanup of any old WALs or
server processes).private AssignProcedure[] createAssignProcedures(Map<ServerName,List<RegionInfo>> assignments, int size)
assignments
- Map of assignments from which we produce an array of AssignProcedures.size
- Count of assignments to make (the caller may know the total count)assignments
UnassignProcedure[] createUnassignProcedures(Collection<RegionStates.RegionStateNode> nodes)
public AssignProcedure createAssignProcedure(RegionInfo regionInfo)
public AssignProcedure createAssignProcedure(RegionInfo regionInfo, boolean override)
public AssignProcedure createAssignProcedure(RegionInfo regionInfo, ServerName targetServer)
public AssignProcedure createAssignProcedure(RegionInfo regionInfo, ServerName targetServer, boolean override)
public UnassignProcedure createUnassignProcedure(RegionInfo regionInfo)
public UnassignProcedure createUnassignProcedure(RegionInfo regionInfo, boolean override)
public UnassignProcedure[] createUnassignProcedures(TableName tableName)
UnassignProcedure createUnassignProcedure(RegionInfo regionInfo, ServerName destinationServer, boolean force)
UnassignProcedure createUnassignProcedure(RegionInfo regionInfo, ServerName destinationServer, boolean force, boolean removeAfterUnassigning)
private MoveRegionProcedure createMoveRegionProcedure(RegionPlan plan) throws HBaseIOException
HBaseIOException
public SplitTableRegionProcedure createSplitProcedure(RegionInfo regionToSplit, byte[] splitKey) throws IOException
IOException
public MergeTableRegionsProcedure createMergeProcedure(RegionInfo... ris) throws IOException
IOException
public void deleteTable(TableName tableName) throws IOException
IOException
public org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse reportRegionStateTransition(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest req) throws PleaseHoldException
PleaseHoldException
private void updateRegionTransition(ServerName serverName, org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode state, RegionInfo regionInfo, long seqId) throws PleaseHoldException, UnexpectedStateException
#reportTransition(RegionStateNode, ServerName, TransitionCode, long)
private boolean reportTransition(RegionStates.RegionStateNode regionNode, ServerName serverName, org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode state, long seqId) throws UnexpectedStateException
UnexpectedStateException
private void updateRegionSplitTransition(ServerName serverName, org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode state, RegionInfo parent, RegionInfo hriA, RegionInfo hriB) throws IOException
IOException
private void updateRegionMergeTransition(ServerName serverName, org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode state, RegionInfo merged, RegionInfo hriA, RegionInfo hriB) throws IOException
IOException
public void reportOnlineRegions(ServerName serverName, Set<byte[]> regionNames) throws YouAreDeadException
YouAreDeadException
void checkOnlineRegionsReportForMeta(ServerName serverName, Set<byte[]> regionNames)
void checkOnlineRegionsReport(RegionStates.ServerStateNode serverNode, Set<byte[]> regionNames)
protected boolean waitServerReportEvent(ServerName serverName, Procedure<?> proc)
protected void wakeServerReportEvent(RegionStates.ServerStateNode serverNode)
public AssignmentManager.RegionInTransitionStat computeRegionInTransitionStat()
private void updateRegionsInTransitionMetrics(AssignmentManager.RegionInTransitionStat ritStat)
private void handleRegionOverStuckWarningThreshold(RegionInfo regionInfo)
public void joinCluster() throws IOException
IOException
public void processOfflineRegions()
private void loadMeta() throws IOException
IOException
private void checkMetaLoaded(RegionInfo hri) throws PleaseHoldException
hri
- region to check if it is already rebuildPleaseHoldException
- if meta has not been loaded yetpublic int getNumRegionsOpened()
public long submitServerCrash(ServerName serverName, boolean shouldSplitWal)
public void offlineRegion(RegionInfo regionInfo)
public void onlineRegion(RegionInfo regionInfo, ServerName serverName)
public Map<ServerName,List<RegionInfo>> getSnapShotOfAssignment(Collection<RegionInfo> regions)
public Pair<Integer,Integer> getReopenStatus(TableName tableName)
tableName
- IOException
protected boolean addRegionInTransition(RegionStates.RegionStateNode regionNode, RegionTransitionProcedure procedure)
protected void removeRegionInTransition(RegionStates.RegionStateNode regionNode, RegionTransitionProcedure procedure)
public boolean hasRegionsInTransition()
public List<RegionStates.RegionStateNode> getRegionsInTransition()
public List<RegionInfo> getAssignedRegions()
public RegionInfo getRegionInfo(byte[] regionName)
private void sendRegionOpenedNotification(RegionInfo regionInfo, ServerName serverName)
private void sendRegionClosedNotification(RegionInfo regionInfo)
public void markRegionAsOpening(RegionStates.RegionStateNode regionNode) throws IOException
IOException
public void undoRegionAsOpening(RegionStates.RegionStateNode regionNode)
public void markRegionAsOpened(RegionStates.RegionStateNode regionNode) throws IOException
IOException
public void markRegionAsClosing(RegionStates.RegionStateNode regionNode) throws IOException
IOException
public void undoRegionAsClosing(RegionStates.RegionStateNode regionNode)
public void markRegionAsClosed(RegionStates.RegionStateNode regionNode) throws IOException
IOException
public void markRegionAsSplit(RegionInfo parent, ServerName serverName, RegionInfo daughterA, RegionInfo daughterB) throws IOException
IOException
public void markRegionAsMerged(RegionInfo child, ServerName serverName, RegionInfo[] mergeParents) throws IOException
IOException
private boolean shouldAssignFavoredNodes(RegionInfo region)
protected void queueAssign(RegionStates.RegionStateNode regionNode)
private void startAssignmentThread()
private void stopAssignmentThread()
private void assignQueueSignal()
private HashMap<RegionInfo,RegionStates.RegionStateNode> waitOnAssignQueue()
private void processAssignQueue()
private void processAssignmentPlans(HashMap<RegionInfo,RegionStates.RegionStateNode> regions, HashMap<RegionInfo,ServerName> retainMap, List<RegionInfo> hris, List<ServerName> servers)
private void acceptPlan(HashMap<RegionInfo,RegionStates.RegionStateNode> regions, Map<ServerName,List<RegionInfo>> plan) throws HBaseIOException
HBaseIOException
private void addToPendingAssignment(HashMap<RegionInfo,RegionStates.RegionStateNode> regions, Collection<RegionInfo> pendingRegions)
public List<ServerName> getExcludedServersForSystemTable()
public void serverAdded(ServerName serverName)
ServerListener
serverAdded
in interface ServerListener
serverName
- The remote servers name.public void serverRemoved(ServerName serverName)
ServerListener
serverRemoved
in interface ServerListener
serverName
- The remote servers name.private void killRegionServer(ServerName serverName)
boolean isLogSplittingDone(ServerName serverName, boolean meta)
This is a very particular check. The ServerManager
is
where you go to check on state of 'Servers', what Servers are online, etc.
Here we are checking the state of a server that is post expiration, a ServerManager function that moves a server from online to dead. Here we are seeing if the server has moved beyond a particular point in the recovery process such that it is safe to move on with assigns; etc.
For now it is only used in
UnassignProcedure#remoteCallFailed(MasterProcedureEnv, RegionStateNode, IOException)
to
see whether we can safely quit without losing data.
meta
- whether to check for meta log splittingtrue
if the server does not exist or the log splitting is done, i.e, the server
is in OFFLINE state, or for meta log, is in SPLITTING_META_DONE state. If null,
presumes the ServerStateNode was cleaned up by SCP.UnassignProcedure#remoteCallFailed(MasterProcedureEnv, RegionStateNode, IOException)
MasterServices getMaster()
public Map<ServerName,Set<byte[]>> getRSReports()
Copyright © 2007–2019 The Apache Software Foundation. All rights reserved.