浏览代码

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
     startTCPServer(); // Start TCP server
 
 
     if (register) {
     if (register) {
-      ShutdownHookManager.get().addShutdownHook(new Unregister(),
+      ShutdownHookManager.get().addShutdownHook(new NfsShutdownHook(),
           SHUTDOWN_HOOK_PRIORITY);
           SHUTDOWN_HOOK_PRIORITY);
       try {
       try {
         rpcProgram.register(PortmapMapping.TRANSPORT_TCP, nfsBoundPort);
         rpcProgram.register(PortmapMapping.TRANSPORT_TCP, nfsBoundPort);
@@ -74,10 +74,11 @@ public abstract class Nfs3Base {
    */
    */
   public static final int SHUTDOWN_HOOK_PRIORITY = 10;
   public static final int SHUTDOWN_HOOK_PRIORITY = 10;
 
 
-  private class Unregister implements Runnable {
+  private class NfsShutdownHook implements Runnable {
     @Override
     @Override
     public synchronized void run() {
     public synchronized void run() {
       rpcProgram.unregister(PortmapMapping.TRANSPORT_TCP, nfsBoundPort);
       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 startDaemons() {}
+  public void stopDaemons() {}
   
   
   @Override
   @Override
   public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
   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.SecurityUtil;
 import org.apache.hadoop.security.UserGroupInformation;
 import org.apache.hadoop.security.UserGroupInformation;
 import org.apache.hadoop.security.authorize.AuthorizationException;
 import org.apache.hadoop.security.authorize.AuthorizationException;
+import org.apache.hadoop.util.JvmPauseMonitor;
 import org.jboss.netty.buffer.ChannelBuffer;
 import org.jboss.netty.buffer.ChannelBuffer;
 import org.jboss.netty.buffer.ChannelBuffers;
 import org.jboss.netty.buffer.ChannelBuffers;
 import org.jboss.netty.channel.Channel;
 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 String writeDumpDir; // The dir save dump files
 
 
   private final RpcCallCache rpcCallCache;
   private final RpcCallCache rpcCallCache;
+  private JvmPauseMonitor pauseMonitor;
 
 
   public RpcProgramNfs3(NfsConfiguration config, DatagramSocket registrationSocket,
   public RpcProgramNfs3(NfsConfiguration config, DatagramSocket registrationSocket,
       boolean allowInsecurePorts) throws IOException {
       boolean allowInsecurePorts) throws IOException {
@@ -219,7 +221,21 @@ public class RpcProgramNfs3 extends RpcProgram implements Nfs3Interface {
 
 
   @Override
   @Override
   public void startDaemons() {
   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.
   // 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.
     HDFS-7259. Unresponseive NFS mount point due to deferred COMMIT response.
     (brandonli)
     (brandonli)
 
 
+    HDFS-7215.Add JvmPauseMonitor to NFS gateway (brandonli)
+
     BREAKDOWN OF HDFS-6134 AND HADOOP-10150 SUBTASKS AND RELATED JIRAS
     BREAKDOWN OF HDFS-6134 AND HADOOP-10150 SUBTASKS AND RELATED JIRAS
   
   
       HDFS-6387. HDFS CLI admin tool for creating & deleting an
       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>
 </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 add the following. Note, debug trace, especially for ONCRPC, can be very verbose.
 
 
     To change logging level:
     To change logging level: