From 9145ab5887e7528c0428fabca4208a1786e408f4 Mon Sep 17 00:00:00 2001 From: Suresh Srinivas Date: Fri, 5 Aug 2011 01:34:32 +0000 Subject: [PATCH] HADOOP-7455. HA: Introduce HA Service Protocol Interface. Contributed by Suresh Srinivas. git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/HDFS-1623@1154063 13f79535-47bb-0310-9956-ffa450edef68 --- hadoop-common/CHANGES.txt | 2 + .../apache/hadoop/ha/HAServiceProtocol.java | 72 +++++++++++++++++++ .../hadoop/ha/HealthCheckFailedException.java | 55 ++++++++++++++ .../hadoop/ha/ServiceFailedException.java | 56 +++++++++++++++ 4 files changed, 185 insertions(+) create mode 100644 hadoop-common/src/main/java/org/apache/hadoop/ha/HAServiceProtocol.java create mode 100644 hadoop-common/src/main/java/org/apache/hadoop/ha/HealthCheckFailedException.java create mode 100644 hadoop-common/src/main/java/org/apache/hadoop/ha/ServiceFailedException.java diff --git a/hadoop-common/CHANGES.txt b/hadoop-common/CHANGES.txt index c499c750f0..5435ea6814 100644 --- a/hadoop-common/CHANGES.txt +++ b/hadoop-common/CHANGES.txt @@ -63,6 +63,8 @@ Trunk (unreleased changes) HADOOP-6385. dfs should support -rmdir (was HDFS-639). (Daryn Sharp via mattf) + HADOOP-7455. HA: Introduce HA Service Protocol Interface. (suresh) + IMPROVEMENTS HADOOP-7042. Updates to test-patch.sh to include failed test names and diff --git a/hadoop-common/src/main/java/org/apache/hadoop/ha/HAServiceProtocol.java b/hadoop-common/src/main/java/org/apache/hadoop/ha/HAServiceProtocol.java new file mode 100644 index 0000000000..20f0d04bc2 --- /dev/null +++ b/hadoop-common/src/main/java/org/apache/hadoop/ha/HAServiceProtocol.java @@ -0,0 +1,72 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.ha; + +import org.apache.hadoop.classification.InterfaceAudience; +import org.apache.hadoop.classification.InterfaceStability; +import org.apache.hadoop.ipc.VersionedProtocol; + +/** + * Protocol interface that provides High Availability related primitives to + * monitor and fail-over the service. + * + * This interface could be used by HA frameworks to manage the service. + */ +@InterfaceAudience.Public +@InterfaceStability.Evolving +public interface HAServiceProtocol extends VersionedProtocol { + /** + * Initial version of the protocol + */ + public static final long versionID = 1L; + + /** + * Monitor the health of service. This periodically called by the HA + * frameworks to monitor the health of the service. + * + * Service is expected to perform checks to ensure it is functional. + * If the service is not healthy due to failure or partial failure, + * it is expected to throw {@link HealthCheckFailedException}. + * The definition of service not healthy is left to the service. + * + * Note that when health check of an Active service fails, + * failover to standby may be done. + * + * @throws HealthCheckFailedException + * if the health check of a service fails. + */ + public void monitorHealth() throws HealthCheckFailedException; + + /** + * Request service to transition to active state. No operation, if the + * service is already in active state. + * + * @throws ServiceFailedException + * if transition from standby to active fails. + */ + public void transitionToActive() throws ServiceFailedException; + + /** + * Request service to transition to standby state. No operation, if the + * service is already in standby state. + * + * @throws ServiceFailedException + * if transition from active to standby fails. + */ + public void transitionToStandby() throws ServiceFailedException; +} diff --git a/hadoop-common/src/main/java/org/apache/hadoop/ha/HealthCheckFailedException.java b/hadoop-common/src/main/java/org/apache/hadoop/ha/HealthCheckFailedException.java new file mode 100644 index 0000000000..a73e4ef3c2 --- /dev/null +++ b/hadoop-common/src/main/java/org/apache/hadoop/ha/HealthCheckFailedException.java @@ -0,0 +1,55 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.ha; + +import org.apache.hadoop.classification.InterfaceAudience; +import org.apache.hadoop.classification.InterfaceStability; + +/** + * Exception thrown to indicate that health check of a service + * failed. + */ +@InterfaceAudience.Public +@InterfaceStability.Evolving +public class HealthCheckFailedException extends Exception { + private static final long serialVersionUID = 1L; + + /** + * Constructs exception with the specified detail message. + * @param message the detail message (which is saved for later retrieval + * by the {@link #getMessage()} method). + */ + public HealthCheckFailedException(final String message) { + super(message); + } + + /** + * Constructs a new exception with the specified detail message and + * cause. + * + * @param message the detail message (which is saved for later retrieval + * by the {@link #getMessage()} method). + * @param cause the cause (which is saved for later retrieval by the + * {@link #getCause()} method). (A null value is + * permitted, and indicates that the cause is nonexistent or + * unknown.) + */ + public HealthCheckFailedException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/hadoop-common/src/main/java/org/apache/hadoop/ha/ServiceFailedException.java b/hadoop-common/src/main/java/org/apache/hadoop/ha/ServiceFailedException.java new file mode 100644 index 0000000000..e0f8cfc837 --- /dev/null +++ b/hadoop-common/src/main/java/org/apache/hadoop/ha/ServiceFailedException.java @@ -0,0 +1,56 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.ha; + +import org.apache.hadoop.classification.InterfaceAudience; +import org.apache.hadoop.classification.InterfaceStability; + + +/** + * Exception thrown to indicate that an operation performed + * to modify the state of a service or application failed. + */ +@InterfaceAudience.Public +@InterfaceStability.Evolving +public class ServiceFailedException extends Exception { + private static final long serialVersionUID = 1L; + + /** + * Constructs exception with the specified detail message. + * @param message the detail message (which is saved for later retrieval + * by the {@link #getMessage()} method). + */ + public ServiceFailedException(final String message) { + super(message); + } + + /** + * Constructs a new exception with the specified detail message and + * cause. + * + * @param message the detail message (which is saved for later retrieval + * by the {@link #getMessage()} method). + * @param cause the cause (which is saved for later retrieval by the + * {@link #getCause()} method). (A null value is + * permitted, and indicates that the cause is nonexistent or + * unknown.) + */ + public ServiceFailedException(String message, Throwable cause) { + super(message, cause); + } +}