Author: eli
Date: Thu Mar 29 15:49:36 2012
New Revision: 1306936
URL: http://svn.apache.org/viewvc?rev=1306936&view=rev
Log:
HADOOP-8208. svn merge -c 1306935 from trunk
Modified:
hadoop/common/branches/branch-2/hadoop-common-project/ (props changed)
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-auth/ (props
changed)
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/
(props changed)
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt
(contents, props changed)
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/docs/
(props changed)
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/
(props changed)
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ha/FailoverController.java
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/core/
(props changed)
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ha/TestFailoverController.java
Propchange: hadoop/common/branches/branch-2/hadoop-common-project/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-common-project:r1306935
Propchange: hadoop/common/branches/branch-2/hadoop-common-project/hadoop-auth/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-common-project/hadoop-auth:r1306935
Propchange: hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-common-project/hadoop-common:r1306935
Modified:
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1306936&r1=1306935&r2=1306936&view=diff
==============================================================================
---
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt
(original)
+++
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt
Thu Mar 29 15:49:36 2012
@@ -336,6 +336,8 @@ Release 0.23.2 - UNRELEASED
HADOOP-8088. User-group mapping cache incorrectly does negative caching on
transient failures (Khiwal Lee via bobby)
+ HADOOP-8208. Disallow self failover. (eli)
+
Release 0.23.1 - 2012-02-17
INCOMPATIBLE CHANGES
Propchange:
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt
------------------------------------------------------------------------------
Merged
/hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt:r1306935
Propchange:
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/docs/
------------------------------------------------------------------------------
Merged
/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/docs:r1306935
Propchange:
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/
------------------------------------------------------------------------------
Merged
/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java:r1306935
Modified:
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ha/FailoverController.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ha/FailoverController.java?rev=1306936&r1=1306935&r2=1306936&view=diff
==============================================================================
---
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ha/FailoverController.java
(original)
+++
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ha/FailoverController.java
Thu Mar 29 15:49:36 2012
@@ -54,16 +54,23 @@ public class FailoverController {
* allow it to become active, eg because it triggers a log roll
* so the standby can learn about new blocks and leave safemode.
*
+ * @param from currently active service
* @param target service to make active
* @param forceActive ignore toSvc if it reports that it is not ready
* @throws FailoverFailedException if we should avoid failover
*/
- private static void preFailoverChecks(HAServiceTarget target,
+ private static void preFailoverChecks(HAServiceTarget from,
+ HAServiceTarget target,
boolean forceActive)
throws FailoverFailedException {
HAServiceStatus toSvcStatus;
HAServiceProtocol toSvc;
+ if (from.getAddress().equals(target.getAddress())) {
+ throw new FailoverFailedException(
+ "Can't failover a service to itself");
+ }
+
try {
toSvc = target.getProxy();
toSvcStatus = toSvc.getServiceStatus();
@@ -146,7 +153,7 @@ public class FailoverController {
throws FailoverFailedException {
Preconditions.checkArgument(fromSvc.getFencer() != null,
"failover requires a fencer");
- preFailoverChecks(toSvc, forceActive);
+ preFailoverChecks(fromSvc, toSvc, forceActive);
// Try to make fromSvc standby
boolean tryFence = true;
Propchange:
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/core/
------------------------------------------------------------------------------
Merged
/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/core:r1306935
Modified:
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ha/TestFailoverController.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ha/TestFailoverController.java?rev=1306936&r1=1306935&r2=1306936&view=diff
==============================================================================
---
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ha/TestFailoverController.java
(original)
+++
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ha/TestFailoverController.java
Thu Mar 29 15:49:36 2012
@@ -377,4 +377,31 @@ public class TestFailoverController {
assertEquals(HAServiceState.STANDBY, svc1.state);
assertEquals(HAServiceState.STANDBY, svc2.state);
}
+
+ @Test
+ public void testSelfFailoverFails() throws Exception {
+ DummyHAService svc1 = new DummyHAService(HAServiceState.ACTIVE, svc1Addr);
+ DummyHAService svc2 = new DummyHAService(HAServiceState.STANDBY, svc2Addr);
+ svc1.fencer = svc2.fencer =
setupFencer(AlwaysSucceedFencer.class.getName());
+ AlwaysSucceedFencer.fenceCalled = 0;
+
+ try {
+ FailoverController.failover(svc1, svc1, false, false);
+ fail("Can't failover to yourself");
+ } catch (FailoverFailedException ffe) {
+ // Expected
+ }
+ assertEquals(0, TestNodeFencer.AlwaysSucceedFencer.fenceCalled);
+ assertEquals(HAServiceState.ACTIVE, svc1.state);
+
+ try {
+ FailoverController.failover(svc2, svc2, false, false);
+ fail("Can't failover to yourself");
+ } catch (FailoverFailedException ffe) {
+ // Expected
+ }
+ assertEquals(0, TestNodeFencer.AlwaysSucceedFencer.fenceCalled);
+ assertEquals(HAServiceState.STANDBY, svc2.state);
+ }
+
}