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 2015/04/27 00:13:00 UTC
svn commit: r1676151 - in /lucene/dev/trunk/solr: ./
core/src/java/org/apache/solr/core/
core/src/java/org/apache/solr/store/blockcache/
Author: markrmiller
Date: Sun Apr 26 22:12:59 2015
New Revision: 1676151
URL: http://svn.apache.org/r1676151
Log:
SOLR-7457: Make DirectoryFactory publishing MBeanInfo extensible.
Modified:
lucene/dev/trunk/solr/CHANGES.txt
lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/store/blockcache/Metrics.java
Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1676151&r1=1676150&r2=1676151&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Sun Apr 26 22:12:59 2015
@@ -267,6 +267,9 @@ Other Changes
* SOLR-4839: Upgrade Jetty to 9.2.10.v20150310 and restlet-jee to 2.3.0
(Bill Bell, Timothy Potter, Uwe Schindler, Mark Miller, shalin)
+* SOLR-7457: Make DirectoryFactory publishing MBeanInfo extensible.
+ (Mike Drob via Mark Miller)
+
================== 5.1.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java?rev=1676151&r1=1676150&r2=1676151&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java Sun Apr 26 22:12:59 2015
@@ -19,9 +19,9 @@ package org.apache.solr.core;
import java.io.Closeable;
import java.io.File;
-import java.io.FileNotFoundException;
import java.io.IOException;
-import java.nio.file.NoSuchFileException;
+import java.util.Collection;
+import java.util.Collections;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FlushInfo;
@@ -264,4 +264,11 @@ public abstract class DirectoryFactory i
String instanceDir = new File(cd.getInstanceDir()).getAbsolutePath();
return normalize(SolrResourceLoader.normalizeDir(instanceDir) + cd.getDataDir());
}
+
+ /**
+ * Optionally allow the DirectoryFactory to request registration of some MBeans.
+ */
+ public Collection<SolrInfoMBean> offerMBeans() {
+ return Collections.emptySet();
+ }
}
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java?rev=1676151&r1=1676150&r2=1676151&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/HdfsDirectoryFactory.java Sun Apr 26 22:12:59 2015
@@ -20,8 +20,8 @@ package org.apache.solr.core;
import static org.apache.hadoop.fs.CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTHENTICATION;
import java.io.IOException;
-import java.net.URL;
import java.net.URLEncoder;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Locale;
import java.util.concurrent.Callable;
@@ -59,7 +59,7 @@ import com.google.common.cache.CacheBuil
import com.google.common.cache.RemovalListener;
import com.google.common.cache.RemovalNotification;
-public class HdfsDirectoryFactory extends CachingDirectoryFactory implements SolrInfoMBean {
+public class HdfsDirectoryFactory extends CachingDirectoryFactory {
public static Logger LOG = LoggerFactory
.getLogger(HdfsDirectoryFactory.class);
@@ -438,44 +438,8 @@ public class HdfsDirectoryFactory extend
}
}
- // SolrInfoMBean methods
-
- @Override
- public String getName() {
- return getClass().getSimpleName() + "BlockCache";
- }
-
- @Override
- public String getVersion() {
- return SolrCore.version;
- }
-
- @Override
- public String getDescription() {
- return "Provides metrics for the HdfsDirectoryFactory BlockCache.";
- }
-
- @Override
- public Category getCategory() {
- return Category.CACHE;
- }
-
- @Override
- public String getSource() {
- return null;
- }
-
@Override
- public URL[] getDocs() {
- return null;
- }
-
- @Override
- public NamedList<?> getStatistics() {
- if (metrics == null) {
- return new NamedList<Object>();
- }
-
- return metrics.getStatistics();
+ public Collection<SolrInfoMBean> offerMBeans() {
+ return Arrays.<SolrInfoMBean>asList(MetricsHolder.metrics);
}
}
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java?rev=1676151&r1=1676150&r2=1676151&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java Sun Apr 26 22:12:59 2015
@@ -830,6 +830,17 @@ public final class SolrCore implements S
// from the core.
resourceLoader.inform(infoRegistry);
+ // Allow the directory factory to register MBeans as well
+ for (SolrInfoMBean bean : directoryFactory.offerMBeans()) {
+ log.debug("Registering JMX bean [{}] from directory factory.", bean.getName());
+ // Not worried about concurrency, so no reason to use putIfAbsent
+ if (infoRegistry.containsKey(bean.getName())){
+ log.info("Ignoring JMX bean [{}] due to name conflict.", bean.getName());
+ } else {
+ infoRegistry.put(bean.getName(), bean);
+ }
+ }
+
bufferUpdatesIfConstructing(coreDescriptor);
// For debugging
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/store/blockcache/Metrics.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/store/blockcache/Metrics.java?rev=1676151&r1=1676150&r2=1676151&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/store/blockcache/Metrics.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/store/blockcache/Metrics.java Sun Apr 26 22:12:59 2015
@@ -17,12 +17,15 @@ package org.apache.solr.store.blockcache
* limitations under the License.
*/
+import java.net.URL;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;
import org.apache.solr.common.util.NamedList;
+import org.apache.solr.common.util.SimpleOrderedMap;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrInfoMBean;
import org.apache.solr.search.SolrCacheBase;
@@ -31,7 +34,7 @@ import org.apache.solr.search.SolrCacheB
*
* @lucene.experimental
*/
-public class Metrics extends SolrCacheBase {
+public class Metrics extends SolrCacheBase implements SolrInfoMBean {
public static class MethodCall {
public AtomicLong invokes = new AtomicLong();
@@ -75,7 +78,7 @@ public class Metrics extends SolrCacheBa
}
public NamedList<Number> getStatistics() {
- NamedList<Number> stats = new NamedList<Number>();
+ NamedList<Number> stats = new SimpleOrderedMap<>(21); // room for one method call before growing
long now = System.nanoTime();
float seconds = (now - previous) / 1000000000.0f;
@@ -120,4 +123,26 @@ public class Metrics extends SolrCacheBa
private float getPerSecond(long value, float seconds) {
return (float) (value / seconds);
}
+
+ // SolrInfoMBean methods
+
+ @Override
+ public String getName() {
+ return "HdfsBlockCache";
+ }
+
+ @Override
+ public String getDescription() {
+ return "Provides metrics for the HdfsDirectoryFactory BlockCache.";
+ }
+
+ @Override
+ public String getSource() {
+ return null;
+ }
+
+ @Override
+ public URL[] getDocs() {
+ return null;
+ }
}