git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@825082 13f79535-47bb-0310-9956-ffa450edef68tags/archiva-1.3
@@ -19,6 +19,9 @@ package org.apache.archiva.consumers.lucene; | |||
* under the License. | |||
*/ | |||
import java.io.File; | |||
import java.util.List; | |||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; | |||
import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer; | |||
import org.apache.maven.archiva.consumers.ConsumerException; | |||
@@ -34,9 +37,6 @@ import org.codehaus.plexus.taskqueue.TaskQueueException; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import java.io.File; | |||
import java.util.List; | |||
/** | |||
* LuceneCleanupRemoveIndexedConsumer | |||
* | |||
@@ -97,16 +97,16 @@ public class LuceneCleanupRemoveIndexedConsumer | |||
if ( !artifactFile.exists() ) | |||
{ | |||
ArtifactIndexingTask task = | |||
TaskCreator.createIndexingTask( repository.getId(), artifactFile, ArtifactIndexingTask.DELETE ); | |||
TaskCreator.createIndexingTask( repository.getId(), artifactFile, ArtifactIndexingTask.Action.DELETE ); | |||
log.debug( "Queueing indexing task '" + task.getName() + "' to remove the artifact from the index." ); | |||
log.debug( "Queueing indexing task '" + task + "' to remove the artifact from the index." ); | |||
scheduler.queueIndexingTask( task ); | |||
// note we finish immediately here since it isn't done repo-by-repo. It might be nice to ensure that is | |||
// the case for optimisation though | |||
task = | |||
TaskCreator.createIndexingTask( repository.getId(), artifactFile, ArtifactIndexingTask.FINISH ); | |||
log.debug( "Queueing indexing task + '" + task.getName() + "' to finish indexing." ); | |||
TaskCreator.createIndexingTask( repository.getId(), artifactFile, ArtifactIndexingTask.Action.FINISH ); | |||
log.debug( "Queueing indexing task + '" + task + "' to finish indexing." ); | |||
scheduler.queueIndexingTask( task ); | |||
} | |||
@@ -33,6 +33,7 @@ import org.apache.maven.archiva.repository.content.ManagedDefaultRepositoryConte | |||
import org.apache.maven.archiva.scheduled.ArchivaTaskScheduler; | |||
import org.apache.maven.archiva.scheduled.tasks.ArtifactIndexingTask; | |||
import org.apache.maven.archiva.scheduled.tasks.TaskCreator; | |||
import org.apache.maven.archiva.scheduled.tasks.ArtifactIndexingTask.Action; | |||
import org.codehaus.plexus.taskqueue.TaskQueueException; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
@@ -90,10 +91,10 @@ public class NexusIndexerConsumer | |||
File artifactFile = new File( managedRepository, path ); | |||
ArtifactIndexingTask task = | |||
TaskCreator.createIndexingTask( repositoryContent.getId(), artifactFile, ArtifactIndexingTask.ADD ); | |||
TaskCreator.createIndexingTask( repositoryContent.getId(), artifactFile, ArtifactIndexingTask.Action.ADD ); | |||
try | |||
{ | |||
log.debug( "Queueing indexing task + '" + task.getName() + "' to add or update the artifact in the index." ); | |||
log.debug( "Queueing indexing task + '" + task + "' to add or update the artifact in the index." ); | |||
scheduler.queueIndexingTask( task ); | |||
} | |||
catch ( TaskQueueException e ) | |||
@@ -105,15 +106,15 @@ public class NexusIndexerConsumer | |||
public void completeScan() | |||
{ | |||
ArtifactIndexingTask task = | |||
TaskCreator.createIndexingTask( repositoryContent.getId(), null, ArtifactIndexingTask.FINISH ); | |||
TaskCreator.createIndexingTask( repositoryContent.getId(), null, ArtifactIndexingTask.Action.FINISH ); | |||
try | |||
{ | |||
log.debug( "Queueing indexing task + '" + task.getName() + "' to finish indexing." ); | |||
log.debug( "Queueing indexing task + '" + task + "' to finish indexing." ); | |||
scheduler.queueIndexingTask( task ); | |||
} | |||
catch ( TaskQueueException e ) | |||
{ | |||
log.error( "Error queueing task: " + task.getName() + ": " + e.getMessage(), e ); | |||
log.error( "Error queueing task: " + task + ": " + e.getMessage(), e ); | |||
} | |||
} | |||
@@ -20,6 +20,7 @@ package org.apache.archiva.consumers.lucene; | |||
*/ | |||
import java.io.File; | |||
import java.util.List; | |||
import org.apache.commons.io.FileUtils; | |||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; | |||
@@ -31,6 +32,7 @@ import org.apache.maven.archiva.scheduled.ArchivaTaskScheduler; | |||
import org.apache.maven.archiva.scheduled.tasks.ArtifactIndexingTask; | |||
import org.apache.maven.archiva.scheduled.tasks.TaskCreator; | |||
import org.codehaus.plexus.spring.PlexusInSpringTestCase; | |||
import org.codehaus.plexus.taskqueue.TaskQueue; | |||
import org.easymock.MockControl; | |||
import org.easymock.classextension.MockClassControl; | |||
@@ -48,7 +50,7 @@ public class LuceneCleanupRemoveIndexedConsumerTest | |||
private ManagedRepositoryConfiguration repositoryConfig; | |||
private ArchivaTaskScheduler scheduler; | |||
private TaskQueue indexingQueue; | |||
public void setUp() | |||
throws Exception | |||
@@ -58,7 +60,9 @@ public class LuceneCleanupRemoveIndexedConsumerTest | |||
repoFactoryControl = MockClassControl.createControl( RepositoryContentFactory.class ); | |||
repoFactory = (RepositoryContentFactory) repoFactoryControl.getMock(); | |||
scheduler = ( ArchivaTaskScheduler ) lookup( ArchivaTaskScheduler.class ); | |||
ArchivaTaskScheduler scheduler = ( ArchivaTaskScheduler ) lookup( ArchivaTaskScheduler.class ); | |||
indexingQueue = (TaskQueue) lookup( TaskQueue.ROLE, "indexing" ); | |||
consumer = new LuceneCleanupRemoveIndexedConsumer( repoFactory, scheduler ); | |||
@@ -81,9 +85,12 @@ public class LuceneCleanupRemoveIndexedConsumerTest | |||
super.tearDown(); | |||
} | |||
@SuppressWarnings( "unchecked" ) | |||
public void testProcessArtifactArtifactDoesNotExist() | |||
throws Exception | |||
{ | |||
assertTrue( indexingQueue.getQueueSnapshot().isEmpty() ); | |||
ArchivaArtifact artifact = | |||
new ArchivaArtifact( "org.apache.archiva", "archiva-lucene-consumers", "1.2", null, "jar", "test-repo" ); | |||
@@ -92,9 +99,6 @@ public class LuceneCleanupRemoveIndexedConsumerTest | |||
File artifactFile = new File( repoContent.getRepoRoot(), repoContent.toPath( artifact ) ); | |||
ArtifactIndexingTask task = | |||
TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.DELETE ); | |||
repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( repositoryConfig.getId() ), | |||
repoContent ); | |||
@@ -104,22 +108,26 @@ public class LuceneCleanupRemoveIndexedConsumerTest | |||
repoFactoryControl.verify(); | |||
assertTrue( scheduler.isProcessingIndexingTaskWithName( task.getName() ) ); | |||
List<ArtifactIndexingTask> queue = indexingQueue.getQueueSnapshot(); | |||
assertEquals( 2, queue.size() ); | |||
ArtifactIndexingTask task = | |||
TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.Action.DELETE ); | |||
assertEquals( task, queue.get( 0 ) ); | |||
task = | |||
TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.Action.FINISH ); | |||
assertEquals( task, queue.get( 1 ) ); | |||
} | |||
public void testProcessArtifactArtifactExists() | |||
throws Exception | |||
{ | |||
assertTrue( indexingQueue.getQueueSnapshot().isEmpty() ); | |||
ArchivaArtifact artifact = | |||
new ArchivaArtifact( "org.apache.maven.archiva", "archiva-lucene-cleanup", "1.0", null, "jar", "test-repo" ); | |||
ManagedRepositoryContent repoContent = new ManagedDefaultRepositoryContent(); | |||
repoContent.setRepository( repositoryConfig ); | |||
File artifactFile = new File( repoContent.getRepoRoot(), repoContent.toPath( artifact ) ); | |||
ArtifactIndexingTask task = | |||
TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.DELETE ); | |||
repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( repositoryConfig.getId() ), | |||
repoContent ); | |||
@@ -129,7 +137,7 @@ public class LuceneCleanupRemoveIndexedConsumerTest | |||
repoFactoryControl.verify(); | |||
assertFalse( scheduler.isProcessingIndexingTaskWithName( task.getName() ) ); | |||
assertTrue( indexingQueue.getQueueSnapshot().isEmpty() ); | |||
} | |||
@Override |
@@ -22,6 +22,7 @@ package org.apache.archiva.consumers.lucene; | |||
import java.io.File; | |||
import java.util.Calendar; | |||
import java.util.Date; | |||
import java.util.List; | |||
import org.apache.commons.io.FileUtils; | |||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; | |||
@@ -30,6 +31,8 @@ import org.apache.maven.archiva.scheduled.ArchivaTaskScheduler; | |||
import org.apache.maven.archiva.scheduled.tasks.ArtifactIndexingTask; | |||
import org.apache.maven.archiva.scheduled.tasks.TaskCreator; | |||
import org.codehaus.plexus.spring.PlexusInSpringTestCase; | |||
import org.codehaus.plexus.taskqueue.TaskQueue; | |||
import org.codehaus.plexus.taskqueue.TaskQueueException; | |||
/** | |||
* NexusIndexerConsumerTest | |||
@@ -38,21 +41,23 @@ public class NexusIndexerConsumerTest | |||
extends PlexusInSpringTestCase | |||
{ | |||
private KnownRepositoryContentConsumer nexusIndexerConsumer; | |||
private ManagedRepositoryConfiguration repositoryConfig; | |||
private ArchivaTaskScheduler scheduler; | |||
private TaskQueue indexingQueue; | |||
@Override | |||
protected void setUp() | |||
protected void setUp() | |||
throws Exception | |||
{ | |||
super.setUp(); | |||
scheduler = ( ArchivaTaskScheduler ) lookup( ArchivaTaskScheduler.class ); | |||
ArchivaTaskScheduler scheduler = (ArchivaTaskScheduler) lookup( ArchivaTaskScheduler.class ); | |||
indexingQueue = (TaskQueue) lookup( TaskQueue.ROLE, "indexing" ); | |||
nexusIndexerConsumer = new NexusIndexerConsumer( scheduler ); | |||
repositoryConfig = new ManagedRepositoryConfiguration(); | |||
repositoryConfig.setId( "test-repo" ); | |||
repositoryConfig.setLocation( getBasedir() + "/target/test-classes/test-repo" ); | |||
@@ -62,7 +67,7 @@ public class NexusIndexerConsumerTest | |||
repositoryConfig.setSnapshots( false ); | |||
repositoryConfig.setReleases( true ); | |||
} | |||
@Override | |||
protected void tearDown() | |||
throws Exception | |||
@@ -71,33 +76,44 @@ public class NexusIndexerConsumerTest | |||
File indexDir = new File( repositoryConfig.getLocation(), ".indexer" ); | |||
FileUtils.deleteDirectory( indexDir ); | |||
assertFalse( indexDir.exists() ); | |||
indexDir = new File( repositoryConfig.getLocation(), ".index" ); | |||
FileUtils.deleteDirectory( indexDir ); | |||
assertFalse( indexDir.exists() ); | |||
super.tearDown(); | |||
} | |||
public void testIndexerIndexArtifact() | |||
throws Exception | |||
{ | |||
{ | |||
File artifactFile = | |||
new File( repositoryConfig.getLocation(), | |||
"org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" ); | |||
ArtifactIndexingTask task = | |||
TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.ADD ); | |||
// begin scan | |||
Date now = Calendar.getInstance().getTime(); | |||
nexusIndexerConsumer.beginScan( repositoryConfig, now ); | |||
nexusIndexerConsumer.processFile( "org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" ); | |||
nexusIndexerConsumer.completeScan(); | |||
assertTrue( scheduler.isProcessingIndexingTaskWithName( task.getName() ) ); | |||
assertTaskQueued( artifactFile ); | |||
} | |||
@SuppressWarnings( "unchecked" ) | |||
private void assertTaskQueued( File artifactFile ) | |||
throws TaskQueueException | |||
{ | |||
List<ArtifactIndexingTask> queue = indexingQueue.getQueueSnapshot(); | |||
assertEquals( 2, queue.size() ); | |||
ArtifactIndexingTask task = | |||
TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.Action.ADD ); | |||
assertEquals( task, queue.get( 0 ) ); | |||
task = TaskCreator.createIndexingTask( repositoryConfig.getId(), null, ArtifactIndexingTask.Action.FINISH ); | |||
assertEquals( task, queue.get( 1 ) ); | |||
} | |||
public void testIndexerArtifactAlreadyIndexed() | |||
throws Exception | |||
{ | |||
@@ -105,60 +121,54 @@ public class NexusIndexerConsumerTest | |||
new File( repositoryConfig.getLocation(), | |||
"org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" ); | |||
ArtifactIndexingTask task = | |||
TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.ADD ); | |||
// begin scan | |||
Date now = Calendar.getInstance().getTime(); | |||
nexusIndexerConsumer.beginScan( repositoryConfig, now ); | |||
nexusIndexerConsumer.processFile( "org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" ); | |||
nexusIndexerConsumer.completeScan(); | |||
assertTrue( scheduler.isProcessingIndexingTaskWithName( task.getName() ) ); | |||
assertTaskQueued( artifactFile ); | |||
indexingQueue.take(); | |||
indexingQueue.take(); | |||
// scan and index again | |||
now = Calendar.getInstance().getTime(); | |||
nexusIndexerConsumer.beginScan( repositoryConfig, now ); | |||
nexusIndexerConsumer.processFile( "org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" ); | |||
nexusIndexerConsumer.processFile( "org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" ); | |||
nexusIndexerConsumer.completeScan(); | |||
assertTrue( scheduler.isProcessingIndexingTaskWithName( task.getName() ) ); | |||
assertTaskQueued( artifactFile ); | |||
} | |||
public void testIndexerIndexArtifactThenPom() | |||
throws Exception | |||
{ | |||
{ | |||
File artifactFile = | |||
new File( repositoryConfig.getLocation(), | |||
"org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" ); | |||
ArtifactIndexingTask task = | |||
TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.ADD ); | |||
// begin scan | |||
Date now = Calendar.getInstance().getTime(); | |||
nexusIndexerConsumer.beginScan( repositoryConfig, now ); | |||
nexusIndexerConsumer.processFile( "org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" ); | |||
nexusIndexerConsumer.completeScan(); | |||
assertTrue( scheduler.isProcessingIndexingTaskWithName( task.getName() ) ); | |||
assertTaskQueued( artifactFile ); | |||
indexingQueue.take(); | |||
indexingQueue.take(); | |||
artifactFile = | |||
new File( repositoryConfig.getLocation(), | |||
"org/apache/archiva/archiva-index-methods-jar-test/1.0/pom.xml" ); | |||
new File( repositoryConfig.getLocation(), "org/apache/archiva/archiva-index-methods-jar-test/1.0/pom.xml" ); | |||
task = | |||
TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.ADD ); | |||
// scan and index again | |||
now = Calendar.getInstance().getTime(); | |||
nexusIndexerConsumer.beginScan( repositoryConfig, now ); | |||
nexusIndexerConsumer.processFile( "org/apache/archiva/archiva-index-methods-jar-test/1.0/pom.xml" ); | |||
nexusIndexerConsumer.processFile( "org/apache/archiva/archiva-index-methods-jar-test/1.0/pom.xml" ); | |||
nexusIndexerConsumer.completeScan(); | |||
assertTrue( scheduler.isProcessingIndexingTaskWithName( task.getName() ) ); | |||
} | |||
assertTaskQueued( artifactFile ); | |||
} | |||
@Override | |||
protected String getPlexusConfigLocation() | |||
{ |
@@ -585,7 +585,7 @@ public class DefaultRepositoryProxyConnectors | |||
private void queueRepositoryTask( String repositoryId, File localFile ) | |||
{ | |||
RepositoryTask task = TaskCreator.createRepositoryTask( repositoryId, localFile.getName(), localFile, true, true ); | |||
RepositoryTask task = TaskCreator.createRepositoryTask( repositoryId, localFile, true, true ); | |||
try | |||
{ |
@@ -37,23 +37,13 @@ public interface ArchivaTaskScheduler | |||
*/ | |||
public final static String ROLE = ArchivaTaskScheduler.class.getName(); | |||
/** | |||
* Checks if there is any repository scanning task queued. | |||
* | |||
* @return | |||
* @throws ArchivaException | |||
*/ | |||
public boolean isProcessingAnyRepositoryTask() | |||
throws ArchivaException; | |||
/** | |||
* Checks if there is any database scanning task queued. | |||
* | |||
* @return | |||
* @throws ArchivaException | |||
*/ | |||
public boolean isProcessingDatabaseTask() | |||
throws ArchivaException; | |||
public boolean isProcessingDatabaseTask(); | |||
/** | |||
* Checks if a repository scanning task for the specified repository is queuedd. | |||
@@ -62,29 +52,8 @@ public interface ArchivaTaskScheduler | |||
* @return | |||
* @throws ArchivaException | |||
*/ | |||
public boolean isProcessingRepositoryTask( String repositoryId ) | |||
throws ArchivaException; | |||
public boolean isProcessingRepositoryTask( String repositoryId ); | |||
/** | |||
* Checks if a repository scanning task with the specified name is queued. | |||
* | |||
* @param taskName | |||
* @return | |||
* @throws ArchivaException | |||
*/ | |||
public boolean isProcessingRepositoryTaskWithName( String taskName ) | |||
throws ArchivaException; | |||
/** | |||
* Checks is an indexing task with the specified name is queued. | |||
* | |||
* @param taskName | |||
* @return | |||
* @throws ArchivaException | |||
*/ | |||
public boolean isProcessingIndexingTaskWithName( String taskName ) | |||
throws ArchivaException; | |||
/** | |||
* Adds the database task to the database scanning queue. | |||
* |
@@ -19,9 +19,9 @@ package org.apache.maven.archiva.scheduled; | |||
* under the License. | |||
*/ | |||
import org.apache.maven.archiva.scheduled.tasks.ArchivaTask; | |||
import org.apache.maven.archiva.scheduled.tasks.DatabaseTask; | |||
import org.codehaus.plexus.scheduler.AbstractJob; | |||
import org.codehaus.plexus.taskqueue.Task; | |||
import org.codehaus.plexus.taskqueue.TaskQueue; | |||
import org.codehaus.plexus.taskqueue.TaskQueueException; | |||
import org.quartz.JobDataMap; | |||
@@ -34,12 +34,6 @@ import org.quartz.JobExecutionException; | |||
public class DatabaseTaskJob | |||
extends AbstractJob | |||
{ | |||
static final String TASK_KEY = "EXECUTION"; | |||
static final String TASK_QUEUE = "TASK_QUEUE"; | |||
static final String TASK_QUEUE_POLICY = "TASK_QUEUE_POLICY"; | |||
/** | |||
* Execute the discoverer and the indexer. | |||
* | |||
@@ -53,29 +47,17 @@ public class DatabaseTaskJob | |||
JobDataMap dataMap = context.getJobDetail().getJobDataMap(); | |||
setJobDataMap( dataMap ); | |||
TaskQueue taskQueue = (TaskQueue) dataMap.get( TASK_QUEUE ); | |||
String queuePolicy = (String) dataMap.get( TASK_QUEUE_POLICY ); | |||
TaskQueue taskQueue = (TaskQueue) dataMap.get( DefaultArchivaTaskScheduler.TASK_QUEUE ); | |||
ArchivaTask task = new DatabaseTask(); | |||
task.setName( context.getJobDetail().getName() ); | |||
Task task = new DatabaseTask(); | |||
try | |||
{ | |||
if ( taskQueue.getQueueSnapshot().size() == 0 ) | |||
// The database job only needs to run one at a time | |||
if ( taskQueue.getQueueSnapshot().isEmpty() ) | |||
{ | |||
taskQueue.put( task ); | |||
} | |||
else | |||
{ | |||
if ( ArchivaTask.QUEUE_POLICY_WAIT.equals( queuePolicy ) ) | |||
{ | |||
taskQueue.put( task ); | |||
} | |||
else if ( ArchivaTask.QUEUE_POLICY_SKIP.equals( queuePolicy ) ) | |||
{ | |||
// do not queue anymore, policy is to skip | |||
} | |||
} | |||
} | |||
catch ( TaskQueueException e ) | |||
{ |
@@ -19,7 +19,12 @@ package org.apache.maven.archiva.scheduled; | |||
* under the License. | |||
*/ | |||
import org.apache.commons.collections.CollectionUtils; | |||
import java.text.ParseException; | |||
import java.util.ArrayList; | |||
import java.util.HashSet; | |||
import java.util.List; | |||
import java.util.Set; | |||
import org.apache.maven.archiva.common.ArchivaException; | |||
import org.apache.maven.archiva.configuration.ArchivaConfiguration; | |||
import org.apache.maven.archiva.configuration.ConfigurationEvent; | |||
@@ -28,12 +33,9 @@ import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; | |||
import org.apache.maven.archiva.database.ArchivaDAO; | |||
import org.apache.maven.archiva.database.constraints.MostRecentRepositoryScanStatistics; | |||
import org.apache.maven.archiva.repository.scanner.RepositoryScanStatistics; | |||
import org.apache.maven.archiva.scheduled.tasks.ArchivaTask; | |||
import org.apache.maven.archiva.scheduled.tasks.ArtifactIndexingTask; | |||
import org.apache.maven.archiva.scheduled.tasks.DatabaseTask; | |||
import org.apache.maven.archiva.scheduled.tasks.RepositoryTask; | |||
import org.apache.maven.archiva.scheduled.tasks.ArchivaTaskNameSelectionPredicate; | |||
import org.apache.maven.archiva.scheduled.tasks.RepositoryTaskSelectionPredicate; | |||
import org.apache.maven.archiva.scheduled.tasks.TaskCreator; | |||
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Startable; | |||
import org.codehaus.plexus.personality.plexus.lifecycle.phase.StartingException; | |||
@@ -51,12 +53,6 @@ import org.quartz.SchedulerException; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import java.text.ParseException; | |||
import java.util.ArrayList; | |||
import java.util.HashSet; | |||
import java.util.List; | |||
import java.util.Set; | |||
/** | |||
* Default implementation of a scheduling component for archiva. | |||
* | |||
@@ -97,19 +93,21 @@ public class DefaultArchivaTaskScheduler | |||
*/ | |||
private ArchivaDAO dao; | |||
public static final String DATABASE_SCAN_GROUP = "dbg"; | |||
private static final String DATABASE_SCAN_GROUP = "dbg"; | |||
public static final String DATABASE_JOB = "dbj"; | |||
private static final String DATABASE_JOB = "dbj"; | |||
public static final String DATABASE_JOB_TRIGGER = "dbt"; | |||
private static final String DATABASE_JOB_TRIGGER = "dbt"; | |||
public static final String REPOSITORY_SCAN_GROUP = "rg"; | |||
private static final String REPOSITORY_SCAN_GROUP = "rg"; | |||
public static final String REPOSITORY_JOB = "rj"; | |||
private static final String REPOSITORY_JOB = "rj"; | |||
public static final String REPOSITORY_JOB_TRIGGER = "rjt"; | |||
public static final String INDEXING_JOB = "ij"; | |||
private static final String REPOSITORY_JOB_TRIGGER = "rjt"; | |||
static final String TASK_QUEUE = "TASK_QUEUE"; | |||
static final String TASK_REPOSITORY = "TASK_REPOSITORY"; | |||
public static final String CRON_HOURLY = "0 0 * * * ?"; | |||
@@ -198,40 +196,15 @@ public class DefaultArchivaTaskScheduler | |||
} | |||
} | |||
/** | |||
* @see ArchivaTaskScheduler#isProcessingAnyRepositoryTask() | |||
*/ | |||
@SuppressWarnings("unchecked") | |||
public boolean isProcessingAnyRepositoryTask() | |||
throws ArchivaException | |||
{ | |||
synchronized( repositoryScanningQueue ) | |||
{ | |||
List<? extends Task> queue = null; | |||
try | |||
{ | |||
queue = repositoryScanningQueue.getQueueSnapshot(); | |||
} | |||
catch ( TaskQueueException e ) | |||
{ | |||
throw new ArchivaException( "Unable to get repository scanning queue:" + e.getMessage(), e ); | |||
} | |||
return !queue.isEmpty(); | |||
} | |||
} | |||
/** | |||
* @see ArchivaTaskScheduler#isProcessingRepositoryTask(String) | |||
*/ | |||
@SuppressWarnings("unchecked") | |||
public boolean isProcessingRepositoryTask( String repositoryId ) | |||
throws ArchivaException | |||
{ | |||
synchronized( repositoryScanningQueue ) | |||
{ | |||
List<? extends Task> queue = null; | |||
List<RepositoryTask> queue = null; | |||
try | |||
{ | |||
@@ -239,10 +212,17 @@ public class DefaultArchivaTaskScheduler | |||
} | |||
catch ( TaskQueueException e ) | |||
{ | |||
throw new ArchivaException( "Unable to get repository scanning queue:" + e.getMessage(), e ); | |||
// not possible with plexus-taskqueue implementation, ignore | |||
} | |||
return CollectionUtils.exists( queue, new RepositoryTaskSelectionPredicate( repositoryId ) ); | |||
for ( RepositoryTask queuedTask : queue ) | |||
{ | |||
if ( queuedTask.getRepositoryId().equals( repositoryId ) ) | |||
{ | |||
return true; | |||
} | |||
} | |||
return false; | |||
} | |||
} | |||
@@ -250,12 +230,11 @@ public class DefaultArchivaTaskScheduler | |||
* @see ArchivaTaskScheduler#isProcessingIndexingTaskWithName(String) | |||
*/ | |||
@SuppressWarnings("unchecked") | |||
public boolean isProcessingRepositoryTaskWithName( String taskName ) | |||
throws ArchivaException | |||
private boolean isProcessingRepositoryTask( RepositoryTask task ) | |||
{ | |||
synchronized( repositoryScanningQueue ) | |||
{ | |||
List<? extends Task> queue = null; | |||
List<RepositoryTask> queue = null; | |||
try | |||
{ | |||
@@ -263,43 +242,25 @@ public class DefaultArchivaTaskScheduler | |||
} | |||
catch ( TaskQueueException e ) | |||
{ | |||
throw new ArchivaException( "Unable to get repository scanning queue:" + e.getMessage(), e ); | |||
// not possible with plexus-taskqueue implementation, ignore | |||
} | |||
return CollectionUtils.exists( queue, new ArchivaTaskNameSelectionPredicate( taskName ) ); | |||
} | |||
} | |||
/** | |||
* @see ArchivaTaskScheduler#isProcessingIndexingTaskWithName(String) | |||
*/ | |||
@SuppressWarnings("unchecked") | |||
public boolean isProcessingIndexingTaskWithName( String taskName ) | |||
throws ArchivaException | |||
{ | |||
synchronized( indexingQueue ) | |||
{ | |||
List<? extends Task> queue = null; | |||
try | |||
for ( RepositoryTask queuedTask : queue ) | |||
{ | |||
queue = indexingQueue.getQueueSnapshot(); | |||
} | |||
catch ( TaskQueueException e ) | |||
{ | |||
throw new ArchivaException( "Unable to get indexing scanning queue:" + e.getMessage(), e ); | |||
if ( task.equals( queuedTask ) ) | |||
{ | |||
return true; | |||
} | |||
} | |||
return CollectionUtils.exists( queue, new ArchivaTaskNameSelectionPredicate( taskName ) ); | |||
return false; | |||
} | |||
} | |||
/** | |||
* @see ArchivaTaskScheduler#isProcessingDatabaseTask() | |||
*/ | |||
@SuppressWarnings("unchecked") | |||
public boolean isProcessingDatabaseTask() | |||
throws ArchivaException | |||
{ | |||
List<? extends Task> queue = null; | |||
@@ -309,7 +270,7 @@ public class DefaultArchivaTaskScheduler | |||
} | |||
catch ( TaskQueueException e ) | |||
{ | |||
throw new ArchivaException( "Unable to get database update queue:" + e.getMessage(), e ); | |||
// not possible with plexus-taskqueue implementation, ignore | |||
} | |||
return !queue.isEmpty(); | |||
@@ -321,27 +282,17 @@ public class DefaultArchivaTaskScheduler | |||
public void queueRepositoryTask( RepositoryTask task ) | |||
throws TaskQueueException | |||
{ | |||
synchronized( repositoryScanningQueue ) | |||
synchronized ( repositoryScanningQueue ) | |||
{ | |||
if( task.getResourceFile() != null ) | |||
if ( isProcessingRepositoryTask( task ) ) | |||
{ | |||
try | |||
{ | |||
if( isProcessingRepositoryTaskWithName( task.getName() ) ) | |||
{ | |||
log.debug( "Repository task '" + task.getName() + "' is already queued. Skipping task.." ); | |||
return; | |||
} | |||
} | |||
catch ( ArchivaException e ) | |||
{ | |||
log.warn( "Error occurred while checking if repository task '" + task.getName() + | |||
"' is already queued." ); | |||
} | |||
log.debug( "Repository task '" + task + "' is already queued. Skipping task." ); | |||
} | |||
else | |||
{ | |||
// add check if the task is already queued if it is a file scan | |||
repositoryScanningQueue.put( task ); | |||
} | |||
// add check if the task is already queued if it is a file scan | |||
repositoryScanningQueue.put( task ); | |||
} | |||
} | |||
@@ -428,14 +379,12 @@ public class DefaultArchivaTaskScheduler | |||
private synchronized void queueInitialRepoScan( ManagedRepositoryConfiguration repoConfig ) | |||
{ | |||
String repoId = repoConfig.getId(); | |||
RepositoryTask task = TaskCreator.createRepositoryTask( repoId, "initial-scan" ); | |||
RepositoryTask task = TaskCreator.createRepositoryTask( repoId ); | |||
if ( queuedRepos.contains( repoId ) ) | |||
{ | |||
log.error( "Repository [" + repoId + "] is currently being processed or is already queued." ); | |||
} | |||
else | |||
if ( !queuedRepos.contains( repoId ) ) | |||
{ | |||
log.info( "Repository [" + repoId + "] is queued to be scanned as it hasn't been previously." ); | |||
try | |||
{ | |||
queuedRepos.add( repoConfig.getId() ); | |||
@@ -479,9 +428,8 @@ public class DefaultArchivaTaskScheduler | |||
new JobDetail( REPOSITORY_JOB + ":" + repoConfig.getId(), REPOSITORY_SCAN_GROUP, RepositoryTaskJob.class ); | |||
JobDataMap dataMap = new JobDataMap(); | |||
dataMap.put( RepositoryTaskJob.TASK_QUEUE, repositoryScanningQueue ); | |||
dataMap.put( RepositoryTaskJob.TASK_QUEUE_POLICY, ArchivaTask.QUEUE_POLICY_WAIT ); | |||
dataMap.put( RepositoryTaskJob.TASK_REPOSITORY, repoConfig.getId() ); | |||
dataMap.put( DefaultArchivaTaskScheduler.TASK_QUEUE, repositoryScanningQueue ); | |||
dataMap.put( DefaultArchivaTaskScheduler.TASK_REPOSITORY, repoConfig.getId() ); | |||
repositoryJob.setJobDataMap( dataMap ); | |||
try | |||
@@ -510,7 +458,7 @@ public class DefaultArchivaTaskScheduler | |||
JobDetail databaseJob = new JobDetail( DATABASE_JOB, DATABASE_SCAN_GROUP, DatabaseTaskJob.class ); | |||
JobDataMap dataMap = new JobDataMap(); | |||
dataMap.put( DatabaseTaskJob.TASK_QUEUE, databaseUpdateQueue ); | |||
dataMap.put( TASK_QUEUE, databaseUpdateQueue ); | |||
databaseJob.setJobDataMap( dataMap ); | |||
CronExpressionValidator cronValidator = new CronExpressionValidator(); |
@@ -19,7 +19,6 @@ package org.apache.maven.archiva.scheduled; | |||
* under the License. | |||
*/ | |||
import org.apache.maven.archiva.scheduled.tasks.ArchivaTask; | |||
import org.apache.maven.archiva.scheduled.tasks.RepositoryTask; | |||
import org.apache.maven.archiva.scheduled.tasks.TaskCreator; | |||
import org.codehaus.plexus.scheduler.AbstractJob; | |||
@@ -35,20 +34,11 @@ import org.quartz.JobExecutionException; | |||
public class RepositoryTaskJob | |||
extends AbstractJob | |||
{ | |||
static final String TASK_KEY = "EXECUTION"; | |||
static final String TASK_QUEUE = "TASK_QUEUE"; | |||
static final String TASK_QUEUE_POLICY = "TASK_QUEUE_POLICY"; | |||
static final String TASK_REPOSITORY = "TASK_REPOSITORY"; | |||
/** | |||
* Execute the discoverer and the indexer. | |||
* | |||
* | |||
* @param context | |||
* @throws org.quartz.JobExecutionException | |||
* | |||
*/ | |||
public void execute( JobExecutionContext context ) | |||
throws JobExecutionException | |||
@@ -56,29 +46,14 @@ public class RepositoryTaskJob | |||
JobDataMap dataMap = context.getJobDetail().getJobDataMap(); | |||
setJobDataMap( dataMap ); | |||
TaskQueue taskQueue = (TaskQueue) dataMap.get( TASK_QUEUE ); | |||
String queuePolicy = dataMap.get( TASK_QUEUE_POLICY ).toString(); | |||
TaskQueue taskQueue = (TaskQueue) dataMap.get( DefaultArchivaTaskScheduler.TASK_QUEUE ); | |||
RepositoryTask task = TaskCreator.createRepositoryTask( (String) dataMap.get( TASK_REPOSITORY ), "" ); | |||
task.setName( context.getJobDetail().getName() ); | |||
String repositoryId = (String) dataMap.get( DefaultArchivaTaskScheduler.TASK_REPOSITORY ); | |||
RepositoryTask task = TaskCreator.createRepositoryTask( repositoryId ); | |||
try | |||
{ | |||
if ( taskQueue.getQueueSnapshot().size() == 0 ) | |||
{ | |||
taskQueue.put( task ); | |||
} | |||
else | |||
{ | |||
if ( ArchivaTask.QUEUE_POLICY_WAIT.equals( queuePolicy ) ) | |||
{ | |||
taskQueue.put( task ); | |||
} | |||
else if ( ArchivaTask.QUEUE_POLICY_SKIP.equals( queuePolicy ) ) | |||
{ | |||
// do not queue anymore, policy is to skip | |||
} | |||
} | |||
taskQueue.put( task ); | |||
} | |||
catch ( TaskQueueException e ) | |||
{ |
@@ -60,7 +60,7 @@ public class ArchivaDatabaseUpdateTaskExecutor | |||
{ | |||
DatabaseTask dbtask = (DatabaseTask) task; | |||
log.info( "Executing task from queue with job name: " + dbtask.getName() ); | |||
log.info( "Executing task from queue with job name: " + dbtask ); | |||
long time = System.currentTimeMillis(); | |||
try |
@@ -107,7 +107,7 @@ public class ArchivaIndexingTaskExecutor | |||
indexDirectory, null, null, NexusIndexer.FULL_INDEX, false ); | |||
context.setSearchable( repository.isScanned() ); | |||
if ( ArtifactIndexingTask.FINISH.equals( indexingTask.getAction() ) ) | |||
if ( ArtifactIndexingTask.Action.FINISH.equals( indexingTask.getAction() ) ) | |||
{ | |||
final File indexLocation = new File( managedRepository, ".index" ); | |||
IndexPackingRequest request = new IndexPackingRequest( context, indexLocation ); | |||
@@ -122,7 +122,7 @@ public class ArchivaIndexingTaskExecutor | |||
if ( ac != null ) | |||
{ | |||
if ( indexingTask.getAction().equals( ArtifactIndexingTask.ADD ) ) | |||
if ( indexingTask.getAction().equals( ArtifactIndexingTask.Action.ADD ) ) | |||
{ | |||
boolean add = true; | |||
IndexReader r = context.getIndexReader(); | |||
@@ -164,9 +164,8 @@ public class ArchivaIndexingTaskExecutor | |||
} | |||
catch ( IOException e ) | |||
{ | |||
log.error( "Error occurred while executing indexing task '" + indexingTask.getName() + "'" ); | |||
throw new TaskExecutionException( "Error occurred while executing indexing task '" | |||
+ indexingTask.getName() + "'" ); | |||
log.error( "Error occurred while executing indexing task '" + indexingTask + "'" ); | |||
throw new TaskExecutionException( "Error occurred while executing indexing task '" + indexingTask + "'" ); | |||
} | |||
catch ( UnsupportedExistingLuceneIndexException e ) | |||
{ |
@@ -112,12 +112,12 @@ public class ArchivaRepositoryScanningTaskExecutor | |||
// execute consumers on resource file if set | |||
if( repoTask.getResourceFile() != null ) | |||
{ | |||
log.debug( "Executing task from queue with job name: " + repoTask.getName() ); | |||
log.debug( "Executing task from queue with job name: " + repoTask ); | |||
consumers.executeConsumers( arepo, repoTask.getResourceFile(), repoTask.isUpdateRelatedArtifacts() ); | |||
} | |||
else | |||
{ | |||
log.info( "Executing task from queue with job name: " + repoTask.getName() ); | |||
log.info( "Executing task from queue with job name: " + repoTask ); | |||
// otherwise, execute consumers on whole repository | |||
try |
@@ -1,67 +0,0 @@ | |||
package org.apache.maven.archiva.scheduled.tasks; | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one | |||
* or more contributor license agreements. See the NOTICE file | |||
* distributed with this work for additional information | |||
* regarding copyright ownership. The ASF licenses this file | |||
* to you under the Apache License, Version 2.0 (the | |||
* "License"); you may not use this file except in compliance | |||
* with the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, | |||
* software distributed under the License is distributed on an | |||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |||
* KIND, either express or implied. See the License for the | |||
* specific language governing permissions and limitations | |||
* under the License. | |||
*/ | |||
import org.codehaus.plexus.taskqueue.Task; | |||
/** | |||
* A repository task. | |||
* | |||
*/ | |||
public interface ArchivaTask | |||
extends Task | |||
{ | |||
public static final String QUEUE_POLICY_WAIT = "wait"; | |||
public static final String QUEUE_POLICY_SKIP = "skip"; | |||
/** | |||
* Gets the queue policy for this task. | |||
* | |||
* @return Queue policy for this task | |||
*/ | |||
public String getQueuePolicy(); | |||
/** | |||
* Sets the queue policy for this task. | |||
* | |||
* @param policy | |||
*/ | |||
public void setQueuePolicy( String policy ); | |||
/** | |||
* Sets the job name to represent a group of similar / identical job tasks. Can be used to check the | |||
* task queue for similar / identical job tasks. | |||
*/ | |||
public void setName( String name ); | |||
/** | |||
* obtains the name of the task | |||
* @return | |||
*/ | |||
public String getName(); | |||
public long getMaxExecutionTime(); | |||
public void setMaxExecutionTime( long maxExecutionTime ); | |||
} |
@@ -1,47 +0,0 @@ | |||
package org.apache.maven.archiva.scheduled.tasks; | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one | |||
* or more contributor license agreements. See the NOTICE file | |||
* distributed with this work for additional information | |||
* regarding copyright ownership. The ASF licenses this file | |||
* to you under the Apache License, Version 2.0 (the | |||
* "License"); you may not use this file except in compliance | |||
* with the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, | |||
* software distributed under the License is distributed on an | |||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |||
* KIND, either express or implied. See the License for the | |||
* specific language governing permissions and limitations | |||
* under the License. | |||
*/ | |||
import org.apache.commons.collections.Predicate; | |||
import org.apache.commons.lang.StringUtils; | |||
public class ArchivaTaskNameSelectionPredicate | |||
implements Predicate | |||
{ | |||
private String taskName; | |||
public ArchivaTaskNameSelectionPredicate( String taskName ) | |||
{ | |||
this.taskName = taskName; | |||
} | |||
public boolean evaluate( Object object ) | |||
{ | |||
boolean satisfies = false; | |||
if ( object instanceof ArchivaTask ) | |||
{ | |||
ArchivaTask task = (ArchivaTask) object; | |||
return StringUtils.equals( taskName, task.getName() ); | |||
} | |||
return satisfies; | |||
} | |||
} |
@@ -21,30 +21,18 @@ package org.apache.maven.archiva.scheduled.tasks; | |||
import java.io.File; | |||
import org.sonatype.nexus.index.ArtifactContext; | |||
import org.codehaus.plexus.taskqueue.Task; | |||
public class ArtifactIndexingTask | |||
implements ArchivaTask | |||
implements Task | |||
{ | |||
public static final String ADD = "add"; | |||
public static final String DELETE = "delete"; | |||
public static final String FINISH = "finish"; | |||
String repositoryId; | |||
String name; | |||
String queuePolicy; | |||
public enum Action { ADD, DELETE, FINISH } | |||
long maxExecutionTime; | |||
File resourceFile; | |||
private String repositoryId; | |||
ArtifactContext artifactContext; | |||
private File resourceFile; | |||
String action; | |||
private Action action; | |||
public String getRepositoryId() | |||
{ | |||
@@ -58,32 +46,7 @@ public class ArtifactIndexingTask | |||
public long getMaxExecutionTime() | |||
{ | |||
return maxExecutionTime; | |||
} | |||
public void setMaxExecutionTime( long maxExecutionTime ) | |||
{ | |||
this.maxExecutionTime = maxExecutionTime; | |||
} | |||
public String getName() | |||
{ | |||
return name; | |||
} | |||
public void setName( String name ) | |||
{ | |||
this.name = name; | |||
} | |||
public String getQueuePolicy() | |||
{ | |||
return queuePolicy; | |||
} | |||
public void setQueuePolicy( String queuePolicy ) | |||
{ | |||
this.queuePolicy = queuePolicy; | |||
return 0; | |||
} | |||
public File getResourceFile() | |||
@@ -96,24 +59,65 @@ public class ArtifactIndexingTask | |||
this.resourceFile = resourceFile; | |||
} | |||
public ArtifactContext getArtifactContext() | |||
public Action getAction() | |||
{ | |||
return artifactContext; | |||
return action; | |||
} | |||
public void setArtifactContext( ArtifactContext artifactContext ) | |||
public void setAction( Action action ) | |||
{ | |||
this.artifactContext = artifactContext; | |||
this.action = action; | |||
} | |||
public String getAction() | |||
@Override | |||
public String toString() | |||
{ | |||
return action; | |||
return "ArtifactIndexingTask [action=" + action + ", repositoryId=" + repositoryId + ", resourceFile=" | |||
+ resourceFile + "]"; | |||
} | |||
public void setAction( String action ) | |||
@Override | |||
public int hashCode() | |||
{ | |||
this.action = action; | |||
final int prime = 31; | |||
int result = 1; | |||
result = prime * result + ( ( action == null ) ? 0 : action.hashCode() ); | |||
result = prime * result + ( ( repositoryId == null ) ? 0 : repositoryId.hashCode() ); | |||
result = prime * result + ( ( resourceFile == null ) ? 0 : resourceFile.hashCode() ); | |||
return result; | |||
} | |||
@Override | |||
public boolean equals( Object obj ) | |||
{ | |||
if ( this == obj ) | |||
return true; | |||
if ( obj == null ) | |||
return false; | |||
if ( getClass() != obj.getClass() ) | |||
return false; | |||
ArtifactIndexingTask other = (ArtifactIndexingTask) obj; | |||
if ( action == null ) | |||
{ | |||
if ( other.action != null ) | |||
return false; | |||
} | |||
else if ( !action.equals( other.action ) ) | |||
return false; | |||
if ( repositoryId == null ) | |||
{ | |||
if ( other.repositoryId != null ) | |||
return false; | |||
} | |||
else if ( !repositoryId.equals( other.repositoryId ) ) | |||
return false; | |||
if ( resourceFile == null ) | |||
{ | |||
if ( other.resourceFile != null ) | |||
return false; | |||
} | |||
else if ( !resourceFile.equals( other.resourceFile ) ) | |||
return false; | |||
return true; | |||
} | |||
} |
@@ -19,6 +19,8 @@ package org.apache.maven.archiva.scheduled.tasks; | |||
* under the License. | |||
*/ | |||
import org.codehaus.plexus.taskqueue.Task; | |||
/** | |||
* DataRefreshTask - task for discovering changes in the repository | |||
* and updating all associated data. | |||
@@ -26,42 +28,16 @@ package org.apache.maven.archiva.scheduled.tasks; | |||
* @version $Id: DataRefreshTask.java 525176 2007-04-03 15:21:33Z joakime $ | |||
*/ | |||
public class DatabaseTask | |||
implements ArchivaTask | |||
implements Task | |||
{ | |||
String name; | |||
String queuePolicy; | |||
long maxExecutionTime; | |||
public long getMaxExecutionTime() | |||
@Override | |||
public String toString() | |||
{ | |||
return maxExecutionTime; | |||
return "DatabaseTask"; | |||
} | |||
public void setMaxExecutionTime( long maxExecutionTime ) | |||
{ | |||
this.maxExecutionTime = maxExecutionTime; | |||
} | |||
public String getName() | |||
{ | |||
return name; | |||
} | |||
public void setName( String name ) | |||
{ | |||
this.name = name; | |||
} | |||
public String getQueuePolicy() | |||
{ | |||
return queuePolicy; | |||
} | |||
public void setQueuePolicy( String queuePolicy ) | |||
public long getMaxExecutionTime() | |||
{ | |||
this.queuePolicy = queuePolicy; | |||
return 0; | |||
} | |||
} |
@@ -2,6 +2,8 @@ package org.apache.maven.archiva.scheduled.tasks; | |||
import java.io.File; | |||
import org.codehaus.plexus.taskqueue.Task; | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one | |||
* or more contributor license agreements. See the NOTICE file | |||
@@ -28,21 +30,52 @@ import java.io.File; | |||
* @version $Id: DataRefreshTask.java 525176 2007-04-03 15:21:33Z joakime $ | |||
*/ | |||
public class RepositoryTask | |||
implements ArchivaTask | |||
implements Task | |||
{ | |||
String repositoryId; | |||
String name; | |||
String queuePolicy; | |||
@Override | |||
public int hashCode() | |||
{ | |||
final int prime = 31; | |||
int result = 1; | |||
result = prime * result + ( ( repositoryId == null ) ? 0 : repositoryId.hashCode() ); | |||
result = prime * result + ( ( resourceFile == null ) ? 0 : resourceFile.hashCode() ); | |||
return result; | |||
} | |||
long maxExecutionTime; | |||
@Override | |||
public boolean equals( Object obj ) | |||
{ | |||
if ( this == obj ) | |||
return true; | |||
if ( obj == null ) | |||
return false; | |||
if ( getClass() != obj.getClass() ) | |||
return false; | |||
RepositoryTask other = (RepositoryTask) obj; | |||
if ( repositoryId == null ) | |||
{ | |||
if ( other.repositoryId != null ) | |||
return false; | |||
} | |||
else if ( !repositoryId.equals( other.repositoryId ) ) | |||
return false; | |||
if ( resourceFile == null ) | |||
{ | |||
if ( other.resourceFile != null ) | |||
return false; | |||
} | |||
else if ( !resourceFile.equals( other.resourceFile ) ) | |||
return false; | |||
return true; | |||
} | |||
private String repositoryId; | |||
File resourceFile; | |||
private File resourceFile; | |||
boolean updateRelatedArtifacts; | |||
private boolean updateRelatedArtifacts; | |||
boolean scanAll; | |||
private boolean scanAll; | |||
public boolean isScanAll() | |||
{ | |||
@@ -66,32 +99,7 @@ public class RepositoryTask | |||
public long getMaxExecutionTime() | |||
{ | |||
return maxExecutionTime; | |||
} | |||
public void setMaxExecutionTime( long maxExecutionTime ) | |||
{ | |||
this.maxExecutionTime = maxExecutionTime; | |||
} | |||
public String getName() | |||
{ | |||
return name; | |||
} | |||
public void setName( String name ) | |||
{ | |||
this.name = name; | |||
} | |||
public String getQueuePolicy() | |||
{ | |||
return queuePolicy; | |||
} | |||
public void setQueuePolicy( String queuePolicy ) | |||
{ | |||
this.queuePolicy = queuePolicy; | |||
return 0; | |||
} | |||
public File getResourceFile() | |||
@@ -113,4 +121,11 @@ public class RepositoryTask | |||
{ | |||
this.updateRelatedArtifacts = updateRelatedArtifacts; | |||
} | |||
@Override | |||
public String toString() | |||
{ | |||
return "RepositoryTask [repositoryId=" + repositoryId + ", resourceFile=" + resourceFile + ", scanAll=" | |||
+ scanAll + ", updateRelatedArtifacts=" + updateRelatedArtifacts + "]"; | |||
} | |||
} |
@@ -1,53 +0,0 @@ | |||
package org.apache.maven.archiva.scheduled.tasks; | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one | |||
* or more contributor license agreements. See the NOTICE file | |||
* distributed with this work for additional information | |||
* regarding copyright ownership. The ASF licenses this file | |||
* to you under the Apache License, Version 2.0 (the | |||
* "License"); you may not use this file except in compliance | |||
* with the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, | |||
* software distributed under the License is distributed on an | |||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |||
* KIND, either express or implied. See the License for the | |||
* specific language governing permissions and limitations | |||
* under the License. | |||
*/ | |||
import org.apache.commons.collections.Predicate; | |||
import org.apache.commons.lang.StringUtils; | |||
/** | |||
* RepositoryTaskSelectionPredicate | |||
* | |||
* @version $Id$ | |||
*/ | |||
public class RepositoryTaskSelectionPredicate | |||
implements Predicate | |||
{ | |||
private String repoid; | |||
public RepositoryTaskSelectionPredicate( String repositoryId ) | |||
{ | |||
this.repoid = repositoryId; | |||
} | |||
public boolean evaluate( Object object ) | |||
{ | |||
boolean satisfies = false; | |||
if ( object instanceof RepositoryTask ) | |||
{ | |||
RepositoryTask task = (RepositoryTask) object; | |||
return StringUtils.equals( repoid, task.getRepositoryId() ); | |||
} | |||
return satisfies; | |||
} | |||
} |
@@ -21,72 +21,51 @@ package org.apache.maven.archiva.scheduled.tasks; | |||
import java.io.File; | |||
import org.apache.commons.lang.StringUtils; | |||
import org.apache.maven.archiva.scheduled.DefaultArchivaTaskScheduler; | |||
/** | |||
* TaskCreator Convenience class for creating Archiva tasks. | |||
*/ | |||
public class TaskCreator | |||
{ | |||
public static RepositoryTask createRepositoryTask( String repositoryId, String taskNameSuffix ) | |||
public static RepositoryTask createRepositoryTask( String repositoryId ) | |||
{ | |||
String suffix = ""; | |||
if ( !StringUtils.isEmpty( taskNameSuffix ) ) | |||
{ | |||
suffix = ":" + taskNameSuffix; | |||
} | |||
RepositoryTask task = new RepositoryTask(); | |||
task.setRepositoryId( repositoryId ); | |||
task.setName( DefaultArchivaTaskScheduler.REPOSITORY_JOB + ":" + repositoryId + suffix ); | |||
task.setQueuePolicy( ArchivaTask.QUEUE_POLICY_WAIT ); | |||
return task; | |||
} | |||
public static RepositoryTask createRepositoryTask( String repositoryId, String taskNameSuffix, boolean scanAll ) | |||
public static RepositoryTask createRepositoryTask( String repositoryId, boolean scanAll ) | |||
{ | |||
RepositoryTask task = createRepositoryTask( repositoryId, taskNameSuffix ); | |||
RepositoryTask task = createRepositoryTask( repositoryId ); | |||
task.setScanAll( scanAll ); | |||
return task; | |||
} | |||
public static RepositoryTask createRepositoryTask( String repositoryId, String taskNameSuffix, File resourceFile, | |||
public static RepositoryTask createRepositoryTask( String repositoryId, File resourceFile, | |||
boolean updateRelatedArtifacts ) | |||
{ | |||
RepositoryTask task = createRepositoryTask( repositoryId, taskNameSuffix ); | |||
RepositoryTask task = createRepositoryTask( repositoryId ); | |||
task.setResourceFile( resourceFile ); | |||
task.setUpdateRelatedArtifacts( updateRelatedArtifacts ); | |||
return task; | |||
} | |||
public static RepositoryTask createRepositoryTask( String repositoryId, String taskNameSuffix, File resourceFile, | |||
public static RepositoryTask createRepositoryTask( String repositoryId, File resourceFile, | |||
boolean updateRelatedArtifacts, boolean scanAll ) | |||
{ | |||
RepositoryTask task = createRepositoryTask( repositoryId, taskNameSuffix, resourceFile, updateRelatedArtifacts ); | |||
RepositoryTask task = createRepositoryTask( repositoryId, resourceFile, updateRelatedArtifacts ); | |||
task.setScanAll( scanAll ); | |||
return task; | |||
} | |||
public static ArtifactIndexingTask createIndexingTask( String repositoryId, File resource, String action ) | |||
public static ArtifactIndexingTask createIndexingTask( String repositoryId, File resource, | |||
ArtifactIndexingTask.Action action ) | |||
{ | |||
ArtifactIndexingTask task = new ArtifactIndexingTask(); | |||
task.setRepositoryId( repositoryId ); | |||
String name = DefaultArchivaTaskScheduler.INDEXING_JOB + ":" + repositoryId; | |||
if ( resource != null ) | |||
{ | |||
name = name + ":" + resource.getName(); | |||
} | |||
name = name + ":" + action; | |||
task.setName( name ); | |||
task.setAction( action ); | |||
task.setQueuePolicy( ArchivaTask.QUEUE_POLICY_WAIT ); | |||
task.setResourceFile( resource ); | |||
return task; |
@@ -168,9 +168,6 @@ public class ArchivaDatabaseUpdateTaskExecutorTest | |||
// Execute the database task. | |||
DatabaseTask dataTask = new DatabaseTask(); | |||
dataTask.setName( "testDataTask" ); | |||
taskExecutor.executeTask( dataTask ); | |||
// Test for artifact existance. |
@@ -127,7 +127,7 @@ public class ArchivaIndexingTaskExecutorTest | |||
"org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" ); | |||
ArtifactIndexingTask task = | |||
TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.ADD ); | |||
TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.Action.ADD ); | |||
archivaConfigControl.expectAndReturn( archivaConfiguration.getConfiguration(), configuration ); | |||
@@ -171,7 +171,7 @@ public class ArchivaIndexingTaskExecutorTest | |||
"org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" ); | |||
ArtifactIndexingTask task = | |||
TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.ADD ); | |||
TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.Action.ADD ); | |||
archivaConfigControl.expectAndReturn( archivaConfiguration.getConfiguration(), configuration, 2 ); | |||
@@ -204,7 +204,7 @@ public class ArchivaIndexingTaskExecutorTest | |||
"org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" ); | |||
ArtifactIndexingTask task = | |||
TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.ADD ); | |||
TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.Action.ADD ); | |||
archivaConfigControl.expectAndReturn( archivaConfiguration.getConfiguration(), configuration, 3 ); | |||
@@ -213,7 +213,7 @@ public class ArchivaIndexingTaskExecutorTest | |||
// add artifact to index | |||
indexingExecutor.executeTask( task ); | |||
task = TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.FINISH ); | |||
task = TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.Action.FINISH ); | |||
// add artifact to index | |||
indexingExecutor.executeTask( task ); | |||
@@ -232,7 +232,7 @@ public class ArchivaIndexingTaskExecutorTest | |||
assertEquals( 1, topDocs.totalHits ); | |||
// remove added artifact from index | |||
task = TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.DELETE ); | |||
task = TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.Action.DELETE ); | |||
indexingExecutor.executeTask( task ); | |||
archivaConfigControl.verify(); | |||
@@ -261,7 +261,7 @@ public class ArchivaIndexingTaskExecutorTest | |||
"org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" ); | |||
ArtifactIndexingTask task = | |||
TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.ADD ); | |||
TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.Action.ADD ); | |||
archivaConfigControl.expectAndReturn( archivaConfiguration.getConfiguration(), configuration ); | |||
@@ -273,7 +273,7 @@ public class ArchivaIndexingTaskExecutorTest | |||
archivaConfigControl.reset(); | |||
task = TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.FINISH ); | |||
task = TaskCreator.createIndexingTask( repositoryConfig.getId(), artifactFile, ArtifactIndexingTask.Action.FINISH ); | |||
archivaConfigControl.expectAndReturn( archivaConfiguration.getConfiguration(), configuration ); | |||
@@ -171,7 +171,6 @@ public class ArchivaRepositoryScanningTaskExecutorTest | |||
RepositoryTask repoTask = new RepositoryTask(); | |||
repoTask.setName( "testRepoTask" ); | |||
repoTask.setRepositoryId( "testRepo" ); | |||
taskExecutor.executeTask( repoTask ); | |||
@@ -199,7 +198,6 @@ public class ArchivaRepositoryScanningTaskExecutorTest | |||
RepositoryTask repoTask = new RepositoryTask(); | |||
repoTask.setName( "testRepoTask" ); | |||
repoTask.setRepositoryId( "testRepo" ); | |||
repoTask.setScanAll( false ); | |||
@@ -257,7 +255,6 @@ public class ArchivaRepositoryScanningTaskExecutorTest | |||
RepositoryTask repoTask = new RepositoryTask(); | |||
repoTask.setName( "testRepoTask" ); | |||
repoTask.setRepositoryId( "testRepo" ); | |||
repoTask.setScanAll( true ); | |||
@@ -21,7 +21,6 @@ package org.apache.maven.archiva.scheduled.tasks; | |||
import java.io.File; | |||
import org.apache.maven.archiva.scheduled.DefaultArchivaTaskScheduler; | |||
import org.codehaus.plexus.spring.PlexusInSpringTestCase; | |||
public class TaskCreatorTest | |||
@@ -29,23 +28,18 @@ public class TaskCreatorTest | |||
{ | |||
private static final String REPO_ID = "test-repo"; | |||
private static final String TASKNAME_SUFFIX = "test-task"; | |||
public void testCreateRepositoryTask() | |||
throws Exception | |||
{ | |||
RepositoryTask task = TaskCreator.createRepositoryTask( REPO_ID, "" ); | |||
RepositoryTask task = TaskCreator.createRepositoryTask( REPO_ID ); | |||
assertEquals( "Incorrect repository id set.", REPO_ID, task.getRepositoryId() ); | |||
assertEquals( "Incorrect queue policy set.", ArchivaTask.QUEUE_POLICY_WAIT, task.getQueuePolicy() ); | |||
assertEquals( "Incorrect task name set.", DefaultArchivaTaskScheduler.REPOSITORY_JOB + ":" + REPO_ID, | |||
task.getName() ); | |||
} | |||
public void testCreateRepositoryTaskWithTaskNameSuffix() | |||
throws Exception | |||
{ | |||
RepositoryTask task = TaskCreator.createRepositoryTask( REPO_ID, TASKNAME_SUFFIX ); | |||
RepositoryTask task = TaskCreator.createRepositoryTask( REPO_ID ); | |||
assertBasicTaskDetails( task ); | |||
} | |||
@@ -53,63 +47,57 @@ public class TaskCreatorTest | |||
public void testCreateRepositoryTaskScanAllArtifacts() | |||
throws Exception | |||
{ | |||
RepositoryTask task = TaskCreator.createRepositoryTask( REPO_ID, TASKNAME_SUFFIX, true ); | |||
RepositoryTask task = TaskCreator.createRepositoryTask( REPO_ID, true ); | |||
assertBasicTaskDetails( task ); | |||
assertTrue( task.scanAll ); | |||
assertTrue( task.isScanAll() ); | |||
} | |||
public void testCreateRepositoryTaskDoNotScanAllArtifacts() | |||
throws Exception | |||
{ | |||
RepositoryTask task = TaskCreator.createRepositoryTask( REPO_ID, TASKNAME_SUFFIX, false ); | |||
RepositoryTask task = TaskCreator.createRepositoryTask( REPO_ID, false ); | |||
assertBasicTaskDetails( task ); | |||
assertFalse( task.scanAll ); | |||
assertFalse( task.isScanAll() ); | |||
} | |||
public void testCreateRepositoryTaskForArtifactUpdateAllRelated() | |||
throws Exception | |||
{ | |||
File resource = new File( getBasedir(), "target/test-classes/test.jar" ); | |||
RepositoryTask task = TaskCreator.createRepositoryTask( REPO_ID, TASKNAME_SUFFIX, resource, true ); | |||
RepositoryTask task = TaskCreator.createRepositoryTask( REPO_ID, resource, true ); | |||
assertBasicTaskDetails( task ); | |||
assertEquals( "Incorrect resource file set.", resource, task.getResourceFile() ); | |||
assertTrue( task.updateRelatedArtifacts ); | |||
assertTrue( task.isUpdateRelatedArtifacts() ); | |||
} | |||
public void testCreateRepositoryTaskForArtifactDoNotUpdateAllRelated() | |||
throws Exception | |||
{ | |||
File resource = new File( getBasedir(), "target/test-classes/test.jar" ); | |||
RepositoryTask task = TaskCreator.createRepositoryTask( REPO_ID, TASKNAME_SUFFIX, resource, false ); | |||
RepositoryTask task = TaskCreator.createRepositoryTask( REPO_ID, resource, false ); | |||
assertBasicTaskDetails( task ); | |||
assertEquals( "Incorrect resource file set.", resource, task.getResourceFile() ); | |||
assertFalse( task.updateRelatedArtifacts ); | |||
assertFalse( task.isUpdateRelatedArtifacts() ); | |||
} | |||
public void testCreateIndexingTask() | |||
throws Exception | |||
{ | |||
File resource = new File( getBasedir(), "target/test-classes/test.jar" ); | |||
ArtifactIndexingTask task = TaskCreator.createIndexingTask( REPO_ID, resource, ArtifactIndexingTask.ADD ); | |||
ArtifactIndexingTask task = TaskCreator.createIndexingTask( REPO_ID, resource, ArtifactIndexingTask.Action.ADD ); | |||
assertEquals( "Incorrect repository id set.", REPO_ID, task.getRepositoryId() ); | |||
assertEquals( "Incorrect queue policy set.", ArchivaTask.QUEUE_POLICY_WAIT, task.getQueuePolicy() ); | |||
assertEquals( "Incorrect task name set.", DefaultArchivaTaskScheduler.INDEXING_JOB + ":" + REPO_ID + ":" + | |||
resource.getName() + ":" + ArtifactIndexingTask.ADD, task.getName() ); | |||
assertEquals( "Incorrect action set.", ArtifactIndexingTask.ADD, task.getAction() ); | |||
assertEquals( "Incorrect action set.", ArtifactIndexingTask.Action.ADD, task.getAction() ); | |||
assertEquals( "Incorrect resource file set.", resource, task.getResourceFile() ); | |||
} | |||
private void assertBasicTaskDetails( RepositoryTask task ) | |||
{ | |||
assertEquals( "Incorrect repository id set.", REPO_ID, task.getRepositoryId() ); | |||
assertEquals( "Incorrect task name set.", DefaultArchivaTaskScheduler.REPOSITORY_JOB + ":" + REPO_ID + ":" + | |||
TASKNAME_SUFFIX, task.getName() ); | |||
assertEquals( "Incorrect queue policy set.", ArchivaTask.QUEUE_POLICY_WAIT, task.getQueuePolicy() ); | |||
} | |||
} |
@@ -19,9 +19,6 @@ package org.apache.maven.archiva.web.action; | |||
* under the License. | |||
*/ | |||
import com.opensymphony.xwork2.Preparable; | |||
import com.opensymphony.xwork2.Validateable; | |||
import java.io.File; | |||
import java.io.FileInputStream; | |||
import java.io.FileOutputStream; | |||
@@ -35,7 +32,7 @@ import java.util.Date; | |||
import java.util.List; | |||
import java.util.TimeZone; | |||
import org.apache.archiva.checksum.ChecksumAlgorithm; | |||
import org.apache.archiva.checksum.ChecksumAlgorithm; | |||
import org.apache.archiva.checksum.ChecksummedFile; | |||
import org.apache.commons.io.FilenameUtils; | |||
import org.apache.commons.lang.StringUtils; | |||
@@ -70,6 +67,9 @@ import org.apache.maven.archiva.security.PrincipalNotFoundException; | |||
import org.apache.maven.archiva.security.UserRepositories; | |||
import org.codehaus.plexus.taskqueue.TaskQueueException; | |||
import com.opensymphony.xwork2.Preparable; | |||
import com.opensymphony.xwork2.Validateable; | |||
/** | |||
* Upload an artifact using Jakarta file upload in webwork. If set by the user a pom will also be generated. Metadata | |||
* will also be updated if one exists, otherwise it would be created. | |||
@@ -617,7 +617,7 @@ public class UploadAction | |||
private void queueRepositoryTask( String repositoryId, File localFile ) | |||
{ | |||
RepositoryTask task = TaskCreator.createRepositoryTask( repositoryId, localFile.getName(), localFile, true, true ); | |||
RepositoryTask task = TaskCreator.createRepositoryTask( repositoryId, localFile, true, true ); | |||
try | |||
{ |
@@ -20,10 +20,7 @@ package org.apache.maven.archiva.web.action.admin; | |||
*/ | |||
import org.apache.commons.lang.StringUtils; | |||
import org.apache.maven.archiva.common.ArchivaException; | |||
import org.apache.maven.archiva.scheduled.ArchivaTaskScheduler; | |||
import org.apache.maven.archiva.scheduled.DefaultArchivaTaskScheduler; | |||
import org.apache.maven.archiva.scheduled.tasks.ArchivaTask; | |||
import org.apache.maven.archiva.scheduled.tasks.DatabaseTask; | |||
import org.apache.maven.archiva.scheduled.tasks.RepositoryTask; | |||
import org.apache.maven.archiva.scheduled.tasks.TaskCreator; | |||
@@ -61,35 +58,13 @@ public class SchedulerAction | |||
return SUCCESS; | |||
} | |||
RepositoryTask task = TaskCreator.createRepositoryTask( repoid, "", scanAll ); | |||
RepositoryTask task = TaskCreator.createRepositoryTask( repoid, scanAll ); | |||
boolean scheduleTask = false; | |||
try | |||
{ | |||
if ( taskScheduler.isProcessingAnyRepositoryTask() ) | |||
{ | |||
if ( taskScheduler.isProcessingRepositoryTask( repoid ) ) | |||
{ | |||
addActionError( "Repository [" + repoid + "] task was already queued." ); | |||
} | |||
else | |||
{ | |||
scheduleTask = true; | |||
} | |||
} | |||
else | |||
{ | |||
scheduleTask = true; | |||
} | |||
} | |||
catch ( ArchivaException e ) | |||
if ( taskScheduler.isProcessingRepositoryTask( repoid ) ) | |||
{ | |||
scheduleTask = false; | |||
addActionError( e.getMessage() ); | |||
addActionError( "Repository [" + repoid + "] task was already queued." ); | |||
} | |||
if ( scheduleTask ) | |||
else | |||
{ | |||
try | |||
{ | |||
@@ -109,30 +84,14 @@ public class SchedulerAction | |||
public String updateDatabase() | |||
{ | |||
log.info( "Queueing database task on request from user interface" ); | |||
DatabaseTask task = new DatabaseTask(); | |||
task.setName( DefaultArchivaTaskScheduler.DATABASE_JOB + ":user-requested" ); | |||
task.setQueuePolicy( ArchivaTask.QUEUE_POLICY_WAIT ); | |||
boolean scheduleTask = false; | |||
try | |||
{ | |||
if ( taskScheduler.isProcessingDatabaseTask() ) | |||
{ | |||
addActionError( "Database task was already queued." ); | |||
} | |||
else | |||
{ | |||
scheduleTask = true; | |||
} | |||
} | |||
catch ( ArchivaException e ) | |||
if ( taskScheduler.isProcessingDatabaseTask() ) | |||
{ | |||
scheduleTask = false; | |||
addActionError( e.getMessage() ); | |||
addActionError( "Database task was already queued." ); | |||
} | |||
if ( scheduleTask ) | |||
else | |||
{ | |||
try | |||
{ |
@@ -643,9 +643,9 @@ public class ArchivaDavResource | |||
} | |||
} | |||
private void queueRepositoryTask( File localFile ) | |||
private void queueRepositoryTask( File localFile ) | |||
{ | |||
RepositoryTask task = TaskCreator.createRepositoryTask( repository.getId(), localFile.getName(), localFile, false, true ); | |||
RepositoryTask task = TaskCreator.createRepositoryTask( repository.getId(), localFile, false, true ); | |||
try | |||
{ |
@@ -51,12 +51,12 @@ import org.apache.maven.archiva.repository.RepositoryNotFoundException; | |||
import org.apache.maven.archiva.repository.events.RepositoryListener; | |||
import org.apache.maven.archiva.repository.scanner.RepositoryContentConsumers; | |||
import org.apache.maven.archiva.scheduled.ArchivaTaskScheduler; | |||
import org.apache.maven.archiva.scheduled.DefaultArchivaTaskScheduler; | |||
import org.apache.maven.archiva.scheduled.tasks.ArchivaTask; | |||
import org.apache.maven.archiva.scheduled.tasks.DatabaseTask; | |||
import org.apache.maven.archiva.scheduled.tasks.RepositoryTask; | |||
import org.apache.maven.archiva.scheduled.tasks.TaskCreator; | |||
import org.codehaus.plexus.registry.RegistryException; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
/** | |||
* AdministrationServiceImpl | |||
@@ -66,6 +66,8 @@ import org.codehaus.plexus.registry.RegistryException; | |||
public class AdministrationServiceImpl | |||
implements AdministrationService | |||
{ | |||
protected Logger log = LoggerFactory.getLogger( getClass() ); | |||
private ArchivaConfiguration archivaConfiguration; | |||
private RepositoryContentConsumers repoConsumersUtil; | |||
@@ -285,9 +287,8 @@ public class AdministrationServiceImpl | |||
return false; | |||
} | |||
log.info( "Queueing database task on request from administration service" ); | |||
DatabaseTask task = new DatabaseTask(); | |||
task.setName( DefaultArchivaTaskScheduler.DATABASE_JOB + ":user-requested-via-web-service" ); | |||
task.setQueuePolicy( ArchivaTask.QUEUE_POLICY_WAIT ); | |||
taskScheduler.queueDatabaseTask( task ); | |||
@@ -305,15 +306,12 @@ public class AdministrationServiceImpl | |||
throw new Exception( "Repository does not exist." ); | |||
} | |||
if ( taskScheduler.isProcessingAnyRepositoryTask() ) | |||
if ( taskScheduler.isProcessingRepositoryTask( repoId ) ) | |||
{ | |||
if ( taskScheduler.isProcessingRepositoryTask( repoId ) ) | |||
{ | |||
return false; | |||
} | |||
return false; | |||
} | |||
RepositoryTask task = TaskCreator.createRepositoryTask( repoId, "" ); | |||
RepositoryTask task = TaskCreator.createRepositoryTask( repoId ); | |||
taskScheduler.queueRepositoryTask( task ); | |||
@@ -642,7 +642,6 @@ public class AdministrationServiceImplTest | |||
RepositoryTask task = new RepositoryTask(); | |||
taskSchedulerControl.expectAndReturn( taskScheduler.isProcessingAnyRepositoryTask(), true ); | |||
taskSchedulerControl.expectAndReturn( taskScheduler.isProcessingRepositoryTask( "internal" ), false ); | |||
taskScheduler.queueRepositoryTask( task ); | |||
@@ -675,7 +674,6 @@ public class AdministrationServiceImplTest | |||
configControl.expectAndReturn( config.findManagedRepositoryById( "internal" ), | |||
createManagedRepo( "internal", "default", "Internal Repository", true, false ) ); | |||
taskSchedulerControl.expectAndReturn( taskScheduler.isProcessingAnyRepositoryTask(), true ); | |||
taskSchedulerControl.expectAndReturn( taskScheduler.isProcessingRepositoryTask( "internal" ), true); | |||
archivaConfigControl.replay(); |