Author: ogrisel
Date: Sun Mar 25 19:25:50 2012
New Revision: 1305099
URL: http://svn.apache.org/viewvc?rev=1305099&view=rev
Log:
STANBOL-197: workaround index initialization issues by explicitly updating the
managed core from bundle resources if missing
Modified:
incubator/stanbol/trunk/enhancer/engines/topic/src/main/java/org/apache/stanbol/enhancer/engine/topic/TopicClassificationEngine.java
incubator/stanbol/trunk/enhancer/engines/topic/src/main/java/org/apache/stanbol/enhancer/topic/ConfiguredSolrCoreTracker.java
Modified:
incubator/stanbol/trunk/enhancer/engines/topic/src/main/java/org/apache/stanbol/enhancer/engine/topic/TopicClassificationEngine.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/enhancer/engines/topic/src/main/java/org/apache/stanbol/enhancer/engine/topic/TopicClassificationEngine.java?rev=1305099&r1=1305098&r2=1305099&view=diff
==============================================================================
---
incubator/stanbol/trunk/enhancer/engines/topic/src/main/java/org/apache/stanbol/enhancer/engine/topic/TopicClassificationEngine.java
(original)
+++
incubator/stanbol/trunk/enhancer/engines/topic/src/main/java/org/apache/stanbol/enhancer/engine/topic/TopicClassificationEngine.java
Sun Mar 25 19:25:50 2012
@@ -259,7 +259,7 @@ public class TopicClassificationEngine e
@SuppressWarnings("unchecked")
Dictionary<String,Object> config = context.getProperties();
this.context = context;
- this.indexArchiveName = "default-topic-classifier-model";
+ this.indexArchiveName = "default-topic-model";
configure(config);
}
@@ -268,6 +268,7 @@ public class TopicClassificationEngine e
if (indexTracker != null) {
indexTracker.close();
}
+ context = null;
}
public void configure(Dictionary<String,Object> config) throws
ConfigurationException {
Modified:
incubator/stanbol/trunk/enhancer/engines/topic/src/main/java/org/apache/stanbol/enhancer/topic/ConfiguredSolrCoreTracker.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/enhancer/engines/topic/src/main/java/org/apache/stanbol/enhancer/topic/ConfiguredSolrCoreTracker.java?rev=1305099&r1=1305098&r2=1305099&view=diff
==============================================================================
---
incubator/stanbol/trunk/enhancer/engines/topic/src/main/java/org/apache/stanbol/enhancer/topic/ConfiguredSolrCoreTracker.java
(original)
+++
incubator/stanbol/trunk/enhancer/engines/topic/src/main/java/org/apache/stanbol/enhancer/topic/ConfiguredSolrCoreTracker.java
Sun Mar 25 19:25:50 2012
@@ -17,11 +17,13 @@
package org.apache.stanbol.enhancer.topic;
import java.io.IOException;
+import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Dictionary;
import java.util.List;
+import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.stanbol.commons.solr.IndexReference;
import org.apache.stanbol.commons.solr.RegisteredSolrServerTracker;
@@ -100,7 +102,7 @@ public abstract class ConfiguredSolrCore
// This can be useful both for unit-testing .
solrServer = (SolrServer) config.get(solrCoreProperty);
} else {
- String solrCoreId = getRequiredStringParam(config,
solrCoreProperty);
+ this.solrCoreId = getRequiredStringParam(config, solrCoreProperty);
if (context == null) {
throw new ConfigurationException(solrCoreProperty,
solrCoreProperty + " should be a SolrServer instance
for using"
@@ -108,30 +110,41 @@ public abstract class ConfiguredSolrCore
}
try {
IndexReference indexReference =
IndexReference.parse(solrCoreId);
+ indexReference = checkInitSolrIndex(indexReference);
+ // track the solr core OSGi updates
indexTracker = new
RegisteredSolrServerTracker(context.getBundleContext(), indexReference);
indexTracker.open();
- this.solrCoreId = solrCoreId;
-
- // if the solr core is managed, check that the index is
properly activated
- if (managedSolrServer != null
- &&
indexReference.checkServer(managedSolrServer.getServerName())) {
- String indexName = indexReference.getIndex();
- IndexMetadata indexMetadata =
managedSolrServer.getIndexMetadata(indexName);
- if (indexMetadata == null) {
- managedSolrServer.createSolrIndex(indexName,
indexArchiveName, null);
- indexMetadata =
managedSolrServer.getIndexMetadata(indexName);
- }
- if (!indexMetadata.isActive()) {
- // already managed, but not active yet: do it now
- managedSolrServer.activateIndex(indexName);
- }
- }
} catch (Exception e) {
throw new ConfigurationException(solrCoreProperty,
e.getMessage(), e);
}
}
}
+ protected IndexReference checkInitSolrIndex(IndexReference indexReference)
throws IOException,
+
ConfigurationException,
+
SAXException {
+ // if the solr core is managed, check that the index is properly
activated
+ if (managedSolrServer != null &&
indexReference.checkServer(managedSolrServer.getServerName())
+ && context != null) {
+ String indexName = indexReference.getIndex();
+ IndexMetadata indexMetadata =
managedSolrServer.getIndexMetadata(indexName);
+ if (indexMetadata == null) {
+ // TODO: debug the DataFileProvider init race conditions
instead
+ // indexMetadata =
managedSolrServer.createSolrIndex(indexName, indexArchiveName, null);
+ URL archiveUrl = context.getBundleContext().getBundle()
+ .getEntry("/data-files/" + indexArchiveName +
".solrindex.zip");
+ if (archiveUrl == null) {
+ throw new ConfigurationException(solrCoreId, "Could not
find index archive for "
+ +
indexArchiveName);
+ }
+ ZipArchiveInputStream zis = new
ZipArchiveInputStream(archiveUrl.openStream());
+ indexMetadata = managedSolrServer.updateIndex(indexName, zis,
indexArchiveName);
+ }
+ indexReference = indexMetadata.getIndexReference();
+ }
+ return indexReference;
+ }
+
protected void bindManagedSolrServer(ManagedSolrServer managedSolrServer)
throws IOException,
SAXException {
this.managedSolrServer = managedSolrServer;