浏览代码

HDFS-7215.Add JvmPauseMonitor to NFS gateway. Contributed by Brandon Li

Brandon Li 10 年之前
父节点
当前提交
4e134a02a4

+ 3 - 2
hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/Nfs3Base.java

@@ -50,7 +50,7 @@ public abstract class Nfs3Base {
     startTCPServer(); // Start TCP server
 
     if (register) {
-      ShutdownHookManager.get().addShutdownHook(new Unregister(),
+      ShutdownHookManager.get().addShutdownHook(new NfsShutdownHook(),
           SHUTDOWN_HOOK_PRIORITY);
       try {
         rpcProgram.register(PortmapMapping.TRANSPORT_TCP, nfsBoundPort);
@@ -74,10 +74,11 @@ public abstract class Nfs3Base {
    */
   public static final int SHUTDOWN_HOOK_PRIORITY = 10;
 
-  private class Unregister implements Runnable {
+  private class NfsShutdownHook implements Runnable {
     @Override
     public synchronized void run() {
       rpcProgram.unregister(PortmapMapping.TRANSPORT_TCP, nfsBoundPort);
+      rpcProgram.stopDaemons();
     }
   }
 }

+ 2 - 1
hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/RpcProgram.java

@@ -136,8 +136,9 @@ public abstract class RpcProgram extends SimpleChannelUpstreamHandler {
     }
   }
 
-  // Start extra daemons
+  // Start extra daemons or services
   public void startDaemons() {}
+  public void stopDaemons() {}
   
   @Override
   public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)

+ 17 - 1
hadoop-hdfs-project/hadoop-hdfs-nfs/src/main/java/org/apache/hadoop/hdfs/nfs/nfs3/RpcProgramNfs3.java

@@ -126,6 +126,7 @@ import org.apache.hadoop.security.AccessControlException;
 import org.apache.hadoop.security.SecurityUtil;
 import org.apache.hadoop.security.UserGroupInformation;
 import org.apache.hadoop.security.authorize.AuthorizationException;
+import org.apache.hadoop.util.JvmPauseMonitor;
 import org.jboss.netty.buffer.ChannelBuffer;
 import org.jboss.netty.buffer.ChannelBuffers;
 import org.jboss.netty.channel.Channel;
@@ -158,6 +159,7 @@ public class RpcProgramNfs3 extends RpcProgram implements Nfs3Interface {
   private String writeDumpDir; // The dir save dump files
 
   private final RpcCallCache rpcCallCache;
+  private JvmPauseMonitor pauseMonitor;
 
   public RpcProgramNfs3(NfsConfiguration config, DatagramSocket registrationSocket,
       boolean allowInsecurePorts) throws IOException {
@@ -219,7 +221,21 @@ public class RpcProgramNfs3 extends RpcProgram implements Nfs3Interface {
 
   @Override
   public void startDaemons() {
-     writeManager.startAsyncDataSerivce();
+    if (pauseMonitor == null) {
+      pauseMonitor = new JvmPauseMonitor(config);
+      pauseMonitor.start();
+    }
+    writeManager.startAsyncDataSerivce();
+  }
+
+  @Override
+  public void stopDaemons() {
+    if (writeManager != null) {
+      writeManager.shutdownAsyncDataService();
+    }
+    if (pauseMonitor != null) {
+      pauseMonitor.stop();
+    }
   }
 
   // Checks the type of IOException and maps it to appropriate Nfs3Status code.

+ 2 - 0
hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt

@@ -979,6 +979,8 @@ Release 2.6.0 - UNRELEASED
     HDFS-7259. Unresponseive NFS mount point due to deferred COMMIT response.
     (brandonli)
 
+    HDFS-7215.Add JvmPauseMonitor to NFS gateway (brandonli)
+
     BREAKDOWN OF HDFS-6134 AND HADOOP-10150 SUBTASKS AND RELATED JIRAS
   
       HDFS-6387. HDFS CLI admin tool for creating & deleting an

+ 3 - 1
hadoop-hdfs-project/hadoop-hdfs/src/site/apt/HdfsNfsGateway.apt.vm

@@ -171,7 +171,9 @@ HDFS NFS Gateway
 </property>
 ----
 
-  * Customize log settings. To get NFS debug trace, users can edit the log4j.property file 
+  * JVM and log settings. You can export JVM settings (e.g., heap size and GC log) in 
+   HADOOP_NFS3_OPTS. More NFS related settings can be found in hadoop-env.sh. 
+   To get NFS debug trace, you can edit the log4j.property file 
    to add the following. Note, debug trace, especially for ONCRPC, can be very verbose.
 
     To change logging level: