Author: oching
Date: Thu Aug 14 00:02:04 2008
New Revision: 685789
URL: http://svn.apache.org/viewvc?rev=685789&view=rev
Log:
[MRM-848]
submitted by Gwen Harold Autencio
-queue scanning of repositories during startup
-scan only the repositories which haven't been scanned previously by checking
the scan statistics
additional changes made to patch:
-applied codestyle formatting
-cleared the queuedRepos list when task scheduler is stopped
Modified:
archiva/trunk/archiva-modules/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultArchivaTaskScheduler.java
Modified:
archiva/trunk/archiva-modules/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultArchivaTaskScheduler.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultArchivaTaskScheduler.java?rev=685789&r1=685788&r2=685789&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultArchivaTaskScheduler.java
(original)
+++
archiva/trunk/archiva-modules/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultArchivaTaskScheduler.java
Thu Aug 14 00:02:04 2008
@@ -25,6 +25,9 @@
import org.apache.maven.archiva.configuration.ConfigurationEvent;
import org.apache.maven.archiva.configuration.ConfigurationListener;
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.DatabaseTask;
import org.apache.maven.archiva.scheduled.tasks.RepositoryTask;
@@ -46,6 +49,7 @@
import org.slf4j.LoggerFactory;
import java.text.ParseException;
+import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -81,6 +85,11 @@
* @plexus.requirement
*/
private ArchivaConfiguration archivaConfiguration;
+
+ /**
+ * @plexus.requirement role-hint="jdo"
+ */
+ private ArchivaDAO dao;
public static final String DATABASE_SCAN_GROUP = "database-group";
@@ -97,6 +106,8 @@
public static final String CRON_HOURLY = "0 0 * * * ?";
private Set<String> jobs = new HashSet<String>();
+
+ private List<String> queuedRepos = new ArrayList<String>();
public void startup()
throws ArchivaException
@@ -126,6 +137,11 @@
if ( repoConfig.isScanned() )
{
scheduleRepositoryJobs( repoConfig );
+
+ if( !isPreviouslyScanned( repoConfig ) )
+ {
+ queueInitialRepoScan( repoConfig );
+ }
}
}
@@ -137,6 +153,54 @@
}
}
+ private boolean isPreviouslyScanned( ManagedRepositoryConfiguration
repoConfig )
+ {
+ List<RepositoryScanStatistics> results =
+ dao.query( new MostRecentRepositoryScanStatistics(
repoConfig.getId() ) );
+
+ if ( results != null && !results.isEmpty() )
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ // MRM-848: Pre-configured repository initially appear to be empty
+ private synchronized void queueInitialRepoScan(
ManagedRepositoryConfiguration repoConfig )
+ {
+ String repoId = repoConfig.getId();
+
+ RepositoryTask task = new RepositoryTask();
+ task.setRepositoryId( repoId );
+ task.setName( REPOSITORY_JOB + ":" + repoId + ":initial-scan" );
+ task.setQueuePolicy( ArchivaTask.QUEUE_POLICY_WAIT );
+
+ boolean scheduleTask = false;
+
+ if ( queuedRepos.contains( repoId ) )
+ {
+ log.error( "Repository [" + repoId + "] is currently being
processed or is already queued." );
+ }
+ else
+ {
+ scheduleTask = true;
+ }
+
+ if ( scheduleTask )
+ {
+ try
+ {
+ queuedRepos.add( repoConfig.getId() );
+ this.queueRepositoryTask( task );
+ }
+ catch ( TaskQueueException e )
+ {
+ log.error( "Error occurred while queueing repository [" +
repoId + "] task : " + e.getMessage() );
+ }
+ }
+ }
+
private synchronized void scheduleRepositoryJobs(
ManagedRepositoryConfiguration repoConfig )
throws SchedulerException
{
@@ -230,6 +294,7 @@
scheduler.unscheduleJob( job, REPOSITORY_SCAN_GROUP );
}
jobs.clear();
+ queuedRepos.clear();
}
catch ( SchedulerException e )
{