You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ol...@apache.org on 2011/11/02 23:33:35 UTC

svn commit: r1196846 - in /archiva/trunk: ./ archiva-modules/archiva-base/archiva-indexer/ archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/merger/ archiva-modules/archiva-base/archiva-indexer/src/main/resources/MET...

Author: olamy
Date: Wed Nov  2 22:33:35 2011
New Revision: 1196846

URL: http://svn.apache.org/viewvc?rev=1196846&view=rev
Log:
[MRM-815] aggregate indices for repository groups.
cleanup created temp directories.

Modified:
    archiva/trunk/archiva-modules/archiva-base/archiva-indexer/pom.xml
    archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/merger/DefaultIndexMerger.java
    archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/resources/META-INF/spring-context.xml
    archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/tomcat/log4j.xml
    archiva/trunk/pom.xml

Modified: archiva/trunk/archiva-modules/archiva-base/archiva-indexer/pom.xml
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-indexer/pom.xml?rev=1196846&r1=1196845&r2=1196846&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-base/archiva-indexer/pom.xml (original)
+++ archiva/trunk/archiva-modules/archiva-base/archiva-indexer/pom.xml Wed Nov  2 22:33:35 2011
@@ -34,6 +34,20 @@
       <artifactId>archiva-repository-admin-api</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.archiva</groupId>
+      <artifactId>archiva-common</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-context</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
+      <artifactId>spring-context-support</artifactId>
+    </dependency>
+
+    <dependency>
       <groupId>org.apache.lucene</groupId>
       <artifactId>lucene-core</artifactId>
     </dependency>

Modified: archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/merger/DefaultIndexMerger.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/merger/DefaultIndexMerger.java?rev=1196846&r1=1196845&r2=1196846&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/merger/DefaultIndexMerger.java (original)
+++ archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/merger/DefaultIndexMerger.java Wed Nov  2 22:33:35 2011
@@ -19,21 +19,28 @@ package org.apache.archiva.indexer.merge
  */
 
 import com.google.common.io.Files;
-import com.google.inject.Inject;
 import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
 import org.apache.archiva.common.plexusbridge.MavenIndexerUtils;
 import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
 import org.apache.archiva.common.plexusbridge.PlexusSisuBridgeException;
+import org.apache.commons.io.FileUtils;
 import org.apache.maven.index.NexusIndexer;
 import org.apache.maven.index.context.IndexingContext;
 import org.apache.maven.index.context.UnsupportedExistingLuceneIndexException;
 import org.apache.maven.index.packer.IndexPacker;
 import org.apache.maven.index.packer.IndexPackingRequest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
+import javax.inject.Inject;
 import java.io.File;
 import java.io.IOException;
 import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 /**
  * @author Olivier Lamy
@@ -44,6 +51,8 @@ public class DefaultIndexMerger
     implements IndexMerger
 {
 
+    private Logger log = LoggerFactory.getLogger( getClass() );
+
     @Inject
     private ManagedRepositoryAdmin managedRepositoryAdmin;
 
@@ -53,7 +62,9 @@ public class DefaultIndexMerger
 
     private IndexPacker indexPacker;
 
-    @javax.inject.Inject
+    private List<TemporaryIndex> temporaryIndexes = new CopyOnWriteArrayList<TemporaryIndex>();
+
+    @Inject
     public DefaultIndexMerger( PlexusSisuBridge plexusSisuBridge, MavenIndexerUtils mavenIndexerUtils )
         throws PlexusSisuBridgeException
     {
@@ -93,6 +104,7 @@ public class DefaultIndexMerger
                 IndexPackingRequest request = new IndexPackingRequest( indexingContext, indexLocation );
                 indexPacker.packIndex( request );
             }
+            temporaryIndexes.add( new TemporaryIndex( tempRepoFile ) );
             return indexingContext.getIndexDirectoryFile();
         }
         catch ( IOException e )
@@ -104,4 +116,60 @@ public class DefaultIndexMerger
             throw new IndexMergerException( e.getMessage(), e );
         }
     }
+
+
+    @Scheduled( fixedDelay = 900000 )
+    public void cleanTemporaryIndex()
+    {
+        for ( TemporaryIndex temporaryIndex : temporaryIndexes )
+        {
+            // cleanup files older than 30 minutes
+            if ( new Date().getTime() - temporaryIndex.creationTime > 1800000 )
+            {
+                try
+                {
+                    FileUtils.deleteDirectory( temporaryIndex.directory );
+                    temporaryIndexes.remove( temporaryIndex );
+                    log.debug( "remove directory {}", temporaryIndex.directory );
+                }
+                catch ( IOException e )
+                {
+                    log.warn( "failed to remove directory:" + temporaryIndex.directory, e );
+                }
+            }
+            temporaryIndexes.remove( temporaryIndex );
+        }
+    }
+
+    private static class TemporaryIndex
+    {
+        private long creationTime = new Date().getTime();
+
+        private File directory;
+
+        TemporaryIndex( File directory )
+        {
+            this.directory = directory;
+        }
+
+        @Override
+        public int hashCode()
+        {
+            return Long.toString( creationTime ).hashCode();
+        }
+
+        @Override
+        public boolean equals( Object o )
+        {
+            if ( this == o )
+            {
+                return true;
+            }
+            if ( !( o instanceof TemporaryIndex ) )
+            {
+                return false;
+            }
+            return this.creationTime == ( (TemporaryIndex) o ).creationTime;
+        }
+    }
 }

Modified: archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/resources/META-INF/spring-context.xml
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/resources/META-INF/spring-context.xml?rev=1196846&r1=1196845&r2=1196846&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/resources/META-INF/spring-context.xml (original)
+++ archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/resources/META-INF/spring-context.xml Wed Nov  2 22:33:35 2011
@@ -22,17 +22,27 @@
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
+       xmlns:task="http://www.springframework.org/schema/task"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context
-           http://www.springframework.org/schema/context/spring-context-3.0.xsd"
-       default-lazy-init="true">
+           http://www.springframework.org/schema/context/spring-context-3.0.xsd
+           http://www.springframework.org/schema/task
+            http://www.springframework.org/schema/task/spring-task-3.0.xsd"
+       default-lazy-init="false">
 
   <context:annotation-config/>
   <context:component-scan base-package="org.apache.archiva.indexer.search,org.apache.archiva.indexer.merger"/>
 
   <bean id="logger" class="org.apache.archiva.common.utils.Slf4JPlexusLogger">
-    <constructor-arg type="java.lang.Class"><value>org.sonatype.nexus.index.DefaultNexusIndexer</value></constructor-arg>
+    <constructor-arg type="java.lang.Class">
+      <value>org.apache.maven.index.DefaultNexusIndexer</value>
+    </constructor-arg>
   </bean>
 
+
+  <task:executor id="springExecutor" pool-size="2"/>
+  <task:scheduler id="springScheduler" pool-size="2"/>
+  <task:annotation-driven executor="springExecutor" scheduler="springScheduler"/>
+
 </beans>
\ No newline at end of file

Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/tomcat/log4j.xml
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/tomcat/log4j.xml?rev=1196846&r1=1196845&r2=1196846&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/tomcat/log4j.xml (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/tomcat/log4j.xml Wed Nov  2 22:33:35 2011
@@ -73,6 +73,10 @@
     <level value="info"/>
   </logger>
 
+  <logger name="org.apache.archiva.indexer.merger">
+    <level value="debug"/>
+  </logger>
+
   <root>
     <priority value ="info" />
     <appender-ref ref="console" />

Modified: archiva/trunk/pom.xml
URL: http://svn.apache.org/viewvc/archiva/trunk/pom.xml?rev=1196846&r1=1196845&r2=1196846&view=diff
==============================================================================
--- archiva/trunk/pom.xml (original)
+++ archiva/trunk/pom.xml Wed Nov  2 22:33:35 2011
@@ -1223,6 +1223,17 @@
       </dependency>
       <dependency>
         <groupId>org.springframework</groupId>
+        <artifactId>spring-context-support</artifactId>
+        <version>${spring.version}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+          </exclusion>
+        </exclusions>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
         <artifactId>spring-web</artifactId>
         <version>${spring.version}</version>
         <exclusions>