You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ab...@apache.org on 2017/03/15 17:03:14 UTC

[3/4] lucene-solr:jira/solr-9959: SOLR-9959 Rename SolrInfoMBean -> SolrInfoBean.

SOLR-9959 Rename SolrInfoMBean -> SolrInfoBean.


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/1624ed75
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/1624ed75
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/1624ed75

Branch: refs/heads/jira/solr-9959
Commit: 1624ed75baf123bac7eeae602c33059e3a25d288
Parents: 15af818
Author: Andrzej Bialecki <ab...@apache.org>
Authored: Wed Mar 15 15:21:42 2017 +0100
Committer: Andrzej Bialecki <ab...@apache.org>
Committed: Wed Mar 15 15:21:42 2017 +0100

----------------------------------------------------------------------
 lucene/tools/junit4/cached-timehints.txt        |   2 +-
 .../org/apache/solr/core/CoreContainer.java     |  40 +--
 .../org/apache/solr/core/DirectoryFactory.java  |   2 +-
 .../apache/solr/core/HdfsDirectoryFactory.java  |   4 +-
 .../java/org/apache/solr/core/PluginBag.java    |   4 +-
 .../src/java/org/apache/solr/core/SolrCore.java |  26 +-
 .../java/org/apache/solr/core/SolrInfoBean.java |  59 ++++
 .../org/apache/solr/core/SolrInfoMBean.java     |  61 ----
 .../apache/solr/core/SolrInfoMBeanWrapper.java  |  50 ----
 .../apache/solr/core/SolrResourceLoader.java    |  18 +-
 .../apache/solr/handler/RequestHandlerBase.java |   5 +-
 .../solr/handler/admin/PluginInfoHandler.java   |  10 +-
 .../solr/handler/admin/SolrInfoBeanHandler.java | 291 ++++++++++++++++++
 .../handler/admin/SolrInfoMBeanHandler.java     | 294 -------------------
 .../solr/handler/component/DebugComponent.java  |   2 +-
 .../solr/handler/component/ExpandComponent.java |   2 +-
 .../solr/handler/component/FacetComponent.java  |   2 +-
 .../handler/component/HighlightComponent.java   |   2 +-
 .../component/HttpShardHandlerFactory.java      |   4 +-
 .../component/MoreLikeThisComponent.java        |   2 +-
 .../solr/handler/component/QueryComponent.java  |   2 +-
 .../component/QueryElevationComponent.java      |   2 +-
 .../handler/component/RealTimeGetComponent.java |   2 +-
 .../solr/handler/component/SearchComponent.java |   5 +-
 .../handler/component/SpellCheckComponent.java  |   2 +-
 .../solr/handler/component/StatsComponent.java  |   2 +-
 .../solr/highlight/HighlightingPluginBase.java  |   6 +-
 .../solr/highlight/SolrBoundaryScanner.java     |   4 +-
 .../org/apache/solr/highlight/SolrEncoder.java  |   4 +-
 .../apache/solr/highlight/SolrFormatter.java    |   4 +-
 .../solr/highlight/SolrFragListBuilder.java     |   4 +-
 .../apache/solr/highlight/SolrFragmenter.java   |   4 +-
 .../solr/highlight/SolrFragmentsBuilder.java    |   4 +-
 .../solr/metrics/SolrCoreMetricManager.java     |  12 +-
 .../org/apache/solr/metrics/SolrMetricInfo.java |  10 +-
 .../apache/solr/metrics/SolrMetricManager.java  |  26 +-
 .../reporters/solr/SolrClusterReporter.java     |  10 +-
 .../apache/solr/request/SolrRequestHandler.java |   4 +-
 .../org/apache/solr/search/QParserPlugin.java   |   5 +-
 .../java/org/apache/solr/search/SolrCache.java  |   4 +-
 .../org/apache/solr/search/SolrCacheBase.java   |   2 +-
 .../apache/solr/search/SolrFieldCacheBean.java  |  68 +++++
 .../apache/solr/search/SolrFieldCacheMBean.java |  68 -----
 .../apache/solr/search/SolrIndexSearcher.java   |   9 +-
 .../apache/solr/servlet/SolrDispatchFilter.java |   4 +-
 .../apache/solr/store/blockcache/Metrics.java   |   9 +-
 .../solr/store/hdfs/HdfsLocalityReporter.java   |   5 +-
 .../solr/update/DirectUpdateHandler2.java       |   2 +-
 .../org/apache/solr/update/HdfsUpdateLog.java   |   4 +-
 .../java/org/apache/solr/update/PeerSync.java   |   4 +-
 .../org/apache/solr/update/SolrIndexWriter.java |  26 +-
 .../org/apache/solr/update/UpdateHandler.java   |   4 +-
 .../java/org/apache/solr/update/UpdateLog.java  |   4 +-
 .../apache/solr/update/UpdateShardHandler.java  |   5 +-
 .../test/org/apache/solr/CursorPagingTest.java  |   6 +-
 .../test/org/apache/solr/SolrInfoBeanTest.java  | 117 ++++++++
 .../test/org/apache/solr/SolrInfoMBeanTest.java | 117 --------
 .../cloud/CollectionsAPIDistributedZkTest.java  |   2 +-
 .../solr/core/ExitableDirectoryReaderTest.java  |   6 +-
 .../solr/core/HdfsDirectoryFactoryTest.java     |   4 +-
 .../test/org/apache/solr/core/MockInfoBean.java |  51 ++++
 .../org/apache/solr/core/MockInfoMBean.java     |  53 ----
 .../test/org/apache/solr/core/SolrCoreTest.java |   6 +-
 .../solr/handler/admin/MBeansHandlerTest.java   |   8 +-
 .../solr/handler/admin/StatsReloadRaceTest.java |   2 +-
 .../solr/metrics/SolrCoreMetricManagerTest.java |   6 +-
 .../solr/metrics/SolrMetricManagerTest.java     |  26 +-
 .../solr/metrics/SolrMetricTestUtils.java       |  10 +-
 .../metrics/SolrMetricsIntegrationTest.java     |   4 +-
 .../metrics/reporters/SolrJmxReporterTest.java  |   6 +-
 .../solr/search/TestReRankQParserPlugin.java    |   4 +-
 .../solr/search/TestSolrFieldCacheMBean.java    |   4 +-
 .../apache/solr/search/TestSolrQueryParser.java |   6 +-
 73 files changed, 791 insertions(+), 857 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/lucene/tools/junit4/cached-timehints.txt
----------------------------------------------------------------------
diff --git a/lucene/tools/junit4/cached-timehints.txt b/lucene/tools/junit4/cached-timehints.txt
index f2b8974..cb3da99 100644
--- a/lucene/tools/junit4/cached-timehints.txt
+++ b/lucene/tools/junit4/cached-timehints.txt
@@ -813,7 +813,7 @@ org.apache.solr.EchoParamsTest=136,170,349,124,140,142,284
 org.apache.solr.MinimalSchemaTest=304,316,467,304,297,755,309
 org.apache.solr.OutputWriterTest=302,276,265,314,244,211,268
 org.apache.solr.SampleTest=339,290,266,243,333,414,355
-org.apache.solr.SolrInfoMBeanTest=1090,1132,644,629,637,1023,735
+org.apache.solr.SolrInfoBeanTest=1090,1132,644,629,637,1023,735
 org.apache.solr.TestDistributedGrouping=13095,9478,8420,9633,10692,9265,10893
 org.apache.solr.TestDistributedSearch=11199,9886,16211,11367,11325,10717,10392
 org.apache.solr.TestDocumentBuilder=10,10,9,13,10,9,10

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/core/CoreContainer.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index 9e22f91..22fcd74 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -480,17 +480,17 @@ public class CoreContainer {
 
     coreContainerWorkExecutor = MetricUtils.instrumentedExecutorService(
         coreContainerWorkExecutor,
-        metricManager.registry(SolrMetricManager.getRegistryName(SolrInfoMBean.Group.node)),
-        SolrMetricManager.mkName("coreContainerWorkExecutor", SolrInfoMBean.Category.CONTAINER.toString(), "threadPool"));
+        metricManager.registry(SolrMetricManager.getRegistryName(SolrInfoBean.Group.node)),
+        SolrMetricManager.mkName("coreContainerWorkExecutor", SolrInfoBean.Category.CONTAINER.toString(), "threadPool"));
 
     shardHandlerFactory = ShardHandlerFactory.newInstance(cfg.getShardHandlerFactoryPluginInfo(), loader);
     if (shardHandlerFactory instanceof SolrMetricProducer) {
       SolrMetricProducer metricProducer = (SolrMetricProducer) shardHandlerFactory;
-      metricProducer.initializeMetrics(metricManager, SolrInfoMBean.Group.node.toString(), "httpShardHandler");
+      metricProducer.initializeMetrics(metricManager, SolrInfoBean.Group.node.toString(), "httpShardHandler");
     }
 
     updateShardHandler = new UpdateShardHandler(cfg.getUpdateShardHandlerConfig());
-    updateShardHandler.initializeMetrics(metricManager, SolrInfoMBean.Group.node.toString(), "updateShardHandler");
+    updateShardHandler.initializeMetrics(metricManager, SolrInfoBean.Group.node.toString(), "updateShardHandler");
 
     solrCores.allocateLazyCores(cfg.getTransientCacheSize(), loader);
 
