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/15 17:23:54 UTC
svn commit: r726727 [2/2] - in
/continuum/branches/continuum-distributed-builds:
continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/
continuum-builder/src/main/java/org/apache/continuum/builder/utils/
continuum-distribute...
Modified: continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/taskqueue/execution/BuildProjectTaskExecutor.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/taskqueue/execution/BuildProjectTaskExecutor.java?rev=726727&r1=726726&r2=726727&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/taskqueue/execution/BuildProjectTaskExecutor.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/taskqueue/execution/BuildProjectTaskExecutor.java Mon Dec 15 08:23:53 2008
@@ -1,13 +1,18 @@
package org.apache.continuum.buildagent.taskqueue.execution;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.continuum.buildagent.buildcontext.BuildContext;
import org.apache.continuum.buildagent.buildcontext.manager.BuildContextManager;
+import org.apache.continuum.buildagent.utils.BuildContextToBuildDefinition;
+import org.apache.continuum.buildagent.utils.ContinuumBuildAgentUtil;
import org.apache.continuum.taskqueue.BuildProjectTask;
import org.apache.continuum.utils.ContinuumUtils;
+import org.apache.maven.continuum.model.project.BuildResult;
+import org.apache.maven.continuum.project.ContinuumProjectState;
import org.apache.maven.scm.ScmException;
import org.apache.maven.scm.repository.ScmRepositoryException;
import org.codehaus.plexus.action.ActionManager;
@@ -39,8 +44,6 @@
BuildProjectTask buildProjectTask = (BuildProjectTask) task;
int projectId = buildProjectTask.getProjectId();
- int buildDefinitionId = buildProjectTask.getBuildDefinitionId();
- int trigger = buildProjectTask.getTrigger();
log.info( "Initializing build" );
BuildContext context = buildContextManager.getBuildContext( projectId );
@@ -52,7 +55,7 @@
return;
}
- log.info( "Starting build of " + context.getProjectId() );
+ log.info( "Starting build of " + context.getProjectName() );
startBuild( context );
try
@@ -61,36 +64,11 @@
performAction( "execute-builder", context );
- performAction( "deploy-artifact", context );
-
- /*
- context.setCancelled( (Boolean) actionContext.get( AbstractContinuumAction.KEY_CANCELLED ) );
-
- String s = (String) actionContext.get( AbstractContinuumAction.KEY_BUILD_ID );
-
- if ( s != null && !context.isCancelled() )
- {
- try
- {
- context.setBuildResult( buildResultDao.getBuildResult( Integer.valueOf( s ) ) );
- }
- catch ( NumberFormatException e )
- {
- throw new TaskExecutionException( "Internal error: build id not an integer", e );
- }
- catch ( ContinuumObjectNotFoundException e )
- {
- throw new TaskExecutionException( "Internal error: Cannot find build result", e );
- }
- catch ( ContinuumStoreException e )
- {
- throw new TaskExecutionException( "Error loading build result", e );
- }
- }*/
+ updateBuildResult( context, null );
}
finally
{
- //endBuild( context );
+ endBuild( context );
}
}
@@ -112,6 +90,30 @@
private void startBuild( BuildContext buildContext )
{
// inform master that project is building ( to set the state )
+
+ }
+
+ private void endBuild( BuildContext buildContext )
+ {
+ // return build result to master
+ BuildResult buildResult = buildContext.getBuildResult();
+
+ Map<String, Object> result = new HashMap<String, Object>();
+ result.put( ContinuumBuildAgentUtil.KEY_PROJECT_ID, new Integer( buildContext.getProjectId() ) );
+ result.put( ContinuumBuildAgentUtil.KEY_BUILD_DEFINITION_ID, new Integer( buildContext.getBuildDefinitionId() ) );
+ result.put( ContinuumBuildAgentUtil.KEY_TRIGGER, new Integer( buildContext.getTrigger() ) );
+ result.put( ContinuumBuildAgentUtil.KEY_BUILD_STATE, new Integer( buildResult.getState() ) );
+ result.put( ContinuumBuildAgentUtil.KEY_BUILD_START, new Long( buildResult.getStartTime() ) );
+ result.put( ContinuumBuildAgentUtil.KEY_BUILD_END, new Long( buildResult.getEndTime() ) );
+ result.put( ContinuumBuildAgentUtil.KEY_BUILD_EXIT_CODE, new Integer( buildResult.getExitCode() ) );
+ if ( buildResult.getError() != null )
+ {
+ result.put( ContinuumBuildAgentUtil.KEY_BUILD_ERROR, buildResult.getError() );
+ }
+ else
+ {
+ result.put( ContinuumBuildAgentUtil.KEY_BUILD_ERROR, "" );
+ }
}
private void performAction( String actionName, BuildContext context )
@@ -148,25 +150,37 @@
exception = new TaskExecutionException( "Error executing action '" + actionName + "'", e );
error = ContinuumUtils.throwableToString( exception );
}
-
- // TODO: clean this up. We catch the original exception from the action, and then update the buildresult
- // for it - we need to because of the specialized error message for SCM.
- // If updating the buildresult fails, log the previous error and throw the new one.
- // If updating the buildresult succeeds, throw the original exception. The build result should NOT
- // be updated again - a TaskExecutionException is final, no further action should be taken upon it.
-
- /*
- try
+
+ updateBuildResult( context, error );
+
+ throw exception;
+ }
+
+ private void updateBuildResult( BuildContext context, String error )
+ {
+ context.setBuildResult( ContinuumBuildAgentUtil.getBuildResult( context.getActionContext(), null ) );
+
+ if ( context.getBuildResult() == null )
{
- updateBuildResult( context, error );
+ BuildResult build = new BuildResult();
+
+ build.setState( ContinuumProjectState.ERROR );
+
+ build.setTrigger( context.getTrigger() );
+
+ build.setStartTime( context.getBuildStartTime() );
+
+ build.setEndTime( System.currentTimeMillis() );
+
+ build.setBuildDefinition( BuildContextToBuildDefinition.getBuildDefinition( context ) );
+
+ if ( error != null )
+ {
+ build.setError( error );
+ }
+
+ context.setBuildResult( build );
}
- catch ( TaskExecutionException e )
- {
- log.error( "Error updating build result after receiving the following exception: ", exception );
- throw e;
- }*/
-
- throw exception;
}
private String getValidationMessages( ScmRepositoryException ex )
Added: continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/taskqueue/manager/DefaultTaskQueueManager.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/taskqueue/manager/DefaultTaskQueueManager.java?rev=726727&view=auto
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/taskqueue/manager/DefaultTaskQueueManager.java (added)
+++ continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/taskqueue/manager/DefaultTaskQueueManager.java Mon Dec 15 08:23:53 2008
@@ -0,0 +1,129 @@
+package org.apache.continuum.buildagent.taskqueue.manager;
+
+import java.util.List;
+
+import org.apache.continuum.taskqueue.BuildProjectTask;
+import org.apache.continuum.taskqueue.manager.TaskQueueManagerException;
+import org.apache.maven.continuum.model.project.BuildDefinition;
+import org.apache.maven.continuum.store.ContinuumStoreException;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+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.Task;
+import org.codehaus.plexus.taskqueue.TaskQueue;
+import org.codehaus.plexus.taskqueue.TaskQueueException;
+import org.codehaus.plexus.taskqueue.execution.TaskQueueExecutor;
+import org.codehaus.plexus.util.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DefaultTaskQueueManager
+ implements TaskQueueManager, Contextualizable
+{
+ private Logger log = LoggerFactory.getLogger( this.getClass() );
+
+ /**
+ * @plexus.requirement role-hint="build-agent"
+ */
+ private TaskQueue buildQueue;
+
+ private PlexusContainer container;
+
+ public void cancelBuild()
+ throws TaskQueueManagerException
+ {
+ removeProjectsFromBuildQueue();
+ cancelCurrentBuild();
+ }
+
+ public TaskQueue getBuildQueue()
+ {
+ return buildQueue;
+ }
+
+ public int getCurrentProjectInBuilding()
+ throws TaskQueueManagerException
+ {
+ Task task = getBuildTaskQueueExecutor().getCurrentTask();
+ if ( task != null )
+ {
+ if ( task instanceof BuildProjectTask )
+ {
+ return ( (BuildProjectTask) task ).getProjectId();
+ }
+ }
+ return -1;
+ }
+
+ private void removeProjectsFromBuildQueue()
+ throws TaskQueueManagerException
+ {
+ try
+ {
+ List<BuildProjectTask> queues = buildQueue.getQueueSnapshot();
+
+ if ( queues != null )
+ {
+ for ( BuildProjectTask task : queues )
+ {
+ log.info( "remove project '" + task.getProjectName() + "' from build queue" );
+ buildQueue.remove( task );
+ }
+ }
+ else
+ {
+ log.info( "no build task in queue" );
+ }
+ }
+ catch ( TaskQueueException e )
+ {
+ throw new TaskQueueManagerException( "Error while getting build tasks from queue", e );
+ }
+ }
+
+ private boolean cancelCurrentBuild()
+ throws TaskQueueManagerException
+ {
+ Task task = getBuildTaskQueueExecutor().getCurrentTask();
+
+ if ( task != null )
+ {
+ if ( task instanceof BuildProjectTask )
+ {
+ log.info( "Cancelling current build task" );
+ return getBuildTaskQueueExecutor().cancelTask( task );
+ }
+ else
+ {
+ log.warn( "Current task not a BuildProjectTask - not cancelling" );
+ }
+ }
+ else
+ {
+ log.warn( "No task running - not cancelling" );
+ }
+ return false;
+ }
+
+ public TaskQueueExecutor getBuildTaskQueueExecutor()
+ throws TaskQueueManagerException
+ {
+ try
+ {
+ return (TaskQueueExecutor) container.lookup( TaskQueueExecutor.class, "build-agent" );
+ }
+ catch ( ComponentLookupException e )
+ {
+ throw new TaskQueueManagerException( e.getMessage(), e );
+ }
+ }
+
+ public void contextualize( Context context )
+ throws ContextException
+ {
+ container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
+ }
+}
Propchange: continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/taskqueue/manager/DefaultTaskQueueManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/taskqueue/manager/DefaultTaskQueueManager.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/taskqueue/manager/TaskQueueManager.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/taskqueue/manager/TaskQueueManager.java?rev=726727&r1=726726&r2=726727&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/taskqueue/manager/TaskQueueManager.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/taskqueue/manager/TaskQueueManager.java Mon Dec 15 08:23:53 2008
@@ -5,10 +5,13 @@
public interface TaskQueueManager
{
- TaskQueue getBuildQueue();
+ String ROLE = TaskQueueManager.class.getName();
- TaskQueue getPrepareBuildQueue();
+ TaskQueue getBuildQueue();
void cancelBuild()
throws TaskQueueManagerException;
+
+ int getCurrentProjectInBuilding()
+ throws TaskQueueManagerException;
}
Modified: continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/utils/BuildContextToProject.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/utils/BuildContextToProject.java?rev=726727&r1=726726&r2=726727&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/utils/BuildContextToProject.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/utils/BuildContextToProject.java Mon Dec 15 08:23:53 2008
@@ -14,6 +14,8 @@
project.setId( buildContext.getProjectId() );
+ project.setName( buildContext.getProjectName() );
+
project.setScmUrl( buildContext.getScmUrl() );
project.setScmUsername( buildContext.getScmPassword());
Modified: continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/utils/ContinuumBuildAgentUtil.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/utils/ContinuumBuildAgentUtil.java?rev=726727&r1=726726&r2=726727&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/utils/ContinuumBuildAgentUtil.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/utils/ContinuumBuildAgentUtil.java Mon Dec 15 08:23:53 2008
@@ -77,13 +77,18 @@
public static final String KEY_BUILD_RESULT = "build-result";
- public static final String KEY_CANCELLED = "cancelled";
+ public static final String KEY_PROJECT_NAME = "project-name";
public static Integer getProjectId( Map context )
{
return getInteger( context, KEY_PROJECT_ID );
}
+ public static String getProjectName( Map context )
+ {
+ return getString( context, KEY_PROJECT_NAME );
+ }
+
public static Integer getBuildDefinitionId( Map context )
{
return getInteger( context, KEY_BUILD_DEFINITION_ID );
@@ -179,11 +184,6 @@
return (BuildResult) getObject( context, KEY_BUILD_RESULT );
}
- public static boolean isCancelled( Map context )
- {
- return (Boolean) getObject( context, KEY_CANCELLED );
- }
-
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
Modified: continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/resources/META-INF/plexus/components.xml?rev=726727&r1=726726&r2=726727&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/resources/META-INF/plexus/components.xml (original)
+++ continuum/branches/continuum-distributed-builds/continuum-distributed-build/continuum-buildagent/continuum-buildagent-core/src/main/resources/META-INF/plexus/components.xml Mon Dec 15 08:23:53 2008
@@ -21,28 +21,28 @@
<components>
<component>
<role>org.codehaus.plexus.taskqueue.TaskQueue</role>
- <role-hint>prepare-build-agent</role-hint>
+ <role-hint>build-agent</role-hint>
<implementation>org.codehaus.plexus.taskqueue.DefaultTaskQueue</implementation>
<lifecycle-handler>plexus-configurable</lifecycle-handler>
</component>
<component>
<role>org.codehaus.plexus.taskqueue.execution.TaskQueueExecutor</role>
- <role-hint>prepare-build-agent</role-hint>
+ <role-hint>build-agent</role-hint>
<implementation>org.codehaus.plexus.taskqueue.execution.ThreadedTaskQueueExecutor</implementation>
<instantiation-strategy>singleton</instantiation-strategy>
<requirements>
<requirement>
<role>org.codehaus.plexus.taskqueue.execution.TaskExecutor</role>
- <role-hint>prepare-build-agent</role-hint>
+ <role-hint>build-agent</role-hint>
</requirement>
<requirement>
<role>org.codehaus.plexus.taskqueue.TaskQueue</role>
- <role-hint>prepare-build-agent</role-hint>
+ <role-hint>build-agent</role-hint>
</requirement>
</requirements>
<configuration>
- <name>prepare-build-agent</name>
+ <name>build-agent</name>
</configuration>
</component>
</components>