From 4e134a02a4b6f30704b99dfb166dc361daf426ea Mon Sep 17 00:00:00 2001 From: Brandon Li Date: Tue, 21 Oct 2014 11:49:10 -0700 Subject: [PATCH] HDFS-7215.Add JvmPauseMonitor to NFS gateway. Contributed by Brandon Li --- .../org/apache/hadoop/nfs/nfs3/Nfs3Base.java | 5 +++-- .../org/apache/hadoop/oncrpc/RpcProgram.java | 3 ++- .../hadoop/hdfs/nfs/nfs3/RpcProgramNfs3.java | 18 +++++++++++++++++- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 2 ++ .../src/site/apt/HdfsNfsGateway.apt.vm | 4 +++- 5 files changed, 27 insertions(+), 5 deletions(-) diff --git a/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/Nfs3Base.java b/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/Nfs3Base.java index b166330c79..40744bc16c 100644 --- a/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/Nfs3Base.java +++ b/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/nfs/nfs3/Nfs3Base.java @@ -50,7 +50,7 @@ public void start(boolean register) { 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 @@ private void startTCPServer() { */ 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(); } } } diff --git a/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/RpcProgram.java b/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/RpcProgram.java index 3190603593..3343c75e1a 100644 --- a/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/RpcProgram.java +++ b/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/RpcProgram.java @@ -136,8 +136,9 @@ protected void register(PortmapMapping mapEntry, boolean set) { } } - // Start extra daemons + // Start extra daemons or services public void startDaemons() {} + public void stopDaemons() {} @Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) diff --git a/hadoop-hdfs-project/hadoop-hdfs-nfs/src/main/java/org/apache/hadoop/hdfs/nfs/nfs3/RpcProgramNfs3.java b/hadoop-hdfs-project/hadoop-hdfs-nfs/src/main/java/org/apache/hadoop/hdfs/nfs/nfs3/RpcProgramNfs3.java index 40a9043e7c..b1076f2894 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-nfs/src/main/java/org/apache/hadoop/hdfs/nfs/nfs3/RpcProgramNfs3.java +++ b/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.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 @@ private void clearDirectory(String writeDumpDir) throws IOException { @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. diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index dd11cf526e..c2b667e14b 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/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 diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/site/apt/HdfsNfsGateway.apt.vm b/hadoop-hdfs-project/hadoop-hdfs/src/site/apt/HdfsNfsGateway.apt.vm index 4044ae8d50..0e6c482b78 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/site/apt/HdfsNfsGateway.apt.vm +++ b/hadoop-hdfs-project/hadoop-hdfs/src/site/apt/HdfsNfsGateway.apt.vm @@ -171,7 +171,9 @@ HDFS NFS Gateway ---- - * 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: