Author: todd
Date: Fri Apr 6 04:56:26 2012
New Revision: 1310173
URL: http://svn.apache.org/viewvc?rev=1310173&view=rev
Log:
HADOOP-8077. HA: fencing method should be able to be configured on a per-NN or
per-NS basis. Contributed by Todd Lipcon.
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ha/NodeFencer.java
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ha/TestNodeFencer.java
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ha/TestShellCommandFencer.java
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1310173&r1=1310172&r2=1310173&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
(original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt Fri Apr
6 04:56:26 2012
@@ -252,6 +252,9 @@ Release 2.0.0 - UNRELEASED
HADOOP-8007. Use substitution tokens for fencing argument (todd)
+ HADOOP-8077. HA: fencing method should be able to be configured on
+ a per-NN or per-NS basis (todd)
+
OPTIMIZATIONS
BUG FIXES
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ha/NodeFencer.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ha/NodeFencer.java?rev=1310173&r1=1310172&r2=1310173&view=diff
==============================================================================
---
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ha/NodeFencer.java
(original)
+++
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ha/NodeFencer.java
Fri Apr 6 04:56:26 2012
@@ -53,9 +53,6 @@ import com.google.common.collect.Lists;
@InterfaceAudience.Private
@InterfaceStability.Evolving
public class NodeFencer {
- public static final String CONF_METHODS_KEY =
- "dfs.ha.fencing.methods";
-
private static final String CLASS_RE = "([a-zA-Z0-9\\.\\$]+)";
private static final Pattern CLASS_WITH_ARGUMENT =
Pattern.compile(CLASS_RE + "\\((.+?)\\)");
@@ -76,18 +73,18 @@ public class NodeFencer {
private final List<FenceMethodWithArg> methods;
- public NodeFencer(Configuration conf)
+ NodeFencer(Configuration conf, String spec)
throws BadFencingConfigurationException {
- this.methods = parseMethods(conf);
+ this.methods = parseMethods(conf, spec);
}
- public static NodeFencer create(Configuration conf)
+ public static NodeFencer create(Configuration conf, String confKey)
throws BadFencingConfigurationException {
- String confStr = conf.get(CONF_METHODS_KEY);
+ String confStr = conf.get(confKey);
if (confStr == null) {
return null;
}
- return new NodeFencer(conf);
+ return new NodeFencer(conf, confStr);
}
public boolean fence(HAServiceTarget fromSvc) {
@@ -115,10 +112,10 @@ public class NodeFencer {
return false;
}
- private static List<FenceMethodWithArg> parseMethods(Configuration conf)
+ private static List<FenceMethodWithArg> parseMethods(Configuration conf,
+ String spec)
throws BadFencingConfigurationException {
- String confStr = conf.get(CONF_METHODS_KEY);
- String[] lines = confStr.split("\\s*\n\\s*");
+ String[] lines = spec.split("\\s*\n\\s*");
List<FenceMethodWithArg> methods = Lists.newArrayList();
for (String line : lines) {
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ha/TestNodeFencer.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ha/TestNodeFencer.java?rev=1310173&r1=1310172&r2=1310173&view=diff
==============================================================================
---
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ha/TestNodeFencer.java
(original)
+++
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ha/TestNodeFencer.java
Fri Apr 6 04:56:26 2012
@@ -132,8 +132,7 @@ public class TestNodeFencer {
throws BadFencingConfigurationException {
System.err.println("Testing configuration:\n" + confStr);
Configuration conf = new Configuration();
- conf.set(NodeFencer.CONF_METHODS_KEY, confStr);
- return new NodeFencer(conf);
+ return new NodeFencer(conf, confStr);
}
/**
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ha/TestShellCommandFencer.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ha/TestShellCommandFencer.java?rev=1310173&r1=1310172&r2=1310173&view=diff
==============================================================================
---
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ha/TestShellCommandFencer.java
(original)
+++
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ha/TestShellCommandFencer.java
Fri Apr 6 04:56:26 2012
@@ -71,8 +71,7 @@ public class TestShellCommandFencer {
public void testCheckNoArgs() {
try {
Configuration conf = new Configuration();
- conf.set(NodeFencer.CONF_METHODS_KEY, "shell");
- new NodeFencer(conf);
+ new NodeFencer(conf, "shell");
fail("Didn't throw when passing no args to shell");
} catch (BadFencingConfigurationException confe) {
assertTrue(
@@ -85,8 +84,7 @@ public class TestShellCommandFencer {
public void testCheckParensNoArgs() {
try {
Configuration conf = new Configuration();
- conf.set(NodeFencer.CONF_METHODS_KEY, "shell()");
- new NodeFencer(conf);
+ new NodeFencer(conf, "shell()");
fail("Didn't throw when passing no args to shell");
} catch (BadFencingConfigurationException confe) {
assertTrue(