YARN-8409. Fixed NPE in ActiveStandbyElectorBasedElectorService.
Contributed by Chandni Singh
This commit is contained in:
parent
8fa530746f
commit
3ce3571a34
|
@ -329,9 +329,12 @@ public class ActiveStandbyElector implements StatCallback, StringCallback {
|
||||||
* This recursively creates the znode as well as all of its parents.
|
* This recursively creates the znode as well as all of its parents.
|
||||||
*/
|
*/
|
||||||
public synchronized void ensureParentZNode()
|
public synchronized void ensureParentZNode()
|
||||||
throws IOException, InterruptedException {
|
throws IOException, InterruptedException, KeeperException {
|
||||||
Preconditions.checkState(!wantToBeInElection,
|
Preconditions.checkState(!wantToBeInElection,
|
||||||
"ensureParentZNode() may not be called while in the election");
|
"ensureParentZNode() may not be called while in the election");
|
||||||
|
if (zkClient == null) {
|
||||||
|
createConnection();
|
||||||
|
}
|
||||||
|
|
||||||
String pathParts[] = znodeWorkingDir.split("/");
|
String pathParts[] = znodeWorkingDir.split("/");
|
||||||
Preconditions.checkArgument(pathParts.length >= 1 &&
|
Preconditions.checkArgument(pathParts.length >= 1 &&
|
||||||
|
|
|
@ -269,7 +269,7 @@ public abstract class ZKFailoverController {
|
||||||
}
|
}
|
||||||
|
|
||||||
private int formatZK(boolean force, boolean interactive)
|
private int formatZK(boolean force, boolean interactive)
|
||||||
throws IOException, InterruptedException {
|
throws IOException, InterruptedException, KeeperException {
|
||||||
if (elector.parentZNodeExists()) {
|
if (elector.parentZNodeExists()) {
|
||||||
if (!force && (!interactive || !confirmFormat())) {
|
if (!force && (!interactive || !confirmFormat())) {
|
||||||
return ERR_CODE_FORMAT_DENIED;
|
return ERR_CODE_FORMAT_DENIED;
|
||||||
|
|
|
@ -22,7 +22,10 @@ import org.apache.commons.logging.LogFactory;
|
||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
import org.apache.hadoop.ha.ClientBaseWithFixes;
|
import org.apache.hadoop.ha.ClientBaseWithFixes;
|
||||||
import org.apache.hadoop.ha.ServiceFailedException;
|
import org.apache.hadoop.ha.ServiceFailedException;
|
||||||
|
import org.apache.hadoop.service.ServiceStateException;
|
||||||
|
import org.apache.hadoop.test.GenericTestUtils;
|
||||||
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
||||||
|
import org.junit.Assert;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
@ -278,6 +281,26 @@ public class TestRMEmbeddedElector extends ClientBaseWithFixes {
|
||||||
verify(as, atMost(1)).transitionToStandby(any());
|
verify(as, atMost(1)).transitionToStandby(any());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test that active elector service triggers a fatal RM Event when connection
|
||||||
|
* to ZK fails. YARN-8409
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testFailureToConnectToZookeeper() throws Exception {
|
||||||
|
stopServer();
|
||||||
|
Configuration myConf = new Configuration(conf);
|
||||||
|
ResourceManager rm = new MockRM(conf);
|
||||||
|
|
||||||
|
ActiveStandbyElectorBasedElectorService ees =
|
||||||
|
new ActiveStandbyElectorBasedElectorService(rm);
|
||||||
|
try {
|
||||||
|
ees.init(myConf);
|
||||||
|
Assert.fail("expect failure to connect to Zookeeper");
|
||||||
|
} catch (ServiceStateException sse) {
|
||||||
|
Assert.assertTrue(sse.getMessage().contains("ConnectionLoss"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private class MockRMWithElector extends MockRM {
|
private class MockRMWithElector extends MockRM {
|
||||||
private long delayMs = 0;
|
private long delayMs = 0;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue