You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by db...@apache.org on 2013/06/03 02:56:38 UTC
git commit: Backport from 2.0 - Expose whether jna is enabled and
memory is locked via JMX patch by dbrosius reviewed by jbellis for
cassandra-5508
Updated Branches:
refs/heads/cassandra-1.2 456e91d18 -> 11eb35291
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/cassandra-1.2
Commit: 11eb35291643d99bf5a3a1879a3b7356ff3d4bdd
Parents: 456e91d
Author: Dave Brosius <db...@apache.org>
Authored: Sun Jun 2 13:37:08 2013 -0400
Committer: Dave Brosius <db...@apache.org>
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)