@InterfaceAudience.Private public class ServerManager extends Object
Maintains lists of online and dead servers. Processes the startups, shutdowns, and deaths of region servers.
Servers are distinguished in two different ways. A given server has a location, specified by hostname and port, and of which there can only be one online at any given time. A server instance is specified by the location (hostname and port) as well as the startcode (timestamp from when the server was started). This is used to differentiate a restarted instance of a given server from the original instance.
If a sever is known not to be running any more, it is called dead. The dead server needs to be handled by a ServerShutdownHandler. If the handler is not enabled yet, the server can't be handled right away so it is queued up. After the handler is enabled, the server will be submitted to a handler to handle. However, the handler may be just partially enabled. If so, the server cannot be fully processed, and be queued up for further processing. A server is fully processed only after the handler is fully enabled and has completed the handling.
| Modifier and Type | Class and Description |
|---|---|
static class |
ServerManager.ServerLiveState |
| Modifier and Type | Field and Description |
|---|---|
static String |
FLUSHEDSEQUENCEID_FLUSHER_INTERVAL |
static int |
FLUSHEDSEQUENCEID_FLUSHER_INTERVAL_DEFAULT |
static String |
MAX_CLOCK_SKEW_MS |
static String |
PERSIST_FLUSHEDSEQUENCEID
see HBASE-20727 if set to true, flushedSequenceIdByRegion and storeFlushedSequenceIdsByRegion
will be persisted to HDFS and loaded when master restart to speed up log split
|
static boolean |
PERSIST_FLUSHEDSEQUENCEID_DEFAULT |
static String |
WAIT_ON_REGIONSERVERS_INTERVAL |
static String |
WAIT_ON_REGIONSERVERS_MAXTOSTART |
static String |
WAIT_ON_REGIONSERVERS_MINTOSTART |
static String |
WAIT_ON_REGIONSERVERS_TIMEOUT |
| Constructor and Description |
|---|
ServerManager(MasterServices master,
RegionServerList storage)
Constructor.
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
addServerToDrainList(ServerName sn)
Add the server to the drain list.
|
boolean |
areDeadServersInProgress()
Checks if any dead servers are currently in progress.
|
static void |
closeRegionSilentlyAndWait(AsyncClusterConnection connection,
ServerName server,
RegionInfo region,
long timeout)
Contacts a region server and waits up to timeout ms to close the region.
|
int |
countOfRegionServers() |
List<ServerName> |
createDestinationServersList()
Calls
createDestinationServersList(java.util.List<org.apache.hadoop.hbase.ServerName>) without server to exclude. |
List<ServerName> |
createDestinationServersList(List<ServerName> serversToExclude)
Creates a list of possible destinations for a region.
|
long |
expireServer(ServerName serverName)
Expire the passed server.
|
double |
getAverageLoad()
Compute the average load across all region servers.
|
DeadServer |
getDeadServers() |
List<ServerName> |
getDrainingServersList() |
ConcurrentNavigableMap<byte[],Long> |
getFlushedSequenceIdByRegion() |
int |
getInfoPort(ServerName serverName) |
org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds |
getLastFlushedSequenceId(byte[] encodedRegionName) |
ServerMetrics |
getLoad(ServerName serverName)
n * @return ServerMetrics if serverName is known else null
|
Map<ServerName,ServerMetrics> |
getOnlineServers() |
List<ServerName> |
getOnlineServersList() |
List<ServerName> |
getOnlineServersListWithPredicator(List<ServerName> keys,
Predicate<ServerMetrics> idleServerPredicator) |
String |
getVersion(ServerName serverName)
May return "0.0.0" when server is not online
|
int |
getVersionNumber(ServerName serverName)
May return 0 when server is not online.
|
boolean |
isClusterShutdown() |
boolean |
isRegionInServerManagerStates(RegionInfo hri) |
boolean |
isServerDead(ServerName serverName)
Check if a server is known to be dead.
|
ServerManager.ServerLiveState |
isServerKnownAndOnline(ServerName serverName) |
boolean |
isServerOnline(ServerName serverName) |
boolean |
isServerUnknown(ServerName serverName)
Check if a server is unknown.
|
void |
loadLastFlushedSequenceIds()
Load last flushed sequence id of each region from HDFS, if persisted
|
void |
moveFromOnlineToDeadServers(ServerName sn)
Called when server has expired.
|
void |
regionServerReport(ServerName sn,
ServerMetrics sl) |
void |
registerListener(ServerListener listener)
Add the listener to the notification list.
|
void |
removeDeletedRegionFromLoadedFlushedSequenceIds()
Regions may have been removed between latest persist of FlushedSequenceIds and master abort.
|
void |
removeRegion(RegionInfo regionInfo)
Called by delete table and similar to notify the ServerManager that a region was removed.
|
void |
removeRegions(List<RegionInfo> regions)
Called by delete table and similar to notify the ServerManager that a region was removed.
|
boolean |
removeServerFromDrainList(ServerName sn) |
void |
shutdownCluster() |
void |
startChore()
start chore in ServerManager
|
void |
stop()
Stop the ServerManager.
|
boolean |
unregisterListener(ServerListener listener)
Remove the listener from the notification list.
|
void |
waitForRegionServers(MonitoredTask status)
Wait for the region servers to report in.
|
public static final String WAIT_ON_REGIONSERVERS_MAXTOSTART
public static final String WAIT_ON_REGIONSERVERS_MINTOSTART
public static final String WAIT_ON_REGIONSERVERS_TIMEOUT
public static final String WAIT_ON_REGIONSERVERS_INTERVAL
public static final String PERSIST_FLUSHEDSEQUENCEID
public static final boolean PERSIST_FLUSHEDSEQUENCEID_DEFAULT
public static final String FLUSHEDSEQUENCEID_FLUSHER_INTERVAL
public static final int FLUSHEDSEQUENCEID_FLUSHER_INTERVAL_DEFAULT
public static final String MAX_CLOCK_SKEW_MS
public ServerManager(MasterServices master, RegionServerList storage)
public void registerListener(ServerListener listener)
listener - The ServerListener to registerpublic boolean unregisterListener(ServerListener listener)
listener - The ServerListener to unregisterpublic void regionServerReport(ServerName sn, ServerMetrics sl) throws YouAreDeadException
YouAreDeadExceptionpublic ConcurrentNavigableMap<byte[],Long> getFlushedSequenceIdByRegion()
public org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds getLastFlushedSequenceId(byte[] encodedRegionName)
public ServerMetrics getLoad(ServerName serverName)
public double getAverageLoad()
public int countOfRegionServers()
public Map<ServerName,ServerMetrics> getOnlineServers()
public DeadServer getDeadServers()
public boolean areDeadServersInProgress()
throws IOException
IOExceptionpublic long expireServer(ServerName serverName)
Procedure.NO_PROC_ID if we did not
(could happen for many reasons including the fact that its this server that is going
down or we already have queued an SCP for this server or SCP processing is currently
disabled because we are in startup phase).public void moveFromOnlineToDeadServers(ServerName sn)
public boolean removeServerFromDrainList(ServerName sn)
public boolean addServerToDrainList(ServerName sn)
public static void closeRegionSilentlyAndWait(AsyncClusterConnection connection, ServerName server, RegionInfo region, long timeout) throws IOException, InterruptedException
IOExceptionInterruptedExceptionpublic void waitForRegionServers(MonitoredTask status) throws InterruptedException
InterruptedExceptionpublic List<ServerName> getOnlineServersList()
public List<ServerName> getOnlineServersListWithPredicator(List<ServerName> keys, Predicate<ServerMetrics> idleServerPredicator)
keys - The target server nameidleServerPredicator - Evaluates the server on the given loadpublic List<ServerName> getDrainingServersList()
public boolean isServerOnline(ServerName serverName)
public ServerManager.ServerLiveState isServerKnownAndOnline(ServerName serverName)
public boolean isServerDead(ServerName serverName)
public boolean isServerUnknown(ServerName serverName)
public void shutdownCluster()
public boolean isClusterShutdown()
public void startChore()
public void stop()
public List<ServerName> createDestinationServersList(List<ServerName> serversToExclude)
serversToExclude - can be null if there is no server to excludepublic List<ServerName> createDestinationServersList()
createDestinationServersList(java.util.List<org.apache.hadoop.hbase.ServerName>) without server to exclude.public void removeRegion(RegionInfo regionInfo)
public boolean isRegionInServerManagerStates(RegionInfo hri)
public void removeRegions(List<RegionInfo> regions)
public int getVersionNumber(ServerName serverName)
public String getVersion(ServerName serverName)
public int getInfoPort(ServerName serverName)
public void loadLastFlushedSequenceIds()
throws IOException
IOExceptionpublic void removeDeletedRegionFromLoadedFlushedSequenceIds()
Copyright © 2007–2020 The Apache Software Foundation. All rights reserved.