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 2020/08/22 18:42:32 UTC

[lucene-solr] 13/22: @593 You damn metrics will be fast, I insist.

This is an automated email from the ASF dual-hosted git repository.

markrmiller pushed a commit to branch reference_impl
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit b50eef5b17ad37915f8e60538ba422a3ac2574bb
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Thu Aug 20 18:08:46 2020 -0500

    @593 You damn metrics will be fast, I insist.
---
 .../src/java/org/apache/solr/core/SolrCore.java    |  18 +-
 .../java/org/apache/solr/metrics/MetricsMap.java   |   4 +
 .../org/apache/solr/metrics/SolrMetricManager.java | 189 +++++++++++++--------
 .../apache/solr/metrics/SolrMetricRegistry.java    |  14 ++
 .../apache/solr/metrics/SolrMetricsContext.java    |   4 +-
 .../java/org/apache/solr/search/CaffeineCache.java |  26 +--
 .../org/apache/solr/search/SolrIndexSearcher.java  |  22 ++-
 .../src/test/org/apache/solr/CursorPagingTest.java |   4 +-
 .../solr/handler/admin/StatsReloadRaceTest.java    |   1 +
 .../org/apache/solr/metrics/JvmMetricsTest.java    |   2 +-
 .../solr/search/TestReRankQParserPlugin.java       |   4 +-
 .../apache/solr/search/TestSolrFieldCacheBean.java |   4 +-
 .../apache/solr/search/TestSolrQueryParser.java    |   8 +-
 .../solr/search/join/TestScoreJoinQPScore.java     |   2 +-
 14 files changed, 180 insertions(+), 122 deletions(-)

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 2ba11e1..f988a7c 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCore.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java
@@ -54,7 +54,6 @@ import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
-import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -252,6 +251,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
   private volatile boolean isClosed = false;
 
   private final PackageListeners packageListeners = new PackageListeners(this);
