git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1443527 13f79535-47bb-0310-9956-ffa450edef68tags/archiva-1.4-M4
@@ -47,7 +47,7 @@ import java.util.concurrent.CopyOnWriteArrayList; | |||
* @author Olivier Lamy | |||
* @since 1.4-M2 | |||
*/ | |||
@Service("indexMerger#default") | |||
@Service( "indexMerger#default" ) | |||
public class DefaultIndexMerger | |||
implements IndexMerger | |||
{ | |||
@@ -87,7 +87,7 @@ public class DefaultIndexMerger | |||
this.groupMergedIndexTtl = Integer.getInteger( IndexMerger.TMP_GROUP_INDEX_SYS_KEY, DEFAULT_GROUP_INDEX_TTL ); | |||
} | |||
public IndexingContext buildMergedIndex( Collection<String> repositoriesIds, boolean packIndex ) | |||
public IndexingContext buildMergedIndex( IndexMergerRequest indexMergerRequest ) | |||
throws IndexMergerException | |||
{ | |||
File tempRepoFile = Files.createTempDir(); | |||
@@ -102,7 +102,7 @@ public class DefaultIndexMerger | |||
indexer.addIndexingContext( tempRepoId, tempRepoId, tempRepoFile, indexLocation, null, null, | |||
mavenIndexerUtils.getAllIndexCreators() ); | |||
for ( String repoId : repositoriesIds ) | |||
for ( String repoId : indexMergerRequest.getRepositoriesIds() ) | |||
{ | |||
IndexingContext idxToMerge = indexer.getIndexingContexts().get( repoId ); | |||
if ( idxToMerge != null ) | |||
@@ -113,12 +113,13 @@ public class DefaultIndexMerger | |||
indexingContext.optimize(); | |||
if ( packIndex ) | |||
if ( indexMergerRequest.isPackIndex() ) | |||
{ | |||
IndexPackingRequest request = new IndexPackingRequest( indexingContext, indexLocation ); | |||
indexPacker.packIndex( request ); | |||
} | |||
temporaryGroupIndexes.add( new TemporaryGroupIndex( tempRepoFile, tempRepoId ) ); | |||
temporaryGroupIndexes.add( | |||
new TemporaryGroupIndex( tempRepoFile, tempRepoId, indexMergerRequest.getGroupId() ) ); | |||
return indexingContext; | |||
} | |||
catch ( IOException e ) |
@@ -35,12 +35,11 @@ public interface IndexMerger | |||
static final String TMP_GROUP_INDEX_SYS_KEY = "archiva.tmp.group.index.ttl"; | |||
/** | |||
* @param repositoriesIds repositories Ids to merge content | |||
* @param packIndex will generate a downloadable index | |||
* @param indexMergerRequest | |||
* @return a temporary directory with a merge index (directory marked deleteOnExit) | |||
* @throws IndexMergerException | |||
*/ | |||
IndexingContext buildMergedIndex( Collection<String> repositoriesIds, boolean packIndex ) | |||
IndexingContext buildMergedIndex( IndexMergerRequest indexMergerRequest ) | |||
throws IndexMergerException; | |||
void cleanTemporaryGroupIndex( TemporaryGroupIndex temporaryGroupIndex ); |
@@ -34,10 +34,13 @@ public class TemporaryGroupIndex | |||
private String indexId; | |||
public TemporaryGroupIndex( File directory, String indexId ) | |||
private String groupId; | |||
public TemporaryGroupIndex( File directory, String indexId, String groupId ) | |||
{ | |||
this.directory = directory; | |||
this.indexId = indexId; | |||
this.groupId = groupId; | |||
} | |||
public long getCreationTime() |
@@ -51,14 +51,14 @@ public class TemporaryGroupIndexCleaner | |||
} | |||
// 900000 | |||
@Scheduled( fixedDelay = 900000 ) | |||
@Scheduled(fixedDelay = 900000) | |||
public void cleanTemporaryIndex() | |||
{ | |||
log.info( "cleanTemporaryIndex" ); | |||
for ( TemporaryGroupIndex temporaryGroupIndex : indexMerger.getTemporaryGroupIndexes() ) | |||
{ | |||
// cleanup files older than 60 minutes 3600000 | |||
if ( new Date().getTime() - temporaryGroupIndex.getCreationTime() > 3600000 ) | |||
// cleanup files older than the ttl | |||
if ( new Date().getTime() - temporaryGroupIndex.getCreationTime() > indexMerger.getGroupMergedIndexTtl() ) | |||
{ | |||
indexMerger.cleanTemporaryGroupIndex( temporaryGroupIndex ); | |||
@@ -991,6 +991,7 @@ | |||
<archiva.devMode>${archiva.devMode}</archiva.devMode> | |||
<archiva.javascriptLog>${archiva.javascriptLog}</archiva.javascriptLog> | |||
<archiva.logMissingI18n>${archiva.logMissingI18n}</archiva.logMissingI18n> | |||
<archiva.tmp.group.index.ttl>0</archiva.tmp.group.index.ttl> | |||
</systemProperties> | |||
<additionalClasspathDirs> | |||
<additionalClasspathDir>${basedir}/src/test/tomcat</additionalClasspathDir> |
@@ -33,6 +33,7 @@ import org.apache.archiva.configuration.ArchivaConfiguration; | |||
import org.apache.archiva.configuration.RepositoryGroupConfiguration; | |||
import org.apache.archiva.indexer.merger.IndexMerger; | |||
import org.apache.archiva.indexer.merger.IndexMergerException; | |||
import org.apache.archiva.indexer.merger.IndexMergerRequest; | |||
import org.apache.archiva.indexer.merger.TemporaryGroupIndex; | |||
import org.apache.archiva.indexer.search.RepositorySearch; | |||
import org.apache.archiva.maven2.metadata.MavenMetadataReader; | |||
@@ -109,7 +110,7 @@ import java.util.Set; | |||
/** | |||
* | |||
*/ | |||
@Service("davResourceFactory#archiva") | |||
@Service( "davResourceFactory#archiva" ) | |||
public class ArchivaDavResourceFactory | |||
implements DavResourceFactory, Auditable | |||
{ | |||
@@ -140,7 +141,7 @@ public class ArchivaDavResourceFactory | |||
* | |||
*/ | |||
@Inject | |||
@Named(value = "repositoryProxyConnectors#default") | |||
@Named( value = "repositoryProxyConnectors#default" ) | |||
private RepositoryProxyConnectors connectors; | |||
/** | |||
@@ -170,7 +171,7 @@ public class ArchivaDavResourceFactory | |||
* | |||
*/ | |||
@Inject | |||
@Named(value = "httpAuthenticator#basic") | |||
@Named( value = "httpAuthenticator#basic" ) | |||
private HttpAuthenticator httpAuth; | |||
@Inject | |||
@@ -206,7 +207,7 @@ public class ArchivaDavResourceFactory | |||
* | |||
*/ | |||
@Inject | |||
@Named(value = "archivaTaskScheduler#repository") | |||
@Named( value = "archivaTaskScheduler#repository" ) | |||
private RepositoryArchivaTaskScheduler scheduler; | |||
private ApplicationContext applicationContext; | |||
@@ -1216,10 +1217,11 @@ public class ArchivaDavResourceFactory | |||
} | |||
log.info( "generate temporary merged index for repository group '{}' for repositories '{}'", groupId, | |||
authzRepos ); | |||
IndexingContext indexingContext = indexMerger.buildMergedIndex( authzRepos, true ); | |||
IndexingContext indexingContext = | |||
indexMerger.buildMergedIndex( new IndexMergerRequest( authzRepos, true, groupId ) ); | |||
File mergedRepoDir = indexingContext.getIndexDirectoryFile(); | |||
TemporaryGroupIndex temporaryGroupIndex = | |||
new TemporaryGroupIndex( mergedRepoDir, indexingContext.getId() ).setCreationTime( | |||
new TemporaryGroupIndex( mergedRepoDir, indexingContext.getId(), groupId ).setCreationTime( | |||
new Date().getTime() ); | |||
temporaryGroupIndexMap.put( groupId, temporaryGroupIndex ); | |||
session.setAttribute( TemporaryGroupIndexSessionCleaner.TEMPORARY_INDEX_SESSION_KEY, |