[prev in list] [next in list] [prev in thread] [next in thread]
List: maven-dev
Subject: svn commit: r939220 - in /maven/maven-3/trunk/maven-core/src:
From: krosenvold () apache ! org
Date: 2010-04-29 7:22:39
Message-ID: 20100429072239.8B9CF23889CB () eris ! apache ! org
[Download RAW message or body]
Author: krosenvold
Date: Thu Apr 29 07:22:39 2010
New Revision: 939220
URL: http://svn.apache.org/viewvc?rev=939220&view=rev
Log:
[MNG-4633] Changed to use nice clean countdownlatch instead of synchronized booleans
Also updated phase locking to only lock when project being built changes phase
Modified:
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionPlanItem.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleWeaveBuilder.java
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/MavenExecutionPlanTest.java
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ExecutionPlanItemTest.java
Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionPlanItem.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apa \
che/maven/lifecycle/internal/ExecutionPlanItem.java?rev=939220&r1=939219&r2=939220&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionPlanItem.java \
(original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionPlanItem.java \
Thu Apr 29 07:22:39 2010 @@ -19,7 +19,7 @@ import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.MojoExecution;
import org.apache.maven.plugin.descriptor.MojoDescriptor;
-import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.CountDownLatch;
/**
* Wraps individual MojoExecutions, containing information about completion status \
and scheduling. @@ -35,9 +35,7 @@ public class ExecutionPlanItem
private final Schedule schedule;
// Completeness just indicates that it has been run or failed
- private final AtomicBoolean complete = new AtomicBoolean( false );
-
- private final Object monitor = new Object();
+ private final CountDownLatch done = new CountDownLatch( 1 );
public ExecutionPlanItem( MojoExecution mojoExecution, Schedule schedule )
{
@@ -57,47 +55,23 @@ public class ExecutionPlanItem
public void setComplete()
{
- boolean transitionSuccessful = ensureComplete();
- if ( !transitionSuccessful )
- {
- throw new IllegalStateException( "Expected to be able to setComplete \
node, but was complete already" );
- }
- }
-
- public boolean ensureComplete()
- {
- boolean f = complete.compareAndSet( false, true );
- notifyListeners();
- return f;
+ done.countDown();
}
- private void notifyListeners()
+ public boolean isDone()
{
- synchronized ( monitor )
- {
- monitor.notifyAll();
- }
+ return done.getCount() < 1;
}
public void forceComplete()
{
- final boolean b = complete.getAndSet( true );
- if ( !b )
- {
- notifyListeners();
- } // Release anyone waiting for us
+ setComplete();
}
public void waitUntilDone()
throws InterruptedException
{
- synchronized ( monitor )
- {
- while ( !complete.get() )
- {
- monitor.wait( 100 );
- }
- }
+ done.await();
}
public Schedule getSchedule()
Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleWeaveBuilder.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apa \
che/maven/lifecycle/internal/LifecycleWeaveBuilder.java?rev=939220&r1=939219&r2=939220&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleWeaveBuilder.java \
(original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleWeaveBuilder.java \
Thu Apr 29 07:22:39 2010 @@ -205,7 +205,7 @@ public class LifecycleWeaveBuilder
builtLogItem.setComplete();
ExecutionPlanItem nextPlanItem = planItems.hasNext() ? \
planItems.next() : null;
- if ( nextPlanItem != null )
+ if ( nextPlanItem != null && phaseRecorder.isDifferentPhase( \
nextPlanItem.getMojoExecution() ) ) {
final Schedule scheduleOfNext = \
nextPlanItem.getSchedule(); @@ -215,12 +215,9 @@ public class LifecycleWeaveBuilder
\
projectBuild ); }
- if ( phaseRecorder.isDifferentPhase( \
nextPlanItem.getMojoExecution() ) ) + for ( ArtifactLink \
dependencyLink : dependencyLinks ) {
- for ( ArtifactLink dependencyLink : dependencyLinks \
)
- {
- dependencyLink.resolveFromUpstream();
- }
+ dependencyLink.resolveFromUpstream();
}
}
current = nextPlanItem;
@@ -259,13 +256,13 @@ public class LifecycleWeaveBuilder
{
final MavenExecutionPlan upstreamPlan = executionPlans.get( \
upstreamProject ); final String nextPhase = nextPlanItem.getLifecyclePhase();
- final ExecutionPlanItem inSchedule = upstreamPlan.findLastInPhase( \
nextPhase ); + final ExecutionPlanItem upstream = \
upstreamPlan.findLastInPhase( nextPhase );
- if ( inSchedule != null )
+ if ( upstream != null )
{
long startWait = System.currentTimeMillis();
- inSchedule.waitUntilDone();
- builtLogItem.addWait( upstreamProject, inSchedule, startWait );
+ upstream.waitUntilDone();
+ builtLogItem.addWait( upstreamProject, upstream, startWait );
}
else if ( !upstreamPlan.containsPhase( nextPhase ) )
{
Modified: maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/MavenExecutionPlanTest.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/test/java/org/apa \
che/maven/lifecycle/MavenExecutionPlanTest.java?rev=939220&r1=939219&r2=939220&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/MavenExecutionPlanTest.java \
(original)
+++ maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/MavenExecutionPlanTest.java \
Thu Apr 29 07:22:39 2010 @@ -46,8 +46,8 @@ public class MavenExecutionPlanTest
MavenExecutionPlan plan = \
LifecycleExecutionPlanCalculatorStub.getProjectAExceutionPlan(); \
plan.forceAllComplete();
final Iterator<ExecutionPlanItem> planItemIterator = plan.iterator();
- assertFalse( planItemIterator.next().ensureComplete() );
- assertFalse( planItemIterator.next().ensureComplete() );
+ assertTrue( planItemIterator.next().isDone() );
+ assertTrue( planItemIterator.next().isDone() );
}
public void testFindLastInPhase()
Modified: maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ExecutionPlanItemTest.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/test/java/org/apa \
che/maven/lifecycle/internal/ExecutionPlanItemTest.java?rev=939220&r1=939219&r2=939220&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ExecutionPlanItemTest.java \
(original)
+++ maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ExecutionPlanItemTest.java \
Thu Apr 29 07:22:39 2010 @@ -31,7 +31,7 @@ public class ExecutionPlanItemTest
{
ExecutionPlanItem item = createExecutionPlanItem( "testMojo", null );
item.setComplete(); // This itself is a valid test
- assertFalse( item.ensureComplete() );
+ assertTrue( item.isDone() );
}
public void testWaitUntilDone()
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic