[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