HDFS-2671. NN should throw StandbyException in response to RPCs in STANDBY state. Contributed by Todd Lipcon.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/HDFS-1623@1214117 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Todd Lipcon 2011-12-14 08:56:21 +00:00
parent d5a658e7a4
commit 7e8accd68e
6 changed files with 21 additions and 11 deletions

View File

@ -49,3 +49,5 @@ HDFS-2625. TestDfsOverAvroRpc failing after introduction of HeartbeatResponse ty
HDFS-2627. Determine DN's view of which NN is active based on heartbeat responses (todd)
HDFS-2634. Standby needs to ingest latest edit logs before transitioning to active (todd)
HDFS-2671. NN should throw StandbyException in response to RPCs in STANDBY state (todd)

View File

@ -43,6 +43,7 @@ import org.apache.hadoop.hdfs.server.protocol.NamenodeProtocol;
import org.apache.hadoop.hdfs.server.protocol.NamenodeRegistration;
import org.apache.hadoop.hdfs.server.protocol.NamespaceInfo;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.StandbyException;
import org.apache.hadoop.net.NetUtils;
import com.google.protobuf.BlockingService;
@ -397,11 +398,11 @@ public class BackupNode extends NameNode {
@Override // NameNode
protected void checkOperation(OperationCategory op)
throws UnsupportedActionException {
throws StandbyException {
if (OperationCategory.JOURNAL != op) {
String msg = "Operation category " + op
+ " is not supported at the BackupNode";
throw new UnsupportedActionException(msg);
throw new StandbyException(msg);
}
}

View File

@ -54,6 +54,7 @@ import org.apache.hadoop.hdfs.server.protocol.JournalProtocol;
import org.apache.hadoop.hdfs.server.protocol.NamenodeProtocol;
import org.apache.hadoop.hdfs.server.protocol.NamenodeProtocols;
import org.apache.hadoop.hdfs.server.protocol.NamenodeRegistration;
import org.apache.hadoop.ipc.StandbyException;
import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
import org.apache.hadoop.net.NetUtils;
import org.apache.hadoop.security.RefreshUserMappingsProtocol;
@ -910,7 +911,7 @@ public class NameNode {
/** Check if an operation of given category is allowed */
protected synchronized void checkOperation(final OperationCategory op)
throws UnsupportedActionException {
throws StandbyException {
state.checkOperation(haContext, op);
}

View File

@ -37,8 +37,7 @@ public class ActiveState extends HAState {
}
@Override
public void checkOperation(HAContext context, OperationCategory op)
throws UnsupportedActionException {
public void checkOperation(HAContext context, OperationCategory op) {
return; // Other than journal all operations are allowed in active state
}

View File

@ -21,6 +21,7 @@ import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.ha.ServiceFailedException;
import org.apache.hadoop.hdfs.server.namenode.NameNode.OperationCategory;
import org.apache.hadoop.hdfs.server.namenode.UnsupportedActionException;
import org.apache.hadoop.ipc.StandbyException;
/**
* Namenode base state to implement state machine pattern.
@ -89,12 +90,8 @@ abstract public class HAState {
* @throws UnsupportedActionException if a given type of operation is not
* supported in this state.
*/
public void checkOperation(final HAContext context, final OperationCategory op)
throws UnsupportedActionException {
String msg = "Operation category " + op + " is not supported in state "
+ context.getState();
throw new UnsupportedActionException(msg);
}
public abstract void checkOperation(final HAContext context, final OperationCategory op)
throws StandbyException;
@Override
public String toString() {

View File

@ -22,6 +22,8 @@ import java.io.IOException;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.ha.ServiceFailedException;
import org.apache.hadoop.hdfs.server.namenode.NameNode;
import org.apache.hadoop.hdfs.server.namenode.NameNode.OperationCategory;
import org.apache.hadoop.ipc.StandbyException;
/**
* Namenode standby state. In this state the namenode acts as warm standby and
@ -66,5 +68,13 @@ public class StandbyState extends HAState {
throw new ServiceFailedException("Failed to stop standby services", e);
}
}
@Override
public void checkOperation(HAContext context, OperationCategory op)
throws StandbyException {
String msg = "Operation category " + op + " is not supported in state "
+ context.getState();
throw new StandbyException(msg);
}
}