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/04/11 17:39:08 UTC
[2/7] lucene-solr:master: SOLR-9959: SolrInfoMBean-s category and
hierarchy cleanup.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/core/TestJmxIntegration.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/core/TestJmxIntegration.java b/solr/core/src/test/org/apache/solr/core/TestJmxIntegration.java
index f841f92..db941f7 100644
--- a/solr/core/src/test/org/apache/solr/core/TestJmxIntegration.java
+++ b/solr/core/src/test/org/apache/solr/core/TestJmxIntegration.java
@@ -16,7 +16,10 @@
*/
package org.apache.solr.core;
-import org.apache.solr.core.JmxMonitoredMap.SolrDynamicMBean;
+import org.apache.solr.metrics.SolrMetricManager;
+import org.apache.solr.metrics.SolrMetricReporter;
+import org.apache.solr.metrics.reporters.JmxObjectNameFactory;
+import org.apache.solr.metrics.reporters.SolrJmxReporter;
import org.apache.solr.util.AbstractSolrTestCase;
import org.junit.AfterClass;
import org.junit.BeforeClass;
@@ -29,12 +32,10 @@ import javax.management.AttributeNotFoundException;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanInfo;
import javax.management.MBeanServer;
-import javax.management.MalformedObjectNameException;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import java.lang.invoke.MethodHandles;
import java.lang.management.ManagementFactory;
-import java.util.Hashtable;
import java.util.Map;
import java.util.Set;
@@ -49,6 +50,8 @@ public class TestJmxIntegration extends AbstractSolrTestCase {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private static MBeanServer mbeanServer = null;
+ private static JmxObjectNameFactory nameFactory = null;
+ private static String registryName = null;
@BeforeClass
public static void beforeClass() throws Exception {
@@ -61,25 +64,30 @@ public class TestJmxIntegration extends AbstractSolrTestCase {
initCore("solrconfig.xml", "schema.xml");
- // we should be able to se that the core has JmxIntegration enabled
- assertTrue("JMX not enabled",
- h.getCore().getSolrConfig().jmxConfig.enabled);
- // and we should be able to see that the the monitor map found
- // a JMX server to use, which refers to the server we started
-
- Map registry = h.getCore().getInfoRegistry();
- assertTrue("info registry is not a JMX monitored map",
- registry instanceof JmxMonitoredMap);
- mbeanServer = ((JmxMonitoredMap)registry).getServer();
-
- assertNotNull("No JMX server found by monitor map",
- mbeanServer);
-
- // NOTE: we can't garuntee that "mbeanServer == platformServer"
- // the JVM may have mutiple MBean servers funning when the test started
- // and the contract of not specifying one when configuring solr with
- // <jmx /> is that it will use whatever the "first" MBean server
+ // we should be able to see that the core has JmxIntegration enabled
+ registryName = h.getCore().getCoreMetricManager().getRegistryName();
+ SolrMetricManager manager = h.getCoreContainer().getMetricManager();
+ Map<String,SolrMetricReporter> reporters = manager.getReporters(registryName);
+ assertEquals(1, reporters.size());
+ SolrMetricReporter reporter = reporters.values().iterator().next();
+ assertTrue(reporter instanceof SolrJmxReporter);
+ SolrJmxReporter jmx = (SolrJmxReporter)reporter;
+ assertTrue("JMX not enabled", jmx.isActive());
+ // and we should be able to see that the reporter
+ // refers to the JMX server we started
+
+ mbeanServer = jmx.getMBeanServer();
+
+ assertNotNull("No JMX server found in the reporter",
+ mbeanServer);
+
+ // NOTE: we can't guarantee that "mbeanServer == platformServer"
+ // the JVM may have multiple MBean servers running when the test started
+ // and the contract of not specifying one when configuring solr.xml without
+ // agetnId or serviceUrl is that it will use whatever the "first" MBean server
// returned by the JVM is.
+
+ nameFactory = new JmxObjectNameFactory("default", registryName);
}
@AfterClass
@@ -93,34 +101,38 @@ public class TestJmxIntegration extends AbstractSolrTestCase {
Set<ObjectInstance> objects = mbeanServer.queryMBeans(null, null);
assertFalse("No objects found in mbean server", objects
- .isEmpty());
+ .isEmpty());
int numDynamicMbeans = 0;
for (ObjectInstance o : objects) {
- assertNotNull("Null name on: " + o.toString(), o.getObjectName());
- MBeanInfo mbeanInfo = mbeanServer.getMBeanInfo(o.getObjectName());
- if (mbeanInfo.getClassName().endsWith(SolrDynamicMBean.class.getName())) {
+ ObjectName name = o.getObjectName();
+ assertNotNull("Null name on: " + o.toString(), name);
+ MBeanInfo mbeanInfo = mbeanServer.getMBeanInfo(name);
+ if (name.getDomain().equals("solr")) {
numDynamicMbeans++;
MBeanAttributeInfo[] attrs = mbeanInfo.getAttributes();
- assertTrue("No Attributes found for mbean: " + mbeanInfo,
- 0 < attrs.length);
+ if (name.getKeyProperty("name").equals("fetcher")) { // no attributes without active replication
+ continue;
+ }
+ assertTrue("No Attributes found for mbean: " + o.getObjectName() + ", " + mbeanInfo,
+ 0 < attrs.length);
for (MBeanAttributeInfo attr : attrs) {
// ensure every advertised attribute is gettable
try {
Object trash = mbeanServer.getAttribute(o.getObjectName(), attr.getName());
} catch (javax.management.AttributeNotFoundException e) {
throw new RuntimeException("Unable to featch attribute for " + o.getObjectName()
- + ": " + attr.getName(), e);
+ + ": " + attr.getName(), e);
}
}
}
}
- assertTrue("No SolrDynamicMBeans found", 0 < numDynamicMbeans);
+ assertTrue("No MBeans found", 0 < numDynamicMbeans);
}
@Test
public void testJmxUpdate() throws Exception {
- SolrInfoMBean bean = null;
+ SolrInfoBean bean = null;
// wait until searcher is registered
for (int i=0; i<100; i++) {
bean = h.getCore().getInfoRegistry().get("searcher");
@@ -128,18 +140,20 @@ public class TestJmxIntegration extends AbstractSolrTestCase {
Thread.sleep(250);
}
if (bean==null) throw new RuntimeException("searcher was never registered");
- ObjectName searcher = getObjectName("searcher", bean);
+ ObjectName searcher = nameFactory.createName("gauge", registryName, "SEARCHER.searcher.*");
log.info("Mbeans in server: " + mbeanServer.queryNames(null, null));
+ Set<ObjectInstance> objects = mbeanServer.queryMBeans(searcher, null);
assertFalse("No mbean found for SolrIndexSearcher", mbeanServer.queryMBeans(searcher, null).isEmpty());
- int oldNumDocs = (Integer)mbeanServer.getAttribute(searcher, "numDocs");
+ ObjectName name = nameFactory.createName("gauge", registryName, "SEARCHER.searcher.numDocs");
+ int oldNumDocs = (Integer)mbeanServer.getAttribute(name, "Value");
assertU(adoc("id", "1"));
assertU("commit", commit());
- int numDocs = (Integer)mbeanServer.getAttribute(searcher, "numDocs");
+ int numDocs = (Integer)mbeanServer.getAttribute(name, "Value");
assertTrue("New numDocs is same as old numDocs as reported by JMX",
- numDocs > oldNumDocs);
+ numDocs > oldNumDocs);
}
@Test @Ignore("timing problem? https://issues.apache.org/jira/browse/SOLR-2715")
@@ -183,14 +197,4 @@ public class TestJmxIntegration extends AbstractSolrTestCase {
log.info("After Reload: Size of infoRegistry: " + registrySize + " MBeans: " + newNumberOfObjects);
assertEquals("Number of registered MBeans is not the same as info registry size", registrySize, newNumberOfObjects);
}
-
- private ObjectName getObjectName(String key, SolrInfoMBean infoBean)
- throws MalformedObjectNameException {
- Hashtable<String, String> map = new Hashtable<>();
- map.put("type", key);
- map.put("id", infoBean.getName());
- String coreName = h.getCore().getName();
- return ObjectName.getInstance(("solr" + (null != coreName ? "/" + coreName : "")), map);
- }
-}
-
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/core/TestJmxMonitoredMap.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/core/TestJmxMonitoredMap.java b/solr/core/src/test/org/apache/solr/core/TestJmxMonitoredMap.java
deleted file mode 100644
index aa107bc..0000000
--- a/solr/core/src/test/org/apache/solr/core/TestJmxMonitoredMap.java
+++ /dev/null
@@ -1,217 +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.lucene.util.LuceneTestCase;
-import org.apache.solr.common.util.NamedList;
-import org.apache.solr.core.SolrConfig.JmxConfiguration;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.management.MBeanServerConnection;
-import javax.management.ObjectInstance;
-import javax.management.ObjectName;
-import javax.management.Query;
-import javax.management.remote.JMXConnector;
-import javax.management.remote.JMXConnectorFactory;
-import javax.management.remote.JMXServiceURL;
-import java.io.IOException;
-import java.lang.invoke.MethodHandles;
-import java.net.ServerSocket;
-import java.rmi.registry.LocateRegistry;
-import java.rmi.server.RMIServerSocketFactory;
-import java.util.Set;
-
-import static org.hamcrest.CoreMatchers.allOf;
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.instanceOf;
-
-/**
- * Test for JmxMonitoredMap
- *
- *
- * @since solr 1.3
- */
-public class TestJmxMonitoredMap extends LuceneTestCase {
-
- private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
- private int port = 0;
-
- private JMXConnector connector;
-
- private MBeanServerConnection mbeanServer;
-
- private JmxMonitoredMap<String, SolrInfoMBean> monitoredMap;
-
- @Override
- @Before
- public void setUp() throws Exception {
- super.setUp();
- String oldHost = System.getProperty("java.rmi.server.hostname");
- try {
- // this stupid sysprop thing is needed, because remote stubs use an
- // arbitrary local ip to connect
- // See: http://weblogs.java.net/blog/emcmanus/archive/2006/12/multihomed_comp.html
- System.setProperty("java.rmi.server.hostname", "127.0.0.1");
- class LocalhostRMIServerSocketFactory implements RMIServerSocketFactory {
- ServerSocket socket;
-
- @Override
- public ServerSocket createServerSocket(int port) throws IOException {
- return socket = new ServerSocket(port);
- }
- };
- LocalhostRMIServerSocketFactory factory = new LocalhostRMIServerSocketFactory();
- LocateRegistry.createRegistry(0, null, factory);
- port = factory.socket.getLocalPort();
- log.info("Using port: " + port);
- String url = "service:jmx:rmi:///jndi/rmi://127.0.0.1:"+port+"/solrjmx";
- JmxConfiguration config = new JmxConfiguration(true, null, url, null);
- monitoredMap = new JmxMonitoredMap<>("", "", "", config);
- JMXServiceURL u = new JMXServiceURL(url);
- connector = JMXConnectorFactory.connect(u);
- mbeanServer = connector.getMBeanServerConnection();
- } finally {
- if (oldHost == null) {
- System.clearProperty("java.rmi.server.hostname");
- } else {
- System.setProperty("java.rmi.server.hostname", oldHost);
- }
- }
- }
-
- @Override
- @After
- public void tearDown() throws Exception {
- try {
- connector.close();
- } catch (Exception e) {
- }
- super.tearDown();
- }
-
- @Test
- public void testTypeName() throws Exception{
- MockInfoMBean mock = new MockInfoMBean();
- monitoredMap.put("mock", mock);
-
- NamedList dynamicStats = mock.getStatistics();
- assertTrue(dynamicStats.size() != 0);
- assertTrue(dynamicStats.get("Integer") instanceof Integer);
- assertTrue(dynamicStats.get("Double") instanceof Double);
- assertTrue(dynamicStats.get("Long") instanceof Long);
- assertTrue(dynamicStats.get("Short") instanceof Short);
- assertTrue(dynamicStats.get("Byte") instanceof Byte);
- assertTrue(dynamicStats.get("Float") instanceof Float);
- assertTrue(dynamicStats.get("String") instanceof String);
-
- Set<ObjectInstance> objects = mbeanServer.queryMBeans(null, Query.match(
- Query.attr("name"), Query.value("mock")));
-
- ObjectName name = objects.iterator().next().getObjectName();
- assertMBeanTypeAndValue(name, "Integer", Integer.class, 123);
- assertMBeanTypeAndValue(name, "Double", Double.class, 567.534);
- assertMBeanTypeAndValue(name, "Long", Long.class, 32352463l);
- assertMBeanTypeAndValue(name, "Short", Short.class, (short) 32768);
- assertMBeanTypeAndValue(name, "Byte", Byte.class, (byte) 254);
- assertMBeanTypeAndValue(name, "Float", Float.class, 3.456f);
- assertMBeanTypeAndValue(name, "String",String.class, "testing");
-
- }
-
- @SuppressWarnings("unchecked")
- public void assertMBeanTypeAndValue(ObjectName name, String attr, Class type, Object value) throws Exception {
- assertThat(mbeanServer.getAttribute(name, attr),
- allOf(instanceOf(type), equalTo(value))
- );
- }
-
- @Test
- public void testPutRemoveClear() throws Exception {
- MockInfoMBean mock = new MockInfoMBean();
- monitoredMap.put("mock", mock);
-
-
- Set<ObjectInstance> objects = mbeanServer.queryMBeans(null, Query.match(
- Query.attr("name"), Query.value("mock")));
- assertFalse("No MBean for mock object found in MBeanServer", objects
- .isEmpty());
-
- monitoredMap.remove("mock");
- objects = mbeanServer.queryMBeans(null, Query.match(Query.attr("name"),
- Query.value("mock")));
- assertTrue("MBean for mock object found in MBeanServer even after removal",
- objects.isEmpty());
-
- monitoredMap.put("mock", mock);
- monitoredMap.put("mock2", mock);
- objects = mbeanServer.queryMBeans(null, Query.match(Query.attr("name"),
- Query.value("mock")));
- assertFalse("No MBean for mock object found in MBeanServer", objects
- .isEmpty());
-
- monitoredMap.clear();
- objects = mbeanServer.queryMBeans(null, Query.match(Query.attr("name"),
- Query.value("mock")));
- assertTrue(
- "MBean for mock object found in MBeanServer even after clear has been called",
- objects.isEmpty());
-
- }
-
- @Test
- public void testJmxAugmentedSolrInfoMBean() throws Exception {
- final MockInfoMBean mock = new MockInfoMBean();
- final String jmxKey = "jmx";
- final String jmxValue = "jmxValue";
-
- MockJmxAugmentedSolrInfoMBean mbean = new MockJmxAugmentedSolrInfoMBean(mock) {
- @Override
- public NamedList getStatisticsForJmx() {
- NamedList stats = getStatistics();
- stats.add(jmxKey, jmxValue);
- return stats;
- }
- };
- monitoredMap.put("mock", mbean);
-
- // assert getStatistics called when used as a map. Note can't use equals here to compare
- // because getStatistics returns a new Object each time.
- assertNull(monitoredMap.get("mock").getStatistics().get(jmxKey));
-
- // assert getStatisticsForJmx called when used as jmx server
- Set<ObjectInstance> objects = mbeanServer.queryMBeans(null, Query.match(
- Query.attr("name"), Query.value("mock")));
- ObjectName name = objects.iterator().next().getObjectName();
- assertMBeanTypeAndValue(name, jmxKey, jmxValue.getClass(), jmxValue);
- }
-
- private static abstract class MockJmxAugmentedSolrInfoMBean
- extends SolrInfoMBeanWrapper implements JmxMonitoredMap.JmxAugmentedSolrInfoMBean {
-
- public MockJmxAugmentedSolrInfoMBean(SolrInfoMBean mbean) {
- super(mbean);
- }
-
- @Override
- public abstract NamedList getStatisticsForJmx();
- }
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/core/TestSolrDynamicMBean.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/core/TestSolrDynamicMBean.java b/solr/core/src/test/org/apache/solr/core/TestSolrDynamicMBean.java
deleted file mode 100644
index eae4e79..0000000
--- a/solr/core/src/test/org/apache/solr/core/TestSolrDynamicMBean.java
+++ /dev/null
@@ -1,87 +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.lucene.util.LuceneTestCase;
-import org.apache.solr.core.JmxMonitoredMap.SolrDynamicMBean;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Test for JmxMonitoredMap
- *
- *
- * @since solr 1.3
- */
-public class TestSolrDynamicMBean extends LuceneTestCase {
-
-
- @Override
- @Before
- public void setUp() throws Exception {
- super.setUp();
- }
-
-
- @Test
- public void testCachedStatsOption() throws Exception{
- // SOLR-6747 Add an optional caching option as a workaround for SOLR-6586.
-
- SolrInfoMBean solrmbeaninfo = new MockInfoMBean();
- SolrDynamicMBean sdmbean = new SolrDynamicMBean("", solrmbeaninfo);
-
- sdmbean.getMBeanInfo();
-
- Object object1 = sdmbean.getAttribute("Object");
- Object object2 = sdmbean.getAttribute("Object");
-
- assertNotSame(object1, object2);
-
- sdmbean.getMBeanInfo();
-
- Object object12 = sdmbean.getAttribute("Object");
- Object object22 = sdmbean.getAttribute("Object");
-
- assertNotSame(object1, object12);
- assertNotSame(object2, object22);
-
-
- // test cached stats
-
- solrmbeaninfo = new MockInfoMBean();
- sdmbean = new SolrDynamicMBean("", solrmbeaninfo, true);
-
- sdmbean.getMBeanInfo();
-
- object1 = sdmbean.getAttribute("Object");
- object2 = sdmbean.getAttribute("Object");
-
- assertEquals(object1, object2);
-
- sdmbean.getMBeanInfo();
-
- object12 = sdmbean.getAttribute("Object");
- object22 = sdmbean.getAttribute("Object");
-
- assertNotSame(object1, object12);
- assertNotSame(object2, object22);
-
- assertEquals(object12, object22);
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java
index 84e2382..c7622f6 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/MBeansHandlerTest.java
@@ -31,7 +31,7 @@ import org.junit.BeforeClass;
import org.junit.Test;
public class MBeansHandlerTest extends SolrTestCaseJ4 {
-
+
@BeforeClass
public static void beforeClass() throws Exception {
initCore("solrconfig.xml", "schema.xml");
@@ -43,26 +43,26 @@ public class MBeansHandlerTest extends SolrTestCaseJ4 {
CommonParams.QT,"/admin/mbeans",
"stats","true",
CommonParams.WT,"xml"
- ));
+ ));
List<ContentStream> streams = new ArrayList<>();
streams.add(new ContentStreamBase.StringStream(xml));
-
+
LocalSolrQueryRequest req = lrf.makeRequest(
CommonParams.QT,"/admin/mbeans",
"stats","true",
CommonParams.WT,"xml",
"diff","true");
req.setContentStreams(streams);
-
+
xml = h.query(req);
NamedList<NamedList<NamedList<Object>>> diff = SolrInfoMBeanHandler.fromXML(xml);
// The stats bean for SolrInfoMBeanHandler
NamedList stats = (NamedList)diff.get("ADMIN").get("/admin/mbeans").get("stats");
-
+
//System.out.println("stats:"+stats);
Pattern p = Pattern.compile("Was: (?<was>[0-9]+), Now: (?<now>[0-9]+), Delta: (?<delta>[0-9]+)");
- String response = stats.get("requests").toString();
+ String response = stats.get("ADMIN./admin/mbeans.requests").toString();
Matcher m = p.matcher(response);
if (!m.matches()) {
fail("Response did not match pattern: " + response);
@@ -96,4 +96,4 @@ public class MBeansHandlerTest extends SolrTestCaseJ4 {
assertTrue("external entity ignored properly", true);
}
-}
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/handler/admin/MetricsHandlerTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/MetricsHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/admin/MetricsHandlerTest.java
index 2f84997..f9fc874 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/MetricsHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/MetricsHandlerTest.java
@@ -17,6 +17,7 @@
package org.apache.solr.handler.admin;
+import java.lang.management.ManagementFactory;
import java.util.Map;
import org.apache.solr.SolrTestCaseJ4;
@@ -33,6 +34,9 @@ import org.junit.Test;
public class MetricsHandlerTest extends SolrTestCaseJ4 {
@BeforeClass
public static void beforeClass() throws Exception {
+ // this is needed to enable default SolrJmxReporter in TestHarness
+ ManagementFactory.getPlatformMBeanServer();
+
initCore("solrconfig.xml", "schema.xml");
}
@@ -136,6 +140,17 @@ public class MetricsHandlerTest extends SolrTestCaseJ4 {
assertNotNull(values.get("CONTAINER.threadPool.coreLoadExecutor.completed"));
resp = new SolrQueryResponse();
+ handler.handleRequestBody(req(CommonParams.QT, "/admin/metrics", CommonParams.WT, "json", "prefix", "CONTAINER.cores", "regex", "C.*thread.*completed"), resp);
+ values = resp.getValues();
+ assertNotNull(values.get("metrics"));
+ values = (NamedList) values.get("metrics");
+ assertNotNull(values.get("solr.node"));
+ values = (NamedList) values.get("solr.node");
+ assertEquals(5, values.size());
+ assertNotNull(values.get("CONTAINER.threadPool.coreContainerWorkExecutor.completed"));
+ assertNotNull(values.get("CONTAINER.threadPool.coreLoadExecutor.completed"));
+
+ resp = new SolrQueryResponse();
handler.handleRequestBody(req(CommonParams.QT, "/admin/metrics", CommonParams.WT, "json", "group", "jvm", "prefix", "CONTAINER.cores"), resp);
values = resp.getValues();
assertNotNull(values.get("metrics"));
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/handler/admin/StatsReloadRaceTest.java
----------------------------------------------------------------------
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 7bf4939..ca3b76e 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
@@ -17,7 +17,6 @@
package org.apache.solr.handler.admin;
import java.util.List;
-import java.util.Map;
import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;
@@ -68,7 +67,7 @@ public class StatsReloadRaceTest extends SolrTestCaseJ4 {
boolean isCompleted;
do {
if (random.nextBoolean()) {
- requestMbeans();
+ requestMetrics();
} else {
requestCoreStatus();
}
@@ -106,22 +105,31 @@ public class StatsReloadRaceTest extends SolrTestCaseJ4 {
return isCompleted;
}
- private void requestMbeans() throws Exception {
- String stats = h.query(req(
- CommonParams.QT, "/admin/mbeans",
- "stats", "true"));
-
- NamedList<NamedList<Object>> actualStats = SolrInfoMBeanHandler.fromXML(stats).get("CORE");
-
- for (Map.Entry<String, NamedList<Object>> tuple : actualStats) {
- if (tuple.getKey().contains("earcher")) { // catches "searcher" and "Searcher@345345 blah"
- NamedList<Object> searcherStats = tuple.getValue();
- @SuppressWarnings("unchecked")
- NamedList<Object> statsList = (NamedList<Object>)searcherStats.get("stats");
- assertEquals("expect to have exactly one indexVersion at "+statsList, 1, statsList.getAll("indexVersion").size());
- assertTrue(statsList.get("indexVersion") instanceof Long);
+ private void requestMetrics() throws Exception {
+ SolrQueryResponse rsp = new SolrQueryResponse();
+ String registry = "solr.core." + h.coreName;
+ String key = "SEARCHER.searcher.indexVersion";
+ boolean found = false;
+ int count = 10;
+ while (!found && count-- > 0) {
+ h.getCoreContainer().getRequestHandler("/admin/metrics").handleRequest(
+ req("prefix", "SEARCHER", "registry", registry, "compact", "true"), rsp);
+
+ NamedList values = rsp.getValues();
+ NamedList metrics = (NamedList)values.get("metrics");
+ metrics = (NamedList)metrics.get(registry);
+ // this is not guaranteed to exist right away after core reload - there's a
+ // small window between core load and before searcher metrics are registered
+ // so we may have to check a few times
+ if (metrics.get(key) != null) {
+ found = true;
+ assertTrue(metrics.get(key) instanceof Long);
+ break;
+ } else {
+ Thread.sleep(500);
}
}
+ assertTrue("Key " + key + " not found in registry " + registry, found);
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/handler/admin/SystemInfoHandlerTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/SystemInfoHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/admin/SystemInfoHandlerTest.java
index c961a55..2e20dc8 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/SystemInfoHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/SystemInfoHandlerTest.java
@@ -20,8 +20,10 @@ import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean;
import java.util.Arrays;
+import com.codahale.metrics.Gauge;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.solr.common.util.SimpleOrderedMap;
+import org.apache.solr.util.stats.MetricUtils;
public class SystemInfoHandlerTest extends LuceneTestCase {
@@ -36,9 +38,11 @@ public class SystemInfoHandlerTest extends LuceneTestCase {
info.add( "version", os.getVersion() );
info.add( "arch", os.getArch() );
- // make another using addMXBeanProperties()
+ // make another using MetricUtils.addMXBeanMetrics()
SimpleOrderedMap<Object> info2 = new SimpleOrderedMap<>();
- SystemInfoHandler.addMXBeanProperties( os, OperatingSystemMXBean.class, info2 );
+ MetricUtils.addMXBeanMetrics( os, OperatingSystemMXBean.class, null, (k, v) -> {
+ info2.add(k, ((Gauge)v).getValue());
+ } );
// make sure they got the same thing
for (String p : Arrays.asList("name", "version", "arch")) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/handler/component/ResourceSharingTestComponent.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/handler/component/ResourceSharingTestComponent.java b/solr/core/src/test/org/apache/solr/handler/component/ResourceSharingTestComponent.java
index 7c4e663..d268a4e 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/ResourceSharingTestComponent.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/ResourceSharingTestComponent.java
@@ -63,11 +63,6 @@ public class ResourceSharingTestComponent extends SearchComponent implements Sol
return "ResourceSharingTestComponent";
}
- @Override
- public String getSource() {
- return null;
- }
-
@SuppressWarnings("unchecked")
TestObject getTestObj() {
return this.blob.get();
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/metrics/JvmMetricsTest.java
----------------------------------------------------------------------
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 72adc68..a656f84 100644
--- a/solr/core/src/test/org/apache/solr/metrics/JvmMetricsTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/JvmMetricsTest.java
@@ -16,8 +16,6 @@
*/
package org.apache.solr.metrics;
-import javax.management.MBeanServer;
-import java.lang.management.ManagementFactory;
import java.util.Map;
import com.codahale.metrics.Gauge;
@@ -31,26 +29,63 @@ import org.junit.Test;
*/
public class JvmMetricsTest extends SolrJettyTestBase {
+ static final String[] STRING_OS_METRICS = {
+ "arch",
+ "name",
+ "version"
+ };
+ static final String[] NUMERIC_OS_METRICS = {
+ "availableProcessors",
+ "systemLoadAverage"
+ };
+
+ static final String[] BUFFER_METRICS = {
+ "direct.Count",
+ "direct.MemoryUsed",
+ "direct.TotalCapacity",
+ "mapped.Count",
+ "mapped.MemoryUsed",
+ "mapped.TotalCapacity"
+ };
+
@BeforeClass
public static void beforeTest() throws Exception {
createJetty(legacyExampleCollection1SolrHome());
}
@Test
- public void testOperatingSystemMetricsSet() throws Exception {
- MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
- OperatingSystemMetricSet set = new OperatingSystemMetricSet(mBeanServer);
+ public void testOperatingSystemMetricSet() throws Exception {
+ OperatingSystemMetricSet set = new OperatingSystemMetricSet();
Map<String, Metric> metrics = set.getMetrics();
assertTrue(metrics.size() > 0);
- for (String metric : OperatingSystemMetricSet.METRICS) {
+ for (String metric : NUMERIC_OS_METRICS) {
Gauge<?> gauge = (Gauge<?>)metrics.get(metric);
- if (gauge == null || gauge.getValue() == null) { // some are optional depending on OS
- continue;
- }
+ assertNotNull(metric, gauge);
double value = ((Number)gauge.getValue()).doubleValue();
// SystemLoadAverage on Windows may be -1.0
assertTrue("unexpected value of " + metric + ": " + value, value >= 0 || value == -1.0);
}
+ for (String metric : STRING_OS_METRICS) {
+ Gauge<?> gauge = (Gauge<?>)metrics.get(metric);
+ assertNotNull(metric, gauge);
+ String value = (String)gauge.getValue();
+ assertNotNull(value);
+ assertFalse(value.isEmpty());
+ }
+ }
+
+ @Test
+ public void testAltBufferPoolMetricSet() throws Exception {
+ AltBufferPoolMetricSet set = new AltBufferPoolMetricSet();
+ Map<String, Metric> metrics = set.getMetrics();
+ assertTrue(metrics.size() > 0);
+ for (String name : BUFFER_METRICS) {
+ assertNotNull(name, metrics.get(name));
+ Object g = metrics.get(name);
+ assertTrue(g instanceof Gauge);
+ Object v = ((Gauge)g).getValue();
+ assertTrue(v instanceof Long);
+ }
}
@Test
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/metrics/SolrCoreMetricManagerTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/metrics/SolrCoreMetricManagerTest.java b/solr/core/src/test/org/apache/solr/metrics/SolrCoreMetricManagerTest.java
index 6e8e1e5..11f8923 100644
--- a/solr/core/src/test/org/apache/solr/metrics/SolrCoreMetricManagerTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/SolrCoreMetricManagerTest.java
@@ -29,7 +29,7 @@ import org.apache.lucene.util.TestUtil;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.params.CoreAdminParams;
import org.apache.solr.core.PluginInfo;
-import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.core.SolrInfoBean;
import org.apache.solr.metrics.reporters.MockMetricReporter;
import org.apache.solr.schema.FieldType;
import org.junit.After;
@@ -61,7 +61,7 @@ public class SolrCoreMetricManagerTest extends SolrTestCaseJ4 {
Random random = random();
String scope = SolrMetricTestUtils.getRandomScope(random);
- SolrInfoMBean.Category category = SolrMetricTestUtils.getRandomCategory(random);
+ SolrInfoBean.Category category = SolrMetricTestUtils.getRandomCategory(random);
Map<String, Counter> metrics = SolrMetricTestUtils.getRandomMetrics(random);
SolrMetricProducer producer = SolrMetricTestUtils.getProducerOf(metricManager, category, scope, metrics);
try {
@@ -82,7 +82,7 @@ public class SolrCoreMetricManagerTest extends SolrTestCaseJ4 {
Map<String, Counter> registered = new HashMap<>();
String scope = SolrMetricTestUtils.getRandomScope(random, true);
- SolrInfoMBean.Category category = SolrMetricTestUtils.getRandomCategory(random, true);
+ SolrInfoBean.Category category = SolrMetricTestUtils.getRandomCategory(random, true);
int iterations = TestUtil.nextInt(random, 0, MAX_ITERATIONS);
for (int i = 0; i < iterations; ++i) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/metrics/SolrMetricManagerTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/metrics/SolrMetricManagerTest.java b/solr/core/src/test/org/apache/solr/metrics/SolrMetricManagerTest.java
index 1c29c5e..d306119 100644
--- a/solr/core/src/test/org/apache/solr/metrics/SolrMetricManagerTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/SolrMetricManagerTest.java
@@ -29,7 +29,7 @@ import org.apache.lucene.util.TestUtil;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.PluginInfo;
-import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.core.SolrInfoBean;
import org.apache.solr.core.SolrResourceLoader;
import org.apache.solr.metrics.reporters.MockMetricReporter;
import org.junit.Test;
@@ -62,10 +62,10 @@ public class SolrMetricManagerTest extends SolrTestCaseJ4 {
String toName = "to-" + TestUtil.randomSimpleString(r, 1, 10);
// register test metrics
for (Map.Entry<String, Counter> entry : metrics1.entrySet()) {
- metricManager.register(fromName, entry.getValue(), false, entry.getKey(), "metrics1");
+ metricManager.register(null, fromName, entry.getValue(), false, entry.getKey(), "metrics1");
}
for (Map.Entry<String, Counter> entry : metrics2.entrySet()) {
- metricManager.register(toName, entry.getValue(), false, entry.getKey(), "metrics2");
+ metricManager.register(null, toName, entry.getValue(), false, entry.getKey(), "metrics2");
}
assertEquals(metrics1.size(), metricManager.registry(fromName).getMetrics().size());
assertEquals(metrics2.size(), metricManager.registry(toName).getMetrics().size());
@@ -125,13 +125,13 @@ public class SolrMetricManagerTest extends SolrTestCaseJ4 {
String registryName = TestUtil.randomSimpleString(r, 1, 10);
for (Map.Entry<String, Counter> entry : metrics.entrySet()) {
- metricManager.register(registryName, entry.getValue(), false, entry.getKey(), "foo", "bar");
+ metricManager.register(null, registryName, entry.getValue(), false, entry.getKey(), "foo", "bar");
}
for (Map.Entry<String, Counter> entry : metrics.entrySet()) {
- metricManager.register(registryName, entry.getValue(), false, entry.getKey(), "foo", "baz");
+ metricManager.register(null, registryName, entry.getValue(), false, entry.getKey(), "foo", "baz");
}
for (Map.Entry<String, Counter> entry : metrics.entrySet()) {
- metricManager.register(registryName, entry.getValue(), false, entry.getKey(), "foo");
+ metricManager.register(null, registryName, entry.getValue(), false, entry.getKey(), "foo");
}
assertEquals(metrics.size() * 3, metricManager.registry(registryName).getMetrics().size());
@@ -163,10 +163,10 @@ public class SolrMetricManagerTest extends SolrTestCaseJ4 {
String registryName = TestUtil.randomSimpleString(r, 1, 10);
- metricManager.counter(registryName, "simple_counter", "foo", "bar");
- metricManager.timer(registryName, "simple_timer", "foo", "bar");
- metricManager.meter(registryName, "simple_meter", "foo", "bar");
- metricManager.histogram(registryName, "simple_histogram", "foo", "bar");
+ metricManager.counter(null, registryName, "simple_counter", "foo", "bar");
+ metricManager.timer(null, registryName, "simple_timer", "foo", "bar");
+ metricManager.meter(null, registryName, "simple_meter", "foo", "bar");
+ metricManager.histogram(null, registryName, "simple_histogram", "foo", "bar");
Map<String, Metric> metrics = metricManager.registry(registryName).getMetrics();
assertEquals(4, metrics.size());
for (Map.Entry<String, Metric> entry : metrics.entrySet()) {
@@ -180,13 +180,13 @@ public class SolrMetricManagerTest extends SolrTestCaseJ4 {
String name = TestUtil.randomSimpleString(r, 1, 10);
- String result = SolrMetricManager.getRegistryName(SolrInfoMBean.Group.core, name, "collection1");
+ String result = SolrMetricManager.getRegistryName(SolrInfoBean.Group.core, name, "collection1");
assertEquals("solr.core." + name + ".collection1", result);
// try it with already prefixed name - group will be ignored
- result = SolrMetricManager.getRegistryName(SolrInfoMBean.Group.core, result);
+ result = SolrMetricManager.getRegistryName(SolrInfoBean.Group.core, result);
assertEquals("solr.core." + name + ".collection1", result);
// try it with already prefixed name but with additional segments
- result = SolrMetricManager.getRegistryName(SolrInfoMBean.Group.core, result, "shard1", "replica1");
+ result = SolrMetricManager.getRegistryName(SolrInfoBean.Group.core, result, "shard1", "replica1");
assertEquals("solr.core." + name + ".collection1.shard1.replica1", result);
}
@@ -206,18 +206,18 @@ public class SolrMetricManagerTest extends SolrTestCaseJ4 {
createPluginInfo("core_foo", "core", null)
};
String tag = "xyz";
- metricManager.loadReporters(plugins, loader, tag, SolrInfoMBean.Group.node);
+ metricManager.loadReporters(plugins, loader, tag, SolrInfoBean.Group.node);
Map<String, SolrMetricReporter> reporters = metricManager.getReporters(
- SolrMetricManager.getRegistryName(SolrInfoMBean.Group.node));
+ SolrMetricManager.getRegistryName(SolrInfoBean.Group.node));
assertEquals(4, reporters.size());
assertTrue(reporters.containsKey("universal_foo@" + tag));
assertTrue(reporters.containsKey("multigroup_foo@" + tag));
assertTrue(reporters.containsKey("node_foo@" + tag));
assertTrue(reporters.containsKey("multiregistry_foo@" + tag));
- metricManager.loadReporters(plugins, loader, tag, SolrInfoMBean.Group.core, "collection1");
+ metricManager.loadReporters(plugins, loader, tag, SolrInfoBean.Group.core, "collection1");
reporters = metricManager.getReporters(
- SolrMetricManager.getRegistryName(SolrInfoMBean.Group.core, "collection1"));
+ SolrMetricManager.getRegistryName(SolrInfoBean.Group.core, "collection1"));
assertEquals(5, reporters.size());
assertTrue(reporters.containsKey("universal_foo@" + tag));
assertTrue(reporters.containsKey("multigroup_foo@" + tag));
@@ -225,26 +225,26 @@ public class SolrMetricManagerTest extends SolrTestCaseJ4 {
assertTrue(reporters.containsKey("core_foo@" + tag));
assertTrue(reporters.containsKey("multiregistry_foo@" + tag));
- metricManager.loadReporters(plugins, loader, tag, SolrInfoMBean.Group.jvm);
+ metricManager.loadReporters(plugins, loader, tag, SolrInfoBean.Group.jvm);
reporters = metricManager.getReporters(
- SolrMetricManager.getRegistryName(SolrInfoMBean.Group.jvm));
+ SolrMetricManager.getRegistryName(SolrInfoBean.Group.jvm));
assertEquals(2, reporters.size());
assertTrue(reporters.containsKey("universal_foo@" + tag));
assertTrue(reporters.containsKey("multigroup_foo@" + tag));
metricManager.removeRegistry("solr.jvm");
reporters = metricManager.getReporters(
- SolrMetricManager.getRegistryName(SolrInfoMBean.Group.jvm));
+ SolrMetricManager.getRegistryName(SolrInfoBean.Group.jvm));
assertEquals(0, reporters.size());
metricManager.removeRegistry("solr.node");
reporters = metricManager.getReporters(
- SolrMetricManager.getRegistryName(SolrInfoMBean.Group.node));
+ SolrMetricManager.getRegistryName(SolrInfoBean.Group.node));
assertEquals(0, reporters.size());
metricManager.removeRegistry("solr.core.collection1");
reporters = metricManager.getReporters(
- SolrMetricManager.getRegistryName(SolrInfoMBean.Group.core, "collection1"));
+ SolrMetricManager.getRegistryName(SolrInfoBean.Group.core, "collection1"));
assertEquals(0, reporters.size());
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/metrics/SolrMetricReporterTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/metrics/SolrMetricReporterTest.java b/solr/core/src/test/org/apache/solr/metrics/SolrMetricReporterTest.java
index b275919..f3359cc 100644
--- a/solr/core/src/test/org/apache/solr/metrics/SolrMetricReporterTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/SolrMetricReporterTest.java
@@ -42,6 +42,7 @@ public class SolrMetricReporterTest extends LuceneTestCase {
Map<String, Object> attrs = new HashMap<>();
attrs.put(FieldType.CLASS_NAME, MockMetricReporter.class.getName());
attrs.put(CoreAdminParams.NAME, TestUtil.randomUnicodeString(random));
+ attrs.put("enabled", random.nextBoolean());
boolean shouldDefineConfigurable = random.nextBoolean();
String configurable = TestUtil.randomUnicodeString(random);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/metrics/SolrMetricTestUtils.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/metrics/SolrMetricTestUtils.java b/solr/core/src/test/org/apache/solr/metrics/SolrMetricTestUtils.java
index 6bd6500..98fc9b1 100644
--- a/solr/core/src/test/org/apache/solr/metrics/SolrMetricTestUtils.java
+++ b/solr/core/src/test/org/apache/solr/metrics/SolrMetricTestUtils.java
@@ -23,12 +23,12 @@ import java.util.Random;
import com.codahale.metrics.Counter;
import org.apache.lucene.util.TestUtil;
-import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.core.SolrInfoBean;
public final class SolrMetricTestUtils {
private static final int MAX_ITERATIONS = 100;
- private static final SolrInfoMBean.Category CATEGORIES[] = SolrInfoMBean.Category.values();
+ private static final SolrInfoBean.Category CATEGORIES[] = SolrInfoBean.Category.values();
public static String getRandomScope(Random random) {
return getRandomScope(random, random.nextBoolean());
@@ -38,11 +38,11 @@ public final class SolrMetricTestUtils {
return shouldDefineScope ? TestUtil.randomSimpleString(random, 1, 10) : null; // must be simple string for JMX publishing
}
- public static SolrInfoMBean.Category getRandomCategory(Random random) {
+ public static SolrInfoBean.Category getRandomCategory(Random random) {
return getRandomCategory(random, random.nextBoolean());
}
- public static SolrInfoMBean.Category getRandomCategory(Random random, boolean shouldDefineCategory) {
+ public static SolrInfoBean.Category getRandomCategory(Random random, boolean shouldDefineCategory) {
return shouldDefineCategory ? CATEGORIES[TestUtil.nextInt(random, 0, CATEGORIES.length - 1)] : null;
}
@@ -75,7 +75,7 @@ public final class SolrMetricTestUtils {
return metrics;
}
- public static SolrMetricProducer getProducerOf(SolrMetricManager metricManager, SolrInfoMBean.Category category, String scope, Map<String, Counter> metrics) {
+ public static SolrMetricProducer getProducerOf(SolrMetricManager metricManager, SolrInfoBean.Category category, String scope, Map<String, Counter> metrics) {
return new SolrMetricProducer() {
@Override
public void initializeMetrics(SolrMetricManager manager, String registry, String scope) {
@@ -86,7 +86,7 @@ public final class SolrMetricTestUtils {
return;
}
for (Map.Entry<String, Counter> entry : metrics.entrySet()) {
- manager.counter(registry, entry.getKey(), category.toString(), scope);
+ manager.counter(null, registry, entry.getKey(), category.toString(), scope);
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/metrics/SolrMetricsIntegrationTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/metrics/SolrMetricsIntegrationTest.java b/solr/core/src/test/org/apache/solr/metrics/SolrMetricsIntegrationTest.java
index dfb5a0f..56dab37 100644
--- a/solr/core/src/test/org/apache/solr/metrics/SolrMetricsIntegrationTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/SolrMetricsIntegrationTest.java
@@ -29,10 +29,11 @@ import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.NodeConfig;
import org.apache.solr.core.PluginInfo;
-import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.core.SolrInfoBean;
import org.apache.solr.core.SolrResourceLoader;
import org.apache.solr.core.SolrXmlConfig;
import org.apache.solr.metrics.reporters.MockMetricReporter;
+import org.apache.solr.util.JmxUtil;
import org.apache.solr.util.TestHarness;
import org.junit.After;
import org.junit.Before;
@@ -50,11 +51,12 @@ public class SolrMetricsIntegrationTest extends SolrTestCaseJ4 {
private static final String MULTIREGISTRY = "multiregistry";
private static final String[] INITIAL_REPORTERS = {REPORTER_NAMES[0], REPORTER_NAMES[1], UNIVERSAL, SPECIFIC, MULTIGROUP, MULTIREGISTRY};
private static final String[] RENAMED_REPORTERS = {REPORTER_NAMES[0], REPORTER_NAMES[1], UNIVERSAL, MULTIGROUP};
- private static final SolrInfoMBean.Category HANDLER_CATEGORY = SolrInfoMBean.Category.QUERY;
+ private static final SolrInfoBean.Category HANDLER_CATEGORY = SolrInfoBean.Category.QUERY;
private CoreContainer cc;
private SolrMetricManager metricManager;
private String tag;
+ private int jmxReporter;
private void assertTagged(Map<String, SolrMetricReporter> reporters, String name) {
assertTrue("Reporter '" + name + "' missing in " + reporters, reporters.containsKey(name + "@" + tag));
@@ -71,11 +73,12 @@ public class SolrMetricsIntegrationTest extends SolrTestCaseJ4 {
cc = createCoreContainer(cfg,
new TestHarness.TestCoresLocator(DEFAULT_TEST_CORENAME, initCoreDataDir.getAbsolutePath(), "solrconfig.xml", "schema.xml"));
h.coreName = DEFAULT_TEST_CORENAME;
+ jmxReporter = JmxUtil.findFirstMBeanServer() != null ? 1 : 0;
metricManager = cc.getMetricManager();
tag = h.getCore().getCoreMetricManager().getTag();
// initially there are more reporters, because two of them are added via a matching collection name
Map<String, SolrMetricReporter> reporters = metricManager.getReporters("solr.core." + DEFAULT_TEST_CORENAME);
- assertEquals(INITIAL_REPORTERS.length, reporters.size());
+ assertEquals(INITIAL_REPORTERS.length + jmxReporter, reporters.size());
for (String r : INITIAL_REPORTERS) {
assertTagged(reporters, r);
}
@@ -85,9 +88,9 @@ public class SolrMetricsIntegrationTest extends SolrTestCaseJ4 {
cfg = cc.getConfig();
PluginInfo[] plugins = cfg.getMetricReporterPlugins();
assertNotNull(plugins);
- assertEquals(10, plugins.length);
+ assertEquals(10 + jmxReporter, plugins.length);
reporters = metricManager.getReporters("solr.node");
- assertEquals(4, reporters.size());
+ assertEquals(4 + jmxReporter, reporters.size());
assertTrue("Reporter '" + REPORTER_NAMES[0] + "' missing in solr.node", reporters.containsKey(REPORTER_NAMES[0]));
assertTrue("Reporter '" + UNIVERSAL + "' missing in solr.node", reporters.containsKey(UNIVERSAL));
assertTrue("Reporter '" + MULTIGROUP + "' missing in solr.node", reporters.containsKey(MULTIGROUP));
@@ -120,7 +123,7 @@ public class SolrMetricsIntegrationTest extends SolrTestCaseJ4 {
String metricName = SolrMetricManager.mkName(METRIC_NAME, HANDLER_CATEGORY.toString(), HANDLER_NAME);
SolrCoreMetricManager coreMetricManager = h.getCore().getCoreMetricManager();
- Timer timer = (Timer) metricManager.timer(coreMetricManager.getRegistryName(), metricName);
+ Timer timer = (Timer) metricManager.timer(null, coreMetricManager.getRegistryName(), metricName);
long initialCount = timer.getCount();
@@ -132,7 +135,7 @@ public class SolrMetricsIntegrationTest extends SolrTestCaseJ4 {
long finalCount = timer.getCount();
assertEquals("metric counter incorrect", iterations, finalCount - initialCount);
Map<String, SolrMetricReporter> reporters = metricManager.getReporters(coreMetricManager.getRegistryName());
- assertEquals(RENAMED_REPORTERS.length, reporters.size());
+ assertEquals(RENAMED_REPORTERS.length + jmxReporter, reporters.size());
// SPECIFIC and MULTIREGISTRY were skipped because they were
// specific to collection1
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/metrics/reporters/SolrGangliaReporterTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/metrics/reporters/SolrGangliaReporterTest.java b/solr/core/src/test/org/apache/solr/metrics/reporters/SolrGangliaReporterTest.java
index c50ff3c..eca414c 100644
--- a/solr/core/src/test/org/apache/solr/metrics/reporters/SolrGangliaReporterTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/reporters/SolrGangliaReporterTest.java
@@ -64,7 +64,7 @@ public class SolrGangliaReporterTest extends SolrTestCaseJ4 {
h.coreName = DEFAULT_TEST_CORENAME;
SolrMetricManager metricManager = cc.getMetricManager();
Map<String, SolrMetricReporter> reporters = metricManager.getReporters("solr.node");
- assertEquals(1, reporters.size());
+ assertTrue(reporters.toString(), reporters.size() >= 1);
SolrMetricReporter reporter = reporters.get("test");
assertNotNull(reporter);
assertTrue(reporter instanceof SolrGangliaReporter);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/metrics/reporters/SolrGraphiteReporterTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/metrics/reporters/SolrGraphiteReporterTest.java b/solr/core/src/test/org/apache/solr/metrics/reporters/SolrGraphiteReporterTest.java
index f45b193..5438504 100644
--- a/solr/core/src/test/org/apache/solr/metrics/reporters/SolrGraphiteReporterTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/reporters/SolrGraphiteReporterTest.java
@@ -35,6 +35,7 @@ import org.apache.solr.core.SolrResourceLoader;
import org.apache.solr.core.SolrXmlConfig;
import org.apache.solr.metrics.SolrMetricManager;
import org.apache.solr.metrics.SolrMetricReporter;
+import org.apache.solr.util.JmxUtil;
import org.apache.solr.util.TestHarness;
import org.junit.Test;
@@ -45,6 +46,7 @@ public class SolrGraphiteReporterTest extends SolrTestCaseJ4 {
@Test
public void testReporter() throws Exception {
+ int jmxReporter = JmxUtil.findFirstMBeanServer() != null ? 1: 0;
Path home = Paths.get(TEST_HOME());
// define these properties, they are used in solrconfig.xml
System.setProperty("solr.test.sys.prop1", "propone");
@@ -63,7 +65,7 @@ public class SolrGraphiteReporterTest extends SolrTestCaseJ4 {
h.coreName = DEFAULT_TEST_CORENAME;
SolrMetricManager metricManager = cc.getMetricManager();
Map<String, SolrMetricReporter> reporters = metricManager.getReporters("solr.node");
- assertEquals(1, reporters.size());
+ assertEquals(1 + jmxReporter, reporters.size());
SolrMetricReporter reporter = reporters.get("test");
assertNotNull(reporter);
assertTrue(reporter instanceof SolrGraphiteReporter);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/metrics/reporters/SolrJmxReporterTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/metrics/reporters/SolrJmxReporterTest.java b/solr/core/src/test/org/apache/solr/metrics/reporters/SolrJmxReporterTest.java
index 82b9d58..839a44b 100644
--- a/solr/core/src/test/org/apache/solr/metrics/reporters/SolrJmxReporterTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/reporters/SolrJmxReporterTest.java
@@ -20,6 +20,8 @@ import javax.management.MBeanServer;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
+import java.rmi.registry.LocateRegistry;
+import java.rmi.registry.Registry;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
@@ -31,7 +33,7 @@ import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.params.CoreAdminParams;
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.metrics.SolrCoreMetricManager;
import org.apache.solr.metrics.SolrMetricManager;
import org.apache.solr.metrics.SolrMetricProducer;
@@ -40,12 +42,15 @@ import org.apache.solr.metrics.SolrMetricTestUtils;
import org.apache.solr.schema.FieldType;
import org.junit.After;
import org.junit.Before;
+import org.junit.BeforeClass;
import org.junit.Test;
public class SolrJmxReporterTest extends SolrTestCaseJ4 {
private static final int MAX_ITERATIONS = 20;
+ private static int jmxPort;
+
private String domain;
private SolrCoreMetricManager coreMetricManager;
@@ -53,6 +58,14 @@ public class SolrJmxReporterTest extends SolrTestCaseJ4 {
private SolrJmxReporter reporter;
private MBeanServer mBeanServer;
private String reporterName;
+ private String rootName;
+
+ @BeforeClass
+ public static void init() throws Exception {
+ jmxPort = getNextAvailablePort();
+ assertFalse(jmxPort == -1);
+ LocateRegistry.createRegistry(jmxPort);
+ }
@Before
public void beforeTest() throws Exception {
@@ -60,10 +73,11 @@ public class SolrJmxReporterTest extends SolrTestCaseJ4 {
final SolrCore core = h.getCore();
domain = core.getName();
+ rootName = TestUtil.randomSimpleString(random(), 1, 10);
coreMetricManager = core.getCoreMetricManager();
metricManager = core.getCoreDescriptor().getCoreContainer().getMetricManager();
- PluginInfo pluginInfo = createReporterPluginInfo();
+ PluginInfo pluginInfo = createReporterPluginInfo(rootName, true);
metricManager.loadReporter(coreMetricManager.getRegistryName(), coreMetricManager.getCore().getResourceLoader(),
pluginInfo, coreMetricManager.getTag());
@@ -79,7 +93,7 @@ public class SolrJmxReporterTest extends SolrTestCaseJ4 {
assertNotNull("MBean server not found.", mBeanServer);
}
- private PluginInfo createReporterPluginInfo() {
+ private PluginInfo createReporterPluginInfo(String rootName, boolean enabled) {
Random random = random();
String className = SolrJmxReporter.class.getName();
String reporterName = TestUtil.randomSimpleString(random, 1, 10);
@@ -87,6 +101,9 @@ public class SolrJmxReporterTest extends SolrTestCaseJ4 {
Map<String, Object> attrs = new HashMap<>();
attrs.put(FieldType.CLASS_NAME, className);
attrs.put(CoreAdminParams.NAME, reporterName);
+ attrs.put("rootName", rootName);
+ attrs.put("enabled", enabled);
+ attrs.put("serviceUrl", "service:jmx:rmi:///jndi/rmi://localhost:" + jmxPort + "/solrjmx");
boolean shouldOverrideDomain = random.nextBoolean();
if (shouldOverrideDomain) {
@@ -114,7 +131,7 @@ public class SolrJmxReporterTest extends SolrTestCaseJ4 {
Map<String, Counter> registered = new HashMap<>();
String scope = SolrMetricTestUtils.getRandomScope(random, true);
- SolrInfoMBean.Category category = SolrMetricTestUtils.getRandomCategory(random, true);
+ SolrInfoBean.Category category = SolrMetricTestUtils.getRandomCategory(random, true);
int iterations = TestUtil.nextInt(random, 0, MAX_ITERATIONS);
for (int i = 0; i < iterations; ++i) {
@@ -126,7 +143,7 @@ public class SolrJmxReporterTest extends SolrTestCaseJ4 {
Set<ObjectInstance> objects = mBeanServer.queryMBeans(null, null);
assertEquals(registered.size(), objects.stream().
filter(o -> scope.equals(o.getObjectName().getKeyProperty("scope")) &&
- reporterName.equals(o.getObjectName().getKeyProperty("reporter"))).count());
+ rootName.equals(o.getObjectName().getDomain())).count());
}
}
@@ -135,17 +152,17 @@ public class SolrJmxReporterTest extends SolrTestCaseJ4 {
Random random = random();
String scope = SolrMetricTestUtils.getRandomScope(random, true);
- SolrInfoMBean.Category category = SolrMetricTestUtils.getRandomCategory(random, true);
+ SolrInfoBean.Category category = SolrMetricTestUtils.getRandomCategory(random, true);
Map<String, Counter> metrics = SolrMetricTestUtils.getRandomMetrics(random, true);
SolrMetricProducer producer = SolrMetricTestUtils.getProducerOf(metricManager, category, scope, metrics);
coreMetricManager.registerMetricProducer(scope, producer);
Set<ObjectInstance> objects = mBeanServer.queryMBeans(null, null);
assertEquals(metrics.size(), objects.stream().
filter(o -> scope.equals(o.getObjectName().getKeyProperty("scope")) &&
- reporterName.equals(o.getObjectName().getKeyProperty("reporter"))).count());
+ o.getObjectName().getDomain().equals(rootName)).count());
h.getCoreContainer().reload(h.getCore().getName());
- PluginInfo pluginInfo = createReporterPluginInfo();
+ PluginInfo pluginInfo = createReporterPluginInfo(rootName, true);
metricManager.loadReporter(coreMetricManager.getRegistryName(), coreMetricManager.getCore().getResourceLoader(),
pluginInfo, String.valueOf(coreMetricManager.getCore().hashCode()));
coreMetricManager.registerMetricProducer(scope, producer);
@@ -153,7 +170,38 @@ public class SolrJmxReporterTest extends SolrTestCaseJ4 {
objects = mBeanServer.queryMBeans(null, null);
assertEquals(metrics.size(), objects.stream().
filter(o -> scope.equals(o.getObjectName().getKeyProperty("scope")) &&
- pluginInfo.name.equals(o.getObjectName().getKeyProperty("reporter"))).count());
+ rootName.equals(o.getObjectName().getDomain())).count());
+ }
+
+ @Test
+ public void testEnabled() throws Exception {
+ String root1 = TestUtil.randomSimpleString(random(), 1, 10);
+ PluginInfo pluginInfo1 = createReporterPluginInfo(root1, true);
+ metricManager.loadReporter(coreMetricManager.getRegistryName(), coreMetricManager.getCore().getResourceLoader(),
+ pluginInfo1, coreMetricManager.getTag());
+
+ String root2 = TestUtil.randomSimpleString(random(), 1, 10);
+ assertFalse(root2.equals(root1));
+ PluginInfo pluginInfo2 = createReporterPluginInfo(root2, false);
+ metricManager.loadReporter(coreMetricManager.getRegistryName(), coreMetricManager.getCore().getResourceLoader(),
+ pluginInfo2, coreMetricManager.getTag());
+
+ Map<String, SolrMetricReporter> reporters = metricManager.getReporters(coreMetricManager.getRegistryName());
+ assertTrue(reporters.containsKey(pluginInfo1.name + "@" + coreMetricManager.getTag()));
+ assertTrue(reporters.containsKey(pluginInfo2.name + "@" + coreMetricManager.getTag()));
+
+ String scope = SolrMetricTestUtils.getRandomScope(random(), true);
+ SolrInfoBean.Category category = SolrMetricTestUtils.getRandomCategory(random(), true);
+ Map<String, Counter> metrics = SolrMetricTestUtils.getRandomMetrics(random(), true);
+ SolrMetricProducer producer = SolrMetricTestUtils.getProducerOf(metricManager, category, scope, metrics);
+ coreMetricManager.registerMetricProducer(scope, producer);
+ Set<ObjectInstance> objects = mBeanServer.queryMBeans(null, null);
+ assertEquals(metrics.size(), objects.stream().
+ filter(o -> scope.equals(o.getObjectName().getKeyProperty("scope")) &&
+ root1.equals(o.getObjectName().getDomain())).count());
+ assertEquals(0, objects.stream().
+ filter(o -> scope.equals(o.getObjectName().getKeyProperty("scope")) &&
+ root2.equals(o.getObjectName().getDomain())).count());
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/metrics/reporters/SolrSlf4jReporterTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/metrics/reporters/SolrSlf4jReporterTest.java b/solr/core/src/test/org/apache/solr/metrics/reporters/SolrSlf4jReporterTest.java
index 47bf8e7..a8f3343 100644
--- a/solr/core/src/test/org/apache/solr/metrics/reporters/SolrSlf4jReporterTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/reporters/SolrSlf4jReporterTest.java
@@ -57,7 +57,7 @@ public class SolrSlf4jReporterTest extends SolrTestCaseJ4 {
h.coreName = DEFAULT_TEST_CORENAME;
SolrMetricManager metricManager = cc.getMetricManager();
Map<String, SolrMetricReporter> reporters = metricManager.getReporters("solr.node");
- assertEquals(2, reporters.size());
+ assertTrue(reporters.toString(), reporters.size() >= 2);
SolrMetricReporter reporter = reporters.get("test1");
assertNotNull(reporter);
assertTrue(reporter instanceof SolrSlf4jReporter);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/metrics/reporters/solr/SolrCloudReportersTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/metrics/reporters/solr/SolrCloudReportersTest.java b/solr/core/src/test/org/apache/solr/metrics/reporters/solr/SolrCloudReportersTest.java
index 91952b8..a63f12b 100644
--- a/solr/core/src/test/org/apache/solr/metrics/reporters/solr/SolrCloudReportersTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/reporters/solr/SolrCloudReportersTest.java
@@ -28,6 +28,7 @@ import org.apache.solr.core.SolrCore;
import org.apache.solr.metrics.AggregateMetric;
import org.apache.solr.metrics.SolrMetricManager;
import org.apache.solr.metrics.SolrMetricReporter;
+import org.apache.solr.util.JmxUtil;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -38,11 +39,13 @@ import org.junit.Test;
public class SolrCloudReportersTest extends SolrCloudTestCase {
int leaderRegistries;
int clusterRegistries;
+ static int jmxReporter;
@BeforeClass
public static void configureDummyCluster() throws Exception {
configureCluster(0).configure();
+ jmxReporter = JmxUtil.findFirstMBeanServer() != null ? 1 : 0;
}
@Before
@@ -97,7 +100,7 @@ public class SolrCloudReportersTest extends SolrCloudTestCase {
assertEquals(5, sor.getPeriod());
for (String registryName : metricManager.registryNames(".*\\.shard[0-9]\\.replica.*")) {
reporters = metricManager.getReporters(registryName);
- assertEquals(reporters.toString(), 1, reporters.size());
+ assertEquals(reporters.toString(), 1 + jmxReporter, reporters.size());
reporter = null;
for (String name : reporters.keySet()) {
if (name.startsWith("test")) {
@@ -156,7 +159,7 @@ public class SolrCloudReportersTest extends SolrCloudTestCase {
assertEquals(reporters.toString(), 0, reporters.size());
for (String registryName : metricManager.registryNames(".*\\.shard[0-9]\\.replica.*")) {
reporters = metricManager.getReporters(registryName);
- assertEquals(reporters.toString(), 0, reporters.size());
+ assertEquals(reporters.toString(), 0 + jmxReporter, reporters.size());
}
});
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/search/MockSearchComponent.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/MockSearchComponent.java b/solr/core/src/test/org/apache/solr/search/MockSearchComponent.java
index 1539dfd..874b21a 100644
--- a/solr/core/src/test/org/apache/solr/search/MockSearchComponent.java
+++ b/solr/core/src/test/org/apache/solr/search/MockSearchComponent.java
@@ -46,10 +46,4 @@ public class MockSearchComponent extends SearchComponent {
public String getDescription() {
return "Mock search component for tests";
}
-
- @Override
- public String getSource() {
- return "";
- }
-
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/search/TestFastLRUCache.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/TestFastLRUCache.java b/solr/core/src/test/org/apache/solr/search/TestFastLRUCache.java
index 0034b13..72fc9ce 100644
--- a/solr/core/src/test/org/apache/solr/search/TestFastLRUCache.java
+++ b/solr/core/src/test/org/apache/solr/search/TestFastLRUCache.java
@@ -17,12 +17,13 @@
package org.apache.solr.search;
import org.apache.lucene.util.LuceneTestCase;
-import org.apache.solr.common.util.NamedList;
+import org.apache.lucene.util.TestUtil;
+import org.apache.solr.metrics.MetricsMap;
+import org.apache.solr.metrics.SolrMetricManager;
import org.apache.solr.util.ConcurrentLRUCache;
import org.apache.solr.util.RTimer;
import java.io.IOException;
-import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
@@ -37,9 +38,14 @@ import java.util.concurrent.atomic.AtomicInteger;
* @since solr 1.4
*/
public class TestFastLRUCache extends LuceneTestCase {
-
+ SolrMetricManager metricManager = new SolrMetricManager();
+ String registry = TestUtil.randomSimpleString(random(), 2, 10);
+ String scope = TestUtil.randomSimpleString(random(), 2, 10);
+
public void testPercentageAutowarm() throws IOException {
FastLRUCache<Object, Object> fastCache = new FastLRUCache<>();
+ fastCache.initializeMetrics(metricManager, registry, scope);
+ MetricsMap metrics = fastCache.getMetricsMap();
Map<String, String> params = new HashMap<>();
params.put("size", "100");
params.put("initialSize", "10");
@@ -52,12 +58,14 @@ public class TestFastLRUCache extends LuceneTestCase {
}
assertEquals("25", fastCache.get(25));
assertEquals(null, fastCache.get(110));
- NamedList<Serializable> nl = fastCache.getStatistics();
+ Map<String,Object> nl = metrics.getValue();
assertEquals(2L, nl.get("lookups"));
assertEquals(1L, nl.get("hits"));
assertEquals(101L, nl.get("inserts"));
assertEquals(null, fastCache.get(1)); // first item put in should be the first out
FastLRUCache<Object, Object> fastCacheNew = new FastLRUCache<>();
+ fastCacheNew.initializeMetrics(metricManager, registry, scope);
+ metrics = fastCacheNew.getMetricsMap();
fastCacheNew.init(params, o, cr);
fastCacheNew.warm(null, fastCache);
fastCacheNew.setState(SolrCache.State.LIVE);
@@ -65,7 +73,7 @@ public class TestFastLRUCache extends LuceneTestCase {
fastCacheNew.put(103, "103");
assertEquals("90", fastCacheNew.get(90));
assertEquals("50", fastCacheNew.get(50));
- nl = fastCacheNew.getStatistics();
+ nl = metrics.getValue();
assertEquals(2L, nl.get("lookups"));
assertEquals(2L, nl.get("hits"));
assertEquals(1L, nl.get("inserts"));
@@ -86,6 +94,7 @@ public class TestFastLRUCache extends LuceneTestCase {
private void doTestPercentageAutowarm(int limit, int percentage, int[] hits, int[]misses) {
FastLRUCache<Object, Object> fastCache = new FastLRUCache<>();
+ fastCache.initializeMetrics(metricManager, registry, scope);
Map<String, String> params = new HashMap<>();
params.put("size", String.valueOf(limit));
params.put("initialSize", "10");
@@ -98,6 +107,7 @@ public class TestFastLRUCache extends LuceneTestCase {
}
FastLRUCache<Object, Object> fastCacheNew = new FastLRUCache<>();
+ fastCacheNew.initializeMetrics(metricManager, registry, scope);
fastCacheNew.init(params, o, cr);
fastCacheNew.warm(null, fastCache);
fastCacheNew.setState(SolrCache.State.LIVE);
@@ -110,7 +120,7 @@ public class TestFastLRUCache extends LuceneTestCase {
for(int miss:misses) {
assertEquals("The value " + miss + " should NOT be on new cache", null, fastCacheNew.get(miss));
}
- NamedList<Serializable> nl = fastCacheNew.getStatistics();
+ Map<String,Object> nl = fastCacheNew.getMetricsMap().getValue();
assertEquals(Long.valueOf(hits.length + misses.length), nl.get("lookups"));
assertEquals(Long.valueOf(hits.length), nl.get("hits"));
fastCacheNew.close();
@@ -118,6 +128,7 @@ public class TestFastLRUCache extends LuceneTestCase {
public void testNoAutowarm() throws IOException {
FastLRUCache<Object, Object> fastCache = new FastLRUCache<>();
+ fastCache.initializeMetrics(metricManager, registry, scope);
Map<String, String> params = new HashMap<>();
params.put("size", "100");
params.put("initialSize", "10");
@@ -129,7 +140,7 @@ public class TestFastLRUCache extends LuceneTestCase {
}
assertEquals("25", fastCache.get(25));
assertEquals(null, fastCache.get(110));
- NamedList<Serializable> nl = fastCache.getStatistics();
+ Map<String,Object> nl = fastCache.getMetricsMap().getValue();
assertEquals(2L, nl.get("lookups"));
assertEquals(1L, nl.get("hits"));
assertEquals(101L, nl.get("inserts"));
@@ -177,6 +188,7 @@ public class TestFastLRUCache extends LuceneTestCase {
public void testSimple() throws IOException {
FastLRUCache sc = new FastLRUCache();
+ sc.initializeMetrics(metricManager, registry, scope);
Map l = new HashMap();
l.put("size", "100");
l.put("initialSize", "10");
@@ -189,7 +201,8 @@ public class TestFastLRUCache extends LuceneTestCase {
}
assertEquals("25", sc.get(25));
assertEquals(null, sc.get(110));
- NamedList nl = sc.getStatistics();
+ MetricsMap metrics = sc.getMetricsMap();
+ Map<String,Object> nl = metrics.getValue();
assertEquals(2L, nl.get("lookups"));
assertEquals(1L, nl.get("hits"));
assertEquals(101L, nl.get("inserts"));
@@ -198,6 +211,7 @@ public class TestFastLRUCache extends LuceneTestCase {
FastLRUCache scNew = new FastLRUCache();
+ scNew.initializeMetrics(metricManager, registry, scope);
scNew.init(l, o, cr);
scNew.warm(null, sc);
scNew.setState(SolrCache.State.LIVE);
@@ -205,7 +219,7 @@ public class TestFastLRUCache extends LuceneTestCase {
scNew.put(103, "103");
assertEquals("90", scNew.get(90));
assertEquals(null, scNew.get(50));
- nl = scNew.getStatistics();
+ nl = scNew.getMetricsMap().getValue();
assertEquals(2L, nl.get("lookups"));
assertEquals(1L, nl.get("hits"));
assertEquals(1L, nl.get("inserts"));
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/search/TestIndexSearcher.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/TestIndexSearcher.java b/solr/core/src/test/org/apache/solr/search/TestIndexSearcher.java
index 8fe3f97..c36066a 100644
--- a/solr/core/src/test/org/apache/solr/search/TestIndexSearcher.java
+++ b/solr/core/src/test/org/apache/solr/search/TestIndexSearcher.java
@@ -17,6 +17,7 @@
package org.apache.solr.search;
import java.io.IOException;
+import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
@@ -25,6 +26,8 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
+import com.codahale.metrics.Gauge;
+import com.codahale.metrics.Metric;
import com.google.common.collect.ImmutableMap;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexReaderContext;
@@ -137,13 +140,15 @@ public class TestIndexSearcher extends SolrTestCaseJ4 {
int baseRefCount = r3.getRefCount();
assertEquals(1, baseRefCount);
- Object sr3SearcherRegAt = sr3.getSearcher().getStatistics().get("registeredAt");
+ Map<String, Metric> metrics = h.getCore().getCoreMetricManager().getRegistry().getMetrics();
+ Gauge<Date> g = (Gauge<Date>)metrics.get("SEARCHER.searcher.registeredAt");
+ Date sr3SearcherRegAt = g.getValue();
assertU(commit()); // nothing has changed
SolrQueryRequest sr4 = req("q","foo");
assertSame("nothing changed, searcher should be the same",
sr3.getSearcher(), sr4.getSearcher());
assertEquals("nothing changed, searcher should not have been re-registered",
- sr3SearcherRegAt, sr4.getSearcher().getStatistics().get("registeredAt"));
+ sr3SearcherRegAt, g.getValue());
IndexReader r4 = sr4.getSearcher().getRawReader();
// force an index change so the registered searcher won't be the one we are testing (and
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/search/TestLFUCache.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/TestLFUCache.java b/solr/core/src/test/org/apache/solr/search/TestLFUCache.java
index d137875..8207522 100644
--- a/solr/core/src/test/org/apache/solr/search/TestLFUCache.java
+++ b/solr/core/src/test/org/apache/solr/search/TestLFUCache.java
@@ -16,9 +16,10 @@
*/
package org.apache.solr.search;
+import org.apache.lucene.util.TestUtil;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.util.ExecutorUtil;
-import org.apache.solr.common.util.NamedList;
+import org.apache.solr.metrics.SolrMetricManager;
import org.apache.solr.util.ConcurrentLFUCache;
import org.apache.solr.util.DefaultSolrThreadFactory;
import org.apache.solr.util.RefCounted;
@@ -32,6 +33,7 @@ import java.lang.invoke.MethodHandles;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
+import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
@@ -59,7 +61,7 @@ public class TestLFUCache extends SolrTestCaseJ4 {
SolrIndexSearcher searcher = holder.get();
LFUCache cacheDecayTrue = (LFUCache) searcher.getCache("lfuCacheDecayTrue");
assertNotNull(cacheDecayTrue);
- NamedList stats = cacheDecayTrue.getStatistics();
+ Map<String,Object> stats = cacheDecayTrue.getMetricsMap().getValue();
assertTrue((Boolean) stats.get("timeDecay"));
addCache(cacheDecayTrue, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
for (int idx = 0; idx < 64; ++idx) {
@@ -70,7 +72,7 @@ public class TestLFUCache extends SolrTestCaseJ4 {
LFUCache cacheDecayDefault = (LFUCache) searcher.getCache("lfuCacheDecayDefault");
assertNotNull(cacheDecayDefault);
- stats = cacheDecayDefault.getStatistics();
+ stats = cacheDecayDefault.getMetricsMap().getValue();
assertTrue((Boolean) stats.get("timeDecay"));
addCache(cacheDecayDefault, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
assertCache(cacheDecayDefault, 1, 2, 3, 4, 5);
@@ -84,7 +86,7 @@ public class TestLFUCache extends SolrTestCaseJ4 {
LFUCache cacheDecayFalse = (LFUCache) searcher.getCache("lfuCacheDecayFalse");
assertNotNull(cacheDecayFalse);
- stats = cacheDecayFalse.getStatistics();
+ stats = cacheDecayFalse.getMetricsMap().getValue();
assertFalse((Boolean) stats.get("timeDecay"));
addCache(cacheDecayFalse, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
assertCache(cacheDecayFalse, 1, 2, 3, 4, 5);
@@ -131,9 +133,16 @@ public class TestLFUCache extends SolrTestCaseJ4 {
@Test
public void testSimple() throws IOException {
+ SolrMetricManager metricManager = new SolrMetricManager();
+ Random r = random();
+ String registry = TestUtil.randomSimpleString(r, 2, 10);
+ String scope = TestUtil.randomSimpleString(r, 2, 10);
LFUCache lfuCache = new LFUCache();
LFUCache newLFUCache = new LFUCache();
LFUCache noWarmLFUCache = new LFUCache();
+ lfuCache.initializeMetrics(metricManager, registry, scope + ".lfuCache");
+ newLFUCache.initializeMetrics(metricManager, registry, scope + ".newLFUCache");
+ noWarmLFUCache.initializeMetrics(metricManager, registry, scope + ".noWarmLFUCache");
try {
Map params = new HashMap();
params.put("size", "100");
@@ -148,7 +157,7 @@ public class TestLFUCache extends SolrTestCaseJ4 {
assertEquals("15", lfuCache.get(15));
assertEquals("75", lfuCache.get(75));
assertEquals(null, lfuCache.get(110));
- NamedList nl = lfuCache.getStatistics();
+ Map<String,Object> nl = lfuCache.getMetricsMap().getValue();
assertEquals(3L, nl.get("lookups"));
assertEquals(2L, nl.get("hits"));
assertEquals(101L, nl.get("inserts"));
@@ -164,7 +173,7 @@ public class TestLFUCache extends SolrTestCaseJ4 {
assertEquals("15", newLFUCache.get(15));
assertEquals("75", newLFUCache.get(75));
assertEquals(null, newLFUCache.get(50));
- nl = newLFUCache.getStatistics();
+ nl = newLFUCache.getMetricsMap().getValue();
assertEquals(3L, nl.get("lookups"));
assertEquals(2L, nl.get("hits"));
assertEquals(1L, nl.get("inserts"));
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/search/TestLRUCache.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/TestLRUCache.java b/solr/core/src/test/org/apache/solr/search/TestLRUCache.java
index d2f74de..fa34911 100644
--- a/solr/core/src/test/org/apache/solr/search/TestLRUCache.java
+++ b/solr/core/src/test/org/apache/solr/search/TestLRUCache.java
@@ -17,21 +17,25 @@
package org.apache.solr.search;
import java.io.IOException;
-import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import org.apache.lucene.util.Accountable;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util.RamUsageEstimator;
+import org.apache.lucene.util.TestUtil;
import org.apache.solr.common.SolrException;
-import org.apache.solr.common.util.NamedList;
+import org.apache.solr.metrics.SolrMetricManager;
/**
* Test for <code>org.apache.solr.search.LRUCache</code>
*/
public class TestLRUCache extends LuceneTestCase {
+ SolrMetricManager metricManager = new SolrMetricManager();
+ String registry = TestUtil.randomSimpleString(random(), 2, 10);
+ String scope = TestUtil.randomSimpleString(random(), 2, 10);
+
public void testFullAutowarm() throws IOException {
LRUCache<Object, Object> lruCache = new LRUCache<>();
Map<String, String> params = new HashMap<>();
@@ -97,6 +101,7 @@ public class TestLRUCache extends LuceneTestCase {
@SuppressWarnings("unchecked")
public void testNoAutowarm() throws IOException {
LRUCache<Object, Object> lruCache = new LRUCache<>();
+ lruCache.initializeMetrics(metricManager, registry, scope);
Map<String, String> params = new HashMap<>();
params.put("size", "100");
params.put("initialSize", "10");
@@ -108,7 +113,7 @@ public class TestLRUCache extends LuceneTestCase {
}
assertEquals("25", lruCache.get(25));
assertEquals(null, lruCache.get(110));
- NamedList<Serializable> nl = lruCache.getStatistics();
+ Map<String,Object> nl = lruCache.getMetricsMap().getValue();
assertEquals(2L, nl.get("lookups"));
assertEquals(1L, nl.get("hits"));
assertEquals(101L, nl.get("inserts"));
@@ -126,6 +131,7 @@ public class TestLRUCache extends LuceneTestCase {
public void testMaxRamSize() throws Exception {
LRUCache<String, Accountable> accountableLRUCache = new LRUCache<>();
+ accountableLRUCache.initializeMetrics(metricManager, registry, scope);
Map<String, String> params = new HashMap<>();
params.put("size", "5");
params.put("maxRamMB", "1");
@@ -149,7 +155,7 @@ public class TestLRUCache extends LuceneTestCase {
});
assertEquals(1, accountableLRUCache.size());
assertEquals(baseSize + 512 * 1024 + LRUCache.LINKED_HASHTABLE_RAM_BYTES_PER_ENTRY + LRUCache.DEFAULT_RAM_BYTES_USED, accountableLRUCache.ramBytesUsed());
- NamedList<Serializable> nl = accountableLRUCache.getStatistics();
+ Map<String,Object> nl = accountableLRUCache.getMetricsMap().getValue();
assertEquals(1L, nl.get("evictions"));
assertEquals(1L, nl.get("evictionsRamUsage"));
accountableLRUCache.put("3", new Accountable() {
@@ -158,7 +164,7 @@ public class TestLRUCache extends LuceneTestCase {
return 1024;
}
});
- nl = accountableLRUCache.getStatistics();
+ nl = accountableLRUCache.getMetricsMap().getValue();
assertEquals(1L, nl.get("evictions"));
assertEquals(1L, nl.get("evictionsRamUsage"));
assertEquals(2L, accountableLRUCache.size());
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/search/TestReRankQParserPlugin.java
----------------------------------------------------------------------
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 e4d6a5b..42d05e9 100644
--- a/solr/core/src/test/org/apache/solr/search/TestReRankQParserPlugin.java
+++ b/solr/core/src/test/org/apache/solr/search/TestReRankQParserPlugin.java
@@ -16,11 +16,12 @@
*/
package org.apache.solr.search;
+import java.util.Map;
+
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.ModifiableSolrParams;
-import org.apache.solr.common.util.NamedList;
-import org.apache.solr.core.SolrInfoMBean;
+import org.apache.solr.metrics.MetricsMap;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -376,8 +377,8 @@ public class TestReRankQParserPlugin extends SolrTestCaseJ4 {
"//result/doc[5]/float[@name='id'][.='2.0']"
);
- SolrInfoMBean info = h.getCore().getInfoRegistry().get("queryResultCache");
- NamedList stats = info.getStatistics();
+ MetricsMap metrics = (MetricsMap)h.getCore().getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.queryResultCache");
+ Map<String,Object> stats = metrics.getValue();
long inserts = (Long) stats.get("inserts");
@@ -401,8 +402,7 @@ public class TestReRankQParserPlugin extends SolrTestCaseJ4 {
);
- info = h.getCore().getInfoRegistry().get("queryResultCache");
- stats = info.getStatistics();
+ stats = metrics.getValue();
long inserts1 = (Long) stats.get("inserts");
@@ -426,8 +426,7 @@ public class TestReRankQParserPlugin extends SolrTestCaseJ4 {
"//result/doc[5]/float[@name='id'][.='1.0']"
);
- info = h.getCore().getInfoRegistry().get("queryResultCache");
- stats = info.getStatistics();
+ stats = metrics.getValue();
long inserts2 = (Long) stats.get("inserts");
//Last query was NOT added to the cache
assertTrue(inserts1 == inserts2);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/e30cc70f/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial2.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial2.java b/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial2.java
index 1fcfe9a..b909f15 100644
--- a/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial2.java
+++ b/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial2.java
@@ -20,6 +20,7 @@ import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.FacetParams;
import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.metrics.MetricsMap;
import org.apache.solr.request.SolrQueryRequest;
import org.junit.Before;
import org.junit.BeforeClass;
@@ -117,13 +118,13 @@ public class TestSolr4Spatial2 extends SolrTestCaseJ4 {
// The tricky thing is verifying the cache works correctly...
- SolrCache cache = (SolrCache) h.getCore().getInfoRegistry().get("perSegSpatialFieldCache_srptgeom");
- assertEquals("1", cache.getStatistics().get("cumulative_inserts").toString());
- assertEquals("0", cache.getStatistics().get("cumulative_hits").toString());
+ MetricsMap cacheMetrics = (MetricsMap) h.getCore().getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.perSegSpatialFieldCache_srptgeom");
+ assertEquals("1", cacheMetrics.getValue().get("cumulative_inserts").toString());
+ assertEquals("0", cacheMetrics.getValue().get("cumulative_hits").toString());
// Repeat the query earlier
assertJQ(sameReq, "/response/numFound==1", "/response/docs/[0]/id=='1'");
- assertEquals("1", cache.getStatistics().get("cumulative_hits").toString());
+ assertEquals("1", cacheMetrics.getValue().get("cumulative_hits").toString());
assertEquals("1 segment",
1, getSearcher().getRawReader().leaves().size());
@@ -141,7 +142,7 @@ public class TestSolr4Spatial2 extends SolrTestCaseJ4 {
// When there are new segments, we accumulate another hit. This tests the cache was not blown away on commit.
// Checking equality for the first reader's cache key indicates wether the cache should still be valid.
Object leafKey2 = getFirstLeafReaderKey();
- assertEquals(leafKey1.equals(leafKey2) ? "2" : "1", cache.getStatistics().get("cumulative_hits").toString());
+ assertEquals(leafKey1.equals(leafKey2) ? "2" : "1", cacheMetrics.getValue().get("cumulative_hits").toString());
// Now try to see if heatmaps work: