You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by ho...@apache.org on 2009/09/22 06:28:31 UTC
svn commit: r817499 - in /lucene/solr/trunk/src:
java/org/apache/solr/core/SolrCore.java
java/org/apache/solr/core/SolrResourceLoader.java
test/org/apache/solr/core/SolrCoreTest.java
Author: hossman
Date: Tue Sep 22 04:28:30 2009
New Revision: 817499
URL: http://svn.apache.org/viewvc?rev=817499&view=rev
Log:
SOLR-1427: redo of Grant's previous commit that yonik rolled back - but this time with the registration postponed until the latch is released
Modified:
lucene/solr/trunk/src/java/org/apache/solr/core/SolrCore.java
lucene/solr/trunk/src/java/org/apache/solr/core/SolrResourceLoader.java
lucene/solr/trunk/src/test/org/apache/solr/core/SolrCoreTest.java
Modified: lucene/solr/trunk/src/java/org/apache/solr/core/SolrCore.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/core/SolrCore.java?rev=817499&r1=817498&r2=817499&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/core/SolrCore.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/core/SolrCore.java Tue Sep 22 04:28:30 2009
@@ -591,6 +591,14 @@
}
infoRegistry.put("core", this);
+
+ // register any SolrInfoMBeans SolrResourceLoader initialized
+ //
+ // this must happen after the latch is released, because a JMX server impl may
+ // choose to block on registering until properties can be fetched from an MBean,
+ // and a SolrCoreAware MBean may have properties that depend on getting a Searcher
+ // from the core.
+ resourceLoader.inform(infoRegistry);
}
private SolrHighlighter initHighLighter() {
@@ -829,7 +837,11 @@
}
private <T> void addIfNotPresent(Map<String ,T> registry, String name, Class<? extends T> c){
if(!registry.containsKey(name)){
- registry.put(name, (T) resourceLoader.newInstance(c.getName()));
+ T searchComp = (T) resourceLoader.newInstance(c.getName());
+ registry.put(name, searchComp);
+ if (searchComp instanceof SolrInfoMBean){
+ infoRegistry.put(((SolrInfoMBean)searchComp).getName(), (SolrInfoMBean)searchComp);
+ }
}
}
Modified: lucene/solr/trunk/src/java/org/apache/solr/core/SolrResourceLoader.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/core/SolrResourceLoader.java?rev=817499&r1=817498&r2=817499&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/core/SolrResourceLoader.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/core/SolrResourceLoader.java Tue Sep 22 04:28:30 2009
@@ -68,6 +68,7 @@
private String dataDir;
private final List<SolrCoreAware> waitingForCore = new ArrayList<SolrCoreAware>();
+ private final List<SolrInfoMBean> infoMBeans = new ArrayList<SolrInfoMBean>();
private final List<ResourceLoaderAware> waitingForResources = new ArrayList<ResourceLoaderAware>();
private static final Charset UTF_8 = Charset.forName("UTF-8");
@@ -345,6 +346,10 @@
assertAwareCompatibility( ResourceLoaderAware.class, obj );
waitingForResources.add( (ResourceLoaderAware)obj );
}
+ if (obj instanceof SolrInfoMBean){
+ //TODO: Assert here?
+ infoMBeans.add((SolrInfoMBean) obj);
+ }
return obj;
}
@@ -401,6 +406,10 @@
assertAwareCompatibility( ResourceLoaderAware.class, obj );
waitingForResources.add( (ResourceLoaderAware)obj );
}
+ if (obj instanceof SolrInfoMBean){
+ //TODO: Assert here?
+ infoMBeans.add((SolrInfoMBean) obj);
+ }
return obj;
}
@@ -427,6 +436,16 @@
}
waitingForResources.clear();
}
+
+ /**
+ * Register any {@link org.apache.solr.core.SolrInfoMBean}s
+ * @param infoRegistry The Info Registry
+ */
+ public void inform(Map<String, SolrInfoMBean> infoRegistry) {
+ for (SolrInfoMBean bean : infoMBeans) {
+ infoRegistry.put(bean.getName(), bean);
+ }
+ }
/**
* Determines the solrhome from the environment.
* Tries JNDI (java:comp/env/solr/home) then system property (solr.solr.home);
@@ -535,4 +554,5 @@
throw new SolrException( SolrException.ErrorCode.SERVER_ERROR, builder.toString() );
}
+
}
Modified: lucene/solr/trunk/src/test/org/apache/solr/core/SolrCoreTest.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/core/SolrCoreTest.java?rev=817499&r1=817498&r2=817499&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/core/SolrCoreTest.java (original)
+++ lucene/solr/trunk/src/test/org/apache/solr/core/SolrCoreTest.java Tue Sep 22 04:28:30 2009
@@ -18,6 +18,8 @@
package org.apache.solr.core;
import org.apache.solr.handler.RequestHandlerBase;
+import org.apache.solr.handler.component.SpellCheckComponent;
+import org.apache.solr.handler.component.QueryComponent;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.SolrQueryResponse;
import org.apache.solr.request.SolrRequestHandler;
@@ -164,6 +166,24 @@
service.shutdown();
assertTrue("Running for too long...", service.awaitTermination(60, TimeUnit.SECONDS));
}
+
+ public void testInfoRegistry() throws Exception {
+ //TEst that SolrInfoMBeans are registered, including SearchComponents
+ SolrCore core = h.getCore();
+
+ Map<String, SolrInfoMBean> infoRegistry = core.getInfoRegistry();
+ assertTrue("infoRegistry Size: " + infoRegistry.size() + " is not greater than: " + 0, infoRegistry.size() > 0);
+ //try out some that we know are in the config
+ SolrInfoMBean bean = infoRegistry.get(SpellCheckComponent.class.getName());
+ assertNotNull("bean not registered", bean);
+ //try a default one
+ bean = infoRegistry.get(QueryComponent.class.getName());
+ assertNotNull("bean not registered", bean);
+ //try a Req Handler, which are stored by name, not clas
+ bean = infoRegistry.get("standard");
+ assertNotNull("bean not registered", bean);
+ }
+
}