You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2015/09/12 12:59:55 UTC

svn commit: r1702614 - in /lucene/dev/branches/branch_5x: ./ solr/ solr/core/ solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java solr/core/src/test/org/apache/solr/handler/admin/SystemInfoHandlerTest.java

Author: uschindler
Date: Sat Sep 12 10:59:53 2015
New Revision: 1702614

URL: http://svn.apache.org/r1702614
Log:
Merged revision(s) 1702613 from lucene/dev/trunk:
LUCENE-6795: Fix SystemInfoHandler to work with Java 9 Jigsaw

Modified:
    lucene/dev/branches/branch_5x/   (props changed)
    lucene/dev/branches/branch_5x/solr/   (props changed)
    lucene/dev/branches/branch_5x/solr/core/   (props changed)
    lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java
    lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/admin/SystemInfoHandlerTest.java

Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java?rev=1702614&r1=1702613&r2=1702614&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java Sat Sep 12 10:59:53 2015
@@ -24,7 +24,6 @@ import java.io.InputStreamReader;
 import java.lang.management.ManagementFactory;
 import java.lang.management.OperatingSystemMXBean;
 import java.lang.management.RuntimeMXBean;
-import java.lang.reflect.Method;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.nio.charset.Charset;
@@ -165,17 +164,29 @@ public class SystemInfoHandler extends R
     info.add( "arch", os.getArch() );
     info.add( "systemLoadAverage", os.getSystemLoadAverage());
 
+    // This is a public Oracle/OpenJDK extension, but may not be in other JDKs:
     // com.sun.management.OperatingSystemMXBean
-    addGetterIfAvaliable( os, "committedVirtualMemorySize", info);
-    addGetterIfAvaliable( os, "freePhysicalMemorySize", info);
-    addGetterIfAvaliable( os, "freeSwapSpaceSize", info);
-    addGetterIfAvaliable( os, "processCpuTime", info);
-    addGetterIfAvaliable( os, "totalPhysicalMemorySize", info);
-    addGetterIfAvaliable( os, "totalSwapSpaceSize", info);
+    try {
+      Class<?> intf = Class.forName("com.sun.management.OperatingSystemMXBean");
+      addGetterIfAvaliable( os, intf, "committedVirtualMemorySize", info);
+      addGetterIfAvaliable( os, intf, "freePhysicalMemorySize", info);
+      addGetterIfAvaliable( os, intf, "freeSwapSpaceSize", info);
+      addGetterIfAvaliable( os, intf, "processCpuTime", info);
+      addGetterIfAvaliable( os, intf, "totalPhysicalMemorySize", info);
+      addGetterIfAvaliable( os, intf, "totalSwapSpaceSize", info);
+    } catch (Exception e) {
+      // ignore
+    }
 
+    // This is a public Oracle/OpenJDK extension, but may not be in other JDKs:
     // com.sun.management.UnixOperatingSystemMXBean
-    addGetterIfAvaliable( os, "openFileDescriptorCount", info );
-    addGetterIfAvaliable( os, "maxFileDescriptorCount", info );
+    try {
+      Class<?> intf = Class.forName("com.sun.management.UnixOperatingSystemMXBean");
+      addGetterIfAvaliable( os, intf, "openFileDescriptorCount", info );
+      addGetterIfAvaliable( os, intf, "maxFileDescriptorCount", info );
+    } catch (Exception e) {
+      // ignore
+    }
 
     try { 
       if( !os.getName().toLowerCase(Locale.ROOT).startsWith( "windows" ) ) {
@@ -183,9 +194,8 @@ public class SystemInfoHandler extends R
         info.add( "uname",  execute( "uname -a" ) );
         info.add( "uptime", execute( "uptime" ) );
       }
-    }
-    catch( Exception ex ) {
-      ex.printStackTrace();
+    } catch( Exception ex ) {
+      log.warn("Unable to execute command line tools.", ex);
     } 
     return info;
   }
@@ -199,19 +209,17 @@ public class SystemInfoHandler extends R
    * 
    * it is package protected so it can be tested...
    */
-  static void addGetterIfAvaliable( Object obj, String getter, NamedList<Object> info )
+  static void addGetterIfAvaliable( Object obj, Class<?> intf, String property, NamedList<Object> info )
   {
-    // This is a 1.6 function, so lets do a little magic to *try* to make it work
     try {
-      String n = Character.toUpperCase( getter.charAt(0) ) + getter.substring( 1 );
-      Method m = obj.getClass().getMethod( "get" + n );
-      m.setAccessible(true);
-      Object v = m.invoke( obj, (Object[])null );
+      String method = "get" + Character.toUpperCase( property.charAt(0) ) + property.substring( 1 );
+      Object v = intf.getMethod( method ).invoke( intf.cast(obj) );
       if( v != null ) {
-        info.add( getter, v );
+        info.add( property, v );
       }
+    } catch( Exception ex ) {
+      // ignore
     }
-    catch( Exception ex ) {} // don't worry, this only works for 1.6
   }
   
   

Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/admin/SystemInfoHandlerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/admin/SystemInfoHandlerTest.java?rev=1702614&r1=1702613&r2=1702614&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/admin/SystemInfoHandlerTest.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/admin/SystemInfoHandlerTest.java Sat Sep 12 10:59:53 2015
@@ -38,9 +38,9 @@ public class SystemInfoHandlerTest exten
 
     // make another using addGetterIfAvaliable 
     SimpleOrderedMap<Object> info2 = new SimpleOrderedMap<>();
-    SystemInfoHandler.addGetterIfAvaliable( os, "name", info2 );
-    SystemInfoHandler.addGetterIfAvaliable( os, "version", info2 );
-    SystemInfoHandler.addGetterIfAvaliable( os, "arch", info2 );
+    SystemInfoHandler.addGetterIfAvaliable( os, OperatingSystemMXBean.class, "name", info2 );
+    SystemInfoHandler.addGetterIfAvaliable( os, OperatingSystemMXBean.class, "version", info2 );
+    SystemInfoHandler.addGetterIfAvaliable( os, OperatingSystemMXBean.class, "arch", info2 );
     
     // make sure they got the same thing
     assertEquals( info.toString(), info2.toString() );