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();
}
}