You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by oc...@apache.org on 2008/12/17 03:06:45 UTC

svn commit: r727244 - in /continuum/branches/continuum-parallel-builds: continuum-api/src/main/java/org/apache/continuum/buildmanager/ continuum-api/src/main/java/org/apache/continuum/taskqueue/ continuum-core/src/main/java/org/apache/continuum/buildma...

Author: oching
Date: Tue Dec 16 18:06:44 2008
New Revision: 727244

URL: http://svn.apache.org/viewvc?rev=727244&view=rev
Log:
additional fixes

Modified:
    continuum/branches/continuum-parallel-builds/continuum-api/src/main/java/org/apache/continuum/buildmanager/BuildsManager.java
    continuum/branches/continuum-parallel-builds/continuum-api/src/main/java/org/apache/continuum/taskqueue/OverallBuildQueue.java
    continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/buildmanager/ParallelBuildsManager.java
    continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/taskqueue/DefaultOverallBuildQueue.java
    continuum/branches/continuum-parallel-builds/continuum-core/src/test/java/org/apache/continuum/buildmanager/ParallelBuildsManagerTest.java
    continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/BuildQueueAction.java
    continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/editParallelBuilds.jsp

Modified: continuum/branches/continuum-parallel-builds/continuum-api/src/main/java/org/apache/continuum/buildmanager/BuildsManager.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-parallel-builds/continuum-api/src/main/java/org/apache/continuum/buildmanager/BuildsManager.java?rev=727244&r1=727243&r2=727244&view=diff
==============================================================================
--- continuum/branches/continuum-parallel-builds/continuum-api/src/main/java/org/apache/continuum/buildmanager/BuildsManager.java (original)
+++ continuum/branches/continuum-parallel-builds/continuum-api/src/main/java/org/apache/continuum/buildmanager/BuildsManager.java Tue Dec 16 18:06:44 2008
@@ -23,8 +23,8 @@
 import java.util.List;
 import java.util.Map;
 
-import org.apache.continuum.taskqueue.OverallBuildQueue;
 import org.apache.maven.continuum.model.project.BuildDefinition;
+import org.apache.maven.continuum.model.project.BuildQueue;
 import org.apache.maven.continuum.model.project.Project;
 import org.codehaus.plexus.taskqueue.Task;
 
@@ -207,9 +207,10 @@
     /**
      * Add an overall build queue.
      * 
-     * @param overallBuildQueue
+     * @param buildQueue
+     * @throws BuildManagerException TODO
      */
-    void addOverallBuildQueue( OverallBuildQueue overallBuildQueue );
+    void addOverallBuildQueue( BuildQueue buildQueue ) throws BuildManagerException;
 
     /**
      * Remove an overall build queue.

Modified: continuum/branches/continuum-parallel-builds/continuum-api/src/main/java/org/apache/continuum/taskqueue/OverallBuildQueue.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-parallel-builds/continuum-api/src/main/java/org/apache/continuum/taskqueue/OverallBuildQueue.java?rev=727244&r1=727243&r2=727244&view=diff
==============================================================================
--- continuum/branches/continuum-parallel-builds/continuum-api/src/main/java/org/apache/continuum/taskqueue/OverallBuildQueue.java (original)
+++ continuum/branches/continuum-parallel-builds/continuum-api/src/main/java/org/apache/continuum/taskqueue/OverallBuildQueue.java Tue Dec 16 18:06:44 2008
@@ -21,8 +21,6 @@
 
 import java.util.List;
 
-import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
 import org.codehaus.plexus.taskqueue.Task;
 import org.codehaus.plexus.taskqueue.TaskQueue;
 import org.codehaus.plexus.taskqueue.TaskQueueException;
@@ -186,19 +184,15 @@
      * Cancel the build task of the corresponding project.
      * 
      * @param projectId
-     * @throws ComponentLookupException TODO
      */
-    void cancelBuildTask( int projectId )
-        throws ComponentLookupException;
+    void cancelBuildTask( int projectId );
 
     /**
      * Cancel the current build.
      * 
      * @return
-     * @throws ComponentLookupException TODO
      */
