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 2013/12/17 08:29:40 UTC

svn commit: r1551476 - /archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/merger/DefaultIndexMerger.java

Author: olamy
Date: Tue Dec 17 07:29:40 2013
New Revision: 1551476

URL: http://svn.apache.org/r1551476
Log:
prevent running in parrallel

Modified:
    archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/merger/DefaultIndexMerger.java

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=1551476&r1=1551475&r2=1551476&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 Tue Dec 17 07:29:40 2013
@@ -65,6 +65,8 @@ public class DefaultIndexMerger
 
     private List<TemporaryGroupIndex> temporaryGroupIndexes = new CopyOnWriteArrayList<TemporaryGroupIndex>();
 
+    private List<String> runningGroups = new CopyOnWriteArrayList<String>();
+
     @Inject
     public DefaultIndexMerger( PlexusSisuBridge plexusSisuBridge, MavenIndexerUtils mavenIndexerUtils )
         throws PlexusSisuBridgeException
@@ -77,19 +79,29 @@ public class DefaultIndexMerger
     public IndexingContext buildMergedIndex( IndexMergerRequest indexMergerRequest )
         throws IndexMergerException
     {
+        String groupId = indexMergerRequest.getGroupId();
+
+        if ( runningGroups.contains( groupId ) )
+        {
+            log.info( "skip build merge remote indexes for id: '{}' as already running", groupId );
+            return null;
+        }
+
+        runningGroups.add( groupId );
+
         StopWatch stopWatch = new StopWatch();
         stopWatch.reset();
         stopWatch.start();
 
-        File tempRepoFile = indexMergerRequest.getMergedIndexDirectory();
+        File mergedIndexDirectory = indexMergerRequest.getMergedIndexDirectory();
 
-        String tempRepoId = tempRepoFile.getName();
+        String tempRepoId = mergedIndexDirectory.getName();
 
         try
         {
-            File indexLocation = new File( tempRepoFile, indexMergerRequest.getMergedIndexPath() );
+            File indexLocation = new File( mergedIndexDirectory, indexMergerRequest.getMergedIndexPath() );
             IndexingContext indexingContext =
-                indexer.addIndexingContext( tempRepoId, tempRepoId, tempRepoFile, indexLocation, null, null,
+                indexer.addIndexingContext( tempRepoId, tempRepoId, mergedIndexDirectory, indexLocation, null, null,
                                             mavenIndexerUtils.getAllIndexCreators() );
 
             for ( String repoId : indexMergerRequest.getRepositoriesIds() )
@@ -108,8 +120,8 @@ public class DefaultIndexMerger
                 IndexPackingRequest request = new IndexPackingRequest( indexingContext, indexLocation );
                 indexPacker.packIndex( request );
             }
-            temporaryGroupIndexes.add(
-                new TemporaryGroupIndex( tempRepoFile, tempRepoId, indexMergerRequest.getGroupId(), indexMergerRequest.getMergedIndexTtl() ) );
+            temporaryGroupIndexes.add( new TemporaryGroupIndex( mergedIndexDirectory, tempRepoId, groupId,
+                                                                indexMergerRequest.getMergedIndexTtl() ) );
             stopWatch.stop();
             log.info( "merged index for repos {} in {} s", indexMergerRequest.getRepositoriesIds(),
                       stopWatch.getTime() );
@@ -123,6 +135,10 @@ public class DefaultIndexMerger
         {
             throw new IndexMergerException( e.getMessage(), e );
         }
+        finally
+        {
+            runningGroups.remove( groupId );
+        }
     }
 
     @Async