@@ -517,14 +517,14 @@ public class CoreContainer {
     // may want to add some configuration here in the future
     metricsCollectorHandler.init(null);
     containerHandlers.put(AUTHZ_PATH, securityConfHandler);
-    securityConfHandler.initializeMetrics(metricManager, SolrInfoMBean.Group.node.toString(), AUTHZ_PATH);
+    securityConfHandler.initializeMetrics(metricManager, SolrInfoBean.Group.node.toString(), AUTHZ_PATH);
     containerHandlers.put(AUTHC_PATH, securityConfHandler);
     if(pkiAuthenticationPlugin != null)
       containerHandlers.put(PKIAuthenticationPlugin.PATH, pkiAuthenticationPlugin.getRequestHandler());
 
-    metricManager.loadReporters(cfg.getMetricReporterPlugins(), loader, null, SolrInfoMBean.Group.node);
-    metricManager.loadReporters(cfg.getMetricReporterPlugins(), loader, null, SolrInfoMBean.Group.jvm);
-    metricManager.loadReporters(cfg.getMetricReporterPlugins(), loader, null, SolrInfoMBean.Group.jetty);
+    metricManager.loadReporters(cfg.getMetricReporterPlugins(), loader, null, SolrInfoBean.Group.node);
+    metricManager.loadReporters(cfg.getMetricReporterPlugins(), loader, null, SolrInfoBean.Group.jvm);
+    metricManager.loadReporters(cfg.getMetricReporterPlugins(), loader, null, SolrInfoBean.Group.jetty);
 
     coreConfigService = ConfigSetService.createConfigSetService(cfg, loader, zkSys.zkController);
 
@@ -532,17 +532,17 @@ public class CoreContainer {
 
     // initialize gauges for reporting the number of cores and disk total/free
 
-    String registryName = SolrMetricManager.getRegistryName(SolrInfoMBean.Group.node);
+    String registryName = SolrMetricManager.getRegistryName(SolrInfoBean.Group.node);
     metricManager.registerGauge(registryName, () -> solrCores.getCores().size(),
-        true, "loaded", SolrInfoMBean.Category.CONTAINER.toString(), "cores");
+        true, "loaded", SolrInfoBean.Category.CONTAINER.toString(), "cores");
     metricManager.registerGauge(registryName, () -> solrCores.getCoreNames().size() - solrCores.getCores().size(),
-        true, "lazy",SolrInfoMBean.Category.CONTAINER.toString(), "cores");
+        true, "lazy", SolrInfoBean.Category.CONTAINER.toString(), "cores");
     metricManager.registerGauge(registryName, () -> solrCores.getAllCoreNames().size() - solrCores.getCoreNames().size(),
-        true, "unloaded",SolrInfoMBean.Category.CONTAINER.toString(), "cores");
+        true, "unloaded", SolrInfoBean.Category.CONTAINER.toString(), "cores");
     metricManager.registerGauge(registryName, () -> cfg.getCoreRootDirectory().toFile().getTotalSpace(),
-        true, "totalSpace", SolrInfoMBean.Category.CONTAINER.toString(), "fs");
+        true, "totalSpace", SolrInfoBean.Category.CONTAINER.toString(), "fs");
     metricManager.registerGauge(registryName, () -> cfg.getCoreRootDirectory().toFile().getUsableSpace(),
-        true, "usableSpace", SolrInfoMBean.Category.CONTAINER.toString(), "fs");
+        true, "usableSpace", SolrInfoBean.Category.CONTAINER.toString(), "fs");
 
     if (isZooKeeperAware()) {
       metricManager.loadClusterReporters(cfg.getMetricReporterPlugins(), this);
@@ -553,8 +553,8 @@ public class CoreContainer {
         ExecutorUtil.newMDCAwareFixedThreadPool(
             cfg.getCoreLoadThreadCount(isZooKeeperAware()),
             new DefaultSolrThreadFactory("coreLoadExecutor")),
-        metricManager.registry(SolrMetricManager.getRegistryName(SolrInfoMBean.Group.node)),
-        SolrMetricManager.mkName("coreLoadExecutor",SolrInfoMBean.Category.CONTAINER.toString(), "threadPool"));
+        metricManager.registry(SolrMetricManager.getRegistryName(SolrInfoBean.Group.node)),
+        SolrMetricManager.mkName("coreLoadExecutor", SolrInfoBean.Category.CONTAINER.toString(), "threadPool"));
     final List<Future<SolrCore>> futures = new ArrayList<>();
     try {
       List<CoreDescriptor> cds = coresLocator.discover(this);
@@ -672,14 +672,14 @@ public class CoreContainer {
 
     ExecutorUtil.shutdownAndAwaitTermination(coreContainerWorkExecutor);
     if (metricManager != null) {
-      metricManager.closeReporters(SolrMetricManager.getRegistryName(SolrInfoMBean.Group.node));
+      metricManager.closeReporters(SolrMetricManager.getRegistryName(SolrInfoBean.Group.node));
     }
 
     if (isZooKeeperAware()) {
       cancelCoreRecoveries();
       zkSys.zkController.publishNodeAsDown(zkSys.zkController.getNodeName());
       if (metricManager != null) {
-        metricManager.closeReporters(SolrMetricManager.getRegistryName(SolrInfoMBean.Group.cluster));
+        metricManager.closeReporters(SolrMetricManager.getRegistryName(SolrInfoBean.Group.cluster));
       }
     }
 
@@ -1044,7 +1044,7 @@ public class CoreContainer {
   private void resetIndexDirectory(CoreDescriptor dcore, ConfigSet coreConfig) {
     SolrConfig config = coreConfig.getSolrConfig();
 
-    String registryName = SolrMetricManager.getRegistryName(SolrInfoMBean.Group.core, dcore.getName());
+    String registryName = SolrMetricManager.getRegistryName(SolrInfoBean.Group.core, dcore.getName());
     DirectoryFactory df = DirectoryFactory.loadDirectoryFactory(config, this, registryName);
     String dataDir = SolrCore.findDataDir(df, null, config, dcore);
 
@@ -1362,7 +1362,7 @@ public class CoreContainer {
       containerHandlers.put(path, (SolrRequestHandler)handler);
     }
     if (handler instanceof SolrMetricProducer) {
-      ((SolrMetricProducer)handler).initializeMetrics(metricManager, SolrInfoMBean.Group.node.toString(), path);
+      ((SolrMetricProducer)handler).initializeMetrics(metricManager, SolrInfoBean.Group.node.toString(), path);
     }
     return handler;
   }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java b/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java
index cc24e6c..b4baefa 100644
--- a/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java
+++ b/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java
@@ -324,7 +324,7 @@ public abstract class DirectoryFactory implements NamedListInitializedPlugin,
   /**
    * Optionally allow the DirectoryFactory to request registration of some MBeans.
    */
-  public Collection<SolrInfoMBean> offerMBeans() {
+  public Collection<SolrInfoBean> offerMBeans() {
     return Collections.emptySet();
   }
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java b/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java
index db953d3..eb8d41e 100644
--- a/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java
+++ b/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java
@@ -493,8 +493,8 @@ public class HdfsDirectoryFactory extends CachingDirectoryFactory implements Sol
   }
 
   @Override
-  public Collection<SolrInfoMBean> offerMBeans() {
-    return Arrays.<SolrInfoMBean>asList(MetricsHolder.metrics, LocalityHolder.reporter);
+  public Collection<SolrInfoBean> offerMBeans() {
+    return Arrays.<SolrInfoBean>asList(MetricsHolder.metrics, LocalityHolder.reporter);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/core/PluginBag.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/PluginBag.java b/solr/core/src/java/org/apache/solr/core/PluginBag.java
index 65978f3..b916ad2 100644
--- a/solr/core/src/java/org/apache/solr/core/PluginBag.java
+++ b/solr/core/src/java/org/apache/solr/core/PluginBag.java
@@ -294,8 +294,8 @@ public class PluginBag<T> implements AutoCloseable {
 
   private void registerMBean(Object inst, SolrCore core, String pluginKey) {
     if (core == null) return;
-    if (inst instanceof SolrInfoMBean) {
-      SolrInfoMBean mBean = (SolrInfoMBean) inst;
+    if (inst instanceof SolrInfoBean) {
+      SolrInfoBean mBean = (SolrInfoBean) inst;
       String name = (inst instanceof SolrRequestHandler) ? pluginKey : mBean.getName();
       core.registerInfoBean(name, mBean);
     }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/core/SolrCore.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/SolrCore.java b/solr/core/src/java/org/apache/solr/core/SolrCore.java
index b657cc0..58b53ad 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCore.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java
@@ -132,7 +132,7 @@ import org.apache.solr.schema.IndexSchemaFactory;
 import org.apache.solr.schema.ManagedIndexSchema;
 import org.apache.solr.schema.SimilarityFactory;
 import org.apache.solr.search.QParserPlugin;
-import org.apache.solr.search.SolrFieldCacheMBean;
+import org.apache.solr.search.SolrFieldCacheBean;
 import org.apache.solr.search.SolrIndexSearcher;
 import org.apache.solr.search.ValueSourceParser;
 import org.apache.solr.search.stats.LocalStatsCache;
@@ -170,7 +170,7 @@ import static org.apache.solr.common.params.CommonParams.PATH;
 /**
  *
  */
-public final class SolrCore implements SolrInfoMBean, SolrMetricProducer, Closeable {
+public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeable {
 
   public static final String version="1.0";
 
@@ -201,7 +201,7 @@ public final class SolrCore implements SolrInfoMBean, SolrMetricProducer, Closea
   private final PluginBag<UpdateRequestProcessorFactory> updateProcessors = new PluginBag<>(UpdateRequestProcessorFactory.class, this, true);
   private final Map<String,UpdateRequestProcessorChain> updateProcessorChains;
   private final SolrCoreMetricManager coreMetricManager;
-  private final Map<String, SolrInfoMBean> infoRegistry = new ConcurrentHashMap<>();
+  private final Map<String, SolrInfoBean> infoRegistry = new ConcurrentHashMap<>();
   private final IndexDeletionPolicyWrapper solrDelPolicy;
   private final SolrSnapshotMetaDataManager snapshotMgr;
   private final DirectoryFactory directoryFactory;
@@ -447,14 +447,14 @@ public final class SolrCore implements SolrInfoMBean, SolrMetricProducer, Closea
   }
 
   /**
-   * Returns a Map of name vs SolrInfoMBean objects. The returned map is an instance of
+   * Returns a Map of name vs SolrInfoBean objects. The returned map is an instance of
    * a ConcurrentHashMap and therefore no synchronization is needed for putting, removing
    * or iterating over it.
    *
-   * @return the Info Registry map which contains SolrInfoMBean objects keyed by name
+   * @return the Info Registry map which contains SolrInfoBean objects keyed by name
    * @since solr 1.3
    */
-  public Map<String, SolrInfoMBean> getInfoRegistry() {
+  public Map<String, SolrInfoBean> getInfoRegistry() {
     return infoRegistry;
   }
 
@@ -904,7 +904,7 @@ public final class SolrCore implements SolrInfoMBean, SolrMetricProducer, Closea
     // initialize searcher-related metrics
     initializeMetrics(metricManager, coreMetricManager.getRegistryName(), null);
 
-    infoRegistry.put("fieldCache", new SolrFieldCacheMBean());
+    infoRegistry.put("fieldCache", new SolrFieldCacheBean());
 
     initSchema(config, schema);
 
@@ -995,7 +995,7 @@ public final class SolrCore implements SolrInfoMBean, SolrMetricProducer, Closea
     resourceLoader.inform(infoRegistry);
 
     // Allow the directory factory to register MBeans as well
-    for (SolrInfoMBean bean : directoryFactory.offerMBeans()) {
+    for (SolrInfoBean bean : directoryFactory.offerMBeans()) {
       log.debug("Registering JMX bean [{}] from directory factory.", bean.getName());
       // Not worried about concurrency, so no reason to use putIfAbsent
       if (infoRegistry.containsKey(bean.getName())){
@@ -2762,7 +2762,7 @@ public final class SolrCore implements SolrInfoMBean, SolrMetricProducer, Closea
   }
 
   /////////////////////////////////////////////////////////////////////
-  // SolrInfoMBean stuff: Statistics and Module Info
+  // SolrInfoBean stuff: Statistics and Module Info
   /////////////////////////////////////////////////////////////////////
 
   @Override
@@ -2955,11 +2955,11 @@ public final class SolrCore implements SolrInfoMBean, SolrMetricProducer, Closea
     };
   }
 
-  public void registerInfoBean(String name, SolrInfoMBean solrInfoMBean) {
-    infoRegistry.put(name, solrInfoMBean);
+  public void registerInfoBean(String name, SolrInfoBean solrInfoBean) {
+    infoRegistry.put(name, solrInfoBean);
 
-    if (solrInfoMBean instanceof SolrMetricProducer) {
-      SolrMetricProducer producer = (SolrMetricProducer) solrInfoMBean;
+    if (solrInfoBean instanceof SolrMetricProducer) {
+      SolrMetricProducer producer = (SolrMetricProducer) solrInfoBean;
       coreMetricManager.registerMetricProducer(name, producer);
     }
   }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/core/SolrInfoBean.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/SolrInfoBean.java b/solr/core/src/java/org/apache/solr/core/SolrInfoBean.java
new file mode 100644
index 0000000..c73492e
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/core/SolrInfoBean.java
@@ -0,0 +1,59 @@
+/*
+ * 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.solr.core;
+
+import org.apache.solr.common.util.NamedList;
+
+/**
+ * Interface for getting various ui friendly strings and URLs
+ * for use by objects which are 'pluggable' to make server administration
+ * easier.
+ */
+public interface SolrInfoBean {
+
+  /**
+   * Category of Solr component.
+   */
+  enum Category { CONTAINER, ADMIN, CORE, QUERY, UPDATE, CACHE, HIGHLIGHTER, QUERYPARSER, SPELLCHECKER,
+    SEARCHER, REPLICATION, TLOG, INDEX, DIRECTORY, HTTP, OTHER }
+
+  /**
+   * Top-level group of beans or metrics for a subsystem.
+   */
+  enum Group { jvm, jetty, node, core, collection, shard, cluster, overseer }
+
+  /**
+   * Simple common usage name, e.g. BasicQueryHandler,
+   * or fully qualified class name.
+   */
+  String getName();
+  /** Simple one or two line description */
+  String getDescription();
+  /** Category of this component */
+  Category getCategory();
+  /**
+   * Any statistics this instance would like to be publicly available via
+   * the Solr Administration interface.
+   *
+   * <p>
+   * Any Object type may be stored in the list, but only the
+   * <code>toString()</code> representation will be used.
+   * </p>
+   */
+  NamedList getStatistics();
+
+}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/core/SolrInfoMBean.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/SolrInfoMBean.java b/solr/core/src/java/org/apache/solr/core/SolrInfoMBean.java
deleted file mode 100644
index 41bd8bf..0000000
--- a/solr/core/src/java/org/apache/solr/core/SolrInfoMBean.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * 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.solr.core;
-
-import org.apache.solr.common.util.NamedList;
-
-/**
- * MBean interface for getting various ui friendly strings and URLs
- * for use by objects which are 'pluggable' to make server administration
- * easier.
- *
- *
- */
-public interface SolrInfoMBean {
-
-  /**
-   * Category of Solr component.
-   */
-  enum Category { CONTAINER, ADMIN, CORE, QUERY, UPDATE, CACHE, HIGHLIGHTER, QUERYPARSER, SPELLCHECKER,
-    SEARCHER, REPLICATION, TLOG, INDEX, DIRECTORY, HTTP, OTHER }
-
-  /**
-   * Top-level group of beans or metrics for a subsystem.
-   */
-  enum Group { jvm, jetty, node, core, collection, shard, cluster, overseer }
-
-  /**
-   * Simple common usage name, e.g. BasicQueryHandler,
-   * or fully qualified clas name.
-   */
-  public String getName();
-  /** Simple one or two line description */
-  public String getDescription();
-  /** Purpose of this Class */
-  public Category getCategory();
-  /**
-   * Any statistics this instance would like to be publicly available via
-   * the Solr Administration interface.
-   *
-   * <p>
-   * Any Object type may be stored in the list, but only the
-   * <code>toString()</code> representation will be used.
-   * </p>
-   */
-  public NamedList getStatistics();
-
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/core/SolrInfoMBeanWrapper.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/SolrInfoMBeanWrapper.java b/solr/core/src/java/org/apache/solr/core/SolrInfoMBeanWrapper.java
deleted file mode 100644
index 3b79372..0000000
--- a/solr/core/src/java/org/apache/solr/core/SolrInfoMBeanWrapper.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.solr.core;
-
-import java.net.URL;
-
-import org.apache.solr.common.util.NamedList;
-
-/**
- * Wraps a {@link SolrInfoMBean}.
- */
-public class SolrInfoMBeanWrapper implements SolrInfoMBean {
-  private final SolrInfoMBean mbean;
-
-  public SolrInfoMBeanWrapper(SolrInfoMBean mbean) {
-    this.mbean = mbean;
-  }
-
-  /** {@inheritDoc} */
-  @Override
-  public String getName() { return mbean.getName(); }
-
-  /** {@inheritDoc} */
-  @Override
-  public String getDescription() { return mbean.getDescription(); }
-
-  /** {@inheritDoc} */
-  @Override
-  public Category getCategory() { return mbean.getCategory(); }
-
-  /** {@inheritDoc} */
-  @Override
-  public NamedList getStatistics() { return mbean.getStatistics(); }
-
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java b/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
index d310ff2..2e679cf 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
@@ -100,7 +100,7 @@ public class SolrResourceLoader implements ResourceLoader,Closeable
   private String dataDir;
   
   private final List<SolrCoreAware> waitingForCore = Collections.synchronizedList(new ArrayList<SolrCoreAware>());
-  private final List<SolrInfoMBean> infoMBeans = Collections.synchronizedList(new ArrayList<SolrInfoMBean>());
+  private final List<SolrInfoBean> infoMBeans = Collections.synchronizedList(new ArrayList<SolrInfoBean>());
   private final List<ResourceLoaderAware> waitingForResources = Collections.synchronizedList(new ArrayList<ResourceLoaderAware>());
   private static final Charset UTF_8 = StandardCharsets.UTF_8;
 
@@ -664,9 +664,9 @@ public class SolrResourceLoader implements ResourceLoader,Closeable
         assertAwareCompatibility( ResourceLoaderAware.class, obj );
         waitingForResources.add( (ResourceLoaderAware)obj );
       }
-      if (obj instanceof SolrInfoMBean){
+      if (obj instanceof SolrInfoBean){
         //TODO: Assert here?
-        infoMBeans.add((SolrInfoMBean) obj);
+        infoMBeans.add((SolrInfoBean) obj);
       }
     }
 
@@ -722,21 +722,21 @@ public class SolrResourceLoader implements ResourceLoader,Closeable
   }
 
   /**
-   * Register any {@link org.apache.solr.core.SolrInfoMBean}s
+   * Register any {@link SolrInfoBean}s
    * @param infoRegistry The Info Registry
    */
-  public void inform(Map<String, SolrInfoMBean> infoRegistry) {
+  public void inform(Map<String, SolrInfoBean> infoRegistry) {
     // this can currently happen concurrently with requests starting and lazy components
     // loading.  Make sure infoMBeans doesn't change.
 
-    SolrInfoMBean[] arr;
+    SolrInfoBean[] arr;
     synchronized (infoMBeans) {
-      arr = infoMBeans.toArray(new SolrInfoMBean[infoMBeans.size()]);
+      arr = infoMBeans.toArray(new SolrInfoBean[infoMBeans.size()]);
       waitingForResources.clear();
     }
 
 
-    for (SolrInfoMBean bean : arr) {
+    for (SolrInfoBean bean : arr) {
       // Too slow? I suspect not, but we may need
       // to start tracking this in a Set.
       if (!infoRegistry.containsValue(bean)) {
@@ -879,7 +879,7 @@ public class SolrResourceLoader implements ResourceLoader,Closeable
   public void close() throws IOException {
     IOUtils.close(classLoader);
   }
-  public List<SolrInfoMBean> getInfoMBeans(){
+  public List<SolrInfoBean> getInfoMBeans(){
     return Collections.unmodifiableList(infoMBeans);
   }
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/handler/RequestHandlerBase.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/RequestHandlerBase.java b/solr/core/src/java/org/apache/solr/handler/RequestHandlerBase.java
index fd089c7..18ab7c7 100644
--- a/solr/core/src/java/org/apache/solr/handler/RequestHandlerBase.java
+++ b/solr/core/src/java/org/apache/solr/handler/RequestHandlerBase.java
@@ -17,7 +17,6 @@
 package org.apache.solr.handler;
 
 import java.lang.invoke.MethodHandles;
-import java.net.URL;
 import java.util.Collection;
 
 import com.google.common.collect.ImmutableList;
@@ -31,7 +30,7 @@ import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.common.util.SuppressForbidden;
 import org.apache.solr.core.PluginBag;
 import org.apache.solr.core.PluginInfo;
-import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.core.SolrInfoBean;
 import org.apache.solr.metrics.SolrMetricManager;
 import org.apache.solr.metrics.SolrMetricProducer;
 import org.apache.solr.request.SolrQueryRequest;
@@ -51,7 +50,7 @@ import static org.apache.solr.core.RequestParams.USEPARAM;
 /**
  *
  */
-public abstract class RequestHandlerBase implements SolrRequestHandler, SolrInfoMBean, SolrMetricProducer, NestedRequestHandler,ApiSupport {
+public abstract class RequestHandlerBase implements SolrRequestHandler, SolrInfoBean, SolrMetricProducer, NestedRequestHandler,ApiSupport {
 
   protected NamedList initArgs = null;
   protected SolrParams defaults;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/handler/admin/PluginInfoHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/PluginInfoHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/PluginInfoHandler.java
index e2ec165..e9af3d0 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/PluginInfoHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/PluginInfoHandler.java
@@ -21,7 +21,7 @@ import java.util.Map;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.core.SolrCore;
-import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.core.SolrInfoBean;
 import org.apache.solr.handler.RequestHandlerBase;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.response.SolrQueryResponse;
@@ -46,13 +46,13 @@ public class PluginInfoHandler extends RequestHandlerBase
   private static SimpleOrderedMap<Object> getSolrInfoBeans( SolrCore core, boolean stats )
   {
     SimpleOrderedMap<Object> list = new SimpleOrderedMap<>();
-    for (SolrInfoMBean.Category cat : SolrInfoMBean.Category.values()) 
+    for (SolrInfoBean.Category cat : SolrInfoBean.Category.values())
     {
       SimpleOrderedMap<Object> category = new SimpleOrderedMap<>();
       list.add( cat.name(), category );
-      Map<String, SolrInfoMBean> reg = core.getInfoRegistry();
-      for (Map.Entry<String,SolrInfoMBean> entry : reg.entrySet()) {
-        SolrInfoMBean m = entry.getValue();
+      Map<String, SolrInfoBean> reg = core.getInfoRegistry();
+      for (Map.Entry<String,SolrInfoBean> entry : reg.entrySet()) {
+        SolrInfoBean m = entry.getValue();
         if (m.getCategory() != cat) continue;
 
         String na = "Not Declared";

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoBeanHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoBeanHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoBeanHandler.java
new file mode 100644
index 0000000..c0f9a74
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoBeanHandler.java
@@ -0,0 +1,291 @@
+/*
+ * 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.solr.handler.admin;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.solr.handler.RequestHandlerBase;
+import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.client.solrj.impl.XMLResponseParser;
+import org.apache.solr.core.SolrInfoBean;
+import org.apache.solr.common.SolrException;
+import org.apache.solr.common.SolrException.ErrorCode;
+import org.apache.solr.common.util.ContentStream;
+import org.apache.solr.common.util.NamedList;
+import org.apache.solr.common.util.SimpleOrderedMap;
+import org.apache.solr.response.BinaryResponseWriter;
+import org.apache.solr.response.SolrQueryResponse;
+
+import java.io.StringReader;
+import java.text.NumberFormat;
+import java.util.Locale;
+import java.util.Set;
+import java.util.Map;
+import java.util.HashSet;
+
+/**
+ * A request handler that provides info about all 
+ * registered SolrInfoMBeans.
+ */
+@SuppressWarnings("unchecked")
+public class SolrInfoBeanHandler extends RequestHandlerBase {
+
+  /**
+   * Take an array of any type and generate a Set containing the toString.
+   * Set is guarantee to never be null (but may be empty)
+   */
+  private Set<String> arrayToSet(Object[] arr) {
+    HashSet<String> r = new HashSet<>();
+    if (null == arr) return r;
+    for (Object o : arr) {
+      if (null != o) r.add(o.toString());
+    }
+    return r;
+  }
+
+  @Override
+  public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws Exception {
+    NamedList<NamedList<NamedList<Object>>> cats = getMBeanInfo(req);
+    if(req.getParams().getBool("diff", false)) {
+      ContentStream body = null;
+      try {
+        body = req.getContentStreams().iterator().next();
+      }
+      catch(Exception ex) {
+        throw new SolrException(ErrorCode.BAD_REQUEST, "missing content-stream for diff");
+      }
+      String content = IOUtils.toString(body.getReader());
+      
+      NamedList<NamedList<NamedList<Object>>> ref = fromXML(content);
+      
+      
+      // Normalize the output 
+      SolrQueryResponse wrap = new SolrQueryResponse();
+      wrap.add("solr-mbeans", cats);
+      cats = (NamedList<NamedList<NamedList<Object>>>)
+          BinaryResponseWriter.getParsedResponse(req, wrap).get("solr-mbeans");
+      
+      // Get rid of irrelevant things
+      ref = normalize(ref);
+      cats = normalize(cats);
+      
+      // Only the changes
+      boolean showAll = req.getParams().getBool("all", false);
+      rsp.add("solr-mbeans", getDiff(ref,cats, showAll));
+    }
+    else {
+      rsp.add("solr-mbeans", cats);
+    }
+    rsp.setHttpCaching(false); // never cache, no matter what init config looks like
+  }
+  
+  static NamedList<NamedList<NamedList<Object>>> fromXML(String content) {
+    int idx = content.indexOf("<response>");
+    if(idx<0) {
+      throw new SolrException(ErrorCode.BAD_REQUEST, "Body does not appear to be an XML response");
+    }
+  
+    try {
+      XMLResponseParser parser = new XMLResponseParser();
+      return (NamedList<NamedList<NamedList<Object>>>)
+          parser.processResponse(new StringReader(content)).get("solr-mbeans");
+    }
+    catch(Exception ex) {
+      throw new SolrException(ErrorCode.BAD_REQUEST, "Unable to read original XML", ex);
+    }
+  }
+  
+  protected NamedList<NamedList<NamedList<Object>>> getMBeanInfo(SolrQueryRequest req) {
+
+    NamedList<NamedList<NamedList<Object>>> cats = new NamedList<>();
+    
+    String[] requestedCats = req.getParams().getParams("cat");
+    if (null == requestedCats || 0 == requestedCats.length) {
+      for (SolrInfoBean.Category cat : SolrInfoBean.Category.values()) {
+        cats.add(cat.name(), new SimpleOrderedMap<NamedList<Object>>());
+      }
+    } else {
+      for (String catName : requestedCats) {
+        cats.add(catName,new SimpleOrderedMap<NamedList<Object>>());
+      }
+    }
+         
+    Set<String> requestedKeys = arrayToSet(req.getParams().getParams("key"));
+    
+    Map<String, SolrInfoBean> reg = req.getCore().getInfoRegistry();
+    for (Map.Entry<String, SolrInfoBean> entry : reg.entrySet()) {
+      addMBean(req, cats, requestedKeys, entry.getKey(),entry.getValue());
+    }
+
+    for (SolrInfoBean infoMBean : req.getCore().getCoreDescriptor().getCoreContainer().getResourceLoader().getInfoMBeans()) {
+      addMBean(req,cats,requestedKeys,infoMBean.getName(),infoMBean);
+    }
+    return cats;
+  }
+
+  private void addMBean(SolrQueryRequest req, NamedList<NamedList<NamedList<Object>>> cats, Set<String> requestedKeys, String key, SolrInfoBean m) {
+    if ( ! ( requestedKeys.isEmpty() || requestedKeys.contains(key) ) ) return;
+    NamedList<NamedList<Object>> catInfo = cats.get(m.getCategory().name());
+    if ( null == catInfo ) return;
+    NamedList<Object> mBeanInfo = new SimpleOrderedMap<>();
+    mBeanInfo.add("class", m.getName());
+    mBeanInfo.add("description", m.getDescription());
+
+    if (req.getParams().getFieldBool(key, "stats", false))
+      mBeanInfo.add("stats", m.getStatistics());
+
+    catInfo.add(key, mBeanInfo);
+  }
+
+  protected NamedList<NamedList<NamedList<Object>>> getDiff(
+      NamedList<NamedList<NamedList<Object>>> ref, 
+      NamedList<NamedList<NamedList<Object>>> now,
+      boolean includeAll ) {
+    
+    NamedList<NamedList<NamedList<Object>>> changed = new NamedList<>();
+    
+    // Cycle through each category
+    for(int i=0;i<ref.size();i++) {
+      String category = ref.getName(i);
+      NamedList<NamedList<Object>> ref_cat = ref.get(category);
+      NamedList<NamedList<Object>> now_cat = now.get(category);
+      if(now_cat != null) {
+        String ref_txt = ref_cat+"";
+        String now_txt = now_cat+"";
+        if(!ref_txt.equals(now_txt)) {
+          // Something in the category changed
+          // Now iterate the real beans
+          
+          NamedList<NamedList<Object>> cat = new SimpleOrderedMap<>();
+          for(int j=0;j<ref_cat.size();j++) {
+            String name = ref_cat.getName(j);
+            NamedList<Object> ref_bean = ref_cat.get(name);
+            NamedList<Object> now_bean = now_cat.get(name);
+
+            ref_txt = ref_bean+"";
+            now_txt = now_bean+"";
+            if(!ref_txt.equals(now_txt)) {
+//              System.out.println( "----" );
+//              System.out.println( category +" : " + name );
+//              System.out.println( "REF: " + ref_txt );
+//              System.out.println( "NOW: " + now_txt );
+              
+              // Calculate the differences
+              NamedList diff = diffNamedList(ref_bean,now_bean);
+              diff.add( "_changed_", true ); // flag the changed thing
+              cat.add(name, diff);
+            }
+            else if(includeAll) {
+              cat.add(name, ref_bean);
+            }
+          }
+          if(cat.size()>0) {
+            changed.add(category, cat);
+          }
+        }
+        else if(includeAll) {
+          changed.add(category, ref_cat);
+        }
+      }
+    }
+    return changed;
+  }
+  
+  public NamedList diffNamedList(NamedList ref, NamedList now) {
+    NamedList out = new SimpleOrderedMap();
+    for(int i=0; i<ref.size(); i++) {
+      String name = ref.getName(i);
+      Object r = ref.getVal(i);
+      Object n = now.remove(name);
+      if(n == null) {
+        if(r!=null) {
+          out.add("REMOVE "+name, r);
+        }
+      }
+      else {
+        out.add(name, diffObject(r,n));
+      }
+    }
+    
+    for(int i=0; i<now.size(); i++) {
+      String name = now.getName(i);
+      Object v = now.getVal(i);
+      if(v!=null) {
+        out.add("ADD "+name, v);
+      }
+    }
+    return out;
+  }
+  
+  public Object diffObject(Object ref, Object now) {
+    if(ref instanceof NamedList) {
+      return diffNamedList((NamedList)ref, (NamedList)now);
+    }
+    if(ref.equals(now)) {
+      return ref;
+    }
+    StringBuilder str = new StringBuilder();
+    str.append("Was: ")
+     .append(ref).append(", Now: ").append(now);
+    
+    if(ref instanceof Number) {
+      NumberFormat nf = NumberFormat.getIntegerInstance(Locale.ROOT);
+      if((ref instanceof Double) || (ref instanceof Float)) {
+        nf = NumberFormat.getInstance(Locale.ROOT);
+      }
+      double dref = ((Number)ref).doubleValue();
+      double dnow = ((Number)now).doubleValue();
+      double diff = Double.NaN;
+      if(Double.isNaN(dref)) {
+        diff = dnow;
+      }
+      else if(Double.isNaN(dnow)) {
+        diff = dref;
+      }
+      else {
+        diff = dnow-dref;
+      }
+      str.append( ", Delta: ").append(nf.format(diff));
+    }
+    return str.toString();
+  }
+  
+  
+  /**
+   * The 'avgRequestsPerSecond' field will make everything look like it changed
+   */
+  public NamedList normalize(NamedList input) {
+    input.remove("avgRequestsPerSecond");
+    for(int i=0; i<input.size(); i++) {
+      Object v = input.getVal(i);
+      if(v instanceof NamedList) {
+        input.setVal(i, normalize((NamedList)v));
+      }
+    }
+    return input;
+  }
+  
+  
+  @Override
+  public String getDescription() {
+    return "Get Info (and statistics) for registered SolrInfoMBeans";
+  }
+
+  @Override
+  public Category getCategory() {
+    return Category.ADMIN;
+  }
+}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java
deleted file mode 100644
index 52502ab..0000000
--- a/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- * 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.solr.handler.admin;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.solr.handler.RequestHandlerBase;
-import org.apache.solr.request.SolrQueryRequest;
-import org.apache.solr.client.solrj.impl.XMLResponseParser;
-import org.apache.solr.core.SolrInfoMBean;
-import org.apache.solr.common.SolrException;
-import org.apache.solr.common.SolrException.ErrorCode;
-import org.apache.solr.common.util.ContentStream;
-import org.apache.solr.common.util.NamedList;
-import org.apache.solr.common.util.SimpleOrderedMap;
-import org.apache.solr.response.BinaryResponseWriter;
-import org.apache.solr.response.SolrQueryResponse;
-
-import java.io.StringReader;
-import java.net.URL;
-import java.text.NumberFormat;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Set;
-import java.util.Map;
-import java.util.HashSet;
-
-/**
- * A request handler that provides info about all 
- * registered SolrInfoMBeans.
- */
-@SuppressWarnings("unchecked")
-public class SolrInfoMBeanHandler extends RequestHandlerBase {
-
-  /**
-   * Take an array of any type and generate a Set containing the toString.
-   * Set is guarantee to never be null (but may be empty)
-   */
-  private Set<String> arrayToSet(Object[] arr) {
-    HashSet<String> r = new HashSet<>();
-    if (null == arr) return r;
-    for (Object o : arr) {
-      if (null != o) r.add(o.toString());
-    }
-    return r;
-  }
-
-  @Override
-  public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws Exception {
-    NamedList<NamedList<NamedList<Object>>> cats = getMBeanInfo(req);
-    if(req.getParams().getBool("diff", false)) {
-      ContentStream body = null;
-      try {
-        body = req.getContentStreams().iterator().next();
-      }
-      catch(Exception ex) {
-        throw new SolrException(ErrorCode.BAD_REQUEST, "missing content-stream for diff");
-      }
-      String content = IOUtils.toString(body.getReader());
-      
-      NamedList<NamedList<NamedList<Object>>> ref = fromXML(content);
-      
-      
-      // Normalize the output 
-      SolrQueryResponse wrap = new SolrQueryResponse();
-      wrap.add("solr-mbeans", cats);
-      cats = (NamedList<NamedList<NamedList<Object>>>)
-          BinaryResponseWriter.getParsedResponse(req, wrap).get("solr-mbeans");
-      
-      // Get rid of irrelevant things
-      ref = normalize(ref);
-      cats = normalize(cats);
-      
-      // Only the changes
-      boolean showAll = req.getParams().getBool("all", false);
-      rsp.add("solr-mbeans", getDiff(ref,cats, showAll));
-    }
-    else {
-      rsp.add("solr-mbeans", cats);
-    }
-    rsp.setHttpCaching(false); // never cache, no matter what init config looks like
-  }
-  
-  static NamedList<NamedList<NamedList<Object>>> fromXML(String content) {
-    int idx = content.indexOf("<response>");
-    if(idx<0) {
-      throw new SolrException(ErrorCode.BAD_REQUEST, "Body does not appear to be an XML response");
-    }
-  
-    try {
-      XMLResponseParser parser = new XMLResponseParser();
-      return (NamedList<NamedList<NamedList<Object>>>)
-          parser.processResponse(new StringReader(content)).get("solr-mbeans");
-    }
-    catch(Exception ex) {
-      throw new SolrException(ErrorCode.BAD_REQUEST, "Unable to read original XML", ex);
-    }
-  }
-  
-  protected NamedList<NamedList<NamedList<Object>>> getMBeanInfo(SolrQueryRequest req) {
-
-    NamedList<NamedList<NamedList<Object>>> cats = new NamedList<>();
-    
-    String[] requestedCats = req.getParams().getParams("cat");
-    if (null == requestedCats || 0 == requestedCats.length) {
-      for (SolrInfoMBean.Category cat : SolrInfoMBean.Category.values()) {
-        cats.add(cat.name(), new SimpleOrderedMap<NamedList<Object>>());
-      }
-    } else {
-      for (String catName : requestedCats) {
-        cats.add(catName,new SimpleOrderedMap<NamedList<Object>>());
-      }
-    }
-         
-    Set<String> requestedKeys = arrayToSet(req.getParams().getParams("key"));
-    
-    Map<String, SolrInfoMBean> reg = req.getCore().getInfoRegistry();
-    for (Map.Entry<String, SolrInfoMBean> entry : reg.entrySet()) {
-      addMBean(req, cats, requestedKeys, entry.getKey(),entry.getValue());
-    }
-
-    for (SolrInfoMBean infoMBean : req.getCore().getCoreDescriptor().getCoreContainer().getResourceLoader().getInfoMBeans()) {
-      addMBean(req,cats,requestedKeys,infoMBean.getName(),infoMBean);
-    }
-    return cats;
-  }
-
-  private void addMBean(SolrQueryRequest req, NamedList<NamedList<NamedList<Object>>> cats, Set<String> requestedKeys, String key, SolrInfoMBean m) {
-    if ( ! ( requestedKeys.isEmpty() || requestedKeys.contains(key) ) ) return;
-    NamedList<NamedList<Object>> catInfo = cats.get(m.getCategory().name());
-    if ( null == catInfo ) return;
-    NamedList<Object> mBeanInfo = new SimpleOrderedMap<>();
-    mBeanInfo.add("class", m.getName());
-    mBeanInfo.add("description", m.getDescription());
-
-    if (req.getParams().getFieldBool(key, "stats", false))
-      mBeanInfo.add("stats", m.getStatistics());
-
-    catInfo.add(key, mBeanInfo);
-  }
-
-  protected NamedList<NamedList<NamedList<Object>>> getDiff(
-      NamedList<NamedList<NamedList<Object>>> ref, 
-      NamedList<NamedList<NamedList<Object>>> now,
-      boolean includeAll ) {
-    
-    NamedList<NamedList<NamedList<Object>>> changed = new NamedList<>();
-    
-    // Cycle through each category
-    for(int i=0;i<ref.size();i++) {
-      String category = ref.getName(i);
-      NamedList<NamedList<Object>> ref_cat = ref.get(category);
-      NamedList<NamedList<Object>> now_cat = now.get(category);
-      if(now_cat != null) {
-        String ref_txt = ref_cat+"";
-        String now_txt = now_cat+"";
-        if(!ref_txt.equals(now_txt)) {
-          // Something in the category changed
-          // Now iterate the real beans
-          
-          NamedList<NamedList<Object>> cat = new SimpleOrderedMap<>();
-          for(int j=0;j<ref_cat.size();j++) {
-            String name = ref_cat.getName(j);
-            NamedList<Object> ref_bean = ref_cat.get(name);
-            NamedList<Object> now_bean = now_cat.get(name);
-
-            ref_txt = ref_bean+"";
-            now_txt = now_bean+"";
-            if(!ref_txt.equals(now_txt)) {
-//              System.out.println( "----" );
-//              System.out.println( category +" : " + name );
-//              System.out.println( "REF: " + ref_txt );
-//              System.out.println( "NOW: " + now_txt );
-              
-              // Calculate the differences
-              NamedList diff = diffNamedList(ref_bean,now_bean);
-              diff.add( "_changed_", true ); // flag the changed thing
-              cat.add(name, diff);
-            }
-            else if(includeAll) {
-              cat.add(name, ref_bean);
-            }
-          }
-          if(cat.size()>0) {
-            changed.add(category, cat);
-          }
-        }
-        else if(includeAll) {
-          changed.add(category, ref_cat);
-        }
-      }
-    }
-    return changed;
-  }
-  
-  public NamedList diffNamedList(NamedList ref, NamedList now) {
-    NamedList out = new SimpleOrderedMap();
-    for(int i=0; i<ref.size(); i++) {
-      String name = ref.getName(i);
-      Object r = ref.getVal(i);
-      Object n = now.remove(name);
-      if(n == null) {
-        if(r!=null) {
-          out.add("REMOVE "+name, r);
-        }
-      }
-      else {
-        out.add(name, diffObject(r,n));
-      }
-    }
-    
-    for(int i=0; i<now.size(); i++) {
-      String name = now.getName(i);
-      Object v = now.getVal(i);
-      if(v!=null) {
-        out.add("ADD "+name, v);
-      }
-    }
-    return out;
-  }
-  
-  public Object diffObject(Object ref, Object now) {
-    if(ref instanceof NamedList) {
-      return diffNamedList((NamedList)ref, (NamedList)now);
-    }
-    if(ref.equals(now)) {
-      return ref;
-    }
-    StringBuilder str = new StringBuilder();
-    str.append("Was: ")
-     .append(ref).append(", Now: ").append(now);
-    
-    if(ref instanceof Number) {
-      NumberFormat nf = NumberFormat.getIntegerInstance(Locale.ROOT);
-      if((ref instanceof Double) || (ref instanceof Float)) {
-        nf = NumberFormat.getInstance(Locale.ROOT);
-      }
-      double dref = ((Number)ref).doubleValue();
-      double dnow = ((Number)now).doubleValue();
-      double diff = Double.NaN;
-      if(Double.isNaN(dref)) {
-        diff = dnow;
-      }
-      else if(Double.isNaN(dnow)) {
-        diff = dref;
-      }
-      else {
-        diff = dnow-dref;
-      }
-      str.append( ", Delta: ").append(nf.format(diff));
-    }
-    return str.toString();
-  }
-  
-  
-  /**
-   * The 'avgRequestsPerSecond' field will make everything look like it changed
-   */
-  public NamedList normalize(NamedList input) {
-    input.remove("avgRequestsPerSecond");
-    for(int i=0; i<input.size(); i++) {
-      Object v = input.getVal(i);
-      if(v instanceof NamedList) {
-        input.setVal(i, normalize((NamedList)v));
-      }
-    }
-    return input;
-  }
-  
-  
-  @Override
-  public String getDescription() {
-    return "Get Info (and statistics) for registered SolrInfoMBeans";
-  }
-
-  @Override
-  public Category getCategory() {
-    return Category.ADMIN;
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java b/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java
index 9ff4952..2119a41 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java
@@ -380,7 +380,7 @@ public class DebugComponent extends SearchComponent
 
   
   /////////////////////////////////////////////
-  ///  SolrInfoMBean
+  ///  SolrInfoBean
   ////////////////////////////////////////////
 
   @Override

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java b/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java
index 0db2395..c880935 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java
@@ -737,7 +737,7 @@ public class ExpandComponent extends SearchComponent implements PluginInfoInitia
 
 
   ////////////////////////////////////////////
-  ///  SolrInfoMBean
+  ///  SolrInfoBean
   ////////////////////////////////////////////
 
   @Override

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java b/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java
index 8a1b8ed..5b81012 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java
@@ -1212,7 +1212,7 @@ public class FacetComponent extends SearchComponent {
 
 
   /////////////////////////////////////////////
-  ///  SolrInfoMBean
+  ///  SolrInfoBean
   ////////////////////////////////////////////
 
   @Override

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/handler/component/HighlightComponent.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/HighlightComponent.java b/solr/core/src/java/org/apache/solr/handler/component/HighlightComponent.java
index b45be5c..6e66a5e 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/HighlightComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/HighlightComponent.java
@@ -266,7 +266,7 @@ public class HighlightComponent extends SearchComponent implements PluginInfoIni
   }
 
   ////////////////////////////////////////////
-  ///  SolrInfoMBean
+  ///  SolrInfoBean
   ////////////////////////////////////////////
   
   @Override

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
index 83a2d60..304cd2b 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
@@ -36,7 +36,7 @@ import org.apache.solr.common.util.StrUtils;
 import org.apache.solr.common.util.URLUtil;
 import org.apache.solr.core.CoreDescriptor;
 import org.apache.solr.core.PluginInfo;
-import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.core.SolrInfoBean;
 import org.apache.solr.metrics.SolrMetricManager;
 import org.apache.solr.metrics.SolrMetricProducer;
 import org.apache.solr.update.UpdateShardHandlerConfig;
@@ -377,7 +377,7 @@ public class HttpShardHandlerFactory extends ShardHandlerFactory implements org.
 
   @Override
   public void initializeMetrics(SolrMetricManager manager, String registry, String scope) {
-    String expandedScope = SolrMetricManager.mkName(scope, SolrInfoMBean.Category.QUERY.name());
+    String expandedScope = SolrMetricManager.mkName(scope, SolrInfoBean.Category.QUERY.name());
     clientConnectionManager.initializeMetrics(manager, registry, expandedScope);
     httpRequestExecutor.initializeMetrics(manager, registry, expandedScope);
     commExecutor = MetricUtils.instrumentedExecutorService(commExecutor,

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java b/solr/core/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java
index eb0cc4d..298204f 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java
@@ -412,7 +412,7 @@ public class MoreLikeThisComponent extends SearchComponent {
   }
   
   // ///////////////////////////////////////////
-  // / SolrInfoMBean
+  // / SolrInfoBean
   // //////////////////////////////////////////
   
   @Override

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java b/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
index c1e42a5..9e7b4f5 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
@@ -1375,7 +1375,7 @@ public class QueryComponent extends SearchComponent
   }
 
   /////////////////////////////////////////////
-  ///  SolrInfoMBean
+  ///  SolrInfoBean
   ////////////////////////////////////////////
 
   @Override

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java b/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
index 815eba9..cdc6c64 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
@@ -595,7 +595,7 @@ public class QueryElevationComponent extends SearchComponent implements SolrCore
   }
 
   //---------------------------------------------------------------------------------
-  // SolrInfoMBean
+  // SolrInfoBean
   //---------------------------------------------------------------------------------
 
   @Override

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java b/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
index 3b6dbaf..ceb46f3 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
@@ -892,7 +892,7 @@ public class RealTimeGetComponent extends SearchComponent
                                                                                                
 
   ////////////////////////////////////////////
-  ///  SolrInfoMBean
+  ///  SolrInfoBean
   ////////////////////////////////////////////
 
   @Override

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/handler/component/SearchComponent.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/SearchComponent.java b/solr/core/src/java/org/apache/solr/handler/component/SearchComponent.java
index 5e551da..c566298 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/SearchComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/SearchComponent.java
@@ -17,13 +17,12 @@
 package org.apache.solr.handler.component;
 
 import java.io.IOException;
-import java.net.URL;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.solr.common.util.NamedList;
-import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.core.SolrInfoBean;
 import org.apache.solr.search.facet.FacetModule;
 import org.apache.solr.util.plugin.NamedListInitializedPlugin;
 
@@ -33,7 +32,7 @@ import org.apache.solr.util.plugin.NamedListInitializedPlugin;
  *
  * @since solr 1.3
  */
-public abstract class SearchComponent implements SolrInfoMBean, NamedListInitializedPlugin
+public abstract class SearchComponent implements SolrInfoBean, NamedListInitializedPlugin
 {
   /**
    * The name given to this component in solrconfig.xml file

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/handler/component/SpellCheckComponent.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/SpellCheckComponent.java b/solr/core/src/java/org/apache/solr/handler/component/SpellCheckComponent.java
index 2f805f4..4e3cd12 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/SpellCheckComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/SpellCheckComponent.java
@@ -853,7 +853,7 @@ public class SpellCheckComponent extends SearchComponent implements SolrCoreAwar
   }
 
   // ///////////////////////////////////////////
-  // / SolrInfoMBean
+  // / SolrInfoBean
   // //////////////////////////////////////////
 
   @Override

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/handler/component/StatsComponent.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/StatsComponent.java b/solr/core/src/java/org/apache/solr/handler/component/StatsComponent.java
index 6a6e9be..8ecd51c 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/StatsComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/StatsComponent.java
@@ -160,7 +160,7 @@ public class StatsComponent extends SearchComponent {
   }
 
   /////////////////////////////////////////////
-  ///  SolrInfoMBean
+  ///  SolrInfoBean
   ////////////////////////////////////////////
 
   @Override

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/highlight/HighlightingPluginBase.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/highlight/HighlightingPluginBase.java b/solr/core/src/java/org/apache/solr/highlight/HighlightingPluginBase.java
index a459216..94a5688 100644
--- a/solr/core/src/java/org/apache/solr/highlight/HighlightingPluginBase.java
+++ b/solr/core/src/java/org/apache/solr/highlight/HighlightingPluginBase.java
@@ -16,18 +16,16 @@
  */
 package org.apache.solr.highlight;
 
-import java.net.URL;
-
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SimpleOrderedMap;
-import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.core.SolrInfoBean;
 
 /**
  * 
  * @since solr 1.3
  */
-public abstract class HighlightingPluginBase implements SolrInfoMBean
+public abstract class HighlightingPluginBase implements SolrInfoBean
 {
   protected long numRequests;
   protected SolrParams defaults;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/highlight/SolrBoundaryScanner.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/highlight/SolrBoundaryScanner.java b/solr/core/src/java/org/apache/solr/highlight/SolrBoundaryScanner.java
index 6f442f7..2c768ce 100644
--- a/solr/core/src/java/org/apache/solr/highlight/SolrBoundaryScanner.java
+++ b/solr/core/src/java/org/apache/solr/highlight/SolrBoundaryScanner.java
@@ -18,11 +18,11 @@ package org.apache.solr.highlight;
 
 import org.apache.lucene.search.vectorhighlight.BoundaryScanner;
 import org.apache.solr.common.params.SolrParams;
-import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.core.SolrInfoBean;
 import org.apache.solr.util.plugin.NamedListInitializedPlugin;
 
 public abstract class SolrBoundaryScanner extends HighlightingPluginBase implements
-    SolrInfoMBean, NamedListInitializedPlugin {
+    SolrInfoBean, NamedListInitializedPlugin {
 
   public BoundaryScanner getBoundaryScanner(String fieldName, SolrParams params){
     numRequests++;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/highlight/SolrEncoder.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/highlight/SolrEncoder.java b/solr/core/src/java/org/apache/solr/highlight/SolrEncoder.java
index 9f49228..7b78a06 100644
--- a/solr/core/src/java/org/apache/solr/highlight/SolrEncoder.java
+++ b/solr/core/src/java/org/apache/solr/highlight/SolrEncoder.java
@@ -19,10 +19,10 @@ package org.apache.solr.highlight;
 import org.apache.lucene.search.highlight.Encoder;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.NamedList;
-import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.core.SolrInfoBean;
 import org.apache.solr.util.plugin.NamedListInitializedPlugin;
 
-public interface SolrEncoder extends SolrInfoMBean, NamedListInitializedPlugin {
+public interface SolrEncoder extends SolrInfoBean, NamedListInitializedPlugin {
 
   /** <code>init</code> will be called just once, immediately after creation.
    * <p>The args are user-level initialization parameters that

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/highlight/SolrFormatter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/highlight/SolrFormatter.java b/solr/core/src/java/org/apache/solr/highlight/SolrFormatter.java
index a8f51db..1a6443e 100644
--- a/solr/core/src/java/org/apache/solr/highlight/SolrFormatter.java
+++ b/solr/core/src/java/org/apache/solr/highlight/SolrFormatter.java
@@ -19,10 +19,10 @@ package org.apache.solr.highlight;
 import org.apache.lucene.search.highlight.Formatter;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.NamedList;
-import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.core.SolrInfoBean;
 import org.apache.solr.util.plugin.NamedListInitializedPlugin;
 
-public interface SolrFormatter extends SolrInfoMBean, NamedListInitializedPlugin {
+public interface SolrFormatter extends SolrInfoBean, NamedListInitializedPlugin {
 
   /** <code>init</code> will be called just once, immediately after creation.
    * <p>The args are user-level initialization parameters that

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/highlight/SolrFragListBuilder.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/highlight/SolrFragListBuilder.java b/solr/core/src/java/org/apache/solr/highlight/SolrFragListBuilder.java
index f0c36b4..87da235 100644
--- a/solr/core/src/java/org/apache/solr/highlight/SolrFragListBuilder.java
+++ b/solr/core/src/java/org/apache/solr/highlight/SolrFragListBuilder.java
@@ -19,10 +19,10 @@ package org.apache.solr.highlight;
 import org.apache.lucene.search.vectorhighlight.FragListBuilder;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.NamedList;
-import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.core.SolrInfoBean;
 import org.apache.solr.util.plugin.NamedListInitializedPlugin;
 
-public interface SolrFragListBuilder extends SolrInfoMBean, NamedListInitializedPlugin {
+public interface SolrFragListBuilder extends SolrInfoBean, NamedListInitializedPlugin {
 
   /** <code>init</code> will be called just once, immediately after creation.
    * <p>The args are user-level initialization parameters that

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/highlight/SolrFragmenter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/highlight/SolrFragmenter.java b/solr/core/src/java/org/apache/solr/highlight/SolrFragmenter.java
index 547506f..98c3056 100644
--- a/solr/core/src/java/org/apache/solr/highlight/SolrFragmenter.java
+++ b/solr/core/src/java/org/apache/solr/highlight/SolrFragmenter.java
@@ -19,10 +19,10 @@ package org.apache.solr.highlight;
 import org.apache.lucene.search.highlight.Fragmenter;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.NamedList;
-import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.core.SolrInfoBean;
 import org.apache.solr.util.plugin.NamedListInitializedPlugin;
 
-public interface SolrFragmenter extends SolrInfoMBean, NamedListInitializedPlugin {
+public interface SolrFragmenter extends SolrInfoBean, NamedListInitializedPlugin {
 
   /** <code>init</code> will be called just once, immediately after creation.
    * <p>The args are user-level initialization parameters that

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/highlight/SolrFragmentsBuilder.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/highlight/SolrFragmentsBuilder.java b/solr/core/src/java/org/apache/solr/highlight/SolrFragmentsBuilder.java
index 78ea5a4..b21b669 100644
--- a/solr/core/src/java/org/apache/solr/highlight/SolrFragmentsBuilder.java
+++ b/solr/core/src/java/org/apache/solr/highlight/SolrFragmentsBuilder.java
@@ -21,11 +21,11 @@ import org.apache.lucene.search.vectorhighlight.FragmentsBuilder;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.params.HighlightParams;
 import org.apache.solr.common.params.SolrParams;
-import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.core.SolrInfoBean;
 import org.apache.solr.util.plugin.NamedListInitializedPlugin;
 
 public abstract class SolrFragmentsBuilder extends HighlightingPluginBase
-  implements SolrInfoMBean, NamedListInitializedPlugin {
+  implements SolrInfoBean, NamedListInitializedPlugin {
   
   public static final String DEFAULT_PRE_TAGS = "<em>";
   public static final String DEFAULT_POST_TAGS = "</em>";

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/metrics/SolrCoreMetricManager.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/SolrCoreMetricManager.java b/solr/core/src/java/org/apache/solr/metrics/SolrCoreMetricManager.java
index 43f3535..52aa1f2 100644
--- a/solr/core/src/java/org/apache/solr/metrics/SolrCoreMetricManager.java
+++ b/solr/core/src/java/org/apache/solr/metrics/SolrCoreMetricManager.java
@@ -24,7 +24,7 @@ import org.apache.solr.cloud.CloudDescriptor;
 import org.apache.solr.core.NodeConfig;
 import org.apache.solr.core.PluginInfo;
 import org.apache.solr.core.SolrCore;
-import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.core.SolrInfoBean;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -76,14 +76,14 @@ public class SolrCoreMetricManager implements Closeable {
   }
 
   /**
-   * Load reporters configured globally and specific to {@link org.apache.solr.core.SolrInfoMBean.Group#core}
+   * Load reporters configured globally and specific to {@link SolrInfoBean.Group#core}
    * group or with a registry name specific to this core.
    */
   public void loadReporters() {
     NodeConfig nodeConfig = core.getCoreDescriptor().getCoreContainer().getConfig();
     PluginInfo[] pluginInfos = nodeConfig.getMetricReporterPlugins();
     metricManager.loadReporters(pluginInfos, core.getResourceLoader(), tag,
-        SolrInfoMBean.Group.core, registryName);
+        SolrInfoBean.Group.core, registryName);
     if (cloudMode) {
       metricManager.loadShardReporters(pluginInfos, core);
     }
@@ -176,9 +176,9 @@ public class SolrCoreMetricManager implements Closeable {
 
   public static String createRegistryName(boolean cloud, String collectionName, String shardName, String replicaName, String coreName) {
     if (cloud) { // build registry name from logical names
-      return SolrMetricManager.getRegistryName(SolrInfoMBean.Group.core, collectionName, shardName, replicaName);
+      return SolrMetricManager.getRegistryName(SolrInfoBean.Group.core, collectionName, shardName, replicaName);
     } else {
-      return SolrMetricManager.getRegistryName(SolrInfoMBean.Group.core, coreName);
+      return SolrMetricManager.getRegistryName(SolrInfoBean.Group.core, coreName);
     }
   }
 
@@ -224,7 +224,7 @@ public class SolrCoreMetricManager implements Closeable {
 
   public static String createLeaderRegistryName(boolean cloud, String collectionName, String shardName) {
     if (cloud) {
-      return SolrMetricManager.getRegistryName(SolrInfoMBean.Group.collection, collectionName, shardName, "leader");
+      return SolrMetricManager.getRegistryName(SolrInfoBean.Group.collection, collectionName, shardName, "leader");
     } else {
       return null;
     }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/metrics/SolrMetricInfo.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/SolrMetricInfo.java b/solr/core/src/java/org/apache/solr/metrics/SolrMetricInfo.java
index 4d093eb..966ce2e 100644
--- a/solr/core/src/java/org/apache/solr/metrics/SolrMetricInfo.java
+++ b/solr/core/src/java/org/apache/solr/metrics/SolrMetricInfo.java
@@ -17,7 +17,7 @@
 package org.apache.solr.metrics;
 
 import com.codahale.metrics.MetricRegistry;
-import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.core.SolrInfoBean;
 
 /**
  * Wraps meta-data for a metric.
@@ -25,7 +25,7 @@ import org.apache.solr.core.SolrInfoMBean;
 public final class SolrMetricInfo {
   public final String name;
   public final String scope;
-  public final SolrInfoMBean.Category category;
+  public final SolrInfoBean.Category category;
 
   /**
    * Creates a new instance of {@link SolrMetricInfo}.
@@ -34,7 +34,7 @@ public final class SolrMetricInfo {
    * @param scope    the scope of the metric (e.g. `/admin/ping`)
    * @param name     the name of the metric (e.g. `Requests`)
    */
-  public SolrMetricInfo(SolrInfoMBean.Category category, String scope, String name) {
+  public SolrMetricInfo(SolrInfoBean.Category category, String scope, String name) {
     this.name = name;
     this.scope = scope;
     this.category = category;
@@ -49,9 +49,9 @@ public final class SolrMetricInfo {
       return null;
     }
     // check top-level name for valid category
-    SolrInfoMBean.Category category;
+    SolrInfoBean.Category category;
     try {
-      category = SolrInfoMBean.Category.valueOf(names[0]);
+      category = SolrInfoBean.Category.valueOf(names[0]);
     } catch (IllegalArgumentException e) { // not a valid category
       return null;
     }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1624ed75/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java b/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java
index f4abee0..f129958 100644
--- a/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java
+++ b/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java
@@ -51,7 +51,7 @@ import org.apache.solr.common.util.NamedList;
 import org.apache.solr.core.CoreContainer;
 import org.apache.solr.core.PluginInfo;
 import org.apache.solr.core.SolrCore;
-import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.core.SolrInfoBean;
 import org.apache.solr.core.SolrResourceLoader;
 import org.apache.solr.metrics.reporters.solr.SolrClusterReporter;
 import org.apache.solr.metrics.reporters.solr.SolrShardReporter;
@@ -73,7 +73,7 @@ import org.slf4j.LoggerFactory;
  * <p>This class enforces a common prefix ({@link #REGISTRY_NAME_PREFIX}) in all registry
  * names.</p>
  * <p>Solr uses several different registries for collecting metrics belonging to different groups, using
- * {@link org.apache.solr.core.SolrInfoMBean.Group} as the main name of the registry (plus the
+ * {@link SolrInfoBean.Group} as the main name of the registry (plus the
  * above-mentioned prefix). Instances of {@link SolrMetricManager} are created for each {@link org.apache.solr.core.CoreContainer},
  * and most registries are local to each instance, with the exception of two global registries:
  * <code>solr.jetty</code> and <code>solr.jvm</code>, which are shared between all {@link org.apache.solr.core.CoreContainer}-s</p>
@@ -87,11 +87,11 @@ public class SolrMetricManager {
 
   /** Registry name for Jetty-specific metrics. This name is also subject to overrides controlled by
    * system properties. This registry is shared between instances of {@link SolrMetricManager}. */
-  public static final String JETTY_REGISTRY = REGISTRY_NAME_PREFIX + SolrInfoMBean.Group.jetty.toString();
+  public static final String JETTY_REGISTRY = REGISTRY_NAME_PREFIX + SolrInfoBean.Group.jetty.toString();
 
   /** Registry name for JVM-specific metrics. This name is also subject to overrides controlled by
    * system properties. This registry is shared between instances of {@link SolrMetricManager}. */
-  public static final String JVM_REGISTRY = REGISTRY_NAME_PREFIX + SolrInfoMBean.Group.jvm.toString();
+  public static final String JVM_REGISTRY = REGISTRY_NAME_PREFIX + SolrInfoBean.Group.jvm.toString();
 
   private final ConcurrentMap<String, MetricRegistry> registries = new ConcurrentHashMap<>();
 
@@ -569,7 +569,7 @@ public class SolrMetricManager {
    * </pre>
    * <b>NOTE:</b> Once a registry is renamed in a way that its metrics are combined with another repository
    * it is no longer possible to retrieve the original metrics until this renaming is removed and the Solr
-   * {@link org.apache.solr.core.SolrInfoMBean.Group} of components that reported to that name is restarted.
+   * {@link SolrInfoBean.Group} of components that reported to that name is restarted.
    * @param registry The name of the registry
    * @return A potentially overridden (via System properties) registry name
    */
@@ -600,7 +600,7 @@ public class SolrMetricManager {
    *              and the group parameter will be ignored.
    * @return fully-qualified and prefixed registry name, with overrides applied.
    */
-  public static String getRegistryName(SolrInfoMBean.Group group, String... names) {
+  public static String getRegistryName(SolrInfoBean.Group group, String... names) {
     String fullName;
     String prefix = REGISTRY_NAME_PREFIX + group.toString() + ".";
     // check for existing prefix and group
@@ -622,7 +622,7 @@ public class SolrMetricManager {
   // reporter management
 
   /**
-   * Create and register {@link SolrMetricReporter}-s specific to a {@link org.apache.solr.core.SolrInfoMBean.Group}.
+   * Create and register {@link SolrMetricReporter}-s specific to a {@link SolrInfoBean.Group}.
    * Note: reporters that specify neither "group" nor "registry" attributes are treated as universal -
    * they will always be loaded for any group. These two attributes may also contain multiple comma- or
    * whitespace-separated values, in which case the reporter will be loaded for any matching value from
@@ -634,7 +634,7 @@ public class SolrMetricManager {
    * @param group selected group, not null
    * @param registryNames optional child registry name elements
    */
-  public void loadReporters(PluginInfo[] pluginInfos, SolrResourceLoader loader, String tag, SolrInfoMBean.Group group, String... registryNames) {
+  public void loadReporters(PluginInfo[] pluginInfos, SolrResourceLoader loader, String tag, SolrInfoBean.Group group, String... registryNames) {
     if (pluginInfos == null || pluginInfos.length == 0) {
       return;
     }
@@ -941,13 +941,13 @@ public class SolrMetricManager {
     // prepare default plugin if none present in the config
     Map<String, String> attrs = new HashMap<>();
     attrs.put("name", "shardDefault");
-    attrs.put("group", SolrInfoMBean.Group.shard.toString());
+    attrs.put("group", SolrInfoBean.Group.shard.toString());
     Map<String, Object> initArgs = new HashMap<>();
     initArgs.put("period", DEFAULT_CLOUD_REPORTER_PERIOD);
 
     String registryName = core.getCoreMetricManager().getRegistryName();
     // collect infos and normalize
-    List<PluginInfo> infos = prepareCloudPlugins(pluginInfos, SolrInfoMBean.Group.shard.toString(), SolrShardReporter.class.getName(),
+    List<PluginInfo> infos = prepareCloudPlugins(pluginInfos, SolrInfoBean.Group.shard.toString(), SolrShardReporter.class.getName(),
         attrs, initArgs, null);
     for (PluginInfo info : infos) {
       try {
@@ -967,12 +967,12 @@ public class SolrMetricManager {
     }
     Map<String, String> attrs = new HashMap<>();
     attrs.put("name", "clusterDefault");
-    attrs.put("group", SolrInfoMBean.Group.cluster.toString());
+    attrs.put("group", SolrInfoBean.Group.cluster.toString());
     Map<String, Object> initArgs = new HashMap<>();
     initArgs.put("period", DEFAULT_CLOUD_REPORTER_PERIOD);
-    List<PluginInfo> infos = prepareCloudPlugins(pluginInfos, SolrInfoMBean.Group.cluster.toString(), SolrClusterReporter.class.getName(),
+    List<PluginInfo> infos = prepareCloudPlugins(pluginInfos, SolrInfoBean.Group.cluster.toString(), SolrClusterReporter.class.getName(),
         attrs, initArgs, null);
-    String registryName = getRegistryName(SolrInfoMBean.Group.cluster);
+    String registryName = getRegistryName(SolrInfoBean.Group.cluster);
     for (PluginInfo info : infos) {
       try {
         SolrMetricReporter reporter = loadReporter(registryName, cc.getResourceLoader(), info, null);