Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResource.java URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResource.java?rev=777816&r1=777815&r2=777816&view=diff ============================================================================== --- archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResource.java (original) +++ archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResource.java Sat May 23 07:28:12 2009 @@ -53,20 +53,15 @@ import org.apache.jackrabbit.webdav.property.DavPropertySet; import org.apache.jackrabbit.webdav.property.DefaultDavProperty; import org.apache.jackrabbit.webdav.property.ResourceType; -import org.apache.maven.archiva.common.ArchivaException; import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; import org.apache.maven.archiva.repository.audit.AuditEvent; import org.apache.maven.archiva.repository.audit.AuditListener; -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.executors.ArchivaRepositoryScanningTaskExecutor; -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.apache.maven.archiva.webdav.util.IndexWriter; import org.apache.maven.archiva.webdav.util.MimeTypes; import org.codehaus.plexus.taskqueue.TaskQueueException; -import org.codehaus.plexus.taskqueue.execution.TaskExecutor; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormatter; import org.joda.time.format.ISODateTimeFormat; @@ -98,8 +93,6 @@ private final ManagedRepositoryConfiguration repository; - private final RepositoryContentConsumers consumers; - private final MimeTypes mimeTypes; private List<AuditListener> auditListeners; @@ -110,14 +103,12 @@ private ArchivaTaskScheduler scheduler; - private ArchivaRepositoryScanningTaskExecutor taskExecutor; - private Logger log = LoggerFactory.getLogger( ArchivaDavResource.class ); public ArchivaDavResource( String localResource, String logicalResource, ManagedRepositoryConfiguration repository, DavSession session, ArchivaDavResourceLocator locator, DavResourceFactory factory, MimeTypes mimeTypes, List<AuditListener> auditListeners, - RepositoryContentConsumers consumers, ArchivaTaskScheduler scheduler, TaskExecutor taskExecutor ) + ArchivaTaskScheduler scheduler ) { this.localResource = new File( localResource ); this.logicalResource = logicalResource; @@ -129,20 +120,18 @@ this.repository = repository; // TODO: these should be pushed into the repository layer, along with the physical file operations in this class - this.mimeTypes = mimeTypes; - this.consumers = consumers; + this.mimeTypes = mimeTypes; this.auditListeners = auditListeners; this.scheduler = scheduler; - this.taskExecutor = ( ArchivaRepositoryScanningTaskExecutor ) taskExecutor; } public ArchivaDavResource( String localResource, String logicalResource, ManagedRepositoryConfiguration repository, String remoteAddr, String principal, DavSession session, ArchivaDavResourceLocator locator, DavResourceFactory factory, MimeTypes mimeTypes, List<AuditListener> auditListeners, - RepositoryContentConsumers consumers, ArchivaTaskScheduler scheduler, TaskExecutor taskExecutor ) + ArchivaTaskScheduler scheduler ) { this( localResource, logicalResource, repository, session, locator, factory, mimeTypes, auditListeners, - consumers, scheduler, taskExecutor ); + scheduler ); this.remoteAddr = remoteAddr; this.principal = principal; @@ -322,7 +311,7 @@ inputContext.getContentLength() + " but was " + localFile.length() ); } - executeConsumers( localFile ); + queueRepositoryTask( localFile ); triggerAuditEvent( resource, exists ? AuditEvent.MODIFY_FILE : AuditEvent.CREATE_FILE ); } @@ -642,50 +631,18 @@ } } - private void executeConsumers( File localFile ) + private void queueRepositoryTask( File localFile ) { + RepositoryTask task = TaskCreator.createRepositoryTask( repository.getId(), localFile.getName(), localFile ); + try { - RepositoryTask currentTaskInExecution = ( RepositoryTask ) taskExecutor.getCurrentTaskInExecution(); - if( currentTaskInExecution != null || scheduler.isProcessingAnyRepositoryTask() ) - { - // check if the repository is already queued to be scanned - if( scheduler.isProcessingRepositoryTaskWithName( DefaultArchivaTaskScheduler.REPOSITORY_JOB + ":" + repository.getId() ) - || scheduler.isProcessingRepositoryTaskWithName( DefaultArchivaTaskScheduler.REPOSITORY_JOB + ":" + repository.getId() + ":" + localFile.getName() ) ) - { - // no need to execute the consumers since repo is already queued - return; - } - else - { - // schedule the task - RepositoryTask task = new RepositoryTask(); - task.setRepositoryId( repository.getId() ); - task.setName( DefaultArchivaTaskScheduler.REPOSITORY_JOB + ":" + repository.getId() + ":" + localFile.getName() ); - task.setQueuePolicy( ArchivaTask.QUEUE_POLICY_WAIT ); - task.setResourceFile( localFile ); - - try - { - scheduler.queueRepositoryTask( task ); - } - catch ( TaskQueueException e ) - { - log.error( "Unable to queue repository task to execute consumers on resource file ['" + - localFile.getName() + "']." ); - } - } - } - else - { - // Just-in-time update of the index and database by executing the consumers for this artifact - consumers.executeConsumers( repository, localFile ); - } + scheduler.queueRepositoryTask( task ); } - catch ( ArchivaException e ) + catch ( TaskQueueException e ) { log.error( "Unable to queue repository task to execute consumers on resource file ['" + - localFile.getName() + "']." ); + localFile.getName() + "']." ); } } }
Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java?rev=777816&r1=777815&r2=777816&view=diff ============================================================================== --- archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java (original) +++ archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java Sat May 23 07:28:12 2009 @@ -83,6 +83,7 @@ import org.codehaus.plexus.redback.users.User; import org.codehaus.plexus.redback.users.UserManager; import org.codehaus.plexus.taskqueue.execution.TaskExecutor; +import org.codehaus.plexus.taskqueue.execution.TaskQueueExecutor; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import org.codehaus.redback.integration.filter.authentication.HttpAuthenticator; import org.slf4j.Logger; @@ -179,6 +180,11 @@ * @plexus.requirement */ private ArchivaTaskScheduler scheduler; + + /** + * @plexus.requirement role-hint="repository-scanning" + */ + private TaskQueueExecutor repoScanningTaskQueueExecutor; public DavResource createResource( final DavResourceLocator locator, final DavServletRequest request, final DavServletResponse response ) @@ -271,7 +277,7 @@ new ArchivaDavResource( metadataChecksum.getAbsolutePath(), logicalResource.getPath(), null, request.getRemoteAddr(), activePrincipal, request.getDavSession(), archivaLocator, this, mimeTypes, - auditListeners, consumers, scheduler, taskExecutor ); + auditListeners, scheduler ); } } else @@ -306,7 +312,7 @@ new ArchivaDavResource( resourceFile.getAbsolutePath(), logicalResource.getPath(), null, request.getRemoteAddr(), activePrincipal, request.getDavSession(), archivaLocator, this, mimeTypes, - auditListeners, consumers, scheduler, taskExecutor ); + auditListeners, scheduler ); } catch ( RepositoryMetadataException r ) { @@ -411,7 +417,7 @@ new ArchivaDavResource( resourceFile.getAbsolutePath(), logicalResource.getPath(), managedRepository.getRepository(), request.getRemoteAddr(), activePrincipal, request.getDavSession(), archivaLocator, this, mimeTypes, auditListeners, - consumers, scheduler, taskExecutor ); + scheduler ); if ( WebdavMethodUtil.isReadMethod( request.getMethod() ) ) { @@ -442,7 +448,7 @@ new ArchivaDavResource( resourceFile.getAbsolutePath(), logicalResource.getPath(), managedRepository.getRepository(), request.getRemoteAddr(), activePrincipal, request.getDavSession(), archivaLocator, this, - mimeTypes, auditListeners, consumers, scheduler, taskExecutor ); + mimeTypes, auditListeners, scheduler ); } catch ( LayoutException e ) { @@ -517,7 +523,7 @@ File resourceFile = new File( managedRepository.getRepoRoot(), logicalResource ); DavResource resource = new ArchivaDavResource( resourceFile.getAbsolutePath(), logicalResource, managedRepository.getRepository(), - davSession, archivaLocator, this, mimeTypes, auditListeners, consumers, scheduler, taskExecutor ); + davSession, archivaLocator, this, mimeTypes, auditListeners, scheduler ); resource.addLockManager( lockManager ); return resource; Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/DavResourceTest.java URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/DavResourceTest.java?rev=777816&r1=777815&r2=777816&view=diff ============================================================================== --- archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/DavResourceTest.java (original) +++ archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/DavResourceTest.java Sat May 23 07:28:12 2009 @@ -42,6 +42,7 @@ import org.apache.maven.archiva.webdav.util.MimeTypes; import org.codehaus.plexus.spring.PlexusInSpringTestCase; import org.codehaus.plexus.spring.PlexusToSpringUtils; +import org.codehaus.plexus.taskqueue.execution.TaskQueueExecutor; public class DavResourceTest extends PlexusInSpringTestCase @@ -67,6 +68,8 @@ private RepositoryContentConsumers consumers; private ManagedRepositoryConfiguration repository = new ManagedRepositoryConfiguration(); + + private TaskQueueExecutor repoScanningTaskQueueExecutor; @Override protected void setUp() @@ -100,8 +103,7 @@ private DavResource getDavResource( String logicalPath, File file ) { return new ArchivaDavResource( file.getAbsolutePath(), logicalPath, repository, session, resourceLocator, - resourceFactory, mimeTypes, Collections.<AuditListener> emptyList(), consumers, - null, null ); + resourceFactory, mimeTypes, Collections.<AuditListener> emptyList(), null ); } public void testDeleteNonExistantResourceShould404() @@ -308,7 +310,7 @@ { return new ArchivaDavResource( baseDir.getAbsolutePath(), "/", repository, session, resourceLocator, resourceFactory, mimeTypes, Collections.<AuditListener> emptyList(), - consumers, null, null ); + null ); } } } Modified: archiva/trunk/archiva-modules/archiva-web/archiva-xmlrpc/archiva-xmlrpc-services/src/main/java/org/apache/archiva/web/xmlrpc/services/AdministrationServiceImpl.java URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-xmlrpc/archiva-xmlrpc-services/src/main/java/org/apache/archiva/web/xmlrpc/services/AdministrationServiceImpl.java?rev=777816&r1=777815&r2=777816&view=diff ============================================================================== --- archiva/trunk/archiva-modules/archiva-web/archiva-xmlrpc/archiva-xmlrpc-services/src/main/java/org/apache/archiva/web/xmlrpc/services/AdministrationServiceImpl.java (original) +++ archiva/trunk/archiva-modules/archiva-web/archiva-xmlrpc/archiva-xmlrpc-services/src/main/java/org/apache/archiva/web/xmlrpc/services/AdministrationServiceImpl.java Sat May 23 07:28:12 2009 @@ -55,6 +55,7 @@ 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; /** @@ -312,10 +313,7 @@ } } - RepositoryTask task = new RepositoryTask(); - task.setRepositoryId( repoId ); - task.setName( DefaultArchivaTaskScheduler.REPOSITORY_JOB + ":" + repoId ); - task.setQueuePolicy( ArchivaTask.QUEUE_POLICY_WAIT ); + RepositoryTask task = TaskCreator.createRepositoryTask( repoId, "" ); taskScheduler.queueRepositoryTask( task ); Modified: archiva/trunk/pom.xml URL: http://svn.apache.org/viewvc/archiva/trunk/pom.xml?rev=777816&r1=777815&r2=777816&view=diff ============================================================================== --- archiva/trunk/pom.xml (original) +++ archiva/trunk/pom.xml Sat May 23 07:28:12 2009 @@ -253,7 +253,7 @@ <dependency> <groupId>org.sonatype.nexus</groupId> <artifactId>nexus-indexer</artifactId> - <version>1.1.1</version> + <version>2.0.0</version> <exclusions> <exclusion> <groupId>org.codehaus.plexus</groupId>
