diff options
author | Olivier Lamy <olamy@apache.org> | 2013-12-17 07:29:40 +0000 |
---|---|---|
committer | Olivier Lamy <olamy@apache.org> | 2013-12-17 07:29:40 +0000 |
commit | d5830c882e5d5c89aacf52522d3e496645a6583a (patch) | |
tree | 9d6dc1bb8e56470c20a2558d26251d493174f3a7 /archiva-modules/archiva-base | |
parent | 1e1f7cdacd0118a5fb9a707871c7b7100b7f09d2 (diff) | |
download | archiva-d5830c882e5d5c89aacf52522d3e496645a6583a.tar.gz archiva-d5830c882e5d5c89aacf52522d3e496645a6583a.zip |
prevent running in parrallel
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1551476 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'archiva-modules/archiva-base')
-rw-r--r-- | archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/merger/DefaultIndexMerger.java | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/merger/DefaultIndexMerger.java b/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/merger/DefaultIndexMerger.java index 4a939cb49..68ab59791 100644 --- a/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/merger/DefaultIndexMerger.java +++ b/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/merger/DefaultIndexMerger.java @@ -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 |