You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by ct...@apache.org on 2008/12/09 11:36:00 UTC

svn commit: r724658 - in /continuum/branches/continuum-distributed-builds: continuum-api/src/main/java/org/apache/continuum/builder/distributed/manager/ continuum-api/src/main/java/org/apache/maven/continuum/ continuum-builder/ continuum-builder/src/ma...

Author: ctan
Date: Tue Dec  9 02:35:57 2008
New Revision: 724658

URL: http://svn.apache.org/viewvc?rev=724658&view=rev
Log:
- refactored distributed build manager
- fix add build agent


Modified:
    continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/distributed/manager/DistributedBuildManager.java
    continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/maven/continuum/Continuum.java
    continuum/branches/continuum-distributed-builds/continuum-builder/pom.xml
    continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManager.java
    continuum/branches/continuum-distributed-builds/continuum-core/src/main/resources/META-INF/spring-context.xml
    continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java
    continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java

Modified: continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/distributed/manager/DistributedBuildManager.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/distributed/manager/DistributedBuildManager.java?rev=724658&r1=724657&r2=724658&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/distributed/manager/DistributedBuildManager.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/builder/distributed/manager/DistributedBuildManager.java Tue Dec  9 02:35:57 2008
@@ -4,10 +4,14 @@
 import java.util.Map;
 
 import org.apache.continuum.builder.distributed.BuildAgentListener;
+import org.apache.continuum.scm.queue.PrepareBuildProjectsTask;
 import org.apache.maven.continuum.ContinuumException;
 
 public interface DistributedBuildManager
 {
+    void buildProjectsInQueue()
+        throws ContinuumException;
+    
     void updateProjectScmRoot( Map context )
         throws ContinuumException;
 
@@ -16,6 +20,8 @@
 
     List<BuildAgentListener> getBuildAgentListeners();
 
+    List<PrepareBuildProjectsTask> getDistributedBuildQueue();
+
     void reload()
         throws ContinuumException;
 }

Modified: continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/maven/continuum/Continuum.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/maven/continuum/Continuum.java?rev=724658&r1=724657&r2=724658&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/maven/continuum/Continuum.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/maven/continuum/Continuum.java Tue Dec  9 02:35:57 2008
@@ -649,5 +649,4 @@
     
     String getReleaseOutput( int releaseResultId )
         throws ContinuumException;
-
 }

Modified: continuum/branches/continuum-distributed-builds/continuum-builder/pom.xml
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-builder/pom.xml?rev=724658&r1=724657&r2=724658&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-builder/pom.xml (original)
+++ continuum/branches/continuum-distributed-builds/continuum-builder/pom.xml Tue Dec  9 02:35:57 2008
@@ -67,4 +67,26 @@
       <scope>test</scope>
     </dependency>
   </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.plexus</groupId>
+        <artifactId>plexus-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>generate</id>
+            <goals>
+              <goal>descriptor</goal>
+            </goals>
+          </execution>
+          <execution>
+            <id>merge</id>
+            <goals>
+              <goal>merge-descriptors</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
 </project>

Modified: continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManager.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManager.java?rev=724658&r1=724657&r2=724658&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManager.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManager.java Tue Dec  9 02:35:57 2008
@@ -70,46 +70,24 @@
      */
     private BuildResultDao buildResultDao;
 
-    private List<PrepareBuildProjectsTask> projectsBuildInQueue;
+    private List<PrepareBuildProjectsTask> distributedBuildQueue;
     
     private List<BuildAgentListener> listeners;
 
     public void initialize()
         throws ContinuumException
     {
-        List<BuildAgentConfiguration> agents = configurationService.getBuildAgents();
-
         if ( listeners == null )
         {
             listeners = new ArrayList<BuildAgentListener>();
         }
-        
-        if ( agents != null )
-        {
-            for ( BuildAgentConfiguration agent : agents )
-            {
-                boolean found = false;
 
-                for ( BuildAgentListener listener : listeners )
-                {
-                    if ( listener.getUrl().equals( agent.getUrl() ) )
-                    {
-                        found = true;
-                        listener.setEnabled( agent.isEnabled() );
-                        break;
-                    }
-                }
-
-                if ( !found )
-                {
-                    BuildAgentListener listener = new DefaultBuildAgentListener( agent.getUrl(), false, agent.isEnabled() );
-                    listeners.add( listener );
-                    log.info( "add listener for build agent '" + agent.getUrl() + "'" );
-                }
-            }
+        if ( distributedBuildQueue == null )
+        {
+            distributedBuildQueue = new ArrayList<PrepareBuildProjectsTask>();
         }
 
-        buildProjectsInQueue();
+        loadData();
     }
 
     public ConfigurationService getConfigurationService()
@@ -162,28 +140,22 @@
         this.projectScmRootDao = projectScmRootDao;
     }
 
-    public void buildProjects( Map<Integer, Integer> projectsAndBuildDefinitionsMap, int trigger )
-        throws ContinuumException
-    {
-        buildProjects( projectsAndBuildDefinitionsMap, trigger, false );
-    }
-
     public void buildProjectsInQueue()
         throws ContinuumException
     {
-        if ( projectsBuildInQueue != null )
+        if ( distributedBuildQueue != null )
         {
-            for ( PrepareBuildProjectsTask task : projectsBuildInQueue )
+            for ( PrepareBuildProjectsTask task : distributedBuildQueue )
             {
                 Map projectsAndBuildDefinitions = task.getProjectsBuildDefinitionsMap();
                 int trigger = task.getTrigger();
                 
-                buildProjects( projectsAndBuildDefinitions, trigger, true );
+                buildProjects( projectsAndBuildDefinitions, trigger );
             }
         }
     }
 
-    public synchronized void buildProjects( Map<Integer, Integer> projectsAndBuildDefinitionsMap, int trigger, boolean inBuildQueue )
+    public synchronized void buildProjects( Map<Integer, Integer> projectsAndBuildDefinitionsMap, int trigger )
         throws ContinuumException
     {
         boolean found = false;
@@ -228,19 +200,6 @@
                 found = true;
             }
         }
-
-        if ( !found && !inBuildQueue )
-        {
-            // all build agents are busy, put into projectBuildQueue for now
-            if ( projectsBuildInQueue == null )
-            {
-                projectsBuildInQueue = new ArrayList<PrepareBuildProjectsTask>();
-            }
-
-            log.info( "no build agent available, put in queue" );
-            PrepareBuildProjectsTask prepareBuildTask = new PrepareBuildProjectsTask( projectsAndBuildDefinitionsMap, trigger );
-            projectsBuildInQueue.add( prepareBuildTask );
-        }
     }
 
     public void updateProjectScmRoot( Map context )
@@ -370,7 +329,18 @@
     public void reload()
         throws ContinuumException
     {
-        this.initialize();
+        loadData();
+        buildProjectsInQueue();
+    }
+
+    public List<BuildAgentListener> getBuildAgentListeners()
+    {
+        return listeners;
+    }
+
+    public List<PrepareBuildProjectsTask> getDistributedBuildQueue()
+    {
+        return distributedBuildQueue;
     }
 
     private List initializeBuildContext( Map<Integer, Integer> projectsAndBuildDefinitions, 
@@ -596,8 +566,33 @@
         }
     }
 
-    public List<BuildAgentListener> getBuildAgentListeners()
+    private void loadData()
     {
-        return listeners;
+        List<BuildAgentConfiguration> agents = configurationService.getBuildAgents();
+
+        if ( agents != null )
+        {
+            for ( BuildAgentConfiguration agent : agents )
+            {
+                boolean found = false;
+
+                for ( BuildAgentListener listener : listeners )
+                {
+                    if ( listener.getUrl().equals( agent.getUrl() ) )
+                    {
+                        found = true;
+                        listener.setEnabled( agent.isEnabled() );
+                        break;
+                    }
+                }
+
+                if ( !found )
+                {
+                    BuildAgentListener listener = new DefaultBuildAgentListener( agent.getUrl(), false, agent.isEnabled() );
+                    listeners.add( listener );
+                    log.info( "add listener for build agent '" + agent.getUrl() + "'" );
+                }
+            }
+        }
     }
 }

Modified: continuum/branches/continuum-distributed-builds/continuum-core/src/main/resources/META-INF/spring-context.xml
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-core/src/main/resources/META-INF/spring-context.xml?rev=724658&r1=724657&r2=724658&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-core/src/main/resources/META-INF/spring-context.xml (original)
+++ continuum/branches/continuum-distributed-builds/continuum-core/src/main/resources/META-INF/spring-context.xml Tue Dec  9 02:35:57 2008
@@ -33,13 +33,4 @@
     </property>
   </bean>
 
-  <bean name="continuumBuilder#distributedBuild"
-        class="org.apache.continuum.builder.distributed.manager.DefaultDistributedBuildManager"
-        init-method="initialize">
-    <property name="configurationService" ref="configurationService"/>
-    <property name="projectDao" ref="projectDao"/>
-    <property name="buildDefinitionDao" ref="buildDefinitionDao"/>
-    <property name="buildResultDao" ref="buildResultDao"/>
-    <property name="projectScmRootDao" ref="projectScmRootDao"/>
-  </bean>
 </beans>

