summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrett Porter <brett@apache.org>2009-12-04 01:42:14 +0000
committerBrett Porter <brett@apache.org>2009-12-04 01:42:14 +0000
commitd41af9e700746be9e642f16c8ee7f7fd8e73a1cd (patch)
tree361773213f4da3cd0aaf8a0bcba32c3beff23b02
parent30f8605a1db6536bff5c668ffb8ce55c7ac6ca4c (diff)
downloadarchiva-d41af9e700746be9e642f16c8ee7f7fd8e73a1cd.tar.gz
archiva-d41af9e700746be9e642f16c8ee7f7fd8e73a1cd.zip
[MRM-1294] start the search period from the *start* of the previous scan rather than the end to discover anything added in the middle. Some artifacts may get scanned twice, but this is a better consequence than not at all
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@887030 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--archiva-modules/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/ArchivaRepositoryScanningTaskExecutor.java3
-rw-r--r--archiva-modules/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/executors/ArchivaRepositoryScanningTaskExecutorTest.java102
2 files changed, 79 insertions, 26 deletions
diff --git a/archiva-modules/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/ArchivaRepositoryScanningTaskExecutor.java b/archiva-modules/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/ArchivaRepositoryScanningTaskExecutor.java
index 337236ed2..7d47100a6 100644
--- a/archiva-modules/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/ArchivaRepositoryScanningTaskExecutor.java
+++ b/archiva-modules/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/ArchivaRepositoryScanningTaskExecutor.java
@@ -137,7 +137,7 @@ public class ArchivaRepositoryScanningTaskExecutor
RepositoryContentStatistics lastStats = results.get( 0 );
if ( !repoTask.isScanAll() )
{
- sinceWhen = lastStats.getWhenGathered().getTime();
+ sinceWhen = lastStats.getWhenGathered().getTime() - lastStats.getDuration();
}
}
@@ -173,6 +173,7 @@ public class ArchivaRepositoryScanningTaskExecutor
// total artifact count
try
{
+ // note that when gathered is the end of the scan, so we look for all those before that time
List<ArchivaArtifact> artifacts = dao.getArtifactDAO().queryArtifacts(
new ArtifactsByRepositoryConstraint( arepo.getId(), stats.getWhenGathered(), "groupId", true ) );
dbstats.setTotalArtifactCount( artifacts.size() );
diff --git a/archiva-modules/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/executors/ArchivaRepositoryScanningTaskExecutorTest.java b/archiva-modules/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/executors/ArchivaRepositoryScanningTaskExecutorTest.java
index 2ff0a33ce..4204fecbb 100644
--- a/archiva-modules/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/executors/ArchivaRepositoryScanningTaskExecutorTest.java
+++ b/archiva-modules/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/executors/ArchivaRepositoryScanningTaskExecutorTest.java
@@ -141,9 +141,19 @@ public class ArchivaRepositoryScanningTaskExecutorTest
File sourceRepoDir = new File( getBasedir(), "src/test/repositories/default-repository" );
repoDir = new File( getBasedir(), "target/default-repository" );
+ FileUtils.deleteDirectory( repoDir );
+ assertFalse( "Default Test Repository should not exist.", repoDir.exists() );
+
repoDir.mkdir();
FileUtils.copyDirectoryStructure( sourceRepoDir, repoDir );
+ // set the timestamps to a time well in the past
+ Calendar cal = Calendar.getInstance();
+ cal.add( Calendar.YEAR, -1 );
+ for ( File f : (List<File>) FileUtils.getFiles( repoDir, "**", null ) )
+ {
+ f.setLastModified( cal.getTimeInMillis() );
+ }
assertTrue( "Default Test Repository should exist.", repoDir.exists() && repoDir.isDirectory() );
@@ -193,18 +203,7 @@ public class ArchivaRepositoryScanningTaskExecutorTest
repoTask.setRepositoryId( TEST_REPO_ID );
repoTask.setScanAll( false );
- RepositoryContentStatistics stats = new RepositoryContentStatistics();
- stats.setDuration( 1234567 );
- stats.setNewFileCount( 31 );
- stats.setRepositoryId( TEST_REPO_ID );
- stats.setTotalArtifactCount( 8 );
- stats.setTotalFileCount( 31 );
- stats.setTotalGroupCount( 3 );
- stats.setTotalProjectCount( 5 );
- stats.setTotalSize( 38545 );
- stats.setWhenGathered( Calendar.getInstance().getTime() );
-
- dao.getRepositoryContentStatisticsDAO().saveRepositoryContentStatistics( stats );
+ createAndSaveTestStats();
taskExecutor.executeTask( repoTask );
@@ -272,25 +271,14 @@ public class ArchivaRepositoryScanningTaskExecutorTest
repoTask.setRepositoryId( TEST_REPO_ID );
repoTask.setScanAll( false );
- RepositoryContentStatistics stats = new RepositoryContentStatistics();
- stats.setDuration( 1234567 );
- stats.setNewFileCount( 31 );
- stats.setRepositoryId( TEST_REPO_ID );
- stats.setTotalArtifactCount( 8 );
- stats.setTotalFileCount( 31 );
- stats.setTotalGroupCount( 3 );
- stats.setTotalProjectCount( 5 );
- stats.setTotalSize( 38545 );
- stats.setWhenGathered( Calendar.getInstance().getTime() );
-
- dao.getRepositoryContentStatisticsDAO().saveRepositoryContentStatistics( stats );
+ createAndSaveTestStats();
File newArtifactGroup = new File( repoDir, "org/apache/archiva" );
FileUtils.copyDirectoryStructure( new File( getBasedir(), "target/test-classes/test-repo/org/apache/archiva" ),
newArtifactGroup );
- // update last modified date
+ // update last modified date, placing shortly after last scan
new File( newArtifactGroup, "archiva-index-methods-jar-test/1.0/pom.xml" ).setLastModified(
Calendar.getInstance().getTimeInMillis() + 1000 );
new File( newArtifactGroup,
@@ -323,6 +311,70 @@ public class ArchivaRepositoryScanningTaskExecutorTest
assertEquals( 43687, newStats.getTotalSize() );
}
+ public void testExecutorScanOnlyNewArtifactsMidScan()
+ throws Exception
+ {
+ RepositoryTask repoTask = new RepositoryTask();
+
+ repoTask.setRepositoryId( TEST_REPO_ID );
+ repoTask.setScanAll( false );
+
+ createAndSaveTestStats();
+
+ File newArtifactGroup = new File( repoDir, "org/apache/archiva" );
+
+ FileUtils.copyDirectoryStructure( new File( getBasedir(), "target/test-classes/test-repo/org/apache/archiva" ),
+ newArtifactGroup );
+
+ // update last modified date, placing in middle of last scan
+ new File( newArtifactGroup, "archiva-index-methods-jar-test/1.0/pom.xml" ).setLastModified(
+ Calendar.getInstance().getTimeInMillis() - 50000 );
+ new File( newArtifactGroup,
+ "archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" ).setLastModified(
+ Calendar.getInstance().getTimeInMillis() - 50000 );
+
+ assertTrue( newArtifactGroup.exists() );
+
+ // scan using the really long previous duration
+ taskExecutor.executeTask( repoTask );
+
+ // check no artifacts processed
+ ArtifactDAO adao = dao.getArtifactDAO();
+ List<ArchivaArtifact> unprocessedResultList = adao.queryArtifacts( new ArtifactsProcessedConstraint( false ) );
+ assertNotNull( unprocessedResultList );
+ assertEquals( "Incorrect number of unprocessed artifacts detected. One new artifact should have been found.", 1,
+ unprocessedResultList.size() );
+
+ // check correctness of new stats
+ List<RepositoryContentStatistics> results =
+ (List<RepositoryContentStatistics>) dao.query( new MostRecentRepositoryScanStatistics( TEST_REPO_ID ) );
+ RepositoryContentStatistics newStats = results.get( 0 );
+ assertEquals( 2, newStats.getNewFileCount() );
+ assertEquals( TEST_REPO_ID, newStats.getRepositoryId() );
+ assertEquals( 33, newStats.getTotalFileCount() );
+ // TODO: can't test these as they weren't stored in the database
+// assertEquals( 8, newStats.getTotalArtifactCount() );
+// assertEquals( 3, newStats.getTotalGroupCount() );
+// assertEquals( 5, newStats.getTotalProjectCount() );
+ assertEquals( 43687, newStats.getTotalSize() );
+ }
+
+ private void createAndSaveTestStats()
+ {
+ RepositoryContentStatistics stats = new RepositoryContentStatistics();
+ stats.setDuration( 1234567 );
+ stats.setNewFileCount( 31 );
+ stats.setRepositoryId( TEST_REPO_ID );
+ stats.setTotalArtifactCount( 8 );
+ stats.setTotalFileCount( 31 );
+ stats.setTotalGroupCount( 3 );
+ stats.setTotalProjectCount( 5 );
+ stats.setTotalSize( 38545 );
+ stats.setWhenGathered( Calendar.getInstance().getTime() );
+
+ dao.getRepositoryContentStatisticsDAO().saveRepositoryContentStatistics( stats );
+ }
+
public void testExecutorForceScanAll()
throws Exception
{