+  private volatile boolean unregisterMetrics = true;
 
   public Set<String> getMetricNames() {
     return metricNames;
@@ -712,13 +712,13 @@ public final class SolrCore implements SolrInfoBean, Closeable {
       } else {
         currentCore = this;
       }
-
+      this.unregisterMetrics = false;
       boolean success = false;
       SolrCore core = null;
       try {
         CoreDescriptor cd = new CoreDescriptor(name, getCoreDescriptor());
         cd.loadExtraProperties(); //Reload the extra properties
-
+        coreMetricManager.close();
         core = new SolrCore(coreContainer, getName(), coreConfig, cd, getDataDir(), updateHandler, solrDelPolicy, currentCore, true);
 
         // we open a new IndexWriter to pick up the latest config
@@ -1618,10 +1618,12 @@ public final class SolrCore implements SolrInfoBean, Closeable {
 
       List<Callable<Object>> closeCalls = new ArrayList<Callable<Object>>();
       closeCalls.addAll(closeHookCalls);
-      closeCalls.add(() -> {
-        IOUtils.closeQuietly(coreMetricManager);
-        return "SolrCoreMetricManager";
-      });
+      if (unregisterMetrics) {
+        closeCalls.add(() -> {
+         // IOUtils.closeQuietly(coreMetricManager);
+          return "SolrCoreMetricManager";
+        });
+      }
       closeCalls.add(() -> {
         IOUtils.closeQuietly(reqHandlers);
         return "reqHandlers";
@@ -1712,7 +1714,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
       });
 
       closer.addCollect();
-      closeHookCalls = new ArrayList<Callable<Object>>();
+      closeHookCalls = new ArrayList<>();
 
       if (closeHooks != null) {
         for (CloseHook hook : closeHooks) {
diff --git a/solr/core/src/java/org/apache/solr/metrics/MetricsMap.java b/solr/core/src/java/org/apache/solr/metrics/MetricsMap.java
index abea099..abb7f22 100644
--- a/solr/core/src/java/org/apache/solr/metrics/MetricsMap.java
+++ b/solr/core/src/java/org/apache/solr/metrics/MetricsMap.java
@@ -82,6 +82,10 @@ public class MetricsMap implements Gauge<Map<String,Object>>, DynamicMBean {
   }
 
   public Map<String,Object> getValue(boolean detailed) {
+    return getValue(detailed, allowCache);
+  }
+
+  public Map<String,Object> getValue(boolean detailed, boolean allowCache) {
     if (allowCache) {
       Map<String,Object> cachedStats = this.cachedValue;
       if (cachedStats != null && (System.nanoTime() - cachedValueUpdatedAt) < CACHE_TIME) {
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 c05b1c6..bd7ca10 100644
--- a/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java
+++ b/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java
@@ -104,12 +104,13 @@ public class SolrMetricManager {
 
   private final ConcurrentMap<String, MetricRegistry> registries = new ConcurrentHashMap<>(32);
 
+  private static final ConcurrentMap<String, MetricRegistry> REGISTRIES = new ConcurrentHashMap<>(32);
+
   private final Map<String, Map<String, SolrMetricReporter>> reporters = new HashMap<>(32);
 
-  private final Lock reportersLock = new ReentrantLock();
-  private final Lock swapLock = new ReentrantLock();
-  private final Lock sharedLock = new ReentrantLock();
+  private final Map<String, Set<String>> tags = new ConcurrentHashMap<>(32);
 
+  private final Lock reportersLock = new ReentrantLock();
 
   public static final int DEFAULT_CLOUD_REPORTER_PERIOD = 60;
 
@@ -369,18 +370,11 @@ public class SolrMetricManager {
    */
   public Set<String> registryNames() {
     Set<String> set = new HashSet<>();
-    swapLock.lock();
-    try {
-      set.addAll(registries.keySet());
-    } finally {
-      swapLock.unlock();
-    }
-    sharedLock.lock();
-    try {
-      set.addAll(SharedMetricRegistries.names());
-    } finally {
-      sharedLock.unlock();
-    }
+
+    set.addAll(registries.keySet());
+
+    set.addAll(SharedMetricRegistries.names());
+
     return set;
   }
 
@@ -451,19 +445,33 @@ public class SolrMetricManager {
   public MetricRegistry registry(String registry) {
     registry = enforcePrefix(registry);
     if (isSharedRegistry(registry)) {
-      sharedLock.lock();
-      try {
-        return SharedMetricRegistries.getOrCreate(registry);
-      } finally {
-        sharedLock.unlock();
-      }
+
+
+        MetricRegistry reg = REGISTRIES.get(registry);
+        if (reg == null) {
+          reg = new SolrMetricRegistry();
+        }
+
+        MetricRegistry race = REGISTRIES.putIfAbsent(registry, reg);
+        if (race != null) {
+          return race;
+        }
+
+        return reg;
+
     } else {
-      swapLock.lock();
-      try {
-        return getOrCreateRegistry(registries, registry);
-      } finally {
-        swapLock.unlock();
-      }
+
+        MetricRegistry reg = registries.get(registry);
+        if (reg == null) {
+          reg = new SolrMetricRegistry();
+        }
+
+        MetricRegistry race = registries.putIfAbsent(registry, reg);
+        if (race != null) {
+          return race;
+        }
+
+        return reg;
     }
   }
 
@@ -493,19 +501,9 @@ public class SolrMetricManager {
     // make sure we use a name with prefix
     registry = enforcePrefix(registry);
     if (isSharedRegistry(registry)) {
-      sharedLock.lock();
-      try {
-        SharedMetricRegistries.remove(registry);
-      } finally {
-        sharedLock.unlock();
-      }
+      REGISTRIES.remove(registry);
     } else {
-      swapLock.lock();
-      try {
-        registries.remove(registry);
-      } finally {
-        swapLock.unlock();
-      }
+      registries.remove(registry);
     }
   }
 
@@ -523,25 +521,22 @@ public class SolrMetricManager {
     registry1 = enforcePrefix(registry1);
     registry2 = enforcePrefix(registry2);
     if (isSharedRegistry(registry1) || isSharedRegistry(registry2)) {
-      throw new UnsupportedOperationException("Cannot swap shared registry: " + registry1 + ", " + registry2);
+      throw new UnsupportedOperationException(
+          "Cannot swap shared registry: " + registry1 + ", " + registry2);
     }
-    swapLock.lock();
-    try {
-      MetricRegistry from = registries.get(registry1);
-      MetricRegistry to = registries.get(registry2);
-      if (from == to) {
-        return;
-      }
-      MetricRegistry reg1 = registries.remove(registry1);
-      MetricRegistry reg2 = registries.remove(registry2);
-      if (reg2 != null) {
-        registries.put(registry1, reg2);
-      }
-      if (reg1 != null) {
-        registries.put(registry2, reg1);
-      }
-    } finally {
-      swapLock.unlock();
+
+    MetricRegistry from = registries.get(registry1);
+    MetricRegistry to = registries.get(registry2);
+    if (from == to) {
+      return;
+    }
+    MetricRegistry reg1 = registries.remove(registry1);
+    MetricRegistry reg2 = registries.remove(registry2);
+    if (reg2 != null) {
+      registries.put(registry1, reg2);
+    }
+    if (reg1 != null) {
+      registries.put(registry2, reg1);
     }
   }
 
@@ -773,32 +768,78 @@ public class SolrMetricManager {
   }
 
   public String registerGauge(SolrMetricsContext context, String registry, Gauge<?> gauge, String tag, boolean force, String metricName, String... metricPath) {
-    return registerMetric(context, registry, new GaugeWrapper(gauge, tag), force, metricName, metricPath);
+    Set<String> names = tags.get(tag);
+    if (names == null) {
+      names = ConcurrentHashMap.newKeySet();
+      Set<String> race = tags.putIfAbsent(tag, names);
+      if (race != null) {
+        names = race;
+      }
+    }
+
+    String path = registerMetric(context, registry, gauge, force, metricName, metricPath);
+    names.add(path);
+    return path;
   }
 
-  public int unregisterGauges(String registryName, String tagSegment) {
-    if (tagSegment == null) {
-      return 0;
-    }
-    MetricRegistry registry = registry(registryName);
-    if (registry == null) return 0;
+//  public int unregisterGauges(String registryName, Set<String> gaugeNames) {
+//    if (gaugeNames.size() == 0) {
+//      return 0;
+//    }
+//    MetricRegistry registry = registry(registryName);
+//    if (registry == null) return 0;
+//    AtomicInteger removed = new AtomicInteger();
+//
+//    for (String name : gaugeNames) {
+//      if (registry.remove(name)) {
+//        removed.incrementAndGet();
+//      }
+//    }
+//    return removed.get();
+//  }
+
+  public int unregisterGauges(String registryName, String tag) {
     AtomicInteger removed = new AtomicInteger();
+    Set<String> names = tags.get(tag);
+    if (names != null) {
+      MetricRegistry registry = registry(registryName);
+      if (registry == null) return 0;
 
-    Set<Map.Entry<String,Metric>> entries = registry.getMetrics().entrySet();
-    for (Map.Entry<String,Metric> entry : entries) {
-      Metric metric = entry.getValue();
-        if (metric instanceof GaugeWrapper) {
-          GaugeWrapper wrapper = (GaugeWrapper) metric;
-          boolean toRemove = wrapper.getTag().contains(tagSegment);
-          if (toRemove) {
-            removed.incrementAndGet();
-            registry.remove(entry.getKey());
-          }
+
+      for (String name : names) {
+        if (registry.remove(name)) {
+          removed.incrementAndGet();
         }
+      }
     }
     return removed.get();
   }
 
+//
+//  public int unregisterGauges(String registryName, String tagSegment) {
+//    if (tagSegment == null) {
+//      return 0;
+//    }
+//    MetricRegistry registry = registry(registryName);
+//    if (registry == null) return 0;
+//    AtomicInteger removed = new AtomicInteger();
+//
+//    Set<Map.Entry<String,Metric>> entries = registry.getMetrics().entrySet();
+//    for (Map.Entry<String,Metric> entry : entries) {
+//      Metric metric = entry.getValue();
+//      if (metric instanceof GaugeWrapper) {
+//        GaugeWrapper wrapper = (GaugeWrapper) metric;
+//        boolean toRemove = wrapper.getTag().contains(tagSegment);
+//        if (toRemove) {
+//          removed.incrementAndGet();
+//          registry.remove(entry.getKey());
+//        }
+//      }
+//    }
+//    return removed.get();
+//  }
+
+
   /**
    * This method creates a hierarchical name with arbitrary levels of hierarchy
    *
diff --git a/solr/core/src/java/org/apache/solr/metrics/SolrMetricRegistry.java b/solr/core/src/java/org/apache/solr/metrics/SolrMetricRegistry.java
new file mode 100644
index 0000000..b75c4f8
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/metrics/SolrMetricRegistry.java
@@ -0,0 +1,14 @@
+package org.apache.solr.metrics;
+
+import com.codahale.metrics.Metric;
+import com.codahale.metrics.MetricRegistry;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+public class SolrMetricRegistry extends MetricRegistry {
+  protected ConcurrentMap<String,Metric> buildMap() {
+    // some hold as many 500+
+    return new ConcurrentHashMap<>(712);
+  }
+}
diff --git a/solr/core/src/java/org/apache/solr/metrics/SolrMetricsContext.java b/solr/core/src/java/org/apache/solr/metrics/SolrMetricsContext.java
index 0f8c4f0..6297014 100644
--- a/solr/core/src/java/org/apache/solr/metrics/SolrMetricsContext.java
+++ b/solr/core/src/java/org/apache/solr/metrics/SolrMetricsContext.java
@@ -41,8 +41,6 @@ public class SolrMetricsContext {
   final String tag;
   private final Set<String> metricNames = ConcurrentHashMap.newKeySet(128);
 
-  private final Set<String> gaugeNames = ConcurrentHashMap.newKeySet(128);
-
   public SolrMetricsContext(SolrMetricManager metricManager, String registryName, String tag) {
     this.registryName = registryName;
     this.metricManager = metricManager;
@@ -134,7 +132,7 @@ public class SolrMetricsContext {
    * Convenience method for {@link SolrMetricManager#registerGauge(SolrMetricsContext, String, Gauge, String, boolean, String, String...)}.
    */
   public void gauge(Gauge<?> gauge, boolean force, String metricName, String... metricPath) {
-    gaugeNames.add(metricManager.registerGauge(this, registryName, gauge, tag, force, metricName, metricPath));
+    metricManager.registerGauge(this, registryName, gauge, tag, force, metricName, metricPath);
   }
 
   /**
diff --git a/solr/core/src/java/org/apache/solr/search/CaffeineCache.java b/solr/core/src/java/org/apache/solr/search/CaffeineCache.java
index d779864..8184b88 100644
--- a/solr/core/src/java/org/apache/solr/search/CaffeineCache.java
+++ b/solr/core/src/java/org/apache/solr/search/CaffeineCache.java
@@ -230,19 +230,19 @@ public class CaffeineCache<K, V> extends SolrCacheBase implements SolrCache<K, V
 
   @Override
   public void close() throws IOException {
-    try (ParWork closer = new ParWork(this, true)) {
-      closer.collect("superClose", () -> {
-        try {
-          SolrCache.super.close();
-        } catch (IOException e) {
-          log.warn("IOException on close", e);
-        }
-      });
-      closer.collect("invalidateAll", () -> {
-        cache.invalidateAll();
-      });
-      closer.addCollect();
-    }
+    SolrCache.super.close();
+//    try (ParWork closer = new ParWork(this, true)) {
+//      closer.collect("superClose", () -> {
+//        try {
+//          SolrCache.super.close();
+//        } catch (IOException e) {
+//          log.warn("IOException on close", e);
+//        }
+//      });
+//      closer.collect("invalidateAll", () -> {
+//        cache.invalidateAll();
+//      });
+//    }
     ramBytes.reset();
   }
 
diff --git a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
index 7e50177..0cbc6ec 100644
--- a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
+++ b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
@@ -500,16 +500,14 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
       }
     }
 
-//    if (releaseDirectory) {
-//      directoryFactory.release(getIndexReader().directory());
-//    }
-
 
-    try {
-      SolrInfoBean.super.close();
-    } catch (Exception e) {
-      log.warn("Exception closing", e);
-    }
+// leave our metrics, they will be replaced and we may be doing a reload
+// and would clear the new cores searcher stats
+//    try {
+//      SolrInfoBean.super.close();
+//    } catch (Exception e) {
+//      log.warn("Exception closing", e);
+//    }
 
     // do this at the end so it only gets done if there are no exceptions
     numCloses.incrementAndGet();
@@ -2308,10 +2306,10 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
     // statsCache metrics
     parentContext.gauge(
         new MetricsMap((detailed, map) -> {
-          ConcurrentMap smap = new ConcurrentHashMap(1);
-          smap.putAll(statsCache.getCacheMetrics().getSnapshot());
+          map.putAll(statsCache.getCacheMetrics().getSnapshot());
           map.put("statsCacheImpl", statsCache.getClass().getSimpleName());
-        }, false), true, "statsCache", Category.CACHE.toString(), scope);
+        }, true), true, "statsCache", Category.CACHE.toString(), scope);
+    // we have to cache due to the size stuff, maybe improve granularity
   }
 
   private static class FilterImpl extends Filter {
diff --git a/solr/core/src/test/org/apache/solr/CursorPagingTest.java b/solr/core/src/test/org/apache/solr/CursorPagingTest.java
index 5aa8fef..181b5da 100644
--- a/solr/core/src/test/org/apache/solr/CursorPagingTest.java
+++ b/solr/core/src/test/org/apache/solr/CursorPagingTest.java
@@ -523,10 +523,10 @@ public class CursorPagingTest extends SolrTestCaseJ4 {
     final Collection<String> allFieldNames = getAllSortFieldNames();
 
     final MetricsMap filterCacheStats =
-        (MetricsMap)((SolrMetricManager.GaugeWrapper)h.getCore().getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.filterCache")).getGauge();
+        (MetricsMap)h.getCore().getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.filterCache");
     assertNotNull(filterCacheStats);
     final MetricsMap queryCacheStats =
-        (MetricsMap)((SolrMetricManager.GaugeWrapper)h.getCore().getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.queryResultCache")).getGauge();
+        (MetricsMap)h.getCore().getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.queryResultCache");
     assertNotNull(queryCacheStats);
 
     final long preQcIn = (Long) queryCacheStats.getValue().get("inserts");
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/StatsReloadRaceTest.java b/solr/core/src/test/org/apache/solr/handler/admin/StatsReloadRaceTest.java
index b4ae67b..e3b339c 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/StatsReloadRaceTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/StatsReloadRaceTest.java
@@ -124,6 +124,7 @@ public class StatsReloadRaceTest extends SolrTestCaseJ4 {
       // small window between core load and before searcher metrics are registered
       // so we may have to check a few times, and then fail softly if reload is not complete yet
       NamedList metrics = (NamedList)values.get("metrics");
+      System.out.println("metrics:" + metrics);
       if (metrics == null) {
         if (softFail) {
           return false;
diff --git a/solr/core/src/test/org/apache/solr/metrics/JvmMetricsTest.java b/solr/core/src/test/org/apache/solr/metrics/JvmMetricsTest.java
index 521bdbd..3800a39 100644
--- a/solr/core/src/test/org/apache/solr/metrics/JvmMetricsTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/JvmMetricsTest.java
@@ -100,7 +100,7 @@ public class JvmMetricsTest extends SolrJettyTestBase {
     }
     SolrMetricManager metricManager = jetty.getCoreContainer().getMetricManager();
     Map<String,Metric> metrics = metricManager.registry("solr.jvm").getMetrics();
-    MetricsMap map = (MetricsMap)((SolrMetricManager.GaugeWrapper)metrics.get("system.properties")).getGauge();
+    MetricsMap map = (MetricsMap)metrics.get("system.properties");
     assertNotNull(map);
     Map<String,Object> values = map.getValue();
     System.getProperties().forEach((k, v) -> {
diff --git a/solr/core/src/test/org/apache/solr/search/TestReRankQParserPlugin.java b/solr/core/src/test/org/apache/solr/search/TestReRankQParserPlugin.java
index b3e01f2..acbc892 100644
--- a/solr/core/src/test/org/apache/solr/search/TestReRankQParserPlugin.java
+++ b/solr/core/src/test/org/apache/solr/search/TestReRankQParserPlugin.java
@@ -383,8 +383,8 @@ public class TestReRankQParserPlugin extends SolrTestCaseJ4 {
         "//result/doc[5]/str[@name='id'][.='2']"
     );
 
-    MetricsMap metrics = (MetricsMap)((SolrMetricManager.GaugeWrapper)h.getCore().getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.queryResultCache")).getGauge();
-    Map<String,Object> stats = metrics.getValue();
+    MetricsMap metrics = (MetricsMap) h.getCore().getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.queryResultCache");
+    Map<String,Object> stats = metrics.getValue(true, false);
 
     long inserts = (Long) stats.get("inserts");
 
diff --git a/solr/core/src/test/org/apache/solr/search/TestSolrFieldCacheBean.java b/solr/core/src/test/org/apache/solr/search/TestSolrFieldCacheBean.java
index 49b754f..de956e5 100644
--- a/solr/core/src/test/org/apache/solr/search/TestSolrFieldCacheBean.java
+++ b/solr/core/src/test/org/apache/solr/search/TestSolrFieldCacheBean.java
@@ -77,7 +77,7 @@ public class TestSolrFieldCacheBean extends SolrTestCaseJ4 {
     SolrMetricManager metricManager = h.getCoreContainer().getMetricManager();
     SolrMetricsContext solrMetricsContext = new SolrMetricsContext(metricManager, registryName, "foo");
     mbean.initializeMetrics(solrMetricsContext, null);
-    MetricsMap metricsMap = (MetricsMap)((SolrMetricManager.GaugeWrapper)metricManager.registry(registryName).getMetrics().get("CACHE.fieldCache")).getGauge();
+    MetricsMap metricsMap = (MetricsMap)metricManager.registry(registryName).getMetrics().get("CACHE.fieldCache");
     Map<String, Object> metrics = checkJmx ? metricsMap.getValue(true) : metricsMap.getValue();
     assertTrue(((Number)metrics.get("entries_count")).longValue() > 0);
     assertNotNull(metrics.get("total_size"));
@@ -91,7 +91,7 @@ public class TestSolrFieldCacheBean extends SolrTestCaseJ4 {
     SolrMetricManager metricManager = h.getCoreContainer().getMetricManager();
     SolrMetricsContext solrMetricsContext = new SolrMetricsContext(metricManager, registryName, "foo");
     mbean.initializeMetrics(solrMetricsContext, null);
-    MetricsMap metricsMap = (MetricsMap)((SolrMetricManager.GaugeWrapper)metricManager.registry(registryName).getMetrics().get("CACHE.fieldCache")).getGauge();
+    MetricsMap metricsMap = (MetricsMap)metricManager.registry(registryName).getMetrics().get("CACHE.fieldCache");
     Map<String, Object> metrics = checkJmx ? metricsMap.getValue(true) : metricsMap.getValue();
     assertTrue(((Number)metrics.get("entries_count")).longValue() > 0);
     assertNull(metrics.get("total_size"));
diff --git a/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java b/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java
index 6ef4d27..98edb08 100644
--- a/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java
+++ b/solr/core/src/test/org/apache/solr/search/TestSolrQueryParser.java
@@ -550,11 +550,11 @@ public class TestSolrQueryParser extends SolrTestCaseJ4 {
     assertU(commit());  // arg... commit no longer "commits" unless there has been a change.
 
 
-    final MetricsMap filterCacheStats = (MetricsMap)((SolrMetricManager.GaugeWrapper)h.getCore().getCoreMetricManager().getRegistry()
-        .getMetrics().get("CACHE.searcher.filterCache")).getGauge();
+    final MetricsMap filterCacheStats = (MetricsMap)h.getCore().getCoreMetricManager().getRegistry()
+        .getMetrics().get("CACHE.searcher.filterCache");
     assertNotNull(filterCacheStats);
-    final MetricsMap queryCacheStats = (MetricsMap)((SolrMetricManager.GaugeWrapper)h.getCore().getCoreMetricManager().getRegistry()
-        .getMetrics().get("CACHE.searcher.queryResultCache")).getGauge();
+    final MetricsMap queryCacheStats = (MetricsMap)h.getCore().getCoreMetricManager().getRegistry()
+        .getMetrics().get("CACHE.searcher.queryResultCache");
 
     assertNotNull(queryCacheStats);
 
diff --git a/solr/core/src/test/org/apache/solr/search/join/TestScoreJoinQPScore.java b/solr/core/src/test/org/apache/solr/search/join/TestScoreJoinQPScore.java
index 8813b64..d1cbc48 100644
--- a/solr/core/src/test/org/apache/solr/search/join/TestScoreJoinQPScore.java
+++ b/solr/core/src/test/org/apache/solr/search/join/TestScoreJoinQPScore.java
@@ -204,7 +204,7 @@ public class TestScoreJoinQPScore extends SolrTestCaseJ4 {
     Map<String, Metric> metrics = h.getCoreContainer().getMetricManager().registry(h.getCore().getCoreMetricManager().getRegistryName()).getMetrics();
 
     @SuppressWarnings("rawtypes")
-    MetricsMap mm = (MetricsMap)((SolrMetricManager.GaugeWrapper)metrics.get("CACHE.searcher.queryResultCache")).getGauge();
+    MetricsMap mm = (MetricsMap)metrics.get("CACHE.searcher.queryResultCache");
     {
       Map<String,Object> statPre = mm.getValue();
       h.query(req("q", "{!join from=movieId_s to=id score=Avg}title:first", "fl", "id", "omitHeader", "true"));