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/15 03:21:08 UTC
svn commit: r726606 - 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: Sun Dec 14 18:21:08 2008
New Revision: 726606
URL: http://svn.apache.org/viewvc?rev=726606&view=rev
Log:
-added additional methods in builds manager
-added test cases
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
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=726606&r1=726605&r2=726606&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 Sun Dec 14 18:21:08 2008
@@ -24,8 +24,10 @@
import java.util.Map;
import org.apache.continuum.taskqueue.OverallBuildQueue;
+import org.apache.maven.continuum.buildqueue.BuildProjectTask;
import org.apache.maven.continuum.model.project.BuildDefinition;
import org.apache.maven.continuum.model.project.Project;
+import org.codehaus.plexus.taskqueue.Task;
/**
* BuildsManager. All builds whether forced or triggered will go through (or have to be added through)
@@ -40,65 +42,73 @@
// I think we can move out the prepare build queue from the build manager?
// only builds and checkouts should be executed in parallel? :D <-- i don't think so :)
- public void buildProjects( List<Project> projects, Map<Integer, BuildDefinition> projectsBuildDefinitionsMap, int trigger ) throws BuildManagerException;
+ void buildProjects( List<Project> projects, Map<Integer, BuildDefinition> projectsBuildDefinitionsMap, int trigger ) throws BuildManagerException;
- public void buildProject( int projectId, BuildDefinition buildDefinition, String projectName, int trigger ) throws BuildManagerException;
+ void buildProject( int projectId, BuildDefinition buildDefinition, String projectName, int trigger ) throws BuildManagerException;
//public void prepareBuildProjects( Collection<Map<Integer, Integer>> projectsBuildDefinitions, int trigger, int scheduleId );
- public void prepareBuildProject( Map<Integer, Integer> projectsBuildDefinitionsMap, int trigger ) throws BuildManagerException;
+ void prepareBuildProject( Map<Integer, Integer> projectsBuildDefinitionsMap, int trigger ) throws BuildManagerException;
// project checkout doesn't require dependency checking
- public void checkoutProject( int projectId, String projectName, File workingDirectory, String scmUsername, String scmPassword, BuildDefinition defaultBuildDefinition ) throws BuildManagerException;
+ void checkoutProject( int projectId, String projectName, File workingDirectory, String scmUsername, String scmPassword, BuildDefinition defaultBuildDefinition ) throws BuildManagerException;
- public boolean cancelBuild( int projectId ) throws BuildManagerException;
+ boolean cancelBuild( int projectId ) throws BuildManagerException;
- public boolean cancelAllBuilds() throws BuildManagerException;
+ boolean cancelAllBuilds() throws BuildManagerException;
- public boolean cancelBuildInQueue( int buildQueueId ) throws BuildManagerException;
+ boolean cancelBuildInQueue( int buildQueueId ) throws BuildManagerException;
- public boolean cancelCheckout(int projectId) throws BuildManagerException;
+ boolean cancelCheckout(int projectId) throws BuildManagerException;
- public boolean cancelAllCheckouts() throws BuildManagerException;
+ boolean cancelAllCheckouts() throws BuildManagerException;
//public boolean cancelPrepareBuild(int projectId) throws BuildManagerException;
//public boolean cancelAllPrepareBuilds() throws BuildManagerException;
- public void removeProjectFromBuildQueue( int projectId ) throws BuildManagerException;
+ void removeProjectFromBuildQueue( int projectId ) throws BuildManagerException;
- public void removeProjectFromBuildQueue( int projectId, int buildDefinitionId, int trigger, String projectName ) throws BuildManagerException;
+ void removeProjectFromBuildQueue( int projectId, int buildDefinitionId, int trigger, String projectName ) throws BuildManagerException;
// TODO: should we throw an exception when one of the projects cannot be removed?
- public void removeProjectsFromBuildQueue( int[] projectIds );
-
- //TODO: implement this.. but how????
- //public void removeProjectsFromBuildQueueWithHashcodes( int[] hashcodes ) throws BuildManagerException;
-
- public void removeProjectFromCheckoutQueue( int projectId ) throws BuildManagerException;
+ void removeProjectsFromBuildQueue( int[] projectIds );
+
+ void removeProjectFromCheckoutQueue( int projectId ) throws BuildManagerException;
- public void removeProjectsFromCheckoutQueue( int[] projectIds );
+ // TODO: implement this.. but how?
+ void removeProjectsFromCheckoutQueue( int[] projectIds );
//TODO: implement this!
//public void removeProjectFromPrepareBuildQueue( int projectId );
- // public void removeProjectsFromPrepareBuildQueue( int[] projectIds );
+ // public void removeProjectsFromPrepareBuildQueue( int[] projectIds );
- public void addOverallBuildQueue( OverallBuildQueue overallBuildQueue );
+ void addOverallBuildQueue( OverallBuildQueue overallBuildQueue );
- public void removeOverallBuildQueue( int overallBuildQueueId ) throws BuildManagerException;
+ void removeOverallBuildQueue( int overallBuildQueueId ) throws BuildManagerException;
- public boolean isInAnyBuildQueue( int projectId ) throws BuildManagerException;
+ boolean isInAnyBuildQueue( int projectId ) throws BuildManagerException;
- public boolean isInAnyBuildQueue( int projectId, int buildDefinitionId ) throws BuildManagerException;
+ boolean isInAnyBuildQueue( int projectId, int buildDefinitionId ) throws BuildManagerException;
- public boolean isInAnyCheckoutQueue( int projectId ) throws BuildManagerException;
+ boolean isInAnyCheckoutQueue( int projectId ) throws BuildManagerException;
- public boolean isInPrepareBuildQueue( int projectId ) throws BuildManagerException;
+ boolean isInPrepareBuildQueue( int projectId ) throws BuildManagerException;
- public boolean isProjectInAnyCurrentBuild( int projectId ) throws BuildManagerException;
+ boolean isProjectInAnyCurrentBuild( int projectId ) throws BuildManagerException;
// TODO: deng - add the following methods (needed by QueuesAction in webapp)
+
+ List<Task> getCurrentBuilds() throws BuildManagerException;
+
+ List<Task> getCurrentCheckouts() throws BuildManagerException;
+
+ Map<String, List<Task>> getProjectsInBuildQueues() throws BuildManagerException;
+
+ Map<String, List<Task>> getProjectsInCheckoutQueues() throws BuildManagerException;
+
+ boolean isBuildInProgress() throws BuildManagerException;
// maybe these could return a new object which contains the name of the build queue (overall) and the current task?
// - add getCurrentBuilds(..)
// - add getCurrentCheckouts(..)
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=726606&r1=726605&r2=726606&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 Sun Dec 14 18:21:08 2008
@@ -21,7 +21,6 @@
import java.util.List;
-import org.apache.maven.continuum.buildqueue.BuildProjectTask;
import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import org.codehaus.plexus.taskqueue.Task;
@@ -229,7 +228,7 @@
* @return
* @throws TaskQueueException TODO
*/
- List<BuildProjectTask> getProjectsInBuildQueue()
+ List<Task> getProjectsInBuildQueue()
throws TaskQueueException;
/**
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=726606&r1=726605&r2=726606&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 Sun Dec 14 18:21:08 2008
@@ -20,6 +20,7 @@
*/
import java.io.File;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -46,7 +47,6 @@
import org.codehaus.plexus.taskqueue.Task;
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;
@@ -471,7 +471,7 @@
{
try
{
- List<Object> objects = container.lookupList( TaskQueueExecutor.class );
+ List<Object> objects = container.lookupList( ThreadedTaskQueueExecutor.class );
for( Object obj : objects )
{
log.info( "\n object --> " + obj );
@@ -491,23 +491,6 @@
}
return false;
- /*try
- {
- Task task = getBuildTaskQueueExecutor().getCurrentTask();
- if ( task != null )
- {
- if ( task instanceof BuildProjectTask )
- {
- return ( (BuildProjectTask) task ).getProjectId();
- }
- }
- }
- catch ( ComponentLookupException e )
- {
- throw new TaskQueueException( "Error occurred while looking up the build task queue executor. " );
- }
-
- return -1;*/
}
public void prepareBuildProject( Map<Integer, Integer> projectsBuildDefinitionsMap, int trigger )
@@ -673,7 +656,7 @@
public void removeOverallBuildQueue( int overallBuildQueueId ) throws BuildManagerException
{
- List<BuildProjectTask> tasks = null;
+ List<Task> tasks = null;
List<CheckOutTask> checkoutTasks = null;
/*if( overallBuildQueueId == 1 )
@@ -716,10 +699,11 @@
try
{
- for( BuildProjectTask task : tasks )
+ for( Task task : tasks )
{
- BuildDefinition buildDefinition = buildDefinitionDao.getBuildDefinition( task.getBuildDefinitionId() );
- buildProject( task.getProjectId(), buildDefinition, task.getProjectName(), task.getTrigger() );
+ BuildProjectTask buildTask = ( BuildProjectTask ) task;
+ BuildDefinition buildDefinition = buildDefinitionDao.getBuildDefinition( buildTask.getBuildDefinitionId() );
+ buildProject( buildTask.getProjectId(), buildDefinition, buildTask.getProjectName(), buildTask.getTrigger() );
}
for( CheckOutTask task : checkoutTasks )
@@ -737,10 +721,109 @@
}
public Map<Integer, OverallBuildQueue> getOverallBuildQueues()
- {
+ {
return overallBuildQueues;
}
+ public List<Task> getCurrentBuilds() throws BuildManagerException
+ {
+ List<Task> currentBuilds = new ArrayList<Task>();
+ try
+ {
+ List<Object> objects = container.lookupList( ThreadedTaskQueueExecutor.class );
+ for( Object obj : objects )
+ {
+ ThreadedTaskQueueExecutor executor = ( ThreadedTaskQueueExecutor ) obj;
+ Task task = executor.getCurrentTask();
+ if( task instanceof BuildProjectTask )
+ {
+ currentBuilds.add( task );
+ }
+ }
+ }
+ catch ( ComponentLookupException e )
+ {
+ throw new BuildManagerException( e.getMessage() );
+ }
+
+ return currentBuilds;
+ }
+
+ public List<Task> getCurrentCheckouts() throws BuildManagerException
+ {
+ List<Task> currentCheckouts = new ArrayList<Task>();
+ try
+ {
+ List<Object> objects = container.lookupList( ThreadedTaskQueueExecutor.class );
+ for( Object obj : objects )
+ {
+ ThreadedTaskQueueExecutor executor = ( ThreadedTaskQueueExecutor ) obj;
+ Task task = executor.getCurrentTask();
+ if( task instanceof CheckOutTask )
+ {
+ currentCheckouts.add( task );
+ }
+ }
+ }
+ catch ( ComponentLookupException e )
+ {
+ throw new BuildManagerException( e.getMessage() );
+ }
+
+ return currentCheckouts;
+ }
+
+ public Map<String, List<Task>> getProjectsInBuildQueues() throws BuildManagerException
+ {
+ synchronized( overallBuildQueues )
+ {
+ Map<String, List<Task>> buildsInQueue = new HashMap<String, List<Task>>();
+ Set<Integer> keySet = overallBuildQueues.keySet();
+ for( Integer key : keySet )
+ {
+ OverallBuildQueue overallBuildQueue = overallBuildQueues.get( key );
+ try
+ {
+ buildsInQueue.put( overallBuildQueue.getName(), overallBuildQueue.getProjectsInBuildQueue() );
+ }
+ catch ( TaskQueueException e )
+ {
+ throw new BuildManagerException( "Error occurred while getting projects in build queue '" +
+ overallBuildQueue.getName() + "'.", e );
+ }
+ }
+ return buildsInQueue;
+ }
+ }
+
+ public Map<String, List<Task>> getProjectsInCheckoutQueues() throws BuildManagerException
+ {
+ synchronized( overallBuildQueues )
+ {
+ Map<String, List<Task>> checkoutsInQueue = new HashMap<String, List<Task>>();
+ Set<Integer> keySet = overallBuildQueues.keySet();
+ for( Integer key : keySet )
+ {
+ OverallBuildQueue overallBuildQueue = overallBuildQueues.get( key );
+ try
+ {
+ checkoutsInQueue.put( overallBuildQueue.getName(), overallBuildQueue.getCheckOutTasksInQueue() );
+ }
+ catch ( TaskQueueException e )
+ {
+ throw new BuildManagerException( "Error occurred while getting projects in checkout queue '" +
+ overallBuildQueue.getName() + "'.", e );
+ }
+ }
+ return checkoutsInQueue;
+ }
+ }
+
+ public boolean isBuildInProgress() throws BuildManagerException
+ {
+ return false;
+ }
+
private boolean isInQueue( int projectId, int typeOfQueue, int buildDefinitionId )
throws TaskQueueException
{
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=726606&r1=726605&r2=726606&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 Sun Dec 14 18:21:08 2008
@@ -317,7 +317,7 @@
}
}
- public List<BuildProjectTask> getProjectsInBuildQueue()
+ public List<Task> getProjectsInBuildQueue()
throws TaskQueueException
{
return buildQueue.getQueueSnapshot();
@@ -353,22 +353,23 @@
public boolean isInBuildQueue( int projectId, int buildDefinitionId )
throws TaskQueueException
{
- List<BuildProjectTask> queue = getProjectsInBuildQueue();
+ List<Task> queue = getProjectsInBuildQueue();
- for ( BuildProjectTask task : queue )
+ for ( Task task : queue )
{
+ BuildProjectTask buildTask = (BuildProjectTask) task;
if ( task != null )
{
if ( buildDefinitionId < 0 )
{
- if ( task.getProjectId() == projectId )
+ if ( buildTask.getProjectId() == projectId )
{
return true;
}
}
else
{
- if ( task.getProjectId() == projectId && task.getBuildDefinitionId() == buildDefinitionId )
+ if ( buildTask.getProjectId() == projectId && buildTask.getBuildDefinitionId() == buildDefinitionId )
{
return true;
}
@@ -510,17 +511,18 @@
{
return false;
}
- List<BuildProjectTask> queue = getProjectsInBuildQueue();
+ List<Task> queue = getProjectsInBuildQueue();
List<BuildProjectTask> tasks = new ArrayList<BuildProjectTask>();
- for ( BuildProjectTask task : queue )
+ for ( Task task : queue )
{
+ BuildProjectTask buildTask = (BuildProjectTask) task;
if ( task != null )
{
- if ( ArrayUtils.contains( projectIds, task.getProjectId() ) )
+ if ( ArrayUtils.contains( projectIds, buildTask.getProjectId() ) )
{
- tasks.add( task );
+ tasks.add( buildTask );
}
}
}
@@ -540,11 +542,12 @@
public boolean removeProjectFromBuildQueue( int projectId )
throws TaskQueueException
{
- List<BuildProjectTask> queue = getProjectsInBuildQueue();
+ List<Task> queue = getProjectsInBuildQueue();
- for ( BuildProjectTask task : queue )
+ for ( Task task : queue )
{
- if ( task != null && task.getProjectId() == projectId )
+ BuildProjectTask buildTask = (BuildProjectTask) task;
+ if ( task != null && buildTask.getProjectId() == projectId )
{
return buildQueue.remove( task );
}
@@ -556,10 +559,9 @@
public void removeProjectsFromBuildQueueWithHashCodes( int[] hashCodes )
throws TaskQueueException
{
- List<BuildProjectTask> queue = getProjectsInBuildQueue();
-
- for ( BuildProjectTask task : queue )
- {
+ List<Task> queue = getProjectsInBuildQueue();
+ for ( Task task : queue )
+ {
if ( ArrayUtils.contains( hashCodes, task.hashCode() ) )
{
buildQueue.remove( task );
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=726606&r1=726605&r2=726606&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 Sun Dec 14 18:21:08 2008
@@ -33,6 +33,7 @@
import org.apache.maven.continuum.model.project.Project;
import org.apache.maven.continuum.model.project.Schedule;
import org.codehaus.plexus.spring.PlexusInSpringTestCase;
+import org.codehaus.plexus.taskqueue.Task;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.integration.junit3.JUnit3Mockery;
@@ -81,7 +82,14 @@
{
BuildQueue buildQueue = new BuildQueue();
buildQueue.setId( i );
- buildQueue.setName( "BUILD_QUEUE_" + String.valueOf( i ) );
+ if( i == 1 )
+ {
+ buildQueue.setName( ConfigurationService.DEFAULT_BUILD_QUEUE_NAME );
+ }
+ else
+ {
+ buildQueue.setName( "BUILD_QUEUE_" + String.valueOf( i ) );
+ }
buildQueues.add( buildQueue );
}
@@ -714,4 +722,58 @@
assertEquals( "No build queue found.", e.getMessage() );
}
}
+
+ public void testGetProjectsInBuildQueue()
+ throws Exception
+ {
+ setupOverallBuildQueues();
+
+ BuildDefinition buildDef = new BuildDefinition();
+ buildDef.setId( 1 );
+ buildDef.setSchedule( getSchedule( 1, 1, 2 ) );
+
+ // populate build queue
+ buildsManager.buildProject( 1, buildDef, "continuum-project-test-1", 1 );
+ buildsManager.buildProject( 2, buildDef, "continuum-project-test-2", 1 );
+ buildsManager.buildProject( 3, buildDef, "continuum-project-test-3", 1 );
+
+ Map<String, List<Task>> buildsInQueue = buildsManager.getProjectsInBuildQueues();
+
+ assertEquals( 5, buildsInQueue.size() );
+ assertTrue( buildsInQueue.containsKey( ConfigurationService.DEFAULT_BUILD_QUEUE_NAME ) );
+ assertTrue( buildsInQueue.containsKey( "BUILD_QUEUE_2" ) );
+
+ assertEquals( 2, buildsInQueue.get( ConfigurationService.DEFAULT_BUILD_QUEUE_NAME ).size() );
+ assertEquals( 1, buildsInQueue.get( "BUILD_QUEUE_2" ).size() );
+ }
+
+ public void testGetProjectsInCheckoutQueue()
+ throws Exception
+ {
+ setupOverallBuildQueues();
+
+ BuildDefinition buildDef = new BuildDefinition();
+ buildDef.setId( 1 );
+ buildDef.setSchedule( getSchedule( 1, 1, 2 ) );
+
+ buildsManager.checkoutProject( 1, "continuum-test-1", new File( getBasedir(), "/target/test-working-dir/1" ),
+ "dummy", "dummypass", buildDef );
+ buildsManager.checkoutProject( 2, "continuum-test-2", new File( getBasedir(), "/target/test-working-dir/1" ),
+ "dummy", "dummypass", buildDef );
+ buildsManager.checkoutProject( 3, "continuum-test-3", new File( getBasedir(), "/target/test-working-dir/1" ),
+ "dummy", "dummypass", buildDef );
+ buildsManager.checkoutProject( 4, "continuum-test-4", new File( getBasedir(), "/target/test-working-dir/1" ),
+ "dummy", "dummypass", buildDef );
+ buildsManager.checkoutProject( 5, "continuum-test-5", new File( getBasedir(), "/target/test-working-dir/1" ),
+ "dummy", "dummypass", buildDef );
+
+ Map<String, List<Task>> checkoutsInQueue = buildsManager.getProjectsInCheckoutQueues();
+
+ assertEquals( 5, checkoutsInQueue.size() );
+ assertTrue( checkoutsInQueue.containsKey( ConfigurationService.DEFAULT_BUILD_QUEUE_NAME ) );
+ assertTrue( checkoutsInQueue.containsKey( "BUILD_QUEUE_2" ) );
+
+ assertEquals( 3, checkoutsInQueue.get( ConfigurationService.DEFAULT_BUILD_QUEUE_NAME ).size() );
+ assertEquals( 2, checkoutsInQueue.get( "BUILD_QUEUE_2" ).size() );
+ }
}