diff --git a/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java b/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java index 1affe44e6..a878c58ad 100644 --- a/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java +++ b/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java @@ -86,11 +86,11 @@ public class NexusRepositorySearch FlatSearchRequest request = new FlatSearchRequest( q ); FlatSearchResponse response = indexer.searchFlat( request ); - if( response == null ) + if( response == null || response.getTotalHits() == 0 ) { return new SearchResults(); } - + return convertToSearchResults( response, limits ); } catch ( IndexContextInInconsistentStateException e ) @@ -101,6 +101,24 @@ public class NexusRepositorySearch { throw new RepositorySearchException( e ); } + finally + { + Map indexingContexts = indexer.getIndexingContexts(); + Set keys = indexingContexts.keySet(); + for( String key : keys ) + { + try + { + indexer.removeIndexingContext( indexingContexts.get( key ), false ); + log.debug( "Indexing context '" + key + "' removed from search." ); + } + catch ( IOException e ) + { + log.warn( "IOException occurred while removing indexing content '" + key + "'." ); + continue; + } + } + } } public SearchResults search( String principal, SearchFields searchFields, SearchResultLimits limits ) @@ -143,14 +161,12 @@ public class NexusRepositorySearch } } catch ( UnsupportedExistingLuceneIndexException e ) - { - // skip repository + { log.warn( "Error accessing index of repository '" + repo + "' : " + e.getMessage() ); continue; } catch ( IOException e ) - { - // skip repository + { log.warn( "IO error occured while accessing index of repository '" + repo + "' : " + e.getMessage() ); continue; } diff --git a/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java b/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java index 3eeb089db..cbdb9c7e5 100644 --- a/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java +++ b/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java @@ -137,12 +137,14 @@ public class NexusRepositorySearchTest } indexerEngine.endIndexing( context ); + indexer.removeIndexingContext( context, false ); + assertTrue( new File( getBasedir(), "/target/test-classes/" + repository + "/.indexer" ).exists() ); } public void testQuickSearch() throws Exception - { + { List selectedRepos = new ArrayList(); selectedRepos.add( TEST_REPO_1 ); @@ -182,7 +184,7 @@ public class NexusRepositorySearchTest public void testQuickSearchWithPagination() throws Exception - { + { List selectedRepos = new ArrayList(); selectedRepos.add( TEST_REPO_1 ); @@ -258,32 +260,54 @@ public class NexusRepositorySearchTest FileUtils.deleteDirectory( new File( getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ) ); assertFalse( new File( getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ).exists() ); - // there should be no duplicates in the search result hit // TODO: [BROWSE] in artifact info from browse, display all the repositories where the artifact is found } public void testNoMatchFound() throws Exception { + List selectedRepos = new ArrayList(); + selectedRepos.add( TEST_REPO_1 ); + + archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config ); + archivaConfigControl.replay(); + + SearchResults results = search.search( "user", selectedRepos, "dfghdfkweriuasndsaie", null ); + + archivaConfigControl.verify(); + + assertNotNull( results ); + assertEquals( 0, results.getTotalHits() ); } public void testNoIndexFound() throws Exception { + List selectedRepos = new ArrayList(); + selectedRepos.add( "non-existing-repo" ); + + archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config ); + archivaConfigControl.replay(); + + SearchResults results = search.search( "user", selectedRepos, "org.apache.archiva", null ); + assertNotNull( results ); + assertEquals( 0, results.getTotalHits() ); + + archivaConfigControl.verify(); } public void testSearchWithinSearchResults() throws Exception { - + } public void testAdvancedSearch() throws Exception { - + } }