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;


Reply via email to