diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/IndexMetadata.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/IndexMetadata.java index 99dfd28c2d..feb4cc13b0 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/IndexMetadata.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/IndexMetadata.java @@ -87,6 +87,9 @@ public class IndexMetadata { */ IndexMetadata(String caseDirectory) throws TextIndexMetadataException { this.metadataFilePath = Paths.get(caseDirectory, metadataFileName); + if (!this.metadataFilePath.toFile().exists()) { + throw new TextIndexMetadataException(String.format("Text index metadata file doesn't exist: %s", metadataFilePath)); + } readFromFile(); } diff --git a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java index 87d02245b9..4db8d898bc 100644 --- a/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java +++ b/KeywordSearch/src/org/sleuthkit/autopsy/keywordsearch/SolrSearchService.java @@ -23,6 +23,7 @@ import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.net.InetAddress; import java.nio.file.Path; +import java.util.ArrayList; import java.util.List; import java.util.MissingResourceException; import java.util.logging.Level; @@ -173,6 +174,7 @@ public class SolrSearchService implements KeywordSearchService, AutopsyService { */ @Override @NbBundle.Messages({ + "SolrSearch.readingIndexes.msg=Reading text index metadata file", "SolrSearch.findingIndexes.msg=Looking for existing text index directories", "SolrSearch.creatingNewIndex.msg=Creating new text index", "SolrSearch.indentifyingIndex.msg=Identifying text index for upgrade", @@ -181,13 +183,27 @@ public class SolrSearchService implements KeywordSearchService, AutopsyService { "SolrSearch.complete.msg=Text index successfully opened"}) public void openCaseResources(CaseContext context) throws AutopsyServiceException { ProgressIndicator progress = context.getProgressIndicator(); - int totalNumProgressUnits = 7; + int totalNumProgressUnits = 8; int progressUnitsCompleted = 1; + + List indexes = new ArrayList<>(); + try { + // if index metadata file exists, get list of excisting Solr cores for this case + progress.start(Bundle.SolrSearch_readingIndexes_msg(), totalNumProgressUnits); + IndexMetadata indexMetadata = new IndexMetadata(context.getCase().getCaseDirectory()); + indexes = indexMetadata.getIndexes(); + } catch (IndexMetadata.TextIndexMetadataException ex) { + logger.log(Level.WARNING, String.format("Unable to read text index metadata file"), ex); + } - // do a case subdirectory search to check for the existence and upgrade status of KWS indexes - progress.start(Bundle.SolrSearch_findingIndexes_msg(), totalNumProgressUnits); - IndexFinder indexFinder = new IndexFinder(); - List indexes = indexFinder.findAllIndexDirs(context.getCase()); + if (indexes.isEmpty()) { + // do a case subdirectory search to check for the existence of "old" KWS indexes that can be upgraded + progressUnitsCompleted++; + progress.progress(Bundle.SolrSearch_findingIndexes_msg(), progressUnitsCompleted); + IndexFinder indexFinder = new IndexFinder(); + indexes = indexFinder.findAllIndexDirs(context.getCase()); + } + if (context.cancelRequested()) { return; } @@ -312,13 +328,10 @@ public class SolrSearchService implements KeywordSearchService, AutopsyService { } try { - // store the new core name + // update text index metadata file IndexMetadata indexMetadata = new IndexMetadata(context.getCase().getCaseDirectory(), indexes); - - // ELTODO remove - IndexMetadata ind = new IndexMetadata(context.getCase().getCaseDirectory()); } catch (IndexMetadata.TextIndexMetadataException ex) { - throw new AutopsyServiceException("Failed to save core name in case metadata file", ex); + throw new AutopsyServiceException("Failed to save Solr core info in text index metadata file", ex); } progress.progress(Bundle.SolrSearch_complete_msg(), totalNumProgressUnits);