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:
larsh 2012-07-14 00:40:13 +00:00
parent fabf76eaee
commit 3a68756704
3 changed files with 22 additions and 12 deletions

View File

@ -582,12 +582,12 @@ public class ServerManager {
* Wait for the region servers to report in. * Wait for the region servers to report in.
* We will wait until one of this condition is met: * We will wait until one of this condition is met:
* - the master is stopped * - the master is stopped
* - the 'hbase.master.wait.on.regionservers.timeout' is reached
* - the 'hbase.master.wait.on.regionservers.maxtostart' number of * - the 'hbase.master.wait.on.regionservers.maxtostart' number of
* region servers is reached * region servers is reached
* - the 'hbase.master.wait.on.regionservers.mintostart' is reached AND * - the 'hbase.master.wait.on.regionservers.mintostart' is reached AND
* there have been no new region server in for * 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 * @throws InterruptedException
*/ */
@ -599,8 +599,15 @@ public class ServerManager {
getLong("hbase.master.wait.on.regionservers.timeout", 4500); getLong("hbase.master.wait.on.regionservers.timeout", 4500);
final int minToStart = this.master.getConfiguration(). final int minToStart = this.master.getConfiguration().
getInt("hbase.master.wait.on.regionservers.mintostart", 1); 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); 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(); long now = System.currentTimeMillis();
final long startTime = now; final long startTime = now;
@ -611,9 +618,8 @@ public class ServerManager {
int oldCount = 0; int oldCount = 0;
while ( while (
!this.master.isStopped() && !this.master.isStopped() &&
slept < timeout &&
count < maxToStart && 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 // Log some info at every interval time or if there is a change

View File

@ -655,8 +655,9 @@ public class HBaseTestingUtility {
// These settings will make the server waits until this exact number of // These settings will make the server waits until this exact number of
// regions servers are connected. // regions servers are connected.
conf.setInt("hbase.master.wait.on.regionservers.mintostart", numSlaves); String count = String.valueOf(numSlaves);
conf.setInt("hbase.master.wait.on.regionservers.maxtostart", 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); Configuration c = new Configuration(this.conf);
this.hbaseCluster = new MiniHBaseCluster(c, numMasters, numSlaves); this.hbaseCluster = new MiniHBaseCluster(c, numMasters, numSlaves);

View File

@ -69,8 +69,11 @@ public class TestRSKilledWhenMasterInitializing {
@BeforeClass @BeforeClass
public static void setUpBeforeClass() throws Exception { public static void setUpBeforeClass() throws Exception {
// Set it so that this test runs with my custom master // Set it so that this test runs with my custom master
TESTUTIL.getConfiguration().setClass(HConstants.MASTER_IMPL, Configuration conf = TESTUTIL.getConfiguration();
TestingMaster.class, HMaster.class); 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. // Start up the cluster.
TESTUTIL.startMiniCluster(NUM_MASTERS, NUM_RS); TESTUTIL.startMiniCluster(NUM_MASTERS, NUM_RS);
} }