Modified: continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java?rev=724658&r1=724657&r2=724658&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java Tue Dec  9 02:35:57 2008
@@ -115,6 +115,8 @@
     public String save()
         throws Exception
     {
+        boolean found = false;
+
         ConfigurationService configuration = getContinuum().getConfiguration();
 
         if ( configuration.getBuildAgents() != null )
@@ -127,14 +129,16 @@
                     agent.setEnabled( buildAgent.isEnabled() );
 
                     configuration.updateBuildAgent( agent );
-                }
-                else
-                {
-                    configuration.addBuildAgent( buildAgent );
+                    found = true;
                 }
             }
         }
 
+        if ( !found )
+        {
+            configuration.addBuildAgent( buildAgent );
+        }
+
         distributedBuildManager.reload();
 
         return SUCCESS;

Modified: continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java?rev=724658&r1=724657&r2=724658&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java Tue Dec  9 02:35:57 2008
@@ -19,9 +19,12 @@
  * under the License.
  */
 
+import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.commons.lang.ArrayUtils;
+import org.apache.continuum.builder.distributed.BuildAgentListener;
+import org.apache.continuum.builder.distributed.manager.DistributedBuildManager;
 import org.apache.continuum.taskqueue.manager.TaskQueueManager;
 import org.apache.maven.continuum.buildqueue.BuildProjectTask;
 import org.apache.maven.continuum.model.project.Project;
@@ -29,6 +32,7 @@
 import org.apache.maven.continuum.security.ContinuumRoleConstants;
 import org.apache.maven.continuum.web.exception.AuthenticationRequiredException;
 import org.apache.maven.continuum.web.exception.AuthorizationRequiredException;
+import org.apache.maven.continuum.web.model.DistributedBuildSummary;
 import org.codehaus.plexus.logging.LogEnabled;
 import org.codehaus.plexus.redback.rbac.Resource;
 import org.codehaus.plexus.taskqueue.Task;
@@ -47,7 +51,8 @@
     extends AbstractBuildQueueAction
     implements SecureAction, LogEnabled
 {
-    
+    private static final String DISTRIBUTED_BUILD_SUCCESS = "distributed-build-success";
+
     /**
      * @plexus.requirement role-hint='build-project'
      */
@@ -83,6 +88,15 @@
      */
     private TaskQueueManager taskQueueManager;
 
+    /**
+     * @plexus.requirement
+     */
+    DistributedBuildManager distributedBuildManager;
+
+    private List<DistributedBuildSummary> distributedBuildSummary;
+
+    private String buildAgentUrl;
+
     // -----------------------------------------------------
     //  webwork
     // -----------------------------------------------------     
@@ -155,11 +169,36 @@
     public String display()
         throws Exception
     {
-        this.setCurrentBuildProjectTask( (BuildProjectTask) taskQueueExecutor.getCurrentTask() );        
-        this.setBuildProjectTasks( taskQueueManager.getProjectsInBuildQueue() );
-        this.setCurrentCheckOutTask( (CheckOutTask) checkoutTaskQueueExecutor.getCurrentTask() );
-        this.setCurrentCheckOutTasks( taskQueueManager.getCheckOutTasksInQueue() );
-        return SUCCESS;
+        if ( getContinuum().getConfiguration().isDistributedBuildEnabled() )
+        {
+            distributedBuildSummary = new ArrayList<DistributedBuildSummary>();
+            
+            for ( BuildAgentListener listener : distributedBuildManager.getBuildAgentListeners() )
+            {
+                if ( listener.hasProjects() )
+                {
+                    for ( Project project : listener.getProjects() )
+                    {
+                        DistributedBuildSummary summary = new DistributedBuildSummary();
+                        summary.setProjectId( project.getId() );
+                        summary.setProjectName( project.getName() );
+                        summary.setUrl( listener.getUrl() );
+                        
+                        distributedBuildSummary.add( summary );
+                    }
+                }
+            }
+
+            return DISTRIBUTED_BUILD_SUCCESS;
+        }
+        else
+        {
+            this.setCurrentBuildProjectTask( (BuildProjectTask) taskQueueExecutor.getCurrentTask() );        
+            this.setBuildProjectTasks( taskQueueManager.getProjectsInBuildQueue() );
+            this.setCurrentCheckOutTask( (CheckOutTask) checkoutTaskQueueExecutor.getCurrentTask() );
+            this.setCurrentCheckOutTasks( taskQueueManager.getCheckOutTasksInQueue() );
+            return SUCCESS;
+        }
     }
 
     public String remove()