You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jx...@apache.org on 2012/11/07 17:22:28 UTC
svn commit: r1406700 -
/hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java
Author: jxiang
Date: Wed Nov 7 16:22:28 2012
New Revision: 1406700
URL: http://svn.apache.org/viewvc?rev=1406700&view=rev
Log:
HBASE-6958 TestAssignmentManager sometimes fails
Modified:
hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java
Modified: hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java?rev=1406700&r1=1406699&r2=1406700&view=diff
==============================================================================
--- hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java (original)
+++ hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java Wed Nov 7 16:22:28 2012
@@ -20,7 +20,6 @@ package org.apache.hadoop.hbase.master;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -802,43 +801,49 @@ public class TestAssignmentManager {
MockedLoadBalancer.class, LoadBalancer.class);
AssignmentManagerWithExtrasForTesting am = setUpMockedAssignmentManager(this.server,
this.serverManager);
- // Boolean variable used for waiting until randomAssignment is called and new
- // plan is generated.
- AtomicBoolean gate = new AtomicBoolean(false);
- if (balancer instanceof MockedLoadBalancer) {
- ((MockedLoadBalancer) balancer).setGateVariable(gate);
- }
- ZKAssign.createNodeOffline(this.watcher, REGIONINFO, SERVERNAME_A);
- int v = ZKAssign.getVersion(this.watcher, REGIONINFO);
- ZKAssign.transitionNode(this.watcher, REGIONINFO, SERVERNAME_A, EventType.M_ZK_REGION_OFFLINE,
- EventType.RS_ZK_REGION_FAILED_OPEN, v);
- String path = ZKAssign.getNodeName(this.watcher, REGIONINFO.getEncodedName());
- RegionState state = new RegionState(REGIONINFO, State.OPENING, System.currentTimeMillis(),
- SERVERNAME_A);
- am.regionsInTransition.put(REGIONINFO.getEncodedName(), state);
- // a dummy plan inserted into the regionPlans. This plan is cleared and new one is formed
- am.regionPlans.put(REGIONINFO.getEncodedName(), new RegionPlan(REGIONINFO, null, SERVERNAME_A));
- RegionPlan regionPlan = am.regionPlans.get(REGIONINFO.getEncodedName());
- List<ServerName> serverList = new ArrayList<ServerName>(2);
- serverList.add(SERVERNAME_B);
- Mockito.when(this.serverManager.getOnlineServersList()).thenReturn(serverList);
- am.nodeDataChanged(path);
- // here we are waiting until the random assignment in the load balancer is called.
- while (!gate.get()) {
- Thread.sleep(10);
- }
- // new region plan may take some time to get updated after random assignment is called and
- // gate is set to true.
- RegionPlan newRegionPlan = am.regionPlans.get(REGIONINFO.getEncodedName());
- while (newRegionPlan == null) {
- Thread.sleep(10);
- newRegionPlan = am.regionPlans.get(REGIONINFO.getEncodedName());
- }
- // the new region plan created may contain the same RS as destination but it should
- // be new plan.
- assertNotSame("Same region plan should not come", regionPlan, newRegionPlan);
- assertTrue("Destnation servers should be different.", !(regionPlan.getDestination().equals(
+ try {
+ // Boolean variable used for waiting until randomAssignment is called and new
+ // plan is generated.
+ AtomicBoolean gate = new AtomicBoolean(false);
+ if (balancer instanceof MockedLoadBalancer) {
+ ((MockedLoadBalancer) balancer).setGateVariable(gate);
+ }
+ ZKAssign.createNodeOffline(this.watcher, REGIONINFO, SERVERNAME_A);
+ int v = ZKAssign.getVersion(this.watcher, REGIONINFO);
+ ZKAssign.transitionNode(this.watcher, REGIONINFO, SERVERNAME_A, EventType.M_ZK_REGION_OFFLINE,
+ EventType.RS_ZK_REGION_FAILED_OPEN, v);
+ String path = ZKAssign.getNodeName(this.watcher, REGIONINFO.getEncodedName());
+ RegionState state = new RegionState(REGIONINFO, State.OPENING, System.currentTimeMillis(),
+ SERVERNAME_A);
+ am.regionsInTransition.put(REGIONINFO.getEncodedName(), state);
+ // a dummy plan inserted into the regionPlans. This plan is cleared and new one is formed
+ am.regionPlans.put(REGIONINFO.getEncodedName(), new RegionPlan(REGIONINFO, null, SERVERNAME_A));
+ RegionPlan regionPlan = am.regionPlans.get(REGIONINFO.getEncodedName());
+ List<ServerName> serverList = new ArrayList<ServerName>(2);
+ serverList.add(SERVERNAME_B);
+ Mockito.when(this.serverManager.getOnlineServersList()).thenReturn(serverList);
+ am.nodeDataChanged(path);
+ // here we are waiting until the random assignment in the load balancer is called.
+ while (!gate.get()) {
+ Thread.sleep(10);
+ }
+ // new region plan may take some time to get updated after random assignment is called and
+ // gate is set to true.
+ RegionPlan newRegionPlan = am.regionPlans.get(REGIONINFO.getEncodedName());
+ while (newRegionPlan == null) {
+ Thread.sleep(10);
+ newRegionPlan = am.regionPlans.get(REGIONINFO.getEncodedName());
+ }
+ // the new region plan created may contain the same RS as destination but it should
+ // be new plan.
+ assertNotSame("Same region plan should not come", regionPlan, newRegionPlan);
+ assertTrue("Destnation servers should be different.", !(regionPlan.getDestination().equals(
newRegionPlan.getDestination())));
+ } finally {
+ this.server.getConfiguration().setClass(HConstants.HBASE_MASTER_LOADBALANCER_CLASS,
+ DefaultLoadBalancer.class, LoadBalancer.class);
+ am.shutdown();
+ }
}
/**
@@ -877,8 +882,10 @@ public class TestAssignmentManager {
gate.get());
// need to change table state from disabling to disabled.
assertTrue("Table should be disabled.",
- am.getZKTable().isDisabledTable(REGIONINFO.getTableNameAsString()));
+ am.getZKTable().isDisabledTable(REGIONINFO.getTableNameAsString()));
} finally {
+ this.server.getConfiguration().setClass(HConstants.HBASE_MASTER_LOADBALANCER_CLASS,
+ DefaultLoadBalancer.class, LoadBalancer.class);
am.getZKTable().setEnabledTable(REGIONINFO.getTableNameAsString());
am.shutdown();
}