Updated Branches: refs/heads/trunk 19ad1ca4b -> 3d1e29bd1
Backport from 2.0 - Expose whether jna is enabled and memory is locked via JMX patch by dbrosius reviewed by jbellis for cassandra-5508 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/11eb3529 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/11eb3529 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/11eb3529 Branch: refs/heads/trunk Commit: 11eb35291643d99bf5a3a1879a3b7356ff3d4bdd Parents: 456e91d Author: Dave Brosius <[email protected]> Authored: Sun Jun 2 13:37:08 2013 -0400 Committer: Dave Brosius <[email protected]> Committed: Sun Jun 2 13:37:08 2013 -0400 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../apache/cassandra/service/CassandraDaemon.java | 31 +++++++++++++++ .../cassandra/service/NativeAccessMBean.java | 25 ++++++++++++ src/java/org/apache/cassandra/utils/CLibrary.java | 15 +++++++ 4 files changed, 72 insertions(+), 0 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/11eb3529/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 8aa0138..6e05a51 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -15,6 +15,7 @@ * Add a rate limit option to stress (CASSANDRA-5004) * have BulkLoader ignore snapshots directories (CASSANDRA-5587) * fix SnitchProperties logging context (CASSANDRA-5602) + * Expose whether jna is enabled and memory is locked via JMX (CASSANDRA-5508) Merged from 1.1: * Remove buggy thrift max message length option (CASSANDRA-5529) * Fix NPE in Pig's widerow mode (CASSANDRA-5488) http://git-wip-us.apache.org/repos/asf/cassandra/blob/11eb3529/src/java/org/apache/cassandra/service/CassandraDaemon.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/CassandraDaemon.java b/src/java/org/apache/cassandra/service/CassandraDaemon.java index 343d497..53c653f 100644 --- a/src/java/org/apache/cassandra/service/CassandraDaemon.java +++ b/src/java/org/apache/cassandra/service/CassandraDaemon.java @@ -19,6 +19,7 @@ package org.apache.cassandra.service; import java.io.File; import java.io.IOException; +import java.lang.management.ManagementFactory; import java.net.InetAddress; import java.net.MalformedURLException; import java.net.URL; @@ -26,6 +27,10 @@ import java.util.Arrays; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; +import javax.management.MBeanServer; +import javax.management.ObjectName; +import javax.management.StandardMBean; + import com.google.common.collect.Iterables; import org.apache.log4j.PropertyConfigurator; import org.slf4j.Logger; @@ -53,6 +58,8 @@ import org.apache.cassandra.utils.Mx4jTool; */ public class CassandraDaemon { + public static final String MBEAN_NAME = "org.apache.cassandra.db:type=NativeAccess"; + static { initLog4j(); @@ -420,6 +427,17 @@ public class CassandraDaemon try { + try + { + MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); + mbs.registerMBean(new StandardMBean(new NativeAccess(), NativeAccessMBean.class), new ObjectName(MBEAN_NAME)); + } + catch (Exception e) + { + logger.error("error registering MBean " + MBEAN_NAME, e); + //Allow the server to start even if the bean can't be registered + } + setup(); if (pidFile != null) @@ -465,6 +483,19 @@ public class CassandraDaemon { instance.activate(); } + + static class NativeAccess implements NativeAccessMBean + { + public boolean isAvailable() + { + return CLibrary.jnaAvailable(); + } + + public boolean isMemoryLockable() + { + return CLibrary.jnaMemoryLockable(); + } + } public interface Server { http://git-wip-us.apache.org/repos/asf/cassandra/blob/11eb3529/src/java/org/apache/cassandra/service/NativeAccessMBean.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/NativeAccessMBean.java b/src/java/org/apache/cassandra/service/NativeAccessMBean.java new file mode 100644 index 0000000..e1f21c2 --- /dev/null +++ b/src/java/org/apache/cassandra/service/NativeAccessMBean.java @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cassandra.service; + +public interface NativeAccessMBean +{ + boolean isAvailable(); + + boolean isMemoryLockable(); +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cassandra/blob/11eb3529/src/java/org/apache/cassandra/utils/CLibrary.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/utils/CLibrary.java b/src/java/org/apache/cassandra/utils/CLibrary.java index f8ad9d1..b0853c1 100644 --- a/src/java/org/apache/cassandra/utils/CLibrary.java +++ b/src/java/org/apache/cassandra/utils/CLibrary.java @@ -49,12 +49,16 @@ public final class CLibrary private static final int POSIX_FADV_WILLNEED = 3; /* fadvise.h */ private static final int POSIX_FADV_DONTNEED = 4; /* fadvise.h */ private static final int POSIX_FADV_NOREUSE = 5; /* fadvise.h */ + + static boolean jnaAvailable = false; + static boolean jnaLockable = false; static { try { Native.register("c"); + jnaAvailable = true; } catch (NoClassDefFoundError e) { @@ -101,12 +105,23 @@ public final class CLibrary } private CLibrary() {} + + public static boolean jnaAvailable() + { + return jnaAvailable; + } + + public static boolean jnaMemoryLockable() + { + return jnaLockable; + } public static void tryMlockall() { try { mlockall(MCL_CURRENT); + jnaLockable = true; logger.info("JNA mlockall successful"); } catch (UnsatisfiedLinkError e)
