diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Installer.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Installer.java index 44689e819e..f38b9fdd81 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Installer.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Installer.java @@ -66,9 +66,9 @@ class Installer extends ModuleInstall { int serverStopPort = server.getCurrentSolrStopPort(); logger.log(Level.SEVERE, "There's already a server running on " + serverPort + " port that can't be shutdown."); - if (!Server.available(serverPort)) { + if (!Server.isPortAvailable(serverPort)) { reportPortError(serverPort); - } else if (!Server.available(serverStopPort)) { + } else if (!Server.isPortAvailable(serverStopPort)) { reportStopPortError(serverStopPort); } else { //some other reason @@ -95,7 +95,7 @@ class Installer extends ModuleInstall { //TODO move some of this logic to Server class for (int i = 0; i <= 3; i++) { logger.log(Level.INFO, "Checking if port available."); - if (Server.available(server.getCurrentSolrServerPort())) { + if (Server.isPortAvailable(server.getCurrentSolrServerPort())) { logger.log(Level.INFO, "Port available, trying to start server."); server.start(); break; @@ -165,9 +165,9 @@ class Installer extends ModuleInstall { //check if port is taken or some other reason int serverPort = server.getCurrentSolrServerPort(); int serverStopPort = server.getCurrentSolrStopPort(); - if (!Server.available(serverPort)) { + if (!Server.isPortAvailable(serverPort)) { reportPortError(serverPort); - } else if (!Server.available(serverStopPort)) { + } else if (!Server.isPortAvailable(serverStopPort)) { reportStopPortError(serverStopPort); } else { //some other reason diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java index 821999419c..7220d4d485 100755 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/KeywordSearchIngestModule.java @@ -44,6 +44,7 @@ import org.netbeans.api.progress.aggregate.AggregateProgressFactory; import org.netbeans.api.progress.aggregate.AggregateProgressHandle; import org.netbeans.api.progress.aggregate.ProgressContributor; import org.openide.util.Cancellable; +import org.openide.util.Exceptions; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.EscapeUtil; import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil; @@ -361,8 +362,7 @@ public final class KeywordSearchIngestModule extends IngestModuleAbstractFile { logger.log(Level.SEVERE, msg); String details = NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.init.tryStopSolrMsg", msg); services.postMessage(IngestMessage.createErrorMessage(++messageID, instance, msg, details)); - return; - + throw new IngestModuleException(msg); } } catch (KeywordSearchModuleException ex) { logger.log(Level.WARNING, "Error checking if Solr server is running while initializing ingest", ex); @@ -370,9 +370,15 @@ public final class KeywordSearchIngestModule extends IngestModuleAbstractFile { String msg = NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.init.badInitMsg"); String details = NbBundle.getMessage(this.getClass(), "KeywordSearchIngestModule.init.tryStopSolrMsg", msg); services.postMessage(IngestMessage.createErrorMessage(++messageID, instance, msg, details)); - return; + throw new IngestModuleException(msg); + } + try { + // make an actual query to verify that server is responding + // we had cases where getStatus was OK, but the connection resulted in a 404 + server.queryNumIndexedDocuments(); + } catch (KeywordSearchModuleException | NoOpenCoreException ex) { + throw new IngestModuleException("Error connecting to SOLR server: " + ex.getMessage()); } - //initialize extractors stringExtractor = new AbstractFileStringExtract(); @@ -415,7 +421,7 @@ public final class KeywordSearchIngestModule extends IngestModuleAbstractFile { curDataSourceIds = new HashSet(); indexer = new Indexer(); - + final int updateIntervalMs = KeywordSearchSettings.getUpdateFrequency().getTime() * 60 * 1000; logger.log(Level.INFO, "Using commit interval (ms): " + updateIntervalMs); logger.log(Level.INFO, "Using searcher interval (ms): " + updateIntervalMs); diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Server.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Server.java index d78a630112..998d25f24c 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Server.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/Server.java @@ -350,7 +350,7 @@ public class Server { */ void start() throws KeywordSearchModuleException, SolrServerNoPortException { logger.log(Level.INFO, "Starting Solr server from: " + solrFolder.getAbsolutePath()); - if (available(currentSolrServerPort)) { + if (isPortAvailable(currentSolrServerPort)) { logger.log(Level.INFO, "Port [" + currentSolrServerPort + "] available, starting Solr"); try { final String MAX_SOLR_MEM_MB_PAR = "-Xmx" + Integer.toString(MAX_SOLR_MEM_MB) + "m"; @@ -419,7 +419,7 @@ public class Server { * * @param port the port to check for availability */ - static boolean available(int port) { + static boolean isPortAvailable(int port) { ServerSocket ss = null; try { @@ -524,6 +524,7 @@ public class Server { //TODO handle timeout in cases when some other type of server on that port CoreAdminRequest.getStatus(null, solrServer); + logger.log(Level.INFO, "Solr server is running"); } catch (SolrServerException ex) {