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/10 16:43:12 UTC
svn commit: r725313 - in /continuum/branches/continuum-distributed-builds: ./
continuum-api/src/main/java/org/apache/continuum/builder/distributed/manager/
continuum-api/src/main/java/org/apache/continuum/taskqueue/manager/
continuum-builder/ continuum...
Author: ctan
Date: Wed Dec 10 07:43:11 2008
New Revision: 725313
URL: http://svn.apache.org/viewvc?rev=725313&view=rev
Log:
more changes in implementation of distributed buils
Added:
continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildProjectTaskExecutor.java (contents, props changed)
- copied, changed from r725038, continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildTaskExecutor.java
continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/ThreadedDistributedBuildTaskQueueExecutor.java (contents, props changed)
- copied, changed from r725038, continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildTaskQueueExecutor.java
Removed:
continuum/branches/continuum-distributed-builds/continuum-builder/src/main/resources/META-INF/spring-context.xml
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/continuum/taskqueue/manager/TaskQueueManager.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/executor/DistributedBuildTaskExecutor.java
continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildTaskQueueExecutor.java
continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManager.java
continuum/branches/continuum-distributed-builds/continuum-builder/src/main/resources/META-INF/plexus/components.xml
continuum/branches/continuum-distributed-builds/continuum-builder/src/test/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManagerTest.java
continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/continuum/taskqueue/manager/DefaultTaskQueueManager.java
continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java
continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-distributed-build-transport/continuum-distributed-build-transport-master/pom.xml
continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-distributed-build-transport/continuum-distributed-build-transport-master/src/main/java/org/apache/continuum/distributed/transport/master/ProxySlaveAgentTransportService.java
continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java
continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/mdo/view-models.mdo
continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/resources/localization/Continuum.properties
continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/resources/struts.xml
continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/viewDistributedBuilds.jsp
continuum/branches/continuum-distributed-builds/pom.xml
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=725313&r1=725312&r2=725313&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 Wed Dec 10 07:43:11 2008
@@ -3,11 +3,14 @@
import java.util.List;
import java.util.Map;
+import org.apache.continuum.scm.queue.PrepareBuildProjectsTask;
import org.apache.maven.continuum.ContinuumException;
import org.apache.maven.continuum.model.system.Installation;
public interface DistributedBuildManager
{
+ String ROLE = DistributedBuildManager.class.getName();
+
void cancelDistributedBuild( String buildAgentUrl, int projectGroupId, String scmRootAddress )
throws ContinuumException;
@@ -26,4 +29,6 @@
List<Installation> getAvailableInstallations( String buildAgentUrl )
throws ContinuumException;
+
+ Map<String, PrepareBuildProjectsTask> getDistributedBuildProjects();
}
Modified: continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/taskqueue/manager/TaskQueueManager.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/taskqueue/manager/TaskQueueManager.java?rev=725313&r1=725312&r2=725313&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/taskqueue/manager/TaskQueueManager.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/taskqueue/manager/TaskQueueManager.java Wed Dec 10 07:43:11 2008
@@ -62,6 +62,9 @@
boolean isInCurrentPrepareBuildTask( int projectId )
throws TaskQueueManagerException;
+ boolean isInDistributedBuildQueue( int projectGroupId, String scmRootAddress )
+ throws TaskQueueManagerException;
+
boolean isInPrepareBuildQueue( int projectId )
throws TaskQueueManagerException;
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=725313&r1=725312&r2=725313&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-builder/pom.xml (original)
+++ continuum/branches/continuum-distributed-builds/continuum-builder/pom.xml Wed Dec 10 07:43:11 2008
@@ -33,6 +33,16 @@
<dependency>
<groupId>org.apache.continuum</groupId>
<artifactId>continuum-api</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-common</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.archiva</groupId>
+ <artifactId>archiva-repository-layer</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
<groupId>org.apache.continuum</groupId>
@@ -47,10 +57,6 @@
<artifactId>continuum-distributed-build-transport-master</artifactId>
</dependency>
<dependency>
- <groupId>org.codehaus.plexus</groupId>
- <artifactId>plexus-spring</artifactId>
- </dependency>
- <dependency>
<groupId>org.apache.xmlrpc</groupId>
<artifactId>xmlrpc-server</artifactId>
<version>3.0</version>
Copied: continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildProjectTaskExecutor.java (from r725038, continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildTaskExecutor.java)
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildProjectTaskExecutor.java?p2=continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildProjectTaskExecutor.java&p1=continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildTaskExecutor.java&r1=725038&r2=725313&rev=725313&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildTaskExecutor.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildProjectTaskExecutor.java Wed Dec 10 07:43:11 2008
@@ -31,12 +31,12 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class DistributedBuildTaskExecutor
- implements TaskExecutor
+public class DistributedBuildProjectTaskExecutor
+ implements DistributedBuildTaskExecutor
{
private Logger log = LoggerFactory.getLogger( this.getClass() );
- private String agentUrl;
+ private String buildAgentUrl;
private long startTime;
@@ -62,14 +62,14 @@
*/
private BuildResultDao buildResultDao;
- public void setAgentUrl( String agentUrl )
+ public void setBuildAgentUrl( String buildAgentUrl )
{
- this.agentUrl = agentUrl;
+ this.buildAgentUrl = buildAgentUrl;
}
- public String getAgentUrl()
+ public String getBuildAgentUrl()
{
- return agentUrl;
+ return buildAgentUrl;
}
public void executeTask( Task task )
@@ -79,7 +79,7 @@
try
{
- ProxySlaveAgentTransportService client = new ProxySlaveAgentTransportService( new URL( agentUrl ) );
+ ProxySlaveAgentTransportService client = new ProxySlaveAgentTransportService( new URL( buildAgentUrl ) );
log.info( "initializing buildContext" );
List buildContext = initializeBuildContext( prepareBuildTask.getProjectsBuildDefinitionsMap(),
@@ -91,7 +91,7 @@
}
catch ( MalformedURLException e )
{
- log.error( "Invalid URL " + agentUrl, e );
+ log.error( "Invalid URL " + buildAgentUrl, e );
endTime = System.currentTimeMillis();
createBuildResult( prepareBuildTask.getProjectsBuildDefinitionsMap(), prepareBuildTask.getTrigger(),
ContinuumUtils.throwableToString( e ) );
Propchange: continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildProjectTaskExecutor.java
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Wed Dec 10 07:43:11 2008
@@ -0,0 +1,2 @@
+/continuum/branches/continuum-1.2.x/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildTaskExecutor.java:690684,690689-690799,698449-698533,698817-698819,699529,700250,700273,700936,705894,705910,708339,722279,722624,723119,723487,724016,724024
+/continuum/trunk/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildTaskExecutor.java:713270-724659
Modified: continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildTaskExecutor.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildTaskExecutor.java?rev=725313&r1=725312&r2=725313&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildTaskExecutor.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildTaskExecutor.java Wed Dec 10 07:43:11 2008
@@ -1,214 +1,14 @@
package org.apache.continuum.builder.distributed.executor;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.continuum.builder.utils.ContinuumBuildConstant;
-import org.apache.continuum.dao.BuildDefinitionDao;
-import org.apache.continuum.dao.BuildResultDao;
-import org.apache.continuum.dao.ProjectDao;
-import org.apache.continuum.dao.ProjectScmRootDao;
-import org.apache.continuum.distributed.transport.master.ProxySlaveAgentTransportService;
-import org.apache.continuum.model.project.ProjectScmRoot;
-import org.apache.continuum.scm.queue.PrepareBuildProjectsTask;
-import org.apache.continuum.utils.ContinuumUtils;
-import org.apache.continuum.utils.ProjectSorter;
-import org.apache.maven.continuum.ContinuumException;
-import org.apache.maven.continuum.model.project.BuildDefinition;
-import org.apache.maven.continuum.model.project.BuildResult;
-import org.apache.maven.continuum.model.project.Project;
-import org.apache.maven.continuum.project.ContinuumProjectState;
-import org.apache.maven.continuum.store.ContinuumStoreException;
-import org.apache.xmlrpc.XmlRpcException;
import org.codehaus.plexus.taskqueue.Task;
import org.codehaus.plexus.taskqueue.execution.TaskExecutionException;
-import org.codehaus.plexus.taskqueue.execution.TaskExecutor;
-import org.codehaus.plexus.util.dag.CycleDetectedException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-public class DistributedBuildTaskExecutor
- implements TaskExecutor
+public interface DistributedBuildTaskExecutor
{
- private Logger log = LoggerFactory.getLogger( this.getClass() );
-
- private String agentUrl;
-
- private long startTime;
-
- private long endTime;
-
- /**
- * @plexus.requirement
- */
- private ProjectDao projectDao;
-
- /**
- * @plexus.requirement
- */
- private ProjectScmRootDao projectScmRootDao;
-
- /**
- * @plexus.requirement
- */
- private BuildDefinitionDao buildDefinitionDao;
-
- /**
- * @plexus.requirement
- */
- private BuildResultDao buildResultDao;
-
- public void setAgentUrl( String agentUrl )
- {
- this.agentUrl = agentUrl;
- }
-
- public String getAgentUrl()
- {
- return agentUrl;
- }
-
- public void executeTask( Task task )
- throws TaskExecutionException
- {
- PrepareBuildProjectsTask prepareBuildTask = (PrepareBuildProjectsTask) task;
-
- try
- {
- ProxySlaveAgentTransportService client = new ProxySlaveAgentTransportService( new URL( agentUrl ) );
-
- log.info( "initializing buildContext" );
- List buildContext = initializeBuildContext( prepareBuildTask.getProjectsBuildDefinitionsMap(),
- prepareBuildTask.getTrigger() );
-
- startTime = System.currentTimeMillis();
- client.buildProjects( buildContext );
- endTime = System.currentTimeMillis();
- }
- catch ( MalformedURLException e )
- {
- log.error( "Invalid URL " + agentUrl, e );
- endTime = System.currentTimeMillis();
- createBuildResult( prepareBuildTask.getProjectsBuildDefinitionsMap(), prepareBuildTask.getTrigger(),
- ContinuumUtils.throwableToString( e ) );
- }
- catch ( Exception e )
- {
- log.error( "Error occurred while performing task", e );
- endTime = System.currentTimeMillis();
- createBuildResult( prepareBuildTask.getProjectsBuildDefinitionsMap(), prepareBuildTask.getTrigger(),
- ContinuumUtils.throwableToString( e ) );
- }
- }
-
- private List initializeBuildContext( Map<Integer, Integer> projectsAndBuildDefinitions,
- int trigger )
- throws ContinuumException
- {
- List buildContext = new ArrayList();
- List<Project> projects = new ArrayList<Project>();
-
- try
- {
- for ( Integer projectId : projectsAndBuildDefinitions.keySet() )
- {
- Project project = projectDao.getProjectWithDependencies( projectId );
- projects.add( project );
- }
-
- try
- {
- projects = ProjectSorter.getSortedProjects( projects, null );
- }
- catch ( CycleDetectedException e )
- {
- log.info( "Cycle Detected" );
- }
-
- int ctr = 0;
-
- for ( Project project : projects )
- {
- if ( ctr == 0 )
- {
- List<ProjectScmRoot> scmRoots = projectScmRootDao.getProjectScmRootByProjectGroup( project.getProjectGroup().getId() );
- for ( ProjectScmRoot scmRoot : scmRoots )
- {
- if ( project.getScmUrl().startsWith( scmRoot.getScmRootAddress() ) )
- {
- scmRoot.setOldState( scmRoot.getState() );
- scmRoot.setState( ContinuumProjectState.UPDATING );
- projectScmRootDao.updateProjectScmRoot( scmRoot );
- break;
- }
- }
- }
-
- int buildDefinitionId = projectsAndBuildDefinitions.get( project.getId() );
- BuildDefinition buildDef = buildDefinitionDao.getBuildDefinition( buildDefinitionId );
- BuildResult oldBuildResult =
- buildResultDao.getLatestBuildResultForBuildDefinition( project.getId(), buildDefinitionId );
-
- Map context = new HashMap();
- context.put( ContinuumBuildConstant.KEY_PROJECT_ID, project.getId() );
- context.put( ContinuumBuildConstant.KEY_EXECUTOR_ID, project.getExecutorId() );
- context.put( ContinuumBuildConstant.KEY_SCM_URL, project.getScmUrl() );
- context.put( ContinuumBuildConstant.KEY_SCM_USERNAME, project.getScmUsername() );
- context.put( ContinuumBuildConstant.KEY_SCM_PASSWORD, project.getScmPassword() );
- context.put( ContinuumBuildConstant.KEY_BUILD_DEFINITION_ID, buildDefinitionId );
- context.put( ContinuumBuildConstant.KEY_BUILD_FILE, buildDef.getBuildFile() );
- context.put( ContinuumBuildConstant.KEY_GOALS, buildDef.getGoals() );
- context.put( ContinuumBuildConstant.KEY_ARGUMENTS, buildDef.getArguments() );
- context.put( ContinuumBuildConstant.KEY_TRIGGER, trigger );
- context.put( ContinuumBuildConstant.KEY_BUILD_FRESH, buildDef.isBuildFresh() );
-
- buildContext.add( context );
- ctr++;
- }
-
- return buildContext;
- }
- catch ( ContinuumStoreException e )
- {
- throw new ContinuumException( "Error while initializing build context", e );
- }
- }
-
- private void createBuildResult( Map<Integer, Integer> map, int trigger, String error )
- throws TaskExecutionException
- {
- try
- {
- for ( Integer projectId : map.keySet() )
- {
- int buildDefinitionId = map.get( projectId );
- Project project = projectDao.getProject( projectId );
- BuildDefinition buildDef = buildDefinitionDao.getBuildDefinition( buildDefinitionId );
+ void executeTask( Task task )
+ throws TaskExecutionException;
- BuildResult latestBuildResult = buildResultDao.
- getLatestBuildResultForBuildDefinition( projectId, buildDefinitionId );
- if ( ( latestBuildResult.getStartTime() >= startTime && latestBuildResult.getEndTime() > 0 &&
- latestBuildResult.getEndTime() < endTime ) || latestBuildResult.getStartTime() < startTime )
- {
- BuildResult buildResult = new BuildResult();
- buildResult.setBuildDefinition( buildDef );
- buildResult.setError( error );
- buildResult.setState( ContinuumProjectState.ERROR );
- buildResult.setTrigger( trigger );
- buildResult.setStartTime( startTime );
- buildResult.setEndTime( endTime );
+ String getBuildAgentUrl();
- buildResultDao.addBuildResult( project, buildResult );
- }
- }
- }
- catch ( ContinuumStoreException e )
- {
- throw new TaskExecutionException( "" );
- }
- }
+ void setBuildAgentUrl( String buildAgentUrl );
}
Modified: continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildTaskQueueExecutor.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildTaskQueueExecutor.java?rev=725313&r1=725312&r2=725313&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildTaskQueueExecutor.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildTaskQueueExecutor.java Wed Dec 10 07:43:11 2008
@@ -1,332 +1,38 @@
package org.apache.continuum.builder.distributed.executor;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Startable;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.StartingException;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.StoppingException;
import org.codehaus.plexus.taskqueue.Task;
-import org.codehaus.plexus.taskqueue.TaskQueue;
-import org.codehaus.plexus.taskqueue.execution.TaskExecutionException;
-import org.codehaus.plexus.taskqueue.execution.TaskQueueExecutor;
-import org.codehaus.plexus.util.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import edu.emory.mathcs.backport.java.util.concurrent.CancellationException;
-import edu.emory.mathcs.backport.java.util.concurrent.ExecutionException;
-import edu.emory.mathcs.backport.java.util.concurrent.ExecutorService;
-import edu.emory.mathcs.backport.java.util.concurrent.Executors;
-import edu.emory.mathcs.backport.java.util.concurrent.Future;
-import edu.emory.mathcs.backport.java.util.concurrent.TimeUnit;
-import edu.emory.mathcs.backport.java.util.concurrent.TimeoutException;
-
-/**
- * Codes were taken from Plexus' ThreadedTaskQueueExecutor
- */
-public class DistributedBuildTaskQueueExecutor
- implements TaskQueueExecutor, Initializable, Startable
+public interface DistributedBuildTaskQueueExecutor
{
- private static final int SHUTDOWN = 1;
-
- private static final int CANCEL_TASK = 2;
-
- private Logger log = LoggerFactory.getLogger( this.getClass() );
-
- /** @requirement */
- private TaskQueue queue;
+ String ROLE = DistributedBuildTaskQueueExecutor.class.getName();
/**
- * @requirement
+ * Returns the build agent url of task queue executor
+ *
+ * @return the build agent url
*/
- private DistributedBuildTaskExecutor executor;
-
- /** @configuration */
- private String name;
-
- // ----------------------------------------------------------------------
- //
- // ----------------------------------------------------------------------
-
- private ExecutorRunnable executorRunnable;
-
- private ExecutorService executorService;
-
- private Task currentTask;
-
- private class ExecutorRunnable
- extends Thread
- {
- private volatile int command;
-
- private boolean done;
-
- public void run()
- {
- while ( command != SHUTDOWN )
- {
- final Task task;
-
- currentTask = null;
-
- try
- {
- task = queue.poll( 100, TimeUnit.MILLISECONDS );
- }
- catch ( InterruptedException e )
- {
- log.info( "Executor thread interrupted, command: "
- + ( command == SHUTDOWN ? "Shutdown" : command == CANCEL_TASK ? "Cancel task" : "Unknown" ) );
- continue;
- }
-
- if ( task == null )
- {
- continue;
- }
-
- currentTask = task;
-
- Future future = executorService.submit( new Runnable()
- {
- public void run()
- {
- try
- {
- executor.executeTask( task );
- }
- catch ( TaskExecutionException e )
- {
- log.error( "Error executing task", e );
- }
- }
- } );
-
- try
- {
- waitForTask( task, future );
- }
- catch ( ExecutionException e )
- {
- log.error( "Error executing task", e );
- }
- }
-
- currentTask = null;
-
- log.info( "Executor thread '" + name + "' exited." );
-
- done = true;
-
- synchronized ( this )
- {
- notifyAll();
- }
- }
-
- private void waitForTask( Task task, Future future )
- throws ExecutionException
- {
- boolean stop = false;
-
- while ( !stop )
- {
- try
- {
- if ( task.getMaxExecutionTime() == 0 )
- {
- log.debug( "Waiting indefinitely for task to complete" );
- future.get();
- return;
- }
- else
- {
- log.debug( "Waiting at most " + task.getMaxExecutionTime() + "ms for task completion" );
- future.get( task.getMaxExecutionTime(), TimeUnit.MILLISECONDS );
- log.debug( "Task completed within " + task.getMaxExecutionTime() + "ms" );
- return;
- }
- }
- catch ( InterruptedException e )
- {
- switch ( command )
- {
- case SHUTDOWN:
- {
- log.info( "Shutdown command received. Cancelling task." );
- cancel( future );
- return;
- }
-
- case CANCEL_TASK:
- {
- command = 0;
- log.info( "Cancelling task" );
- cancel( future );
- return;
- }
-
- default:
- // when can this thread be interrupted, and should we ignore it if shutdown = false?
- log.warn( "Interrupted while waiting for task to complete; ignoring", e );
- break;
- }
- }
- catch ( TimeoutException e )
- {
- log.warn( "Task " + task + " didn't complete within time, cancelling it." );
- cancel( future );
- return;
- }
- catch ( CancellationException e )
- {
- log.warn( "The task was cancelled", e );
- return;
- }
- }
- }
-
- private void cancel( Future future )
- {
- if ( !future.cancel( true ) )
- {
- if ( !future.isDone() && !future.isCancelled() )
- {
- log.warn( "Unable to cancel task" );
- }
- else
- {
- log.warn( "Task not cancelled (Flags: done: " + future.isDone() + " cancelled: "
- + future.isCancelled() + ")" );
- }
- }
- else
- {
- log.debug( "Task successfully cancelled" );
- }
- }
-
- public synchronized void shutdown()
- {
- log.debug( "Signalling executor thread to shutdown" );
-
- command = SHUTDOWN;
+ String getBuildAgentUrl();
- interrupt();
- }
-
- public synchronized boolean cancelTask( Task task )
- {
- if ( !task.equals( currentTask ) )
- {
- log.debug( "Not cancelling task - it is not running" );
- return false;
- }
-
- if ( command != SHUTDOWN )
- {
- log.debug( "Signalling executor thread to cancel task" );
-
- command = CANCEL_TASK;
-
- interrupt();
- }
- else
- {
- log.debug( "Executor thread already stopping; task will be cancelled automatically" );
- }
-
- return true;
- }
-
- public boolean isDone()
- {
- return done;
- }
- }
-
- // ----------------------------------------------------------------------
- // Component lifecycle
- // ----------------------------------------------------------------------
-
- public void initialize()
- throws InitializationException
- {
- if ( StringUtils.isEmpty( name ) )
- {
- throw new IllegalArgumentException( "'name' must be set." );
- }
- }
-
- public void start()
- throws StartingException
- {
- log.info( "Starting task executor, thread name '" + name + "'." );
-
- this.executorService = Executors.newSingleThreadExecutor();
-
- executorRunnable = new ExecutorRunnable();
-
- executorRunnable.setDaemon( true );
-
- executorRunnable.start();
- }
-
- public void stop()
- throws StoppingException
- {
- executorRunnable.shutdown();
-
- int maxSleep = 10 * 1000; // 10 seconds
-
- int interval = 1000;
-
- long endTime = System.currentTimeMillis() + maxSleep;
-
- while ( !executorRunnable.isDone() && executorRunnable.isAlive() )
- {
- if ( System.currentTimeMillis() > endTime )
- {
- log.warn( "Timeout waiting for executor thread '" + name + "' to stop, aborting" );
- break;
- }
-
- log.info( "Waiting until task executor '" + name + "' is idling..." );
-
- try
- {
- synchronized ( executorRunnable )
- {
- executorRunnable.wait( interval );
- }
- }
- catch ( InterruptedException ex )
- {
- // ignore
- }
-
- // notify again, just in case.
- executorRunnable.shutdown();
- }
- }
-
- public Task getCurrentTask()
- {
- return currentTask;
- }
-
- public synchronized boolean cancelTask( Task task )
- {
- return executorRunnable.cancelTask( task );
- }
+ /**
+ * Sets the build agent url of this task queue executor
+ *
+ * @param buildAgentUrl
+ */
+ void setBuildAgentUrl( String buildAgentUrl );
- public void setBuildAgentUrl( String buildAgentUrl )
- {
- executor.setAgentUrl( buildAgentUrl );
- }
+ /**
+ * Returns the currently executing task.
+ *
+ * @return the currently executing task.
+ */
+ Task getCurrentTask();
- public String getBuildAgentUrl()
- {
- return executor.getAgentUrl();
- }
+ /**
+ * Cancels execution of this task, if it's currently running.
+ * Does NOT remove it from the associated queue!
+ *
+ * @param task The task to cancel
+ * @return true if the task was cancelled, false if the task was not executing.
+ */
+ boolean cancelTask( Task task );
}
Copied: continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/ThreadedDistributedBuildTaskQueueExecutor.java (from r725038, continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildTaskQueueExecutor.java)
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/ThreadedDistributedBuildTaskQueueExecutor.java?p2=continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/ThreadedDistributedBuildTaskQueueExecutor.java&p1=continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildTaskQueueExecutor.java&r1=725038&r2=725313&rev=725313&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildTaskQueueExecutor.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/ThreadedDistributedBuildTaskQueueExecutor.java Wed Dec 10 07:43:11 2008
@@ -8,7 +8,6 @@
import org.codehaus.plexus.taskqueue.Task;
import org.codehaus.plexus.taskqueue.TaskQueue;
import org.codehaus.plexus.taskqueue.execution.TaskExecutionException;
-import org.codehaus.plexus.taskqueue.execution.TaskQueueExecutor;
import org.codehaus.plexus.util.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -24,8 +23,8 @@
/**
* Codes were taken from Plexus' ThreadedTaskQueueExecutor
*/
-public class DistributedBuildTaskQueueExecutor
- implements TaskQueueExecutor, Initializable, Startable
+public class ThreadedDistributedBuildTaskQueueExecutor
+ implements DistributedBuildTaskQueueExecutor, Initializable, Startable
{
private static final int SHUTDOWN = 1;
@@ -36,9 +35,7 @@
/** @requirement */
private TaskQueue queue;
- /**
- * @requirement
- */
+ /** @requirement */
private DistributedBuildTaskExecutor executor;
/** @configuration */
@@ -322,11 +319,11 @@
public void setBuildAgentUrl( String buildAgentUrl )
{
- executor.setAgentUrl( buildAgentUrl );
+ executor.setBuildAgentUrl( buildAgentUrl );
}
public String getBuildAgentUrl()
{
- return executor.getAgentUrl();
+ return executor.getBuildAgentUrl();
}
}
Propchange: continuum/branches/continuum-distributed-builds/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/ThreadedDistributedBuildTaskQueueExecutor.java
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Wed Dec 10 07:43:11 2008
@@ -0,0 +1,2 @@
+/continuum/branches/continuum-1.2.x/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildTaskQueueExecutor.java:690684,690689-690799,698449-698533,698817-698819,699529,700250,700273,700936,705894,705910,708339,722279,722624,723119,723487,724016,724024
+/continuum/trunk/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildTaskQueueExecutor.java:713270-724659
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=725313&r1=725312&r2=725313&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 Wed Dec 10 07:43:11 2008
@@ -1,5 +1,6 @@
package org.apache.continuum.builder.distributed.manager;
+import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
@@ -7,6 +8,7 @@
import java.util.Map;
import org.apache.continuum.builder.distributed.executor.DistributedBuildTaskQueueExecutor;
+import org.apache.continuum.builder.distributed.executor.ThreadedDistributedBuildTaskQueueExecutor;
import org.apache.continuum.builder.utils.ContinuumBuildConstant;
import org.apache.continuum.configuration.BuildAgentConfiguration;
import org.apache.continuum.dao.BuildDefinitionDao;
@@ -16,6 +18,7 @@
import org.apache.continuum.distributed.transport.master.ProxySlaveAgentTransportService;
import org.apache.continuum.model.project.ProjectScmRoot;
import org.apache.continuum.scm.queue.PrepareBuildProjectsTask;
+import org.apache.continuum.utils.ContinuumUtils;
import org.apache.maven.continuum.ContinuumException;
import org.apache.maven.continuum.configuration.ConfigurationService;
import org.apache.maven.continuum.model.project.BuildDefinition;
@@ -33,7 +36,8 @@
import org.codehaus.plexus.context.Context;
import org.codehaus.plexus.context.ContextException;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
-import org.codehaus.plexus.taskqueue.execution.TaskQueueExecutor;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.codehaus.plexus.util.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -42,7 +46,7 @@
* @author Maria Catherine Tan
*/
public class DefaultDistributedBuildManager
- implements DistributedBuildManager, Contextualizable
+ implements DistributedBuildManager, Contextualizable, Initializable
{
private Logger log = LoggerFactory.getLogger( this.getClass() );
@@ -73,57 +77,7 @@
private PlexusContainer container;
- private Map<String, DistributedBuildTaskQueueExecutor> taskQueueExecutors;
-
- public ConfigurationService getConfigurationService()
- {
- return configurationService;
- }
-
- public void setConfigurationService( ConfigurationService configurationService )
- {
- this.configurationService = configurationService;
- }
-
- public ProjectDao getProjectDao()
- {
- return projectDao;
- }
-
- public void setProjectDao( ProjectDao projectDao )
- {
- this.projectDao = projectDao;
- }
-
- public BuildDefinitionDao getBuildDefinitionDao()
- {
- return buildDefinitionDao;
- }
-
- public void setBuildDefinitionDao( BuildDefinitionDao buildDefinitionDao )
- {
- this.buildDefinitionDao = buildDefinitionDao;
- }
-
- public BuildResultDao getBuildResultDao()
- {
- return buildResultDao;
- }
-
- public void setBuildResultDao( BuildResultDao buildResultDao )
- {
- this.buildResultDao = buildResultDao;
- }
-
- public ProjectScmRootDao getProjectScmRootDao()
- {
- return projectScmRootDao;
- }
-
- public void setProjectScmRootDao( ProjectScmRootDao projectScmRootDao )
- {
- this.projectScmRootDao = projectScmRootDao;
- }
+ private Map<String, ThreadedDistributedBuildTaskQueueExecutor> taskQueueExecutors;
// --------------------------------
// Plexus Lifecycle
@@ -135,9 +89,9 @@
}
public void initialize()
- throws ContinuumException, ComponentLookupException
+ throws InitializationException
{
- taskQueueExecutors = new HashMap<String, DistributedBuildTaskQueueExecutor>();
+ taskQueueExecutors = new HashMap<String, ThreadedDistributedBuildTaskQueueExecutor>();
List<BuildAgentConfiguration> agents = configurationService.getBuildAgents();
@@ -147,8 +101,33 @@
{
if ( agent.isEnabled() )
{
- log.info( "agent is enabled, add TaskQueueExecutor for build agent '" + agent.getUrl() + "'" );
- addTaskQueueExecutor( agent.getUrl() );
+ try
+ {
+ ProxySlaveAgentTransportService client = new ProxySlaveAgentTransportService( new URL( agent.getUrl() ) );
+
+ if ( client.ping() )
+ {
+ log.info( "agent is enabled, add TaskQueueExecutor for build agent '" + agent.getUrl() + "'" );
+ addTaskQueueExecutor( agent.getUrl() );
+ }
+ else
+ {
+ log.info( "unable to ping build agent '" + agent.getUrl() + "'" );
+ }
+ }
+ catch ( MalformedURLException e )
+ {
+ // do not throw exception, just log it
+ log.info( "Invalid URL " + agent.getUrl() + ", not creating task queue executor" );
+ }
+ catch ( ContinuumException e )
+ {
+ throw new InitializationException( "Error while initializing distributed build task queue executors", e );
+ }
+ catch ( Exception e )
+ {
+ log.info( "unable to ping build agent '" + agent.getUrl() + "': " + ContinuumUtils.throwableToString( e ) );
+ }
}
}
}
@@ -163,8 +142,29 @@
{
if ( agent.isEnabled() && !taskQueueExecutors.containsKey( agent.getUrl() ) )
{
- log.info( "agent is enabled, add TaskQueueExecutor for build agent '" + agent.getUrl() + "'" );
- addTaskQueueExecutor( agent.getUrl() );
+ try
+ {
+ ProxySlaveAgentTransportService client = new ProxySlaveAgentTransportService( new URL( agent.getUrl() ) );
+
+ if ( client.ping() )
+ {
+ log.info( "agent is enabled, add TaskQueueExecutor for build agent '" + agent.getUrl() + "'" );
+ addTaskQueueExecutor( agent.getUrl() );
+ }
+ else
+ {
+ log.info( "unable to ping build agent '" + agent.getUrl() + "'" );
+ }
+ }
+ catch ( MalformedURLException e )
+ {
+ // do not throw exception, just log it
+ log.info( "Invalid URL " + agent.getUrl() + ", not creating task queue executor" );
+ }
+ catch ( Exception e )
+ {
+ log.info( "unable to ping build agent '" + agent.getUrl() + "': " + ContinuumUtils.throwableToString( e ) );
+ }
}
else if ( !agent.isEnabled() && taskQueueExecutors.containsKey( agent.getUrl() ) )
{
@@ -182,7 +182,7 @@
public boolean isBuildAgentBusy( String buildAgentUrl )
{
- TaskQueueExecutor executor = taskQueueExecutors.get( buildAgentUrl );
+ ThreadedDistributedBuildTaskQueueExecutor executor = taskQueueExecutors.get( buildAgentUrl );
if ( executor != null && executor.getCurrentTask() != null )
{
@@ -198,21 +198,21 @@
throws ContinuumException
{
try
- {
- DistributedBuildTaskQueueExecutor taskQueueExecutor = (DistributedBuildTaskQueueExecutor) container.
- lookup( DistributedBuildTaskQueueExecutor.class );
+ {
+ ThreadedDistributedBuildTaskQueueExecutor taskQueueExecutor = (ThreadedDistributedBuildTaskQueueExecutor) container.
+ lookup( DistributedBuildTaskQueueExecutor.class, "distributed-build-project" );
taskQueueExecutor.setBuildAgentUrl( url );
taskQueueExecutors.put( url, taskQueueExecutor );
}
catch ( ComponentLookupException e )
{
- throw new ContinuumException( "Unable to lookup TaskQueueExecutor for distributed-build", e );
+ throw new ContinuumException( "Unable to lookup TaskQueueExecutor for distributed-build-project", e );
}
}
public void cancelDistributedBuild( String buildAgentUrl, int projectGroupId, String scmRootAddress )
{
- DistributedBuildTaskQueueExecutor taskQueueExecutor = taskQueueExecutors.get( buildAgentUrl );
+ ThreadedDistributedBuildTaskQueueExecutor taskQueueExecutor = taskQueueExecutors.get( buildAgentUrl );
if ( taskQueueExecutor != null )
{
@@ -372,6 +372,25 @@
}
}
+ public Map<String, PrepareBuildProjectsTask> getDistributedBuildProjects()
+ {
+ Map<String, PrepareBuildProjectsTask> map = new HashMap<String, PrepareBuildProjectsTask>();
+
+ for ( String url : taskQueueExecutors.keySet() )
+ {
+ ThreadedDistributedBuildTaskQueueExecutor taskQueueExecutor = taskQueueExecutors.get( url );
+
+ if ( taskQueueExecutor.getCurrentTask() != null )
+ {
+ PrepareBuildProjectsTask task = (PrepareBuildProjectsTask) taskQueueExecutor.getCurrentTask();
+
+ map.put( url, task );
+ }
+ }
+
+ return map;
+ }
+
public List<Installation> getAvailableInstallations( String buildAgentUrl )
throws ContinuumException
{
Modified: continuum/branches/continuum-distributed-builds/continuum-builder/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-builder/src/main/resources/META-INF/plexus/components.xml?rev=725313&r1=725312&r2=725313&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-builder/src/main/resources/META-INF/plexus/components.xml (original)
+++ continuum/branches/continuum-distributed-builds/continuum-builder/src/main/resources/META-INF/plexus/components.xml Wed Dec 10 07:43:11 2008
@@ -19,6 +19,30 @@
<component-set>
<components>
+
+ <component>
+ <role>org.apache.continuum.builder.distributed.manager.DistributedBuildManager</role>
+ <role-hint>default</role-hint>
+ <implementation>org.apache.continuum.builder.distributed.manager.DefaultDistributedBuildManager</implementation>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.continuum.configuration.ConfigurationService</role>
+ </requirement>
+ <requirement>
+ <role>org.apache.continuum.dao.ProjectDao</role>
+ </requirement>
+ <requirement>
+ <role>org.apache.continuum.dao.ProjectScmRootDao</role>
+ </requirement>
+ <requirement>
+ <role>org.apache.continuum.dao.BuildResultDao</role>
+ </requirement>
+ <requirement>
+ <role>org.apache.continuum.dao.BuildDefinitionDao</role>
+ </requirement>
+ </requirements>
+ </component>
+
<!--
|
| Distributed Build Task Queue
@@ -33,9 +57,9 @@
</component>
<component>
- <role>org.codehaus.plexus.taskqueue.execution.TaskExecutor</role>
+ <role>org.apache.continuum.builder.distributed.executor.DistributedBuildTaskExecutor</role>
<role-hint>distributed-build-project</role-hint>
- <implementation>org.apache.continuum.builder.distributed.executor.DistributedBuildTaskExecutor</implementation>
+ <implementation>org.apache.continuum.builder.distributed.executor.DistributedBuildProjectTaskExecutor</implementation>
<requirements>
<requirement>
<role>org.apache.continuum.dao.ProjectDao</role>
@@ -54,12 +78,18 @@
<component>
<role>org.apache.continuum.builder.distributed.executor.DistributedBuildTaskQueueExecutor</role>
+ <role-hint>distributed-build-project</role-hint>
+ <implementation>org.apache.continuum.builder.distributed.executor.ThreadedDistributedBuildTaskQueueExecutor</implementation>
<instantiation-strategy>per-lookup</instantiation-strategy>
<requirements>
<requirement>
<role>org.codehaus.plexus.taskqueue.TaskQueue</role>
<role-hint>distributed-build-project</role-hint>
</requirement>
+ <requirement>
+ <role>org.apache.continuum.builder.distributed.executor.DistributedBuildTaskExecutor</role>
+ <role-hint>distributed-build-project</role-hint>
+ </requirement>
</requirements>
<configuration>
<name>distributed-build-project</name>
Modified: continuum/branches/continuum-distributed-builds/continuum-builder/src/test/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManagerTest.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-builder/src/test/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManagerTest.java?rev=725313&r1=725312&r2=725313&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-builder/src/test/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManagerTest.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-builder/src/test/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManagerTest.java Wed Dec 10 07:43:11 2008
@@ -25,13 +25,9 @@
{
super.setUp();
- //distributedBuildManager = (DistributedBuildManager) lookup( "distributedBuildManager" );
+ distributedBuildManager = (DistributedBuildManager) lookup( DistributedBuildManager.class );
}
- public void testSomething()
- {
- }
-/*
public void testUpdateScmResult()
throws Exception
{
@@ -133,5 +129,4 @@
assertEquals( expected.getException(), actual.getException() );
assertEquals( expected.getProviderMessage(), actual.getProviderMessage() );
}
- */
}
Modified: continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/continuum/taskqueue/manager/DefaultTaskQueueManager.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/continuum/taskqueue/manager/DefaultTaskQueueManager.java?rev=725313&r1=725312&r2=725313&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/continuum/taskqueue/manager/DefaultTaskQueueManager.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/continuum/taskqueue/manager/DefaultTaskQueueManager.java Wed Dec 10 07:43:11 2008
@@ -78,7 +78,7 @@
private PlexusContainer container;
/**
- * @plexus.requirement role-hint="distributed-build"
+ * @plexus.requirement role-hint="distributed-build-project"
*/
private TaskQueue distributedBuildQueue;
@@ -359,7 +359,33 @@
return false;
}
-
+
+ public boolean isInDistributedBuildQueue( int projectGroupId, String scmRootAddress )
+ throws TaskQueueManagerException
+ {
+ try
+ {
+ List<PrepareBuildProjectsTask> queue = distributedBuildQueue.getQueueSnapshot();
+
+ for ( PrepareBuildProjectsTask task : queue )
+ {
+ if ( task != null )
+ {
+ if ( task.getProjectGroupId() == projectGroupId && task.getScmRootAddress().equals( scmRootAddress ) )
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+ catch ( TaskQueueException e )
+ {
+ throw new TaskQueueManagerException( "Error while getting the tasks in distributed build queue", e );
+ }
+ }
+
public boolean isInPrepareBuildQueue( int projectId )
throws TaskQueueManagerException
{
@@ -371,7 +397,7 @@
{
if ( task != null )
{
- Map<Integer, Integer> map = ( (PrepareBuildProjectsTask) task).getProjectsBuildDefinitionsMap();
+ Map<Integer, Integer> map = task.getProjectsBuildDefinitionsMap();
if ( map.size() > 0 )
{
Modified: continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java?rev=725313&r1=725312&r2=725313&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java Wed Dec 10 07:43:11 2008
@@ -603,6 +603,12 @@
try
{
+ if ( taskQueueManager.isInPrepareBuildQueue( projectId ) )
+ {
+ taskQueueManager.removeFromPrepareBuildQueue( project.getProjectGroup().getId(),
+ getProjectScmRootByProject( projectId ).getScmRootAddress() );
+ }
+
if ( taskQueueManager.isInCheckoutQueue( projectId ) )
{
taskQueueManager.removeProjectFromCheckoutQueue( projectId );
@@ -3344,13 +3350,21 @@
{
if ( configurationService.isDistributedBuildEnabled() )
{
- taskQueueManager.getDistributedBuildQueue().put( task );
+ // check if
+ if ( !taskQueueManager.isInDistributedBuildQueue( projectGroupId, scmRootAddress ) )
+ {
+ taskQueueManager.getDistributedBuildQueue().put( task );
+ }
}
else
{
taskQueueManager.getPrepareBuildQueue().put( task );
}
}
+ catch ( TaskQueueManagerException e )
+ {
+ throw logAndCreateException( e.getMessage(), e );
+ }
catch ( TaskQueueException e )
{
throw logAndCreateException( "Error while creating enqueuing object.", e );
Modified: continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-distributed-build-transport/continuum-distributed-build-transport-master/pom.xml
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-distributed-build-transport/continuum-distributed-build-transport-master/pom.xml?rev=725313&r1=725312&r2=725313&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-distributed-build-transport/continuum-distributed-build-transport-master/pom.xml (original)
+++ continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-distributed-build-transport/continuum-distributed-build-transport-master/pom.xml Wed Dec 10 07:43:11 2008
@@ -30,10 +30,6 @@
<dependencies>
<dependency>
<groupId>org.apache.continuum</groupId>
- <artifactId>continuum-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.continuum</groupId>
<artifactId>continuum-distributed-build-transport-common</artifactId>
</dependency>
</dependencies>
Modified: continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-distributed-build-transport/continuum-distributed-build-transport-master/src/main/java/org/apache/continuum/distributed/transport/master/ProxySlaveAgentTransportService.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-distributed-build-transport/continuum-distributed-build-transport-master/src/main/java/org/apache/continuum/distributed/transport/master/ProxySlaveAgentTransportService.java?rev=725313&r1=725312&r2=725313&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-distributed-build-transport/continuum-distributed-build-transport-master/src/main/java/org/apache/continuum/distributed/transport/master/ProxySlaveAgentTransportService.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-distributed-build-transport/continuum-distributed-build-transport-master/src/main/java/org/apache/continuum/distributed/transport/master/ProxySlaveAgentTransportService.java Wed Dec 10 07:43:11 2008
@@ -76,8 +76,10 @@
{
try
{
- slave.buildProjects( projectsBuildContext );
+ //slave.buildProjects( projectsBuildContext );
log.info( "Building projects." );
+ Thread.sleep( 2000000 );
+ log.info( "Build finished" );
}
catch ( Exception e )
{
@@ -147,8 +149,9 @@
public boolean ping()
throws Exception
{
- boolean result = slave.ping();
-
+ //boolean result = slave.ping();
+ boolean result = true;
+
log.info( "Ping " + (result ? "ok" : "failed") );
return result;
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=725313&r1=725312&r2=725313&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 Wed Dec 10 07:43:11 2008
@@ -21,13 +21,19 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
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.dao.ProjectDao;
+import org.apache.continuum.dao.ProjectGroupDao;
+import org.apache.continuum.scm.queue.PrepareBuildProjectsTask;
import org.apache.continuum.taskqueue.manager.TaskQueueManager;
+import org.apache.maven.continuum.Continuum;
import org.apache.maven.continuum.buildqueue.BuildProjectTask;
import org.apache.maven.continuum.model.project.Project;
+import org.apache.maven.continuum.model.project.ProjectGroup;
import org.apache.maven.continuum.scm.queue.CheckOutTask;
import org.apache.maven.continuum.security.ContinuumRoleConstants;
import org.apache.maven.continuum.web.action.ContinuumActionSupport;
@@ -98,12 +104,34 @@
private String buildAgentUrl;
- private List<Integer> selectedProjects;
+ private int projectGroupId;
+
+ private String scmRootAddress;
// -----------------------------------------------------
// webwork
// -----------------------------------------------------
+ public int getProjectGroupId()
+ {
+ return projectGroupId;
+ }
+
+ public void setProjectGroupId( int projectGroupId )
+ {
+ this.projectGroupId = projectGroupId;
+ }
+
+ public String getScmRootAddress()
+ {
+ return scmRootAddress;
+ }
+
+ public void setScmRootAddress( String scmRootAddress )
+ {
+ this.scmRootAddress = scmRootAddress;
+ }
+
public String cancelCurrent()
throws Exception
{
@@ -174,24 +202,27 @@
public String display()
throws Exception
{
- if ( getContinuum().getConfiguration().isDistributedBuildEnabled() )
+ Continuum continuum = getContinuum();
+
+ if ( continuum.getConfiguration().isDistributedBuildEnabled() )
{
distributedBuildSummary = new ArrayList<DistributedBuildSummary>();
-
- for ( BuildAgentListener listener : distributedBuildManager.getBuildAgentListeners() )
+
+ Map<String, PrepareBuildProjectsTask> map = distributedBuildManager.getDistributedBuildProjects();
+
+ for ( String url : map.keySet() )
{
- 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 );
- }
- }
+ PrepareBuildProjectsTask task = map.get( url );
+
+ ProjectGroup projectGroup = continuum.getProjectGroup( task.getProjectGroupId() );
+
+ DistributedBuildSummary summary = new DistributedBuildSummary();
+ summary.setUrl( url );
+ summary.setProjectGroupId( task.getProjectGroupId() );
+ summary.setProjectGroupName( projectGroup.getName() );
+ summary.setScmRootAddress( task.getScmRootAddress() );
+
+ distributedBuildSummary.add( summary );
}
return DISTRIBUTED_BUILD_SUCCESS;
@@ -295,7 +326,7 @@
return REQUIRES_AUTHENTICATION;
}
- distributedBuildManager.cancelDistributedBuild( buildAgentUrl, projectId );
+ distributedBuildManager.cancelDistributedBuild( buildAgentUrl, projectGroupId, scmRootAddress );
return SUCCESS;
}
@@ -469,14 +500,4 @@
{
this.buildAgentUrl = buildAgentUrl;
}
-
- public List<Integer> getSelectedProjects()
- {
- return selectedProjects;
- }
-
- public void setSelectedProjects( List<Integer> selectedProjects )
- {
- this.selectedProjects = selectedProjects;
- }
}
Modified: continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/mdo/view-models.mdo
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/mdo/view-models.mdo?rev=725313&r1=725312&r2=725313&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/mdo/view-models.mdo (original)
+++ continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/mdo/view-models.mdo Wed Dec 10 07:43:11 2008
@@ -480,24 +480,31 @@
<version>1.0.0+</version>
<fields>
<field>
- <name>projectId</name>
+ <name>url</name>
<version>1.0.0</version>
<required>true</required>
- <description>ID of the project</description>
+ <description>URL of the build agent</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>projectGroupId</name>
+ <version>1.0.0</version>
+ <required>true</required>
+ <description>ID of the project group</description>
<type>int</type>
</field>
<field>
- <name>projectName</name>
+ <name>projectGroupName</name>
<version>1.0.0</version>
<required>true</required>
- <description>Name of the project</description>
+ <description>Name of the project group</description>
<type>String</type>
</field>
<field>
- <name>url</name>
+ <name>scmRootAddress</name>
<version>1.0.0</version>
<required>true</required>
- <description>URL of the build agent</description>
+ <description>Scm root address of projects</description>
<type>String</type>
</field>
</fields>
Modified: continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/resources/localization/Continuum.properties
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/resources/localization/Continuum.properties?rev=725313&r1=725312&r2=725313&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/resources/localization/Continuum.properties (original)
+++ continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/resources/localization/Continuum.properties Wed Dec 10 07:43:11 2008
@@ -983,4 +983,13 @@
# ----------------------------------------------------------------------
deleteBuildAgent.page.title = Continuum - Delete Build Agent
deleteBuildAgent.section.title = Delete Build Agent
-deleteBuildAgent.confirmation.message = Are you sure you want to delete build agent {0} ?
\ No newline at end of file
+deleteBuildAgent.confirmation.message = Are you sure you want to delete build agent {0} ?
+
+# ----------------------------------------------------------------------
+# Page: View Distributed Build
+# ----------------------------------------------------------------------
+distributedBuilds.page.title = Continuum - View Distributed Builds
+distributedBuilds.section.title = View Distributed Builds
+distributedBuild.table.projectGroupName = Project Group Name
+distributedBuild.table.scmRootAddress = Scm Root Address
+distributedBuild.table.agentUrl = Build Agent URL
\ No newline at end of file
Modified: continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/resources/struts.xml
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/resources/struts.xml?rev=725313&r1=725312&r2=725313&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/resources/struts.xml (original)
+++ continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/resources/struts.xml Wed Dec 10 07:43:11 2008
@@ -908,10 +908,7 @@
<action name="viewBuildAgent" class="buildAgent" method="view">
<result name="success">/WEB-INF/jsp/admin/viewBuildAgent.jsp</result>
</action>
-
- <action name="viewDistributedBuilds" class="distributedBuild" method="view">
- <result name="success">/WEB-INF/jsp/admin/viewDistributedBuilds.jsp</result>
- </action>
+
</package>
<package name="component" extends="default">
Modified: continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/viewDistributedBuilds.jsp
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/viewDistributedBuilds.jsp?rev=725313&r1=725312&r2=725313&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/viewDistributedBuilds.jsp (original)
+++ continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/webapp/WEB-INF/jsp/admin/viewDistributedBuilds.jsp Wed Dec 10 07:43:11 2008
@@ -47,11 +47,13 @@
sortable="false"
filterable="false">
<ec:row>
- <ec:column property="projectName" title="distributedBuild.table.project"/>
+ <ec:column property="projectGroupName" title="distributedBuild.table.projectGroupName"/>
+ <ec:column property="scmRootAddress" title="distributedBuild.table.scmRootAddress"/>
<ec:column property="url" title="distributedBuild.table.agentUrl"/>
<ec:column property="cancelEntry" title=" " width="1%">
<s:url id="cancelUrl" action="cancelDistributedBuild" method="cancelDistributedBuild" namespace="/">
- <s:param name="projectId">${pageScope.distributedBuild.projectId}</s:param>
+ <s:param name="projectGroupId">${pageScope.distributedBuild.projectGroupId}</s:param>
+ <s:param name="scmRootAddress">${pageScope.distributedBuild.scmRootAddress}</s:param>
<s:param name="buildAgentUrl">${pageScope.distributedBuild.url}</s:param>
</s:url>
<s:a href="%{cancelUrl}"><img src="<s:url value='/images/cancelbuild.gif' includeParams="none"/>" alt="<s:text name='cancel'/>" title="<s:text name='cancel'/>" border="0"></s:a>
Modified: continuum/branches/continuum-distributed-builds/pom.xml
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/pom.xml?rev=725313&r1=725312&r2=725313&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/pom.xml (original)
+++ continuum/branches/continuum-distributed-builds/pom.xml Wed Dec 10 07:43:11 2008
@@ -572,10 +572,20 @@
</dependency>
<dependency>
<groupId>org.apache.continuum</groupId>
+ <artifactId>continuum-distributed-build-transport-common</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.continuum</groupId>
<artifactId>continuum-distributed-build-transport-master</artifactId>
<version>${pom.version}</version>
</dependency>
<dependency>
+ <groupId>org.apache.continuum</groupId>
+ <artifactId>continuum-distributed-build-transport-slave</artifactId>
+ <version>${pom.version}</version>
+ </dependency>
+ <dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>1.5.0</version>