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/05 07:44:26 UTC
svn commit: r723613 - in /continuum/branches/continuum-distributed-builds:
continuum-api/src/main/java/org/apache/continuum/distributed/
continuum-api/src/main/java/org/apache/maven/continuum/configuration/
continuum-commons/src/main/java/org/apache/ma...
Author: ctan
Date: Thu Dec 4 22:44:25 2008
New Revision: 723613
URL: http://svn.apache.org/viewvc?rev=723613&view=rev
Log:
- updated build agent, distributed build manager
- added test for update scm and build result
Added:
continuum/branches/continuum-distributed-builds/continuum-core/src/test/java/org/apache/continuum/distributed/
continuum/branches/continuum-distributed-builds/continuum-core/src/test/java/org/apache/continuum/distributed/manager/
continuum/branches/continuum-distributed-builds/continuum-core/src/test/java/org/apache/continuum/distributed/manager/DefaultDistributedBuildManagerTest.java
Modified:
continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/distributed/BuildAgent.java
continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/maven/continuum/configuration/ConfigurationService.java
continuum/branches/continuum-distributed-builds/continuum-commons/src/main/java/org/apache/maven/continuum/configuration/DefaultConfigurationService.java
continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/continuum/distributed/manager/AbstractDistributedBuildManager.java
continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/continuum/distributed/manager/DefaultDistributedBuildManager.java
continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java
Modified: continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/distributed/BuildAgent.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/distributed/BuildAgent.java?rev=723613&r1=723612&r2=723613&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/distributed/BuildAgent.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/continuum/distributed/BuildAgent.java Thu Dec 4 22:44:25 2008
@@ -10,6 +10,8 @@
boolean busy;
+ boolean enabled;
+
List<Project> projects;
public String getUrl()
@@ -32,6 +34,16 @@
this.busy = busy;
}
+ public boolean isEnabled()
+ {
+ return enabled;
+ }
+
+ public void setEnabled( boolean enabled )
+ {
+ this.enabled = enabled;
+ }
+
public List<Project> getProjects()
{
return projects;
Modified: continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/maven/continuum/configuration/ConfigurationService.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/maven/continuum/configuration/ConfigurationService.java?rev=723613&r1=723612&r2=723613&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/maven/continuum/configuration/ConfigurationService.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-api/src/main/java/org/apache/maven/continuum/configuration/ConfigurationService.java Thu Dec 4 22:44:25 2008
@@ -93,6 +93,8 @@
void removeBuildAgent( BuildAgentConfiguration buildAgent );
+ void updateBuildAgent( BuildAgentConfiguration buildAgent );
+
boolean isDistributedBuildEnabled();
void setDistributedBuildEnabled( boolean distributedBuildEnabled );
Modified: continuum/branches/continuum-distributed-builds/continuum-commons/src/main/java/org/apache/maven/continuum/configuration/DefaultConfigurationService.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-commons/src/main/java/org/apache/maven/continuum/configuration/DefaultConfigurationService.java?rev=723613&r1=723612&r2=723613&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-commons/src/main/java/org/apache/maven/continuum/configuration/DefaultConfigurationService.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-commons/src/main/java/org/apache/maven/continuum/configuration/DefaultConfigurationService.java Thu Dec 4 22:44:25 2008
@@ -321,6 +321,24 @@
}
}
+ public void updateBuildAgent( BuildAgentConfiguration buildAgent )
+ {
+ List<BuildAgentConfiguration> buildAgents = getBuildAgents();
+ if ( buildAgents != null )
+ {
+ for ( BuildAgentConfiguration agent : buildAgents )
+ {
+ if ( agent.getUrl().equals( buildAgent.getUrl() ) )
+ {
+ agent.setDescription( buildAgent.getDescription() );
+ agent.setEnabled( buildAgent.isEnabled() );
+
+ return;
+ }
+ }
+ }
+ }
+
public boolean isDistributedBuildEnabled()
{
return systemConf.isDistributedBuildEnabled();
Modified: continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/continuum/distributed/manager/AbstractDistributedBuildManager.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/continuum/distributed/manager/AbstractDistributedBuildManager.java?rev=723613&r1=723612&r2=723613&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/continuum/distributed/manager/AbstractDistributedBuildManager.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/continuum/distributed/manager/AbstractDistributedBuildManager.java Thu Dec 4 22:44:25 2008
@@ -58,8 +58,6 @@
public static final String KEY_BUILD_STATE = "build-state";
- public static final String KEY_SCM_STATE = "scm-state";
-
public static final String KEY_SCM_COMMAND_OUTPUT = "scm-command-output";
public static final String KEY_SCM_COMMAND_LINE = "scm-command-line";
@@ -141,7 +139,16 @@
protected static String getString( Map context, String key )
{
- return (String) getObject( context, key );
+ Object obj = getObject( context, key, null );
+
+ if ( obj == null )
+ {
+ return null;
+ }
+ else
+ {
+ return (String) obj;
+ }
}
protected static String getString( Map context, String key, String defaultValue )
@@ -151,7 +158,16 @@
protected static boolean getBoolean( Map context, String key )
{
- return ( (Boolean) getObject( context, key ) ).booleanValue();
+ Object obj = getObject( context, key, null );
+
+ if ( obj == null )
+ {
+ return false;
+ }
+ else
+ {
+ return ( (Boolean) obj ).booleanValue();
+ }
}
protected static boolean getBoolean( Map context, String key, boolean defaultValue )
Modified: continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/continuum/distributed/manager/DefaultDistributedBuildManager.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/continuum/distributed/manager/DefaultDistributedBuildManager.java?rev=723613&r1=723612&r2=723613&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/continuum/distributed/manager/DefaultDistributedBuildManager.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-core/src/main/java/org/apache/continuum/distributed/manager/DefaultDistributedBuildManager.java Thu Dec 4 22:44:25 2008
@@ -80,7 +80,7 @@
*/
private BuildResultDao buildResultDao;
- private List<PrepareBuildProjectsTask> projectsBuildQueue;
+ private List<PrepareBuildProjectsTask> projectsBuildInQueue;
private List<BuildAgent> buildAgents;
@@ -97,28 +97,26 @@
{
for ( BuildAgentConfiguration agent : agents )
{
- if ( agent.isEnabled() )
- {
- boolean found = false;
-
- for ( BuildAgent buildAgent : buildAgents )
- {
- if ( buildAgent.getUrl().equals( agent.getUrl() ) )
- {
- found = true;
- break;
- }
- }
-
- if ( !found )
+ boolean found = false;
+
+ for ( BuildAgent buildAgent : buildAgents )
+ {
+ if ( buildAgent.getUrl().equals( agent.getUrl() ) )
{
- // ping it
- BuildAgent buildAgent = new BuildAgent();
- buildAgent.setUrl( agent.getUrl() );
- buildAgent.setBusy( false );
- buildAgents.add( buildAgent );
+ found = true;
+ buildAgent.setEnabled( agent.isEnabled() );
+ break;
}
}
+
+ if ( !found )
+ {
+ BuildAgent buildAgent = new BuildAgent();
+ buildAgent.setUrl( agent.getUrl() );
+ buildAgent.setBusy( false );
+ buildAgent.setEnabled( agent.isEnabled() );
+ buildAgents.add( buildAgent );
+ }
}
}
}
@@ -182,7 +180,7 @@
public void buildProjectsInQueue()
throws ContinuumException
{
- for ( PrepareBuildProjectsTask task : projectsBuildQueue )
+ for ( PrepareBuildProjectsTask task : projectsBuildInQueue )
{
Map projectsAndBuildDefinitions = task.getProjectsBuildDefinitionsMap();
int trigger = task.getTrigger();
@@ -198,7 +196,7 @@
for ( BuildAgent buildAgent : buildAgents )
{
- if ( !buildAgent.isBusy() )
+ if ( !buildAgent.isBusy() && buildAgent.isEnabled() )
{
List buildContext = initializeBuildContext( projectsAndBuildDefinitionsMap, trigger, buildAgent );
@@ -208,7 +206,7 @@
//{
//client.buildProjects( buildContext );
//}
- //catch ( InterruptedException e )
+ //catch ( XmlRpcException e )
//{
//do something about the server Url
//client.getServerUrl();
@@ -222,13 +220,13 @@
if ( !found && !inBuildQueue )
{
// all build agents are busy, put into projectBuildQueue for now
- if ( projectsBuildQueue == null )
+ if ( projectsBuildInQueue == null )
{
- projectsBuildQueue = new ArrayList<PrepareBuildProjectsTask>();
+ projectsBuildInQueue = new ArrayList<PrepareBuildProjectsTask>();
}
PrepareBuildProjectsTask prepareBuildTask = new PrepareBuildProjectsTask( projectsAndBuildDefinitionsMap, trigger );
- projectsBuildQueue.add( prepareBuildTask );
+ projectsBuildInQueue.add( prepareBuildTask );
}
}
@@ -282,6 +280,11 @@
}
}
}
+
+ if ( error != null )
+ {
+ updateBuildAgent( project.getId(), true );
+ }
}
catch ( ContinuumStoreException e )
{
@@ -297,13 +300,22 @@
int projectId = getProjectId( context );
int buildDefinitionId = getBuildDefinitionId( context );
- Project project = projectDao.getProjectWithBuildDetails( projectId );
+ Project project = projectDao.getProjectWithAllDetails( projectId );
BuildDefinition buildDefinition = buildDefinitionDao.getBuildDefinition( buildDefinitionId );
BuildResult oldBuildResult =
buildResultDao.getLatestBuildResultForBuildDefinition( projectId, buildDefinitionId );
- int buildNumber = project.getBuildNumber() + 1;
+ int buildNumber;
+
+ if ( getBuildState( context ) == ContinuumProjectState.OK )
+ {
+ buildNumber = project.getBuildNumber() + 1;
+ }
+ else
+ {
+ buildNumber = project.getBuildNumber();
+ }
// ----------------------------------------------------------------------
// Make the buildResult
@@ -318,7 +330,6 @@
buildResult.setError( getBuildError( context ) );
buildResult.setExitCode( getBuildExitCode( context ) );
buildResult.setModifiedDependencies( getModifiedDependencies( oldBuildResult, context ) );
- buildResult.setProject( project );
buildResult.setState( getBuildState( context ) );
buildResult.setTrigger( getTrigger( context ) );
@@ -331,7 +342,7 @@
projectDao.updateProject( project );
- updateBuildAgent( context );
+ updateBuildAgent( project.getId(), false );
}
catch ( ContinuumStoreException e )
{
@@ -529,23 +540,33 @@
return error;
}
- private void updateBuildAgent( Map context )
+ private void updateBuildAgent( int projectId, boolean removeAll )
throws ContinuumException
{
for ( BuildAgent buildAgent : buildAgents )
{
for ( Project project : buildAgent.getProjects() )
{
- if ( project.getId() == getProjectId( context ) )
+ if ( project.getId() == projectId )
{
- buildAgent.getProjects().remove( project );
-
- if ( buildAgent.isBusy() && ( buildAgent.getProjects() == null || buildAgent.getProjects().size() == 0 ) )
+ if ( removeAll )
{
+ buildAgent.setProjects( null );
buildAgent.setBusy( false );
+
+ buildProjectsInQueue();
}
+ else
+ {
+ buildAgent.getProjects().remove( project );
- buildProjectsInQueue();
+ if ( buildAgent.getProjects() == null || buildAgent.getProjects().size() == 0 )
+ {
+ buildAgent.setBusy( false );
+
+ buildProjectsInQueue();
+ }
+ }
return;
}
}
Added: continuum/branches/continuum-distributed-builds/continuum-core/src/test/java/org/apache/continuum/distributed/manager/DefaultDistributedBuildManagerTest.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-core/src/test/java/org/apache/continuum/distributed/manager/DefaultDistributedBuildManagerTest.java?rev=723613&view=auto
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-core/src/test/java/org/apache/continuum/distributed/manager/DefaultDistributedBuildManagerTest.java (added)
+++ continuum/branches/continuum-distributed-builds/continuum-core/src/test/java/org/apache/continuum/distributed/manager/DefaultDistributedBuildManagerTest.java Thu Dec 4 22:44:25 2008
@@ -0,0 +1,132 @@
+package org.apache.continuum.distributed.manager;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.continuum.dao.BuildDefinitionDao;
+import org.apache.continuum.dao.BuildResultDao;
+import org.apache.continuum.dao.ProjectScmRootDao;
+import org.apache.continuum.model.project.ProjectScmRoot;
+import org.apache.maven.continuum.AbstractContinuumTest;
+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.model.scm.ScmResult;
+import org.apache.maven.continuum.project.ContinuumProjectState;
+
+public class DefaultDistributedBuildManagerTest
+ extends AbstractContinuumTest
+{
+ DistributedBuildManager distributedBuildManager;
+
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ distributedBuildManager = (DistributedBuildManager) lookup( "distributedBuildManager" );
+ }
+
+ public void testUpdateScmResult()
+ throws Exception
+ {
+ ProjectScmRootDao projectScmRootDao = (ProjectScmRootDao) lookup( ProjectScmRootDao.class.getName() );
+
+ Project project = addProject( "project1" );
+ project.setScmUrl( "http://sample/scmurl" );
+ getProjectDao().updateProject( project );
+
+ ProjectScmRoot scmRoot = new ProjectScmRoot();
+ scmRoot.setScmRootAddress( "http://sample/scmurl" );
+ scmRoot.setProjectGroup( project.getProjectGroup() );
+ projectScmRootDao.addProjectScmRoot( scmRoot );
+
+ ScmResult expectedScmResult = new ScmResult();
+ expectedScmResult.setSuccess( true );
+
+ Map context = new HashMap();
+ context.put( "project-id", project.getId() );
+ context.put( "scm-command-line", null );
+ context.put( "scm-command-output", null );
+ context.put( "scm-exception", null );
+ context.put( "scm-provider-message", null );
+ context.put( "prepare-build-finished", true );
+
+ distributedBuildManager.updateProjectScmRoot( context );
+
+ project = getProjectDao().getProjectWithScmDetails( project.getId() );
+
+ assertNotNull( project.getScmResult() );
+ assertScmResultEquals( expectedScmResult, project.getScmResult() );
+ }
+
+ public void testUpdateBuildResult()
+ throws Exception
+ {
+ Project project = addProject( "project1" );
+ project = getProjectDao().getProjectWithAllDetails( project.getId() );
+
+ BuildDefinition buildDef = new BuildDefinition();
+ buildDef.setBuildFile( "pom.xml" );
+ buildDef.setGoals( "mvn clean" );
+ buildDef.setType( "maven2" );
+ buildDef.setTemplate( false );
+
+ BuildDefinitionDao buildDefinitionDao = (BuildDefinitionDao) lookup( BuildDefinitionDao.class.getName() );
+ buildDef = buildDefinitionDao.addBuildDefinition( buildDef );
+
+ BuildResult expectedBuildResult = new BuildResult();
+ expectedBuildResult.setBuildNumber( project.getBuildNumber() + 1 );
+ expectedBuildResult.setBuildDefinition( buildDef );
+ expectedBuildResult.setError( null );
+ expectedBuildResult.setExitCode( 0 );
+ expectedBuildResult.setTrigger( ContinuumProjectState.TRIGGER_FORCED );
+ expectedBuildResult.setEndTime( new Long( "3456789012345" ) );
+ expectedBuildResult.setStartTime( new Long( "1234567890123" ) );
+ expectedBuildResult.setState( ContinuumProjectState.OK );
+
+ Map context = new HashMap();
+ context.put( "project-id", project.getId() );
+ context.put( "builddefinition-id", buildDef.getId() );
+ context.put( "build-start", expectedBuildResult.getStartTime() );
+ context.put( "build-end", expectedBuildResult.getEndTime() );
+ context.put( "build-error", expectedBuildResult.getError() );
+ context.put( "build-exit-code", expectedBuildResult.getExitCode() );
+ context.put( "build-state", expectedBuildResult.getState() );
+ context.put( "trigger", expectedBuildResult.getTrigger() );
+
+ distributedBuildManager.updateBuildResult( context );
+
+ project = getProjectDao().getProjectWithBuildDetails( project.getId() );
+
+ BuildResultDao buildResultDao = (BuildResultDao) lookup( BuildResultDao.class.getName() );
+ BuildResult buildResult = buildResultDao.getBuildResult( project.getLatestBuildId() );
+
+ assertNotNull( buildResult );
+ assertBuildResultEquals( expectedBuildResult, buildResult );
+ }
+
+ private void assertBuildResultEquals( BuildResult expected, BuildResult actual )
+ throws Exception
+ {
+ assertEquals( expected.getEndTime(), actual.getEndTime() );
+ assertEquals( expected.getStartTime(), actual.getStartTime() );
+ assertEquals( expected.getState(), actual.getState() );
+ assertEquals( expected.getBuildNumber(), actual.getBuildNumber() );
+ assertEquals( expected.getError(), actual.getError() );
+ assertEquals( expected.getExitCode(), actual.getExitCode() );
+ assertEquals( expected.getTrigger(), actual.getTrigger() );
+ assertEquals( expected.getBuildDefinition().getId(), actual.getBuildDefinition().getId() );
+ }
+
+ private void assertScmResultEquals( ScmResult expected, ScmResult actual )
+ throws Exception
+ {
+ assertEquals( expected.getChanges(), actual.getChanges() );
+ assertEquals( expected.getCommandLine(), actual.getCommandLine() );
+ assertEquals( expected.getCommandOutput(), actual.getCommandOutput() );
+ assertEquals( expected.getException(), actual.getException() );
+ assertEquals( expected.getProviderMessage(), actual.getProviderMessage() );
+ }
+}
Modified: continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java?rev=723613&r1=723612&r2=723613&view=diff
==============================================================================
--- continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java (original)
+++ continuum/branches/continuum-distributed-builds/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java Thu Dec 4 22:44:25 2008
@@ -123,14 +123,18 @@
{
if ( buildAgent.getUrl().equals( agent.getUrl() ) )
{
- addActionError( getText( "buildAgent.error.exist" ) );
- return ERROR;
+ agent.setDescription( buildAgent.getDescription() );
+ agent.setEnabled( buildAgent.isEnabled() );
+
+ configuration.updateBuildAgent( agent );
+ }
+ else
+ {
+ configuration.addBuildAgent( buildAgent );
}
}
}
- configuration.addBuildAgent( buildAgent );
-
distributedBuildManager.reload();
return SUCCESS;