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.
* 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

View File

@ -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);

View File

@ -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);
}