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.
|
* 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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue