You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by cm...@apache.org on 2013/09/14 02:05:30 UTC

svn commit: r1523153 - in /hadoop/common/branches/HDFS-4949/hadoop-common-project/hadoop-common/src: main/java/org/apache/hadoop/io/nativeio/ main/native/src/org/apache/hadoop/io/nativeio/ test/java/org/apache/hadoop/io/nativeio/

Author: cmccabe
Date: Sat Sep 14 00:05:29 2013
New Revision: 1523153

URL: http://svn.apache.org/r1523153
Log:
HDFS-5201. NativeIO: consolidate getrlimit into NativeIO#getMemlockLimit. (Contributed by Colin Patrick McCabe)

Modified:
    hadoop/common/branches/HDFS-4949/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/nativeio/NativeIO.java
    hadoop/common/branches/HDFS-4949/hadoop-common-project/hadoop-common/src/main/native/src/org/apache/hadoop/io/nativeio/NativeIO.c
    hadoop/common/branches/HDFS-4949/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/nativeio/TestNativeIO.java

Modified: hadoop/common/branches/HDFS-4949/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/nativeio/NativeIO.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4949/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/nativeio/NativeIO.java?rev=1523153&r1=1523152&r2=1523153&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4949/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/nativeio/NativeIO.java (original)
+++ hadoop/common/branches/HDFS-4949/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/nativeio/NativeIO.java Sat Sep 14 00:05:29 2013
@@ -272,44 +272,6 @@ public class NativeIO {
       munlock_native(buffer, len);
     }
 
-    /**
-     * Resource limit types copied from <sys/resource.h>
-     */
-    private static class ResourceLimit {
-      public static final int RLIMIT_CPU        = 0;
-      public static final int RLIMIT_FSIZE      = 1;
-      public static final int RLIMIT_DATA       = 2;
-      public static final int RLIMIT_STACK      = 3;
-      public static final int RLIMIT_CORE       = 4;
-      public static final int RLIMIT_RSS        = 5;
-      public static final int RLIMIT_NPROC      = 6;
-      public static final int RLIMIT_NOFILE     = 7;
-      public static final int RLIMIT_MEMLOCK    = 8;
-      public static final int RLIMIT_AS         = 9;
-      public static final int RLIMIT_LOCKS      = 10;
-      public static final int RLIMIT_SIGPENDING = 11;
-      public static final int RLIMIT_MSGQUEUE   = 12;
-      public static final int RLIMIT_NICE       = 13;
-      public static final int RLIMIT_RTPRIO     = 14;
-      public static final int RLIMIT_RTTIME     = 15;
-      public static final int RLIMIT_NLIMITS    = 16;
-    }
-
-    static native String getrlimit(int limit) throws NativeIOException;
-    /**
-     * Returns the soft limit on the number of bytes that may be locked by the
-     * process in bytes (RLIMIT_MEMLOCK).
-     * 
-     * See the getrlimit(2) man page for more information
-     *  
-     * @return maximum amount of locked memory in bytes
-     */
-    public static long getMemlockLimit() throws IOException {
-      assertCodeLoaded();
-      String strLimit = getrlimit(ResourceLimit.RLIMIT_MEMLOCK);
-      return Long.parseLong(strLimit);
-    }
-
     /** Linux only methods used for getOwner() implementation */
     private static native long getUIDforFDOwnerforOwner(FileDescriptor fd) throws IOException;
     private static native String getUserName(long uid) throws IOException;
@@ -563,6 +525,20 @@ public class NativeIO {
   /** Initialize the JNI method ID and class ID cache */
   private static native void initNative();
 
+  /**
+   * Get the maximum number of bytes that can be locked into memory at any
+   * given point.
+   *
+   * @return 0 if no bytes can be locked into memory;
+   *         Long.MAX_VALUE if there is no limit;
+   *         The number of bytes that can be locked into memory otherwise.
+   */
+  public static long getMemlockLimit() {
+    return isAvailable() ? getMemlockLimit0() : 0;
+  }
+
+  private static native long getMemlockLimit0();
+  
   private static class CachedUid {
     final long timestamp;
     final String username;

Modified: hadoop/common/branches/HDFS-4949/hadoop-common-project/hadoop-common/src/main/native/src/org/apache/hadoop/io/nativeio/NativeIO.c
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4949/hadoop-common-project/hadoop-common/src/main/native/src/org/apache/hadoop/io/nativeio/NativeIO.c?rev=1523153&r1=1523152&r2=1523153&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4949/hadoop-common-project/hadoop-common/src/main/native/src/org/apache/hadoop/io/nativeio/NativeIO.c (original)
+++ hadoop/common/branches/HDFS-4949/hadoop-common-project/hadoop-common/src/main/native/src/org/apache/hadoop/io/nativeio/NativeIO.c Sat Sep 14 00:05:29 2013
@@ -16,8 +16,6 @@
  * limitations under the License.
  */
 
-#define _GNU_SOURCE
-
 #include "org_apache_hadoop.h"
 #include "org_apache_hadoop_io_nativeio_NativeIO.h"
 
@@ -28,6 +26,7 @@
 #include <grp.h>
 #include <jni.h>
 #include <pwd.h>
+#include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -414,36 +413,6 @@ Java_org_apache_hadoop_io_nativeio_Nativ
   }
 }
 
-/**
- * public static native String getrlimit(
- *   int resource);
- *
- * The "00024" in the function name is an artifact of how JNI encodes
- * special characters. U+0024 is '$'.
- */
-JNIEXPORT jstring JNICALL
-Java_org_apache_hadoop_io_nativeio_NativeIO_00024POSIX_getrlimit(
-  JNIEnv *env, jclass clazz,
-  jint resource)
-{
-  jstring ret = NULL;
-
-  struct rlimit rlim;
-  int rc = getrlimit((int)resource, &rlim);
-  if (rc != 0) {
-    throw_ioe(env, errno);
-    goto cleanup;
-  }
-
-  // Convert soft limit into a string
-  char limit[17];
-  int len = snprintf(&limit, 17, "%d", rlim.rlim_cur);
-  ret = (*env)->NewStringUTF(env,&limit);
-
-cleanup:
-  return ret;
-}
-
 #ifdef __FreeBSD__
 static int toFreeBSDFlags(int flags)
 {
@@ -1008,6 +977,24 @@ done:
 #endif
 }
 
+JNIEXPORT jlong JNICALL
+Java_org_apache_hadoop_io_nativeio_NativeIO_getMemlockLimit0(
+JNIEnv *env, jclass clazz)
+{
+#ifdef WINDOWS
+  return 0;
+#else
+  struct rlimit rlim;
+  int rc = getrlimit(RLIMIT_MEMLOCK, &rlim);
+  if (rc != 0) {
+    throw_ioe(env, errno);
+    return 0;
+  }
+  return (rlim.rlim_cur == RLIM_INFINITY) ?
+    INT64_MAX : rlim.rlim_cur;
+#endif
+}
+
 /**
  * vim: sw=2: ts=2: et:
  */

Modified: hadoop/common/branches/HDFS-4949/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/nativeio/TestNativeIO.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4949/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/nativeio/TestNativeIO.java?rev=1523153&r1=1523152&r2=1523153&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4949/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/nativeio/TestNativeIO.java (original)
+++ hadoop/common/branches/HDFS-4949/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/nativeio/TestNativeIO.java Sat Sep 14 00:05:29 2013
@@ -583,6 +583,6 @@ public class TestNativeIO {
   @Test(timeout=10000)
   public void testGetMemlockLimit() throws Exception {
     assumeTrue(NativeIO.isAvailable());
-    NativeIO.POSIX.getMemlockLimit();
+    NativeIO.getMemlockLimit();
   }
 }