You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by oc...@apache.org on 2007/10/26 12:36:52 UTC

svn commit: r588598 - in /maven/archiva/trunk/archiva-base: archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/ archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consu...

Author: oching
Date: Fri Oct 26 03:36:48 2007
New Revision: 588598

URL: http://svn.apache.org/viewvc?rev=588598&view=rev
Log:
[MRM-454]
-synchronized the index operations in LuceneRepositoryContentIndex (used 'repository' as the lock) to avoid index locking
-added method for deleting artifacts from the index during repository purge
-updated repository purge tests

Added:
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/stubs/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/stubs/LuceneRepositoryContentIndexFactoryStub.java
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/stubs/LuceneRepositoryContentIndexStub.java
Modified:
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/AbstractRepositoryPurge.java
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurge.java
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurge.java
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumer.java
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RetentionCountRepositoryPurge.java
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.xml
    maven/archiva/trunk/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryContentIndex.java

Modified: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/AbstractRepositoryPurge.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/AbstractRepositoryPurge.java?rev=588598&r1=588597&r2=588598&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/AbstractRepositoryPurge.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/AbstractRepositoryPurge.java Fri Oct 26 03:36:48 2007
@@ -1,27 +1,32 @@
 package org.apache.maven.archiva.consumers.core.repository;
 
 /*
-* 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.
-*/
+ * 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.maven.archiva.database.ArchivaDatabaseException;
 import org.apache.maven.archiva.database.ArtifactDAO;
+import org.apache.maven.archiva.indexer.RepositoryContentIndex;
 import org.apache.maven.archiva.indexer.RepositoryIndexException;
+import org.apache.maven.archiva.indexer.bytecode.BytecodeRecord;
+import org.apache.maven.archiva.indexer.filecontent.FileContentRecord;
+import org.apache.maven.archiva.indexer.hashcodes.HashcodesRecord;
+import org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentRecord;
 import org.apache.maven.archiva.model.ArchivaArtifact;
 import org.apache.maven.archiva.model.ArtifactReference;
 import org.apache.maven.archiva.repository.ManagedRepositoryContent;
@@ -29,6 +34,9 @@
 
 import java.io.File;
 import java.io.FilenameFilter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -43,16 +51,20 @@
 
     protected ArtifactDAO artifactDao;
 
-    public AbstractRepositoryPurge( ManagedRepositoryContent repository, ArtifactDAO artifactDao )
+    private Map<String, RepositoryContentIndex> indices;
+
+    public AbstractRepositoryPurge( ManagedRepositoryContent repository, ArtifactDAO artifactDao,
+                                    Map<String, RepositoryContentIndex> indices )
     {
         this.repository = repository;
         this.artifactDao = artifactDao;
+        this.indices = indices;
     }
 
     /**
      * Get all files from the directory that matches the specified filename.
-     *
-     * @param dir      the directory to be scanned
+     * 
+     * @param dir the directory to be scanned
      * @param filename the filename to be matched
      * @return
      */
@@ -78,16 +90,36 @@
 
     /**
      * Purge the repo. Update db and index of removed artifacts.
-     *
+     * 
      * @param artifactFiles
      * @throws RepositoryIndexException
      */
     protected void purge( Set<ArtifactReference> references )
     {
+        List<LuceneRepositoryContentRecord> fileContentRecords = new ArrayList<LuceneRepositoryContentRecord>();
+        List<LuceneRepositoryContentRecord> hashcodeRecords = new ArrayList<LuceneRepositoryContentRecord>();
+        List<LuceneRepositoryContentRecord> bytecodeRecords = new ArrayList<LuceneRepositoryContentRecord>();
+
         for ( ArtifactReference reference : references )
         {
             File artifactFile = repository.toFile( reference );
 
+            ArchivaArtifact artifact =
+                new ArchivaArtifact( reference.getGroupId(), reference.getArtifactId(), reference.getVersion(),
+                                     reference.getClassifier(), reference.getType() );
+
+            FileContentRecord fileContentRecord = new FileContentRecord();
+            fileContentRecord.setFilename( repository.toPath( artifact ) );
+            fileContentRecords.add( fileContentRecord );
+
+            HashcodesRecord hashcodesRecord = new HashcodesRecord();
+            hashcodesRecord.setArtifact( artifact );
+            hashcodeRecords.add( hashcodesRecord );
+
+            BytecodeRecord bytecodeRecord = new BytecodeRecord();
+            bytecodeRecord.setArtifact( artifact );
+            bytecodeRecords.add( bytecodeRecord );
+
             artifactFile.delete();
             purgeSupportFiles( artifactFile );
 
@@ -107,13 +139,21 @@
                 // Ignore
             }
         }
