You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2014/11/19 17:18:09 UTC

svn commit: r1640587 - in /lucene/dev/branches/branch_5x: ./ solr/ solr/core/ solr/core/src/java/org/apache/solr/core/ solr/core/src/test/org/apache/solr/core/

Author: markrmiller
Date: Wed Nov 19 16:18:09 2014
New Revision: 1640587

URL: http://svn.apache.org/r1640587
Log:
SOLR-6747: Add an optional caching option as a workaround for SOLR-6586.

Added:
    lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/MockInfoMBean.java
      - copied unchanged from r1640582, lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/MockInfoMBean.java
    lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestSolrDynamicMBean.java
      - copied unchanged from r1640582, lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestSolrDynamicMBean.java
Modified:
    lucene/dev/branches/branch_5x/   (props changed)
    lucene/dev/branches/branch_5x/solr/   (props changed)
    lucene/dev/branches/branch_5x/solr/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/branch_5x/solr/core/   (props changed)
    lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/JmxMonitoredMap.java
    lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestJmxMonitoredMap.java

Modified: lucene/dev/branches/branch_5x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/CHANGES.txt?rev=1640587&r1=1640586&r2=1640587&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_5x/solr/CHANGES.txt Wed Nov 19 16:18:09 2014
@@ -370,6 +370,9 @@ Other Changes
 
 * SOLR-6570: Run SolrZkClient session watch asynchronously. 
  (Ramkumar Aiyengar via Mark Miller)
+ 
+* SOLR-6747: Add an optional caching option as a workaround for SOLR-6586.
+  (Mark Miller, Gregory Chanan)
 
 ==================  4.10.3 ==================
 

Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/JmxMonitoredMap.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/JmxMonitoredMap.java?rev=1640587&r1=1640586&r2=1640587&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/JmxMonitoredMap.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/JmxMonitoredMap.java Wed Nov 19 16:18:09 2014
@@ -53,6 +53,10 @@ public class JmxMonitoredMap<K, V> exten
   private static final Logger LOG = LoggerFactory.getLogger(JmxMonitoredMap.class
           .getName());
 
+  // set to true to use cached statistics NamedLists between getMBeanInfo calls to work
+  // around over calling getStatistics on MBeanInfos when iterating over all attributes (SOLR-6586)
+  private boolean useCachedStatsBetweenGetMBeanInfoCalls = Boolean.getBoolean("useCachedStatsBetweenGetMBeanInfoCalls");
+  
   private MBeanServer server = null;
 
   private String jmxRootName;
@@ -144,7 +148,7 @@ public class JmxMonitoredMap<K, V> exten
         ObjectName name = getObjectName(key, infoBean);
         if (server.isRegistered(name))
           server.unregisterMBean(name);
-        SolrDynamicMBean mbean = new SolrDynamicMBean(coreHashCode, infoBean);
+        SolrDynamicMBean mbean = new SolrDynamicMBean(coreHashCode, infoBean, useCachedStatsBetweenGetMBeanInfoCalls);
         server.registerMBean(mbean, name);
       } catch (Exception e) {
         LOG.warn( "Failed to register info bean: " + key, e);
@@ -213,8 +217,17 @@ public class JmxMonitoredMap<K, V> exten
     private HashSet<String> staticStats;
 
     private String coreHashCode;
-
+    
+    private volatile NamedList cachedDynamicStats;
+    
+    private boolean useCachedStatsBetweenGetMBeanInfoCalls;
+    
     public SolrDynamicMBean(String coreHashCode, SolrInfoMBean managedResource) {
+      this(coreHashCode, managedResource, false);
+    }
+
+    public SolrDynamicMBean(String coreHashCode, SolrInfoMBean managedResource, boolean useCachedStatsBetweenGetMBeanInfoCalls) {
+      this.useCachedStatsBetweenGetMBeanInfoCalls = useCachedStatsBetweenGetMBeanInfoCalls;
       this.infoBean = managedResource;
       staticStats = new HashSet<>();
 
@@ -242,6 +255,11 @@ public class JmxMonitoredMap<K, V> exten
 
       try {
         NamedList dynamicStats = infoBean.getStatistics();
+        
+        if (useCachedStatsBetweenGetMBeanInfoCalls) {
+          cachedDynamicStats = dynamicStats;
+        }
+        
         if (dynamicStats != null) {
           for (int i = 0; i < dynamicStats.size(); i++) {
             String name = dynamicStats.getName(i);
@@ -303,8 +321,17 @@ public class JmxMonitoredMap<K, V> exten
           throw new AttributeNotFoundException(attribute);
         }
       } else {
-        NamedList list = infoBean.getStatistics();
-        val = list.get(attribute);
+        NamedList stats = null;
+        if (useCachedStatsBetweenGetMBeanInfoCalls) {
+          NamedList cachedStats = this.cachedDynamicStats;
+          if (cachedStats != null) {
+            stats = cachedStats;
+          }
+        }
+        if (stats == null) {
+          stats = infoBean.getStatistics();
+        }
+        val = stats.get(attribute);
       }
 
       if (val != null) {

Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestJmxMonitoredMap.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestJmxMonitoredMap.java?rev=1640587&r1=1640586&r2=1640587&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestJmxMonitoredMap.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestJmxMonitoredMap.java Wed Nov 19 16:18:09 2014
@@ -32,9 +32,9 @@ import javax.management.remote.JMXConnec
 import javax.management.remote.JMXConnectorFactory;
 import javax.management.remote.JMXServiceURL;
 import javax.management.remote.rmi.RMIConnectorServer;
+
 import java.io.IOException;
 import java.net.ServerSocket;
-import java.net.URL;
 import java.rmi.registry.LocateRegistry;
 import java.rmi.server.RMIServerSocketFactory;
 import java.util.Set;
@@ -175,51 +175,4 @@ public class TestJmxMonitoredMap extends
 
   }
 
-  private class MockInfoMBean implements SolrInfoMBean {
-    @Override
-    public String getName() {
-      return "mock";
-    }
-
-    @Override
-    public Category getCategory() {
-      return Category.OTHER;
-    }
-
-    @Override
-    public String getDescription() {
-      return "mock";
-    }
-
-    @Override
-    public URL[] getDocs() {
-      // TODO Auto-generated method stub
-      return null;
-    }
-
-    @Override
-    public String getVersion() {
-      return "mock";
-    }
-
-    @Override
-    public String getSource() {
-      return "mock";
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public NamedList getStatistics() {
-      NamedList myList = new NamedList<Integer>();
-      myList.add("Integer", 123);
-      myList.add("Double",567.534);
-      myList.add("Long", 32352463l);
-      myList.add("Short", (short) 32768);
-      myList.add("Byte", (byte) 254);
-      myList.add("Float", 3.456f);
-      myList.add("String","testing");
-      return myList;
-    }
-  }
-
 }