-    boolean cancelCurrentBuild()
-        throws ComponentLookupException;
+    boolean cancelCurrentBuild();
 
     /**
      * Remove the project matching the specified id, name, build definition and trigger from the build queue.

Modified: continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/buildmanager/ParallelBuildsManager.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/buildmanager/ParallelBuildsManager.java?rev=727244&r1=727243&r2=727244&view=diff
==============================================================================
--- continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/buildmanager/ParallelBuildsManager.java (original)
+++ continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/buildmanager/ParallelBuildsManager.java Tue Dec 16 18:06:44 2008
@@ -50,7 +50,6 @@
 import org.codehaus.plexus.taskqueue.TaskQueue;
 import org.codehaus.plexus.taskqueue.TaskQueueException;
 import org.codehaus.plexus.taskqueue.execution.TaskQueueExecutor;
-import org.codehaus.plexus.taskqueue.execution.ThreadedTaskQueueExecutor;
 import org.codehaus.plexus.util.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -61,7 +60,7 @@
  * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
  * @plexus.component role="org.apache.continuum.buildmanager.BuildsManager" role-hint="parallel"
  */
-public class ParallelBuildsManager
+public class ParallelBuildsManager    
     implements BuildsManager, Contextualizable
 {
     private Logger log = LoggerFactory.getLogger( ParallelBuildsManager.class );
@@ -213,23 +212,15 @@
     {
         synchronized ( overallBuildQueues )
         {
-            OverallBuildQueue overallBuildQueue = null;
-            try
+            OverallBuildQueue overallBuildQueue = null;            
+            overallBuildQueue = overallBuildQueues.get( buildQueueId );
+            if ( overallBuildQueue != null )
             {
-                overallBuildQueue = overallBuildQueues.get( buildQueueId );
-                if ( overallBuildQueue != null )
-                {
-                    overallBuildQueue.cancelCurrentBuild();
-                }
-                else
-                {
-                    log.warn( "Project not found in any of the build queues." );
-                }
+                overallBuildQueue.cancelCurrentBuild();
             }
-            catch ( ComponentLookupException e )
+            else
             {
-                log.error( e.getMessage() );
-                throw new BuildManagerException( e.getMessage() );
+                log.warn( "Project not found in any of the build queues." );
             }
 
             return true;
@@ -243,19 +234,10 @@
         {
             Set<Integer> keySet = overallBuildQueues.keySet();
             OverallBuildQueue overallBuildQueue = null;
-
-            try
-            {
-                for ( Integer key : keySet )
-                {
-                    overallBuildQueue = overallBuildQueues.get( key );
-                    overallBuildQueue.cancelCurrentBuild();
-                }
-            }
-            catch ( ComponentLookupException e )
+            for ( Integer key : keySet )
             {
-                log.error( e.getMessage() );
-                throw new BuildManagerException( e.getMessage() );
+                overallBuildQueue = overallBuildQueues.get( key );
+                overallBuildQueue.cancelCurrentBuild();
             }
 
             return true;
@@ -289,11 +271,7 @@
         {
             throw new BuildManagerException( "Error occurred while cancelling build: " + e.getMessage() );
         }
-        catch ( ComponentLookupException e )
-        {
-            throw new BuildManagerException( e.getMessage() );
-        }
-
+        
         return true;
     }
 
@@ -623,17 +601,30 @@
         }
     }
     
-    public void addOverallBuildQueue( OverallBuildQueue overallBuildQueue )
-    {   
+    public void addOverallBuildQueue( BuildQueue buildQueue )
+        throws BuildManagerException
+    {
         synchronized ( overallBuildQueues )
         {
-            if ( overallBuildQueues.get( overallBuildQueue.getId() ) == null )
+            try
             {
-                this.overallBuildQueues.put( overallBuildQueue.getId(), overallBuildQueue );
+                OverallBuildQueue overallBuildQueue = (OverallBuildQueue) container.lookup( OverallBuildQueue.class );
+                overallBuildQueue.setId( buildQueue.getId() );
+                overallBuildQueue.setName( buildQueue.getName() );
+                
+                if ( overallBuildQueues.get( buildQueue.getId() ) == null )
+                {
+                    log.info( "Adding overall build queue to map : " + overallBuildQueue.getName() );
+                    overallBuildQueues.put( overallBuildQueue.getId(), overallBuildQueue );
+                }
+                else
+                {
+                    log.warn( "Overall build queue already in the map." );
+                }
             }
-            else
-            {
-                log.warn( "Overall build queue already in the map" );
+            catch ( ComponentLookupException e )
+            {                
+                throw new BuildManagerException( "Error creating overall build queue.", e );
             }
         }
     }
@@ -733,24 +724,6 @@
             
             return currentBuilds;
         }
-        /*try
-        {
-            List<Object> objects = container.lookupList( ThreadedTaskQueueExecutor.class );
-            for ( Object obj : objects )
-            {
-                log.info( "Task queue executor : " + obj );
-                ThreadedTaskQueueExecutor executor = (ThreadedTaskQueueExecutor) obj;
-                Task task = executor.getCurrentTask();
-                if ( task instanceof BuildProjectTask )
-                {
-                    currentBuilds.add( task );
-                }
-            }
-        }
-        catch ( ComponentLookupException e )
-        {
-            throw new BuildManagerException( e.getMessage() );
-        }*/
     }
 
     public List<Task> getCurrentCheckouts()
@@ -936,9 +909,10 @@
             int size = 0;
             int idx = 0;
             try
-            {
+            {   
                 for ( BuildQueue buildQueue : buildQueues )
                 {
+                    log.info( "BUILD QUEUE : " + buildQueue.getId() + " : " + buildQueue.getName() );                    
                     OverallBuildQueue overallBuildQueue = overallBuildQueues.get( buildQueue.getId() );
                     if ( overallBuildQueue != null )
                     {
@@ -951,6 +925,8 @@
                         {
                             taskQueue = overallBuildQueue.getCheckoutQueue();
                         }
+                        
+                        log.info( "SIZE OF TASK QUEUE :: " + taskQueue.getQueueSnapshot().size() );
 
                         if ( idx == 0 )
                         {
@@ -979,9 +955,19 @@
         }
 
         if ( whereToBeQueued == null )
-        {
-            // TODO queue in the default overall build queue
-            throw new BuildManagerException( "No build queue found." );
+        {     
+            Set<Integer> keySet = overallBuildQueues.keySet();
+            for( Integer key : keySet )
+            {
+                OverallBuildQueue overallBuildQueue = overallBuildQueues.get( key );
+                log.info( "OVERALLBUILD QUEUE :: " + overallBuildQueue.getId() + " : "
+                          + overallBuildQueue.getName() );
+                if( overallBuildQueue.getName().equals( ConfigurationService.DEFAULT_BUILD_QUEUE_NAME ) )
+                {
+                    return overallBuildQueue;
+                }
+            }            
+            //throw new BuildManagerException( "No build queue found." );
         }
 
         return whereToBeQueued;

Modified: continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/taskqueue/DefaultOverallBuildQueue.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/taskqueue/DefaultOverallBuildQueue.java?rev=727244&r1=727243&r2=727244&view=diff
==============================================================================
--- continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/taskqueue/DefaultOverallBuildQueue.java (original)
+++ continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/taskqueue/DefaultOverallBuildQueue.java Tue Dec 16 18:06:44 2008
@@ -29,8 +29,6 @@
 import org.apache.maven.continuum.model.project.BuildDefinition;
 import org.apache.maven.continuum.scm.queue.CheckOutTask;
 import org.apache.maven.continuum.store.ContinuumStoreException;
-import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
 import org.codehaus.plexus.taskqueue.Task;
 import org.codehaus.plexus.taskqueue.TaskQueue;
 import org.codehaus.plexus.taskqueue.TaskQueueException;
@@ -45,7 +43,7 @@
  * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
  * @plexus.component role="org.apache.continuum.taskqueue.OverallBuildQueue" instantiation-strategy="per-lookup"
  */
-public class DefaultOverallBuildQueue
+public class DefaultOverallBuildQueue   
     implements OverallBuildQueue
 {
     /**
@@ -68,7 +66,7 @@
     private String name;
     
     private Logger log = LoggerFactory.getLogger( DefaultOverallBuildQueue.class );
-
+    
     public int getId()
     {
         return id;
@@ -281,7 +279,6 @@
      * @see OverallBuildQueue#cancelBuildTask(int)
      */
     public void cancelBuildTask( int projectId )
-        throws ComponentLookupException
     {
         BuildProjectTask task = (BuildProjectTask) buildTaskQueueExecutor.getCurrentTask();
         if( task != null && task.getProjectId() == projectId )
@@ -296,7 +293,6 @@
      * @see OverallBuildQueue#cancelCurrentBuild()
      */
     public boolean cancelCurrentBuild()
-        throws ComponentLookupException
     {
         Task task = buildTaskQueueExecutor.getCurrentTask();
         if( task != null )

Modified: continuum/branches/continuum-parallel-builds/continuum-core/src/test/java/org/apache/continuum/buildmanager/ParallelBuildsManagerTest.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-parallel-builds/continuum-core/src/test/java/org/apache/continuum/buildmanager/ParallelBuildsManagerTest.java?rev=727244&r1=727243&r2=727244&view=diff
==============================================================================
--- continuum/branches/continuum-parallel-builds/continuum-core/src/test/java/org/apache/continuum/buildmanager/ParallelBuildsManagerTest.java (original)
+++ continuum/branches/continuum-parallel-builds/continuum-core/src/test/java/org/apache/continuum/buildmanager/ParallelBuildsManagerTest.java Tue Dec 16 18:06:44 2008
@@ -108,14 +108,15 @@
     }
 
     private void setupOverallBuildQueues()
-    {
+        throws Exception
+    {   
         for ( int i = 2; i <= 5; i++ )
         {
-            OverallBuildQueue overallBuildQueue = (OverallBuildQueue) lookup( OverallBuildQueue.class );
-            overallBuildQueue.setId( i );
-            overallBuildQueue.setName( "BUILD_QUEUE_" + String.valueOf( i ) );
-
-            buildsManager.addOverallBuildQueue( overallBuildQueue );
+            BuildQueue buildQueue = new BuildQueue();
+            buildQueue.setId( i );
+            buildQueue.setName( "BUILD_QUEUE_" + String.valueOf( i ) );
+                        
+            buildsManager.addOverallBuildQueue( buildQueue );
         }
 
         assertEquals( 5, buildsManager.getOverallBuildQueues().size() );
@@ -553,11 +554,11 @@
     public void testNoBuildQueuesConfigured()
         throws Exception
     {
-        OverallBuildQueue overallBuildQueue = (OverallBuildQueue) lookup( OverallBuildQueue.class );
-        overallBuildQueue.setId( 1 );
-        overallBuildQueue.setName( "BUILD_QUEUE_1" );
+        BuildQueue buildQueue = new BuildQueue();
+        buildQueue.setId( 1 );
+        buildQueue.setName( "BUILD_QUEUE_1" );
 
-        buildsManager.addOverallBuildQueue( overallBuildQueue );
+        buildsManager.addOverallBuildQueue( buildQueue );
 
         BuildDefinition buildDef = new BuildDefinition();
         buildDef.setId( 1 );

Modified: continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/BuildQueueAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/BuildQueueAction.java?rev=727244&r1=727243&r2=727244&view=diff
==============================================================================
--- continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/BuildQueueAction.java (original)
+++ continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/BuildQueueAction.java Tue Dec 16 18:06:44 2008
@@ -1,18 +1,5 @@
 package org.apache.maven.continuum.web.action.admin;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.continuum.dao.BuildQueueDao;
-import org.apache.continuum.taskqueue.DefaultOverallBuildQueue;
-import org.apache.continuum.taskqueue.OverallBuildQueue;
-import org.apache.maven.continuum.model.project.BuildQueue;
-import org.apache.maven.continuum.model.system.Installation;
-import org.apache.maven.continuum.store.ContinuumStoreException;
-
-import com.opensymphony.xwork2.Preparable;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -32,6 +19,15 @@
  * under the License.
  */
 
+import java.util.List;
+
+import org.apache.continuum.buildmanager.BuildManagerException;
+import org.apache.continuum.dao.BuildQueueDao;
+import org.apache.maven.continuum.model.project.BuildQueue;
+import org.apache.maven.continuum.store.ContinuumStoreException;
+
+import com.opensymphony.xwork2.Preparable;
+
 /**
  *
  * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="buildQueueAction"
@@ -39,7 +35,10 @@
 public class BuildQueueAction 
     extends AbstractBuildQueueAction
     implements Preparable
-{
+{    
+    //TODO:
+    // - move all access to buildQueueDao to Continuum class
+    
 	private String name;
 	
 	private int size;
@@ -55,8 +54,8 @@
 
     public void prepare()
         throws ContinuumStoreException
-    {
-	    this.buildQueueList = buildQueueDao.getAllBuildQueues();
+    {   
+        this.buildQueueList = buildQueueDao.getAllBuildQueues();        
     }
     
     public String input()
@@ -67,47 +66,90 @@
     public String list()
         throws Exception
     {
-        this.buildQueueList = buildQueueDao.getAllBuildQueues();
+        try
+        {
+            this.buildQueueList = buildQueueDao.getAllBuildQueues();
+        }
+        catch ( ContinuumStoreException e )
+        {
+            addActionError( "Cannot get build queues from the database : " + e.getMessage() );
+            return ERROR;
+        }
         return SUCCESS;
     }
     
     public String save()
         throws Exception
-    {
-    	
+    {    	
     	int allowedBuilds = getContinuum().getConfiguration().getNumberOfBuildsInParallel();
-    	if ( allowedBuilds <= this.buildQueueList.size() )
+    	if ( allowedBuilds < this.buildQueueList.size() )
     	{
-    		addActionError(" You are only allowed " + allowedBuilds );
+    		addActionError( "You are only allowed " + allowedBuilds + " number of builds in parallel." );
     		return ERROR;
     	}
     	else
     	{
-    		BuildQueue buildQueue = new BuildQueue();	
-        	buildQueue.setId( buildQueueList.size() + 1 );
-        	buildQueue.setName( name );
-        	buildQueueDao.addBuildQueue( buildQueue );
-        	
+    	    try
+    	    {
+        		BuildQueue buildQueue = new BuildQueue();
+            	buildQueue.setName( name );
+            	BuildQueue addedBuildQueue = buildQueueDao.addBuildQueue( buildQueue );
+            	
+            	getContinuum().getBuildsManager().addOverallBuildQueue( addedBuildQueue );            	
+    	    }
+    	    catch ( ContinuumStoreException e )
+    	    {   
+    	        addActionError( "Error adding build queue to database: " + e.getMessage() );
+    	        return ERROR;
+    	    }
+    	    catch ( BuildManagerException e )
+    	    {
+    	        addActionError( "Error creating overall build queue: " + e.getMessage() );
+                return ERROR;
+    	    }
+    	    
         	return SUCCESS;
-    	}
-    	
+    	}    	
     }
     
     public String edit()
         throws Exception
     {
-        BuildQueue buildQueueToBeEdited = buildQueueDao.getBuildQueue( this.buildQueue.getId() );
+        try
+        {
+            BuildQueue buildQueueToBeEdited = buildQueueDao.getBuildQueue( this.buildQueue.getId() );
+        }
+        catch ( ContinuumStoreException e )
+        {
+            addActionError( "Error retrieving build queue from the database : " + e.getMessage() );
+            return ERROR;
+        }
         return SUCCESS;
     }
     
     public String delete()
         throws Exception
     {
-    	BuildQueue buildQueueToBeDeleted = buildQueueDao.getBuildQueue( this.buildQueue.getId() );
-    	buildQueueDao.removeBuildQueue( buildQueueToBeDeleted );
-
-    	this.buildQueueList = buildQueueDao.getAllBuildQueues();
-    	
+        try
+        {
+        	BuildQueue buildQueueToBeDeleted = buildQueueDao.getBuildQueue( this.buildQueue.getId() );
+        	buildQueueDao.removeBuildQueue( buildQueueToBeDeleted );
+        	
+        	getContinuum().getBuildsManager().removeOverallBuildQueue( buildQueueToBeDeleted.getId() );
+        	
+        	this.buildQueueList = buildQueueDao.getAllBuildQueues();    	
+        }
+        catch ( BuildManagerException e )
+        {
+            addActionError( "Cannot delete overall build queue: " + e.getMessage() );
+            return ERROR;
+        }
+        catch ( ContinuumStoreException e )
+        {
+            addActionError( "Cannot delete build queue from the database: " + e.getMessage() );
+            return ERROR;
+        }
+        
         return SUCCESS;
     }
 

Modified: continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/editParallelBuilds.jsp
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/editParallelBuilds.jsp?rev=727244&r1=727243&r2=727244&view=diff
==============================================================================
--- continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/editParallelBuilds.jsp (original)
+++ continuum/branches/continuum-parallel-builds/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/editParallelBuilds.jsp Tue Dec 16 18:06:44 2008
@@ -34,7 +34,13 @@
   <div id="axial" class="h3">
     <h3><s:text name="parallel.build.queue.section.title"/></h3>
 
-    <s:actionerror />
+    <c:if test="${!empty actionErrors}">
+      <div class="errormessage">
+        <s:iterator value="actionErrors">
+          <p><s:text name="<s:property/>" /></p>
+        </s:iterator>
+      </div>
+    </c:if>
     
     <div class="axial">
       <s:form action="saveBuildQueue" method="post" validate="true">