+
+        try
+        {
+            updateIndices( fileContentRecords, hashcodeRecords, bytecodeRecords );
+        }
+        catch ( RepositoryIndexException e )
+        {
+            // Ignore
+        }
     }
 
     /**
      * <p>
      * This find support files for the artifactFile and deletes them.
      * </p>
-     * 
      * <p>
      * Support Files are things like ".sha1", ".md5", ".asc", etc.
      * </p>
@@ -147,12 +187,27 @@
         throws ArchivaDatabaseException, LayoutException
     {
         ArtifactReference artifact = repository.toArtifactReference( path );
-        ArchivaArtifact queriedArtifact = artifactDao.getArtifact( artifact.getGroupId(), artifact.getArtifactId(),
-                                                                   artifact.getVersion(), artifact.getClassifier(),
-                                                                   artifact.getType() );
+        ArchivaArtifact queriedArtifact =
+            artifactDao.getArtifact( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(),
+                                     artifact.getClassifier(), artifact.getType() );
 
         artifactDao.deleteArtifact( queriedArtifact );
 
         // TODO [MRM-37]: re-run the database consumers to clean up
+    }
+
+    private void updateIndices( List<LuceneRepositoryContentRecord> fileContentRecords,
+                                List<LuceneRepositoryContentRecord> hashcodeRecords,
+                                List<LuceneRepositoryContentRecord> bytecodeRecords )
+        throws RepositoryIndexException
+    {
+        RepositoryContentIndex index = indices.get( "filecontent" );
+        index.deleteRecords( fileContentRecords );
+
+        index = indices.get( "hashcodes" );
+        index.deleteRecords( hashcodeRecords );
+
+        index = indices.get( "bytecode" );
+        index.deleteRecords( bytecodeRecords );
     }
 }

Modified: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurge.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurge.java?rev=588598&r1=588597&r2=588598&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurge.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurge.java Fri Oct 26 03:36:48 2007
@@ -22,6 +22,7 @@
 import org.apache.maven.archiva.common.utils.VersionComparator;
 import org.apache.maven.archiva.common.utils.VersionUtil;
 import org.apache.maven.archiva.database.ArtifactDAO;
+import org.apache.maven.archiva.indexer.RepositoryContentIndex;
 import org.apache.maven.archiva.model.ArtifactReference;
 import org.apache.maven.archiva.model.ProjectReference;
 import org.apache.maven.archiva.model.VersionedReference;
@@ -36,6 +37,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -68,9 +70,9 @@
     private MetadataTools metadataTools;
 
     public CleanupReleasedSnapshotsRepositoryPurge( ManagedRepositoryContent repository, ArtifactDAO artifactDao,
-                                                    MetadataTools metadataTools )
+                    MetadataTools metadataTools, Map<String, RepositoryContentIndex> indices )
     {
-        super( repository, artifactDao );
+        super( repository, artifactDao, indices );
         this.metadataTools = metadataTools;
     }
 

Modified: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurge.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurge.java?rev=588598&r1=588597&r2=588598&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurge.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurge.java Fri Oct 26 03:36:48 2007
@@ -22,6 +22,7 @@
 import org.apache.commons.lang.time.DateUtils;
 import org.apache.maven.archiva.common.utils.VersionUtil;
 import org.apache.maven.archiva.database.ArtifactDAO;
+import org.apache.maven.archiva.indexer.RepositoryContentIndex;
 import org.apache.maven.archiva.model.ArtifactReference;
 import org.apache.maven.archiva.repository.ContentNotFoundException;
 import org.apache.maven.archiva.repository.ManagedRepositoryContent;
@@ -32,6 +33,7 @@
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.Map;
 import java.util.Set;
 import java.util.regex.Matcher;
 
@@ -48,9 +50,9 @@
     private int daysOlder;
     
     public DaysOldRepositoryPurge( ManagedRepositoryContent repository, ArtifactDAO artifactDao,
-                                   int daysOlder )
+                                   int daysOlder, Map<String, RepositoryContentIndex> indices )
     {
-        super( repository, artifactDao );
+        super( repository, artifactDao, indices );
         this.daysOlder = daysOlder;
         timestampParser = new SimpleDateFormat( "yyyyMMdd.HHmmss" );
         timestampParser.setTimeZone( DateUtils.UTC_TIME_ZONE );

Modified: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumer.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumer.java?rev=588598&r1=588597&r2=588598&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumer.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumer.java Fri Oct 26 03:36:48 2007
@@ -26,6 +26,8 @@
 import org.apache.maven.archiva.consumers.ConsumerException;
 import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer;
 import org.apache.maven.archiva.database.ArchivaDAO;
+import org.apache.maven.archiva.indexer.RepositoryContentIndex;
+import org.apache.maven.archiva.indexer.RepositoryContentIndexFactory;
 import org.apache.maven.archiva.repository.ManagedRepositoryContent;
 import org.apache.maven.archiva.repository.RepositoryContentFactory;
 import org.apache.maven.archiva.repository.RepositoryException;
@@ -37,7 +39,9 @@
 import org.codehaus.plexus.registry.RegistryListener;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Consumer for removing old snapshots in the repository based on the criteria
@@ -98,6 +102,11 @@
     private RepositoryPurge cleanUp;
 
     private boolean deleteReleasedSnapshots;
+    
+    /**
+     * @plexus.requirement role-hint="lucene"
+     */
+    private RepositoryContentIndexFactory indexFactory;
 
     public String getId()
     {
@@ -129,22 +138,27 @@
     {
         try
         {
+            Map<String, RepositoryContentIndex> indices = new HashMap<String, RepositoryContentIndex>();
+            indices.put( "bytecode", indexFactory.createBytecodeIndex( repository ) );
+            indices.put( "hashcodes", indexFactory.createHashcodeIndex( repository ) );
+            indices.put( "filecontent", indexFactory.createFileContentIndex( repository ) );
+            
             ManagedRepositoryContent repositoryContent = repositoryFactory.getManagedRepositoryContent( repository
                 .getId() );
 
             if ( repository.getDaysOlder() != 0 )
             {
                 repoPurge = new DaysOldRepositoryPurge( repositoryContent, dao.getArtifactDAO(), repository
-                    .getDaysOlder() );
+                    .getDaysOlder(), indices );
             }
             else
             {
                 repoPurge = new RetentionCountRepositoryPurge( repositoryContent, dao.getArtifactDAO(), repository
-                    .getRetentionCount() );
+                    .getRetentionCount(), indices );
             }
 
             cleanUp = new CleanupReleasedSnapshotsRepositoryPurge( repositoryContent, dao.getArtifactDAO(),
-                                                                   metadataTools );
+                                                                   metadataTools, indices );
 
             deleteReleasedSnapshots = repository.isDeleteReleasedSnapshots();
         }

Modified: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RetentionCountRepositoryPurge.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RetentionCountRepositoryPurge.java?rev=588598&r1=588597&r2=588598&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RetentionCountRepositoryPurge.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RetentionCountRepositoryPurge.java Fri Oct 26 03:36:48 2007
@@ -22,6 +22,7 @@
 import org.apache.maven.archiva.common.utils.VersionComparator;
 import org.apache.maven.archiva.common.utils.VersionUtil;
 import org.apache.maven.archiva.database.ArtifactDAO;
+import org.apache.maven.archiva.indexer.RepositoryContentIndex;
 import org.apache.maven.archiva.model.ArtifactReference;
 import org.apache.maven.archiva.model.VersionedReference;
 import org.apache.maven.archiva.repository.ContentNotFoundException;
@@ -32,6 +33,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -45,9 +47,9 @@
     private int retentionCount;
 
     public RetentionCountRepositoryPurge( ManagedRepositoryContent repository, ArtifactDAO artifactDao,
-                                          int retentionCount )
+                                          int retentionCount, Map<String, RepositoryContentIndex> indices )
     {
-        super( repository, artifactDao );
+        super( repository, artifactDao, indices );
         this.retentionCount = retentionCount;
     }
 

Modified: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java?rev=588598&r1=588597&r2=588598&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java Fri Oct 26 03:36:48 2007
@@ -20,28 +20,37 @@
  */
 
 import org.apache.commons.io.FileUtils;
