HBASE-6389 Modify the conditions to ensure that Master waits for sufficient number of Region Servers before starting region assignments (Aditya Kishore)
git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1361456 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
fabf76eaee
commit
3a68756704
|
@ -582,12 +582,12 @@ public class ServerManager {
|
|||
* Wait for the region servers to report in.
|
||||
* We will wait until one of this condition is met:
|
||||
* - the master is stopped
|
||||
* - the 'hbase.master.wait.on.regionservers.timeout' is reached
|
||||
* - the 'hbase.master.wait.on.regionservers.maxtostart' number of
|
||||
* region servers is reached
|
||||
* - the 'hbase.master.wait.on.regionservers.mintostart' is reached AND
|
||||
* there have been no new region server in for
|
||||
* 'hbase.master.wait.on.regionservers.interval' time
|
||||
* 'hbase.master.wait.on.regionservers.interval' time AND
|
||||
* the 'hbase.master.wait.on.regionservers.timeout' is reached
|
||||
*
|
||||
* @throws InterruptedException
|
||||
*/
|
||||
|
@ -599,8 +599,15 @@ public class ServerManager {
|
|||
getLong("hbase.master.wait.on.regionservers.timeout", 4500);
|
||||
final int minToStart = this.master.getConfiguration().
|
||||
getInt("hbase.master.wait.on.regionservers.mintostart", 1);
|
||||
final int maxToStart = this.master.getConfiguration().
|
||||
int maxToStart = this.master.getConfiguration().
|
||||
getInt("hbase.master.wait.on.regionservers.maxtostart", Integer.MAX_VALUE);
|
||||
if (maxToStart < minToStart) {
|
||||
LOG.warn(String.format(
|
||||
"The value of 'hbase.master.wait.on.regionservers.maxtostart' (%d)" +
|
||||
" is set less than 'hbase.master.wait.on.regionservers.mintostart'" +
|
||||
" (%d), ignoring.", maxToStart, minToStart));
|
||||
maxToStart = Integer.MAX_VALUE;
|
||||
}
|
||||
|
||||
long now = System.currentTimeMillis();
|
||||
final long startTime = now;
|
||||
|
@ -611,9 +618,8 @@ public class ServerManager {
|
|||
int oldCount = 0;
|
||||
while (
|
||||
!this.master.isStopped() &&
|
||||
slept < timeout &&
|
||||
count < maxToStart &&
|
||||
(lastCountChange+interval > now || count < minToStart)
|
||||
(lastCountChange+interval > now || timeout > slept || count < minToStart)
|
||||
){
|
||||
|
||||
// Log some info at every interval time or if there is a change
|
||||
|
|
|
@ -655,8 +655,9 @@ public class HBaseTestingUtility {
|
|||
|
||||
// These settings will make the server waits until this exact number of
|
||||
// regions servers are connected.
|
||||
conf.setInt("hbase.master.wait.on.regionservers.mintostart", numSlaves);
|
||||
conf.setInt("hbase.master.wait.on.regionservers.maxtostart", numSlaves);
|
||||
String count = String.valueOf(numSlaves);
|
||||
conf.setIfUnset("hbase.master.wait.on.regionservers.mintostart", count);
|
||||
conf.setIfUnset("hbase.master.wait.on.regionservers.maxtostart", count);
|
||||
|
||||
Configuration c = new Configuration(this.conf);
|
||||
this.hbaseCluster = new MiniHBaseCluster(c, numMasters, numSlaves);
|
||||
|
|
|
@ -69,8 +69,11 @@ public class TestRSKilledWhenMasterInitializing {
|
|||
@BeforeClass
|
||||
public static void setUpBeforeClass() throws Exception {
|
||||
// Set it so that this test runs with my custom master
|
||||
TESTUTIL.getConfiguration().setClass(HConstants.MASTER_IMPL,
|
||||
TestingMaster.class, HMaster.class);
|
||||
Configuration conf = TESTUTIL.getConfiguration();
|
||||
conf.setClass(HConstants.MASTER_IMPL, TestingMaster.class, HMaster.class);
|
||||
conf.setInt("hbase.master.wait.on.regionservers.mintostart", 3);
|
||||
conf.setInt("hbase.master.wait.on.regionservers.maxtostart", 4);
|
||||
|
||||
// Start up the cluster.
|
||||
TESTUTIL.startMiniCluster(NUM_MASTERS, NUM_RS);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue