HADOOP-10980. TestActiveStandbyElector fails occasionally in trunk. Contributed by Eric Badger

(cherry picked from commit c82745432a)
This commit is contained in:
Jason Lowe 2016-08-03 20:17:30 +00:00
parent 65a91c8527
commit 5a34fa670e
2 changed files with 25 additions and 6 deletions

View File

@ -667,13 +667,13 @@ public class ActiveStandbyElector implements StatCallback, StringCallback {
/**
* Get a new zookeeper client instance. protected so that test class can
* inherit and pass in a mock object for zookeeper
* inherit and mock out the zookeeper instance
*
* @return new zookeeper client instance
* @throws IOException
* @throws KeeperException zookeeper connectionloss exception
*/
protected synchronized ZooKeeper getNewZooKeeper() throws IOException,
protected synchronized ZooKeeper connectToZooKeeper() throws IOException,
KeeperException {
// Unfortunately, the ZooKeeper constructor connects to ZooKeeper and
@ -682,7 +682,7 @@ public class ActiveStandbyElector implements StatCallback, StringCallback {
// we construct the watcher first, and have it block any events it receives
// before we can set its ZooKeeper reference.
watcher = new WatcherWithClientRef();
ZooKeeper zk = new ZooKeeper(zkHostPort, zkSessionTimeout, watcher);
ZooKeeper zk = createZooKeeper();
watcher.setZooKeeperRef(zk);
// Wait for the asynchronous success/failure. This may throw an exception
@ -695,6 +695,17 @@ public class ActiveStandbyElector implements StatCallback, StringCallback {
return zk;
}
/**
* Get a new zookeeper client instance. protected so that test class can
* inherit and pass in a mock object for zookeeper
*
* @return new zookeeper client instance
* @throws IOException
*/
protected ZooKeeper createZooKeeper() throws IOException {
return new ZooKeeper(zkHostPort, zkSessionTimeout, watcher);
}
private void fatalError(String errorMessage) {
LOG.fatal(errorMessage);
reset();
@ -830,7 +841,7 @@ public class ActiveStandbyElector implements StatCallback, StringCallback {
zkClient = null;
watcher = null;
}
zkClient = getNewZooKeeper();
zkClient = connectToZooKeeper();
if (LOG.isDebugEnabled()) {
LOG.debug("Created new connection for " + this);
}

View File

@ -66,7 +66,7 @@ public class TestActiveStandbyElector {
}
@Override
public ZooKeeper getNewZooKeeper() {
public ZooKeeper connectToZooKeeper() {
++count;
return mockZK;
}
@ -749,7 +749,15 @@ public class TestActiveStandbyElector {
try {
new ActiveStandbyElector("127.0.0.1", 2000, ZK_PARENT_NAME,
Ids.OPEN_ACL_UNSAFE, Collections.<ZKAuthInfo> emptyList(), mockApp,
CommonConfigurationKeys.HA_FC_ELECTOR_ZK_OP_RETRIES_DEFAULT);
CommonConfigurationKeys.HA_FC_ELECTOR_ZK_OP_RETRIES_DEFAULT) {
@Override
protected ZooKeeper createZooKeeper() throws IOException {
return Mockito.mock(ZooKeeper.class);
}
};
Assert.fail("Did not throw zookeeper connection loss exceptions!");
} catch (KeeperException ke) {
GenericTestUtils.assertExceptionContains( "ConnectionLoss", ke);