mirror of https://github.com/apache/archiva.git
-fix unit : lucene sometimes has pain to flush...
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1170884 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ae4ff95a87
commit
6e252d9a2d
|
@ -100,19 +100,6 @@
|
|||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>cobertura-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<check>
|
||||
<!-- TODO: increase coverage -->
|
||||
<totalLineRate>80</totalLineRate>
|
||||
<totalBranchRate>80</totalBranchRate>
|
||||
</check>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
<pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
|
@ -120,7 +107,7 @@
|
|||
<artifactId>apache-rat-plugin</artifactId>
|
||||
<configuration>
|
||||
<excludes>
|
||||
<exclude>src/test/resources/nexus-search-test-repo*/**</exclude>
|
||||
<exclude>src/test/nexus-search-test-repo*/**</exclude>
|
||||
</excludes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
|
|
@ -189,8 +189,9 @@ public class NexusRepositorySearch
|
|||
|
||||
if ( StringUtils.isNotBlank( searchFields.getClassifier() ) )
|
||||
{
|
||||
q.add( indexer.constructQuery( MAVEN.CLASSIFIER, new StringSearchExpression( searchFields.getClassifier() ) ),
|
||||
Occur.MUST );
|
||||
q.add(
|
||||
indexer.constructQuery( MAVEN.CLASSIFIER, new StringSearchExpression( searchFields.getClassifier() ) ),
|
||||
Occur.MUST );
|
||||
}
|
||||
|
||||
if ( q.getClauses() == null || q.getClauses().length <= 0 )
|
||||
|
@ -204,6 +205,7 @@ public class NexusRepositorySearch
|
|||
private SearchResults search( SearchResultLimits limits, BooleanQuery q, List<String> indexingContextIds )
|
||||
throws RepositorySearchException
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
FlatSearchRequest request = new FlatSearchRequest( q );
|
||||
|
@ -343,9 +345,11 @@ public class NexusRepositorySearch
|
|||
{
|
||||
log.warn( "IO error occured while accessing index of repository '" + repo + "' : " + e.getMessage() );
|
||||
continue;
|
||||
} catch ( RepositoryAdminException e )
|
||||
}
|
||||
catch ( RepositoryAdminException e )
|
||||
{
|
||||
log.warn( "RepositoryAdminException occured while accessing index of repository '" + repo + "' : " + e.getMessage() );
|
||||
log.warn( "RepositoryAdminException occured while accessing index of repository '" + repo + "' : "
|
||||
+ e.getMessage() );
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
@ -366,7 +370,8 @@ public class NexusRepositorySearch
|
|||
|
||||
for ( ArtifactInfo artifactInfo : artifactInfos )
|
||||
{
|
||||
String id = SearchUtil.getHitId( artifactInfo.groupId, artifactInfo.artifactId );
|
||||
String id = SearchUtil.getHitId( artifactInfo.groupId, artifactInfo.artifactId, artifactInfo.classifier,
|
||||
artifactInfo.packaging );
|
||||
Map<String, SearchResultHit> hitsMap = results.getHitsMap();
|
||||
|
||||
SearchResultHit hit = hitsMap.get( id );
|
||||
|
@ -450,7 +455,8 @@ public class NexusRepositorySearch
|
|||
SearchResultHit hit = results.getHits().get( ( offset + i ) );
|
||||
if ( hit != null )
|
||||
{
|
||||
String id = SearchUtil.getHitId( hit.getGroupId(), hit.getArtifactId() );
|
||||
String id = SearchUtil.getHitId( hit.getGroupId(), hit.getArtifactId(), hit.getClassifier(),
|
||||
hit.getPackaging() );
|
||||
paginated.addHit( id, hit );
|
||||
}
|
||||
else
|
||||
|
|
|
@ -373,5 +373,47 @@ public class SearchResultHit
|
|||
return sb.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object o )
|
||||
{
|
||||
if ( this == o )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if ( o == null || getClass() != o.getClass() )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
SearchResultHit that = (SearchResultHit) o;
|
||||
|
||||
if ( artifactId != null ? !artifactId.equals( that.artifactId ) : that.artifactId != null )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if ( classifier != null ? !classifier.equals( that.classifier ) : that.classifier != null )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if ( groupId != null ? !groupId.equals( that.groupId ) : that.groupId != null )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if ( packaging != null ? !packaging.equals( that.packaging ) : that.packaging != null )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
int result = groupId != null ? groupId.hashCode() : 0;
|
||||
result = 31 * result + ( artifactId != null ? artifactId.hashCode() : 0 );
|
||||
result = 31 * result + ( packaging != null ? packaging.hashCode() : 0 );
|
||||
result = 31 * result + ( classifier != null ? classifier.hashCode() : 0 );
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -61,6 +61,17 @@ public class SearchResults
|
|||
return new ArrayList<SearchResultHit>( hits.values() );
|
||||
}
|
||||
|
||||
/**
|
||||
* see SearchUtil on how to generate the key
|
||||
*
|
||||
* @param key
|
||||
* @return
|
||||
*/
|
||||
public SearchResultHit getSearchResultHit( String key )
|
||||
{
|
||||
return hits.get( key );
|
||||
}
|
||||
|
||||
public Map<String, SearchResultHit> getHitsMap()
|
||||
{
|
||||
return hits;
|
||||
|
@ -92,8 +103,8 @@ public class SearchResults
|
|||
}
|
||||
|
||||
/**
|
||||
* @since 1.4
|
||||
* @return
|
||||
* @since 1.4
|
||||
*/
|
||||
public int getReturnedHitsCount()
|
||||
{
|
||||
|
@ -101,8 +112,8 @@ public class SearchResults
|
|||
}
|
||||
|
||||
/**
|
||||
* @since 1.4
|
||||
* @param returnedHitsCount
|
||||
* @since 1.4
|
||||
*/
|
||||
public void setReturnedHitsCount( int returnedHitsCount )
|
||||
{
|
||||
|
|
|
@ -19,13 +19,18 @@ package org.apache.archiva.indexer.util;
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
|
||||
/**
|
||||
* SearchUtil - utility class for search.
|
||||
*/
|
||||
public class SearchUtil
|
||||
{
|
||||
public static String getHitId( String groupId, String artifactId )
|
||||
public static String getHitId( String groupId, String artifactId, String classifier, String packaging )
|
||||
{
|
||||
return groupId + ":" + artifactId;
|
||||
return ( StringUtils.isBlank( groupId ) ? "" : StringUtils.trim( groupId ) ) + ":"
|
||||
+ ( StringUtils.isBlank( artifactId ) ? "" : StringUtils.trim( artifactId ) ) + ":"
|
||||
+ ( StringUtils.isBlank( classifier ) ? "" : StringUtils.trim( classifier ) ) + ":" + ( StringUtils.isBlank(
|
||||
packaging ) ? "" : StringUtils.trim( packaging ) );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,7 +46,6 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
|||
|
||||
import javax.inject.Inject;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
@ -122,6 +121,12 @@ public abstract class AbstractNexusRepositorySearch
|
|||
nexusIndexer.removeIndexingContext( indexingContext, true );
|
||||
}
|
||||
|
||||
FileUtils.deleteDirectory( new File( FileUtil.getBasedir(), "/target/repos/" + TEST_REPO_1 ) );
|
||||
assertFalse( new File( FileUtil.getBasedir(), "/target/repos/" + TEST_REPO_1 ).exists() );
|
||||
|
||||
FileUtils.deleteDirectory( new File( FileUtil.getBasedir(), "/target/repos/" + TEST_REPO_2 ) );
|
||||
assertFalse( new File( FileUtil.getBasedir(), "/target/repos/" + TEST_REPO_2 ).exists() );
|
||||
|
||||
super.tearDown();
|
||||
}
|
||||
|
||||
|
@ -172,38 +177,40 @@ public abstract class AbstractNexusRepositorySearch
|
|||
|
||||
assertFalse( lockFile.exists() );
|
||||
|
||||
File repo = new File( FileUtil.getBasedir(), "/target/repos/" + repository );
|
||||
File indexDirectory = new File( FileUtil.getBasedir(), "/target/repos/" + repository + "/.indexer" );
|
||||
File repo = new File( FileUtil.getBasedir(), "src/test/" + repository );
|
||||
assertTrue( repo.exists() );
|
||||
File indexDirectory =
|
||||
new File( FileUtil.getBasedir(), "target/index/test-" + Long.toString( System.currentTimeMillis() ) );
|
||||
indexDirectory.deleteOnExit();
|
||||
FileUtils.deleteDirectory( indexDirectory );
|
||||
|
||||
context = nexusIndexer.addIndexingContext( repository, repository, repo, indexDirectory,
|
||||
repo.toURI().toURL().toExternalForm(),
|
||||
indexDirectory.toURI().toURL().toString(),
|
||||
search.getAllIndexCreators() );
|
||||
|
||||
List<ArtifactContext> artifactContexts = new ArrayList<ArtifactContext>( filesToBeIndexed.size() );
|
||||
// minimize datas in memory
|
||||
context.getIndexWriter().setMaxBufferedDocs( -1 );
|
||||
context.getIndexWriter().setRAMBufferSizeMB( 1 );
|
||||
for ( File artifactFile : filesToBeIndexed )
|
||||
{
|
||||
assertTrue( "file not exists " + artifactFile.getPath(), artifactFile.exists() );
|
||||
ArtifactContext ac = artifactContextProducer.getArtifactContext( context, artifactFile );
|
||||
artifactContexts.add( ac );
|
||||
nexusIndexer.addArtifactToIndex( ac, context );
|
||||
context.updateTimestamp( true );
|
||||
}
|
||||
|
||||
if ( filesToBeIndexed != null && !filesToBeIndexed.isEmpty() )
|
||||
{
|
||||
nexusIndexer.addArtifactsToIndex( artifactContexts, context );
|
||||
|
||||
while ( context.isReceivingUpdates() )
|
||||
{
|
||||
Thread.sleep( 10 );
|
||||
}
|
||||
}
|
||||
if ( scan )
|
||||
{
|
||||
nexusIndexer.scan( context, new ArtifactScanListener(), false );
|
||||
}
|
||||
|
||||
// force flushing
|
||||
context.getIndexWriter().commit();
|
||||
context.getIndexWriter().close( true );
|
||||
// wait for io flush ....
|
||||
//Thread.sleep( 2000 );
|
||||
context.setSearchable( true );
|
||||
|
||||
assertTrue( new File( FileUtil.getBasedir(), "/target/repos/" + repository + "/.indexer" ).exists() );
|
||||
}
|
||||
|
||||
static class ArtifactScanListener
|
||||
|
|
|
@ -19,16 +19,14 @@ package org.apache.archiva.indexer.search;
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import org.apache.archiva.indexer.util.SearchUtil;
|
||||
import org.apache.maven.archiva.common.utils.FileUtil;
|
||||
import org.apache.maven.index.artifact.IllegalArtifactCoordinateException;
|
||||
import org.apache.maven.index.context.UnsupportedExistingLuceneIndexException;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
@ -45,11 +43,11 @@ public class NexusRepositorySearchTest
|
|||
throws Exception
|
||||
{
|
||||
List<File> files = new ArrayList<File>();
|
||||
files.add( new File( FileUtil.getBasedir(), "src/test" + TEST_REPO_1
|
||||
files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
|
||||
+ "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
|
||||
files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
|
||||
+ "/org/apache/archiva/archiva-test/1.0/archiva-test-1.0.jar" ) );
|
||||
files.add( new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_1
|
||||
files.add( new File( FileUtil.getBasedir(), "/src/test/" + TEST_REPO_1
|
||||
+ "/org/apache/archiva/archiva-test/2.0/archiva-test-2.0.jar" ) );
|
||||
|
||||
createIndex( TEST_REPO_1, files, scan );
|
||||
|
@ -67,12 +65,12 @@ public class NexusRepositorySearchTest
|
|||
+ "/org/apache/archiva/archiva-test/2.0/archiva-test-2.0.jar" ) );
|
||||
files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
|
||||
+ "/org/apache/archiva/archiva-webapp/1.0/archiva-webapp-1.0.war" ) );
|
||||
files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
|
||||
+ "/com/artifactid-numeric/1.0/artifactid-numeric-1.0.jar" ) );
|
||||
files.add( new File( FileUtil.getBasedir(),
|
||||
"src/test/" + TEST_REPO_1 + "/com/artifactid-numeric/1.0/artifactid-numeric-1.0.jar" ) );
|
||||
files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
|
||||
+ "/com/artifactid-numeric123/1.0/artifactid-numeric123-1.0.jar" ) );
|
||||
files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
|
||||
+ "/com/classname-search/1.0/classname-search-1.0.jar" ) );
|
||||
files.add( new File( FileUtil.getBasedir(),
|
||||
"src/test/" + TEST_REPO_1 + "/com/classname-search/1.0/classname-search-1.0.jar" ) );
|
||||
|
||||
createIndex( TEST_REPO_1, files, scan );
|
||||
}
|
||||
|
@ -108,9 +106,10 @@ public class NexusRepositorySearchTest
|
|||
archivaConfigControl.verify();
|
||||
|
||||
assertNotNull( results );
|
||||
assertEquals( 1, results.getTotalHits() );
|
||||
|
||||
SearchResultHit hit = results.getHits().get( 0 );
|
||||
SearchResultHit hit =
|
||||
results.getSearchResultHit( SearchUtil.getHitId( "org.apache.archiva", "archiva-search", null, "jar" ) );
|
||||
assertNotNull( "hit null in result " + results.getHits(), hit );
|
||||
assertEquals( "org.apache.archiva", hit.getGroupId() );
|
||||
assertEquals( "archiva-search", hit.getArtifactId() );
|
||||
assertEquals( "1.0", hit.getVersions().get( 0 ) );
|
||||
|
@ -166,7 +165,7 @@ public class NexusRepositorySearchTest
|
|||
public void testMultipleArtifactsSameVersionWithClassifier()
|
||||
throws Exception
|
||||
{
|
||||
createIndexContainingMultipleArtifactsSameVersion( false );
|
||||
createIndexContainingMultipleArtifactsSameVersion( true );
|
||||
|
||||
List<String> selectedRepos = new ArrayList<String>();
|
||||
selectedRepos.add( TEST_REPO_1 );
|
||||
|
@ -291,17 +290,20 @@ public class NexusRepositorySearchTest
|
|||
|
||||
archivaConfigControl.replay();
|
||||
|
||||
// wait lucene flush.....
|
||||
Thread.sleep( 2000 );
|
||||
|
||||
SearchResults results = search.search( "user", selectedRepos, "archiva-search", null, null );
|
||||
|
||||
archivaConfigControl.verify();
|
||||
|
||||
assertNotNull( results );
|
||||
assertEquals( 4, results.getTotalHits() );
|
||||
|
||||
SearchResultHit hit = results.getHits().get( 0 );
|
||||
SearchResultHit hit =
|
||||
results.getSearchResultHit( SearchUtil.getHitId( "org.apache.archiva", "archiva-search", null, "jar" ) );
|
||||
assertEquals( "org.apache.archiva", hit.getGroupId() );
|
||||
assertEquals( "archiva-search", hit.getArtifactId() );
|
||||
assertEquals("not 2 version for hit " + hit, 2, hit.getVersions().size() );
|
||||
assertEquals( "not 2 version for hit " + hit + "::" + niceDisplay( results ), 2, hit.getVersions().size() );
|
||||
assertTrue( hit.getVersions().contains( "1.0" ) );
|
||||
assertTrue( hit.getVersions().contains( "1.1" ) );
|
||||
|
||||
|
@ -489,8 +491,8 @@ public class NexusRepositorySearchTest
|
|||
throws Exception
|
||||
{
|
||||
List<File> files = new ArrayList<File>();
|
||||
files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
|
||||
+ "/com/artifactid-numeric/1.0/artifactid-numeric-1.0.jar" ) );
|
||||
files.add( new File( FileUtil.getBasedir(),
|
||||
"src/test/" + TEST_REPO_1 + "/com/artifactid-numeric/1.0/artifactid-numeric-1.0.jar" ) );
|
||||
files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
|
||||
+ "/com/artifactid-numeric123/1.0/artifactid-numeric123-1.0.jar" ) );
|
||||
createIndex( TEST_REPO_1, files, true );
|
||||
|
@ -688,8 +690,7 @@ public class NexusRepositorySearchTest
|
|||
{
|
||||
createIndexContainingMoreArtifacts( true );
|
||||
|
||||
List<String> selectedRepos = new ArrayList<String>();
|
||||
selectedRepos.add( TEST_REPO_1 );
|
||||
List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
|
||||
|
||||
SearchFields searchFields = new SearchFields();
|
||||
searchFields.setClassName( "com.classname.search.App" );
|
||||
|
|
|
@ -197,8 +197,6 @@ public class ArchivaIndexingTaskExecutor
|
|||
nexusIndexer.addArtifactToIndex( ac, context );
|
||||
}
|
||||
|
||||
//nexusIndexer.scan( context, true );
|
||||
|
||||
context.updateTimestamp();
|
||||
|
||||
// close the context if not a repo scan request
|
||||
|
|
Loading…
Reference in New Issue