+import org.apache.maven.archiva.consumers.core.repository.stubs.LuceneRepositoryContentIndexStub;
 import org.apache.maven.archiva.database.ArchivaDatabaseException;
+import org.apache.maven.archiva.indexer.RepositoryContentIndex;
 import org.apache.maven.archiva.repository.metadata.MetadataTools;
 import org.custommonkey.xmlunit.XMLAssert;
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
  */
 public class CleanupReleasedSnapshotsRepositoryPurgeTest
     extends AbstractRepositoryPurgeTest
-{
+{   
     protected void setUp()
         throws Exception
     {
         super.setUp();
 
+        Map<String, RepositoryContentIndex> map = new HashMap<String, RepositoryContentIndex>();
+        map.put( "filecontent", new LuceneRepositoryContentIndexStub() );
+        map.put( "hashcodes", new LuceneRepositoryContentIndexStub() );
+        map.put( "bytecode", new LuceneRepositoryContentIndexStub() );
+        
         MetadataTools metadataTools = (MetadataTools) lookup( MetadataTools.class );
         
-        repoPurge = new CleanupReleasedSnapshotsRepositoryPurge( getRepository(), dao, metadataTools );
+        repoPurge = new CleanupReleasedSnapshotsRepositoryPurge( getRepository(), dao, metadataTools, map );
     }
 
     public void testReleasedSnapshots()
@@ -50,6 +59,7 @@
         populateReleasedSnapshotsTest();
 
         String repoRoot = prepareTestRepo();
+        
 
         repoPurge.process( PATH_TO_RELEASED_SNAPSHOT );
 

Modified: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java?rev=588598&r1=588597&r2=588598&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java Fri Oct 26 03:36:48 2007
@@ -21,7 +21,12 @@
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.archiva.consumers.core.repository.stubs.LuceneRepositoryContentIndexStub;
+import org.apache.maven.archiva.indexer.RepositoryContentIndex;
 
 /**
  * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
@@ -35,8 +40,13 @@
     {
         super.setUp();
 
+        Map<String, RepositoryContentIndex> map = new HashMap<String, RepositoryContentIndex>();
+        map.put( "filecontent", new LuceneRepositoryContentIndexStub() );
+        map.put( "hashcodes", new LuceneRepositoryContentIndexStub() );
+        map.put( "bytecode", new LuceneRepositoryContentIndexStub() );
+        
         repoPurge =
-            new DaysOldRepositoryPurge( getRepository(), dao, getRepoConfiguration().getDaysOlder() );
+            new DaysOldRepositoryPurge( getRepository(), dao, getRepoConfiguration().getDaysOlder(), map );
     }
 
     private void setLastModified( String dirPath )

Modified: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java?rev=588598&r1=588597&r2=588598&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java Fri Oct 26 03:36:48 2007
@@ -20,7 +20,12 @@
 */
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.archiva.consumers.core.repository.stubs.LuceneRepositoryContentIndexStub;
+import org.apache.maven.archiva.indexer.RepositoryContentIndex;
 
 /**
  * Test RetentionsCountRepositoryPurgeTest
@@ -36,8 +41,13 @@
     {
         super.setUp();
 
+        Map<String, RepositoryContentIndex> map = new HashMap<String, RepositoryContentIndex>();
+        map.put( "filecontent", new LuceneRepositoryContentIndexStub() );
+        map.put( "hashcodes", new LuceneRepositoryContentIndexStub() );
+        map.put( "bytecode", new LuceneRepositoryContentIndexStub() );
+        
         repoPurge = new RetentionCountRepositoryPurge( getRepository(), dao,
-                                                       getRepoConfiguration().getRetentionCount() );
+                                                       getRepoConfiguration().getRetentionCount(), map );
     }
 
     /**

Added: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/stubs/LuceneRepositoryContentIndexFactoryStub.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/stubs/LuceneRepositoryContentIndexFactoryStub.java?rev=588598&view=auto
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/stubs/LuceneRepositoryContentIndexFactoryStub.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/stubs/LuceneRepositoryContentIndexFactoryStub.java Fri Oct 26 03:36:48 2007
@@ -0,0 +1,54 @@
+package org.apache.maven.archiva.consumers.core.repository.stubs;
+
+/*
+ * 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.maven.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.maven.archiva.indexer.RepositoryContentIndex;
+import org.apache.maven.archiva.indexer.RepositoryContentIndexFactory;
+
+/**
+ * LuceneRepositoryContenIndexFactoryStub
+ * 
+ * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
+ * @version
+ */
+public class LuceneRepositoryContentIndexFactoryStub
+    implements RepositoryContentIndexFactory
+{
+
+    public RepositoryContentIndex createBytecodeIndex( ManagedRepositoryConfiguration repository )
+    {
+        // TODO Auto-generated method stub
+        return new LuceneRepositoryContentIndexStub();
+    }
+
+    public RepositoryContentIndex createFileContentIndex( ManagedRepositoryConfiguration repository )
+    {
+        // TODO Auto-generated method stub
+        return new LuceneRepositoryContentIndexStub();
+    }
+
+    public RepositoryContentIndex createHashcodeIndex( ManagedRepositoryConfiguration repository )
+    {
+        // TODO Auto-generated method stub
+        return new LuceneRepositoryContentIndexStub();
+    }
+
+}

Added: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/stubs/LuceneRepositoryContentIndexStub.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/stubs/LuceneRepositoryContentIndexStub.java?rev=588598&view=auto
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/stubs/LuceneRepositoryContentIndexStub.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/stubs/LuceneRepositoryContentIndexStub.java Fri Oct 26 03:36:48 2007
@@ -0,0 +1,130 @@
+package org.apache.maven.archiva.consumers.core.repository.stubs;
+
+/*
+ * 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 java.io.File;
+import java.util.Collection;
+
+import junit.framework.Assert;
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.queryParser.QueryParser;
+import org.apache.lucene.search.Searchable;
+import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.maven.archiva.indexer.RepositoryContentIndex;
+import org.apache.maven.archiva.indexer.RepositoryIndexException;
+import org.apache.maven.archiva.indexer.RepositoryIndexSearchException;
+import org.apache.maven.archiva.indexer.lucene.LuceneEntryConverter;
+import org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentRecord;
+
+/**
+ * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
+ * @version
+ */
+public class LuceneRepositoryContentIndexStub
+    implements RepositoryContentIndex
+{
+
+    public void deleteRecords( Collection records )
+        throws RepositoryIndexException
+    {
+        // TODO Auto-generated method stub
+        Assert.assertEquals( 2, records.size() );
+    }
+
+    public boolean exists()
+        throws RepositoryIndexException
+    {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public Collection getAllRecordKeys()
+        throws RepositoryIndexException
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Analyzer getAnalyzer()
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public LuceneEntryConverter getEntryConverter()
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public String getId()
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public File getIndexDirectory()
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public QueryParser getQueryParser()
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public ManagedRepositoryConfiguration getRepository()
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Searchable getSearchable()
+        throws RepositoryIndexSearchException
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void indexRecords( Collection records )
+        throws RepositoryIndexException
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void modifyRecord( LuceneRepositoryContentRecord record )
+        throws RepositoryIndexException
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void modifyRecords( Collection records )
+        throws RepositoryIndexException
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+}

Modified: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.xml?rev=588598&r1=588597&r2=588598&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.xml (original)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.xml Fri Oct 26 03:36:48 2007
@@ -45,6 +45,11 @@
         <requirement>
           <role>org.apache.maven.archiva.configuration.FileTypes</role>
         </requirement>
+        <requirement>
+          <role>org.apache.maven.archiva.indexer.RepositoryContentIndexFactory</role>
+          <role-hint>lucene</role-hint>
+          <field-name>indexFactory</field-name>
+        </requirement>
       </requirements>
       <configuration>
         <id>repository-purge</id>
@@ -122,6 +127,11 @@
         <requirement>
           <role>org.apache.maven.archiva.configuration.FileTypes</role>
         </requirement>
+        <requirement>
+          <role>org.apache.maven.archiva.indexer.RepositoryContentIndexFactory</role>
+          <role-hint>lucene</role-hint>
+          <field-name>indexFactory</field-name>
+        </requirement>
       </requirements>
       <configuration>
         <id>repository-purge</id>
@@ -265,6 +275,13 @@
           </property>
         </otherProperties>
       </configuration>
+    </component>
+    
+    <!-- LuceneRepositoryIndexFactory -->
+    <component>
+      <role>org.apache.maven.archiva.indexer.RepositoryContentIndexFactory</role>
+      <role-hint>lucene</role-hint>
+      <implementation>org.apache.maven.archiva.consumers.core.repository.stubs.LuceneRepositoryContentIndexFactoryStub</implementation>
     </component>
 
   </components>

Modified: maven/archiva/trunk/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryContentIndex.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryContentIndex.java?rev=588598&r1=588597&r2=588598&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryContentIndex.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryContentIndex.java Fri Oct 26 03:36:48 2007
@@ -84,143 +84,156 @@
     public void modifyRecords( Collection records )
         throws RepositoryIndexException
     {
-        IndexModifier indexModifier = null;
-        try
+        synchronized( repository )
         {
-            indexModifier = new IndexModifier( indexLocation, indexHandlers.getAnalyzer(), !exists() );
-            indexModifier.setMaxFieldLength( MAX_FIELD_LENGTH );
-
-            for ( Iterator i = records.iterator(); i.hasNext(); )
+            IndexModifier indexModifier = null;
+            try
             {
-                LuceneRepositoryContentRecord record = (LuceneRepositoryContentRecord) i.next();
-
-                if ( record != null )
+                indexModifier = new IndexModifier( indexLocation, indexHandlers.getAnalyzer(), !exists() );
+                indexModifier.setMaxFieldLength( MAX_FIELD_LENGTH );
+    
+                for ( Iterator i = records.iterator(); i.hasNext(); )
                 {
-                    Term term = new Term( LuceneDocumentMaker.PRIMARY_KEY, record.getPrimaryKey() );
-
-                    indexModifier.deleteDocuments( term );
-
-                    Document document = indexHandlers.getConverter().convert( record );
-
-                    indexModifier.addDocument( document );
+                    LuceneRepositoryContentRecord record = (LuceneRepositoryContentRecord) i.next();
+    
+                    if ( record != null )
+                    {
+                        Term term = new Term( LuceneDocumentMaker.PRIMARY_KEY, record.getPrimaryKey() );
+    
+                        indexModifier.deleteDocuments( term );
+    
+                        Document document = indexHandlers.getConverter().convert( record );
+    
+                        indexModifier.addDocument( document );
+                    }
                 }
+                indexModifier.optimize();
             }
-            indexModifier.optimize();
-        }
-        catch ( IOException e )
-        {
-            throw new RepositoryIndexException( "Error updating index: " + e.getMessage(), e );
-        }
-        finally
-        {
-            closeQuietly( indexModifier );
-        }
-    }
-
-    public void modifyRecord( LuceneRepositoryContentRecord record )
-        throws RepositoryIndexException
-    {
-        IndexModifier indexModifier = null;
-        try
-        {
-            indexModifier = new IndexModifier( indexLocation, indexHandlers.getAnalyzer(), !exists() );
-            indexModifier.setMaxFieldLength( MAX_FIELD_LENGTH );
-
-            if ( record != null )
+            catch ( IOException e )
             {
-                Term term = new Term( LuceneDocumentMaker.PRIMARY_KEY, record.getPrimaryKey() );
-
-                indexModifier.deleteDocuments( term );
-
-                Document document = indexHandlers.getConverter().convert( record );
-
-                indexModifier.addDocument( document );
+                throw new RepositoryIndexException( "Error updating index: " + e.getMessage(), e );
+            }
+            finally
+            {
+                closeQuietly( indexModifier );
             }
-            indexModifier.optimize();
-        }
-        catch ( IOException e )
-        {
-            throw new RepositoryIndexException( "Error updating index: " + e.getMessage(), e );
-        }
-        finally
-        {
-            closeQuietly( indexModifier );
         }
     }
 
-    private void addRecords( Collection records )
+    public void modifyRecord( LuceneRepositoryContentRecord record )
         throws RepositoryIndexException
     {
-        IndexWriter indexWriter;
-        try
-        {
-            indexWriter = new IndexWriter( indexLocation, indexHandlers.getAnalyzer(), !exists() );
-            indexWriter.setMaxFieldLength( MAX_FIELD_LENGTH );
-        }
-        catch ( IOException e )
+        synchronized( repository )
         {
-            throw new RepositoryIndexException( "Unable to open index", e );
-        }
-
-        try
-        {
-            for ( Iterator i = records.iterator(); i.hasNext(); )
+            IndexModifier indexModifier = null;
+            try
             {
-                LuceneRepositoryContentRecord record = (LuceneRepositoryContentRecord) i.next();
-
+                indexModifier = new IndexModifier( indexLocation, indexHandlers.getAnalyzer(), !exists() );
+                indexModifier.setMaxFieldLength( MAX_FIELD_LENGTH );
+    
                 if ( record != null )
                 {
+                    Term term = new Term( LuceneDocumentMaker.PRIMARY_KEY, record.getPrimaryKey() );
+    
+                    indexModifier.deleteDocuments( term );
+    
                     Document document = indexHandlers.getConverter().convert( record );
-
-                    indexWriter.addDocument( document );
+    
+                    indexModifier.addDocument( document );
                 }
+                indexModifier.optimize();
+            }
+            catch ( IOException e )
+            {
+                throw new RepositoryIndexException( "Error updating index: " + e.getMessage(), e );
+            }
+            finally
+            {
+                closeQuietly( indexModifier );
             }
-
-            indexWriter.optimize();
-        }
-        catch ( IOException e )
-        {
-            throw new RepositoryIndexException( "Failed to add an index document", e );
-        }
-        finally
-        {
-            closeQuietly( indexWriter );
         }
     }
+        
 
-    public void deleteRecords( Collection records )
+    private void addRecords( Collection records )
         throws RepositoryIndexException
     {
-        if ( exists() )
+        synchronized( repository )
         {
-            IndexReader indexReader = null;
+            IndexWriter indexWriter;
+            try
+            {
+                indexWriter = new IndexWriter( indexLocation, indexHandlers.getAnalyzer(), !exists() );
+                indexWriter.setMaxFieldLength( MAX_FIELD_LENGTH );
+            }
+            catch ( IOException e )
+            {
+                throw new RepositoryIndexException( "Unable to open index", e );
+            }
+    
             try
             {
-                indexReader = IndexReader.open( indexLocation );
-
                 for ( Iterator i = records.iterator(); i.hasNext(); )
                 {
                     LuceneRepositoryContentRecord record = (LuceneRepositoryContentRecord) i.next();
-
+    
                     if ( record != null )
                     {
-                        Term term = new Term( LuceneDocumentMaker.PRIMARY_KEY, record.getPrimaryKey() );
-
-                        indexReader.deleteDocuments( term );
+                        Document document = indexHandlers.getConverter().convert( record );
+    
+                        indexWriter.addDocument( document );
                     }
                 }
+    
+                indexWriter.optimize();
             }
             catch ( IOException e )
             {
-                throw new RepositoryIndexException( "Error deleting document: " + e.getMessage(), e );
+                throw new RepositoryIndexException( "Failed to add an index document", e );
             }
             finally
             {
-                closeQuietly( indexReader );
+                closeQuietly( indexWriter );
             }
         }
     }
 
+    public void deleteRecords( Collection records )
+        throws RepositoryIndexException
+    {
+        synchronized( repository )
+        {
+            if ( exists() )
+            {
+                IndexReader indexReader = null;
+                try
+                {
+                    indexReader = IndexReader.open( indexLocation );
+    
+                    for ( Iterator i = records.iterator(); i.hasNext(); )
+                    {
+                        LuceneRepositoryContentRecord record = (LuceneRepositoryContentRecord) i.next();
+    
+                        if ( record != null )
+                        {
+                            Term term = new Term( LuceneDocumentMaker.PRIMARY_KEY, record.getPrimaryKey() );
+                            
+                            indexReader.deleteDocuments( term );                            
+                        }
+                    }
+                }
+                catch ( IOException e )
+                {
+                    throw new RepositoryIndexException( "Error deleting document: " + e.getMessage(), e );
+                }
+                finally
+                {
+                    closeQuietly( indexReader );
+                }
+            }
+        }
+    }
+    
     public Collection getAllRecordKeys()
         throws RepositoryIndexException
     {
@@ -230,38 +243,41 @@
     private List getAllFieldValues( String fieldName )
         throws RepositoryIndexException
     {
-        List keys = new ArrayList();
-
-        if ( exists() )
+        synchronized( repository )
         {
-            IndexReader indexReader = null;
-            TermEnum terms = null;
-            try
-            {
-                indexReader = IndexReader.open( indexLocation );
-
-                terms = indexReader.terms( new Term( fieldName, "" ) );
-                while ( fieldName.equals( terms.term().field() ) )
+            List keys = new ArrayList();
+    
+            if ( exists() )
+            {
+                IndexReader indexReader = null;
+                TermEnum terms = null;
+                try
                 {
-                    keys.add( terms.term().text() );
-
-                    if ( !terms.next() )
+                    indexReader = IndexReader.open( indexLocation );
+    
+                    terms = indexReader.terms( new Term( fieldName, "" ) );
+                    while ( fieldName.equals( terms.term().field() ) )
                     {
-                        break;
+                        keys.add( terms.term().text() );
+    
+                        if ( !terms.next() )
+                        {
+                            break;
+                        }
                     }
                 }
+                catch ( IOException e )
+                {
+                    throw new RepositoryIndexException( "Error deleting document: " + e.getMessage(), e );
+                }
+                finally
+                {
+                    closeQuietly( indexReader );
+                    closeQuietly( terms );
+                }
             }
-            catch ( IOException e )
-            {
-                throw new RepositoryIndexException( "Error deleting document: " + e.getMessage(), e );
-            }
-            finally
-            {
-                closeQuietly( indexReader );
-                closeQuietly( terms );
-            }
+            return keys;
         }
-        return keys;
     }
     
     public Searchable getSearchable()



Re: svn commit: r588598 - in /maven/archiva/trunk/archiva-base: archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/ archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consu...

Posted by Brett Porter <br...@apache.org>.
On 26/10/2007, at 8:36 PM, oching@apache.org wrote:

> +
> +        try
> +        {
> +            updateIndices( fileContentRecords, hashcodeRecords,  
> bytecodeRecords );
> +        }
> +        catch ( RepositoryIndexException e )
> +        {
> +            // Ignore
> +        }


seems to make sense not to re-throw this, but I wonder whether it  
could log the error?

Cheers,
Brett

--
Brett Porter - brett@apache.org
Blog: http://www.devzuz.org/blogs/bporter/