]> source.dussan.org Git - archiva.git/commitdiff
prevent running in parrallel
authorOlivier Lamy <olamy@apache.org>
Tue, 17 Dec 2013 07:29:40 +0000 (07:29 +0000)
committerOlivier Lamy <olamy@apache.org>
Tue, 17 Dec 2013 07:29:40 +0000 (07:29 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1551476 13f79535-47bb-0310-9956-ffa450edef68

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

index 4a939cb491afb422ccb916c537e2be770ca0c00f..68ab59791aab881f10407fa6d058a41d75f04e6d 100644 (file)
@@ -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