You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by ba...@apache.org on 2015/04/17 02:54:19 UTC
svn commit: r1674175 - in /continuum/trunk:
continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/
continuum-core/src/main/java/org/apache/continuum/builder/distributed/
continuum-core/src/main/java/org/apache/continuum/buil...
Author: batkinson
Date: Fri Apr 17 00:54:19 2015
New Revision: 1674175
URL: http://svn.apache.org/r1674175
Log:
[CONTINUUM-2752] Always assign a new build number when starting a build
Modified:
continuum/trunk/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildProjectTaskExecutor.java
continuum/trunk/continuum-core/src/main/java/org/apache/continuum/builder/distributed/DefaultDistributedBuildService.java
continuum/trunk/continuum-core/src/main/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManager.java
continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/core/action/ExecuteBuilderContinuumAction.java
continuum/trunk/continuum-model/src/main/mdo/continuum.xml
continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/BuildResultAction.java
continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/util/StateGenerator.java
continuum/trunk/continuum-webapp/src/main/webapp/WEB-INF/jsp/buildResults.jsp
continuum/trunk/continuum-webapp/src/test/java/org/apache/maven/continuum/web/action/BuildResultActionTest.java
Modified: continuum/trunk/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildProjectTaskExecutor.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildProjectTaskExecutor.java?rev=1674175&r1=1674174&r2=1674175&view=diff
==============================================================================
--- continuum/trunk/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildProjectTaskExecutor.java (original)
+++ continuum/trunk/continuum-builder/src/main/java/org/apache/continuum/builder/distributed/executor/DistributedBuildProjectTaskExecutor.java Fri Apr 17 00:54:19 2015
@@ -112,7 +112,6 @@ public class DistributedBuildProjectTask
prepareBuildTask.getScmRootAddress(), prepareBuildTask.getProjectScmRootId() );
startTime = System.currentTimeMillis();
- createInitialResults( prepareBuildTask );
client.buildProjects( buildContext );
endTime = System.currentTimeMillis();
}
@@ -125,7 +124,7 @@ public class DistributedBuildProjectTask
{
log.error( "Error occurred while building task", e );
endTime = System.currentTimeMillis();
- recordErrorResults( prepareBuildTask, ContinuumUtils.throwableToString( e ) );
+ createResult( prepareBuildTask, ContinuumUtils.throwableToString( e ) );
}
}
@@ -277,42 +276,7 @@ public class DistributedBuildProjectTask
}
}
- private void createInitialResults( PrepareBuildProjectsTask task )
- throws ContinuumStoreException
- {
- Map<Integer, Integer> map = task.getProjectsBuildDefinitionsMap();
- for ( Map.Entry<Integer, Integer> build : map.entrySet() )
- {
- int projectId = build.getKey();
- int buildDefinitionId = build.getValue();
-
- Project project = projectDao.getProject( projectId );
- BuildDefinition buildDef = buildDefinitionDao.getBuildDefinition( buildDefinitionId );
-
- BuildResult buildResult = new BuildResult();
- buildResult.setError( "Sent build request to build agent " + buildAgentUrl );
- buildResult.setBuildUrl( buildAgentUrl );
- buildResult.setState( ContinuumProjectState.SENT_TO_AGENT );
- buildResult.setBuildDefinition( buildDef );
- buildResult.setTrigger( task.getBuildTrigger().getTrigger() );
- buildResult.setUsername( task.getBuildTrigger().getTriggeredBy() );
- buildResult.setStartTime( startTime );
- buildResultDao.addBuildResult( project, buildResult );
-
- try
- {
- // Install the build result for the current run, so we can safely update
- distributedBuildManager.getCurrentRun( projectId, buildDefinitionId ).setBuildResultId(
- buildResult.getId() );
- }
- catch ( ContinuumException e )
- {
- log.warn( "failed to install initial build result: {} ", e.getMessage() );
- }
- }
- }
-
- private void recordErrorResults( PrepareBuildProjectsTask task, String error )
+ private void createResult( PrepareBuildProjectsTask task, String error )
throws TaskExecutionException
{
try
@@ -331,36 +295,15 @@ public class DistributedBuildProjectTask
Map<Integer, Integer> map = task.getProjectsBuildDefinitionsMap();
for ( Map.Entry<Integer, Integer> build : map.entrySet() )
{
- int projectId = build.getKey();
- int buildDefinitionId = build.getValue();
-
- boolean updatedExisting = false;
- try
- {
- // Attempt to update the existing build result
- int existingResultId =
- distributedBuildManager.getCurrentRun( projectId, buildDefinitionId ).getBuildResultId();
- if ( existingResultId > 0 )
- {
- BuildResult result = buildResultDao.getBuildResult( existingResultId );
- result.setError( error );
- result.setState( ContinuumProjectState.ERROR );
- result.setEndTime( endTime );
- buildResultDao.updateBuildResult( result );
- updatedExisting = true;
- }
- }
- catch ( ContinuumException e )
+ int projectId = build.getKey(), buildDefinitionId = build.getValue();
+ Project project = projectDao.getProject( projectId );
+ BuildDefinition buildDef = buildDefinitionDao.getBuildDefinition( buildDefinitionId );
+ BuildResult latestBuildResult = buildResultDao
+ .getLatestBuildResultForBuildDefinition( projectId, buildDefinitionId );
+ if ( latestBuildResult == null ||
+ ( latestBuildResult.getStartTime() >= startTime && latestBuildResult.getEndTime() > 0 &&
+ latestBuildResult.getEndTime() < endTime ) || latestBuildResult.getStartTime() < startTime )
{
- log.debug( "failed to update existing result: {}", e.getMessage() );
- }
-
- if ( !updatedExisting )
- {
- // No build result existed (likely failed before sending build to agent), add one
- Project project = projectDao.getProject( projectId );
- BuildDefinition buildDef = buildDefinitionDao.getBuildDefinition( buildDefinitionId );
-
BuildResult buildResult = new BuildResult();
buildResult.setBuildDefinition( buildDef );
buildResult.setError( error );
Modified: continuum/trunk/continuum-core/src/main/java/org/apache/continuum/builder/distributed/DefaultDistributedBuildService.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-core/src/main/java/org/apache/continuum/builder/distributed/DefaultDistributedBuildService.java?rev=1674175&r1=1674174&r2=1674175&view=diff
==============================================================================
--- continuum/trunk/continuum-core/src/main/java/org/apache/continuum/builder/distributed/DefaultDistributedBuildService.java (original)
+++ continuum/trunk/continuum-core/src/main/java/org/apache/continuum/builder/distributed/DefaultDistributedBuildService.java Fri Apr 17 00:54:19 2015
@@ -105,17 +105,7 @@ public class DefaultDistributedBuildServ
int buildDefinitionId = ContinuumBuildConstant.getBuildDefinitionId( context );
Project project = projectDao.getProjectWithAllDetails( projectId );
-
- int buildNumber;
- if ( ContinuumBuildConstant.getBuildState( context ) == ContinuumProjectState.OK )
- {
- buildNumber = project.getBuildNumber() + 1;
- }
- else
- {
- buildNumber = project.getBuildNumber();
- }
-
+ BuildDefinition buildDefinition = buildDefinitionDao.getBuildDefinition( buildDefinitionId );
BuildResult buildResult, oldBuildResult;
log.info( "update build result of project '{}'", projectId );
@@ -144,6 +134,8 @@ public class DefaultDistributedBuildServ
boolean existingResult = existingResultId > 0;
+ int buildNumber = project.getBuildNumber();
+
if ( existingResult )
{
buildResult = buildResultDao.getBuildResult( existingResultId );
@@ -154,17 +146,17 @@ public class DefaultDistributedBuildServ
}
else
{
+ buildNumber += 1;
buildResult = distributedBuildUtil.convertMapToBuildResult( context );
oldBuildResult = buildResultDao.getLatestBuildResultForBuildDefinition( projectId, buildDefinitionId );
+ buildResult.setBuildNumber( buildNumber );
+ buildResult.setBuildDefinition( buildDefinition );
}
// Set the complete contents of the build result...
- BuildDefinition buildDefinition = buildDefinitionDao.getBuildDefinition( buildDefinitionId );
- buildResult.setBuildDefinition( buildDefinition );
- buildResult.setBuildNumber( buildNumber );
- buildResult.setModifiedDependencies( distributedBuildUtil.getModifiedDependencies( oldBuildResult,
- context ) );
+ buildResult.setModifiedDependencies(
+ distributedBuildUtil.getModifiedDependencies( oldBuildResult, context ) );
buildResult.setScmResult( distributedBuildUtil.getScmResult( context ) );
Date date = ContinuumBuildConstant.getLatestUpdateDate( context );
@@ -191,7 +183,6 @@ public class DefaultDistributedBuildServ
project.setState( ContinuumBuildConstant.getBuildState( context ) );
project.setBuildNumber( buildNumber );
project.setLatestBuildId( buildResult.getId() );
-
projectDao.updateProject( project );
File buildOutputFile = configurationService.getBuildOutputFile( buildResult.getId(), project.getId() );
@@ -271,26 +262,7 @@ public class DefaultDistributedBuildServ
{
try
{
- Project project = projectDao.getProject( projectId );
- project.setOldState( project.getState() );
- project.setState( ContinuumProjectState.BUILDING );
- projectDao.updateProject( project );
-
- try
- {
- int existingResultId =
- distributedBuildManager.getCurrentRun( projectId, buildDefinitionId ).getBuildResultId();
- if ( existingResultId > 0 )
- {
- BuildResult result = buildResultDao.getBuildResult( project.getLatestBuildId() );
- result.setState( ContinuumProjectState.BUILDING );
- buildResultDao.updateBuildResult( result );
- }
- }
- catch ( ContinuumException e )
- {
- log.warn( "failed to update result status to 'building': {}", e.getMessage() );
- }
+ createNewBuildResult( distributedBuildManager.getCurrentRun( projectId, buildDefinitionId ) );
}
catch ( ContinuumStoreException e )
{
@@ -299,6 +271,34 @@ public class DefaultDistributedBuildServ
}
}
+ private void createNewBuildResult( ProjectRunSummary summary )
+ throws ContinuumStoreException
+ {
+ long now = System.currentTimeMillis();
+
+ Project project = projectDao.getProject( summary.getProjectId() );
+ BuildDefinition buildDef = buildDefinitionDao.getBuildDefinition( summary.getBuildDefinitionId() );
+
+ project.setBuildNumber( project.getBuildNumber() + 1 ); // starting build, create a new build number
+
+ BuildResult buildResult = new BuildResult();
+ buildResult.setBuildNumber( project.getBuildNumber() );
+ buildResult.setBuildUrl( summary.getBuildAgentUrl() );
+ buildResult.setState( ContinuumProjectState.BUILDING );
+ buildResult.setBuildDefinition( buildDef );
+ buildResult.setTrigger( summary.getTrigger() );
+ buildResult.setUsername( summary.getTriggeredBy() );
+ buildResult.setStartTime( now );
+ buildResultDao.addBuildResult( project, buildResult );
+
+ project.setLatestBuildId( buildResult.getId() );
+ project.setOldState( project.getState() );
+ project.setState( ContinuumProjectState.BUILDING );
+ projectDao.updateProject( project );
+
+ summary.setBuildResultId( buildResult.getId() );
+ }
+
public void startPrepareBuild( Map<String, Object> context )
throws ContinuumException
{
Modified: continuum/trunk/continuum-core/src/main/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManager.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-core/src/main/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManager.java?rev=1674175&r1=1674174&r2=1674175&view=diff
==============================================================================
--- continuum/trunk/continuum-core/src/main/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManager.java (original)
+++ continuum/trunk/continuum-core/src/main/java/org/apache/continuum/builder/distributed/manager/DefaultDistributedBuildManager.java Fri Apr 17 00:54:19 2015
@@ -973,16 +973,14 @@ public class DefaultDistributedBuildMana
{
int buildDefinitionId = ContinuumBuildConstant.getBuildDefinitionId( result );
- Project project = projectDao.getProjectWithAllDetails( projectId );
BuildDefinition buildDefinition = buildDefinitionDao.getBuildDefinition( buildDefinitionId );
-
- BuildResult oldBuildResult = buildResultDao.getLatestBuildResultForBuildDefinition( projectId,
- buildDefinitionId );
+ BuildResult latestResult = buildResultDao.getLatestBuildResultForBuildDefinition( projectId,
+ buildDefinitionId );
BuildResult buildResult = distributedBuildUtil.convertMapToBuildResult( result );
buildResult.setBuildDefinition( buildDefinition );
- buildResult.setBuildNumber( project.getBuildNumber() + 1 );
- buildResult.setModifiedDependencies( distributedBuildUtil.getModifiedDependencies( oldBuildResult,
+ buildResult.setBuildNumber( latestResult.getBuildNumber() );
+ buildResult.setModifiedDependencies( distributedBuildUtil.getModifiedDependencies( latestResult,
result ) );
buildResult.setScmResult( distributedBuildUtil.getScmResult( result ) );
Modified: continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/core/action/ExecuteBuilderContinuumAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/core/action/ExecuteBuilderContinuumAction.java?rev=1674175&r1=1674174&r2=1674175&view=diff
==============================================================================
--- continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/core/action/ExecuteBuilderContinuumAction.java (original)
+++ continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/core/action/ExecuteBuilderContinuumAction.java Fri Apr 17 00:54:19 2015
@@ -91,23 +91,24 @@ public class ExecuteBuilderContinuumActi
// ----------------------------------------------------------------------
BuildResult buildResult = new BuildResult();
-
buildResult.setStartTime( new Date().getTime() );
-
buildResult.setState( ContinuumProjectState.BUILDING );
-
buildResult.setTrigger( buildTrigger.getTrigger() );
-
buildResult.setUsername( buildTrigger.getTriggeredBy() );
-
buildResult.setScmResult( scmResult );
-
buildResult.setModifiedDependencies( updatedDependencies );
-
buildResult.setBuildDefinition( getBuildDefinition( context ) );
+ // TX START: This should really be done in a single transaction
+ project.setBuildNumber( project.getBuildNumber() + 1 );
+
+ buildResult.setBuildNumber( project.getBuildNumber() );
buildResultDao.addBuildResult( project, buildResult );
+ project.setLatestBuildId( buildResult.getId() );
+ projectDao.updateProject( project );
+ // TX STOP
+
AbstractContinuumAction.setBuildId( context, Integer.toString( buildResult.getId() ) );
setCancelled( context, false );
@@ -159,15 +160,6 @@ public class ExecuteBuilderContinuumActi
buildResult.setEndTime( new Date().getTime() );
- if ( buildResult.getState() == ContinuumProjectState.OK )
- {
- project.setBuildNumber( project.getBuildNumber() + 1 );
- }
-
- project.setLatestBuildId( buildResult.getId() );
-
- buildResult.setBuildNumber( project.getBuildNumber() );
-
if ( buildResult.getState() != ContinuumProjectState.OK &&
buildResult.getState() != ContinuumProjectState.FAILED &&
buildResult.getState() != ContinuumProjectState.ERROR &&
@@ -176,6 +168,8 @@ public class ExecuteBuilderContinuumActi
buildResult.setState( ContinuumProjectState.ERROR );
}
+ // Assumes this build result is the latest for project
+ project.setOldState( project.getState() );
project.setState( buildResult.getState() );
// ----------------------------------------------------------------------
Modified: continuum/trunk/continuum-model/src/main/mdo/continuum.xml
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-model/src/main/mdo/continuum.xml?rev=1674175&r1=1674174&r2=1674175&view=diff
==============================================================================
--- continuum/trunk/continuum-model/src/main/mdo/continuum.xml (original)
+++ continuum/trunk/continuum-model/src/main/mdo/continuum.xml Fri Apr 17 00:54:19 2015
@@ -1439,7 +1439,6 @@
public final static int CHECKEDOUT = 10;
public final static int UPDATED = 5;
public final static int CANCELLED = 11;
- public final static int SENT_TO_AGENT = 12;
// TODO: maybe move these to another class
public static final int TRIGGER_FORCED = 1;
Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/BuildResultAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/BuildResultAction.java?rev=1674175&r1=1674174&r2=1674175&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/BuildResultAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/BuildResultAction.java Fri Apr 17 00:54:19 2015
@@ -329,7 +329,7 @@ public class BuildResultAction
public boolean isBuildInProgress()
{
int buildState = buildResult.getState();
- return buildState == ContinuumProjectState.BUILDING || buildState == ContinuumProjectState.SENT_TO_AGENT;
+ return buildState == ContinuumProjectState.BUILDING;
}
public boolean isBuildSuccessful()
@@ -339,7 +339,7 @@ public class BuildResultAction
public boolean isShowBuildNumber()
{
- return isBuildSuccessful() && buildResult.getBuildNumber() != 0;
+ return buildResult.getBuildNumber() != 0;
}
public boolean isShowBuildError()
Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/util/StateGenerator.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/util/StateGenerator.java?rev=1674175&r1=1674174&r2=1674175&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/util/StateGenerator.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/util/StateGenerator.java Fri Apr 17 00:54:19 2015
@@ -49,8 +49,6 @@ public class StateGenerator
public static final String CHECKED_OUT = "Checked Out";
- public static final String SENT_TO_AGENT = "Sent to Agent";
-
public static final int UNKNOWN_STATE = Integer.MIN_VALUE;
public static final String UNKNOWN = "Unknown";
@@ -71,8 +69,6 @@ public class StateGenerator
new String[] { "/images/icon_success_sml.gif", CHECKED_OUT } );
stateIconArgs.put( ContinuumProjectState.CANCELLED,
new String[] { "/images/icon_unknown_sml.gif", CANCELLED } );
- stateIconArgs.put( ContinuumProjectState.SENT_TO_AGENT,
- new String[] { "/images/inqueue.gif", SENT_TO_AGENT } );
}
public static String generate( int state, String contextPath )
Modified: continuum/trunk/continuum-webapp/src/main/webapp/WEB-INF/jsp/buildResults.jsp
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/webapp/WEB-INF/jsp/buildResults.jsp?rev=1674175&r1=1674174&r2=1674175&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/webapp/WEB-INF/jsp/buildResults.jsp (original)
+++ continuum/trunk/continuum-webapp/src/main/webapp/WEB-INF/jsp/buildResults.jsp Fri Apr 17 00:54:19 2015
@@ -69,9 +69,7 @@
</ec:column>
</redback:ifAuthorized>
<ec:column property="buildNumberIfNotZero" title="buildResults.buildNumber">
- <c:if test="${pageScope.buildResult.state == 2}">
- <c:out value="${pageScope.buildResult.buildNumber}"/>
- </c:if>
+ <c:out value="${pageScope.buildResult.buildNumber}"/>
</ec:column>
<ec:column property="state" headerStyle="text-align: center;" style="text-align: center;" title="buildResults.result" cell="org.apache.maven.continuum.web.view.buildresults.StateCell"/>
<ec:column property="trigger" title="buildResult.trigger">
Modified: continuum/trunk/continuum-webapp/src/test/java/org/apache/maven/continuum/web/action/BuildResultActionTest.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/test/java/org/apache/maven/continuum/web/action/BuildResultActionTest.java?rev=1674175&r1=1674174&r2=1674175&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/test/java/org/apache/maven/continuum/web/action/BuildResultActionTest.java (original)
+++ continuum/trunk/continuum-webapp/src/test/java/org/apache/maven/continuum/web/action/BuildResultActionTest.java Fri Apr 17 00:54:19 2015
@@ -116,28 +116,6 @@ public class BuildResultActionTest
}
@Test
- public void testViewBuildSentToDistributedBuildAgent()
- throws Exception
- {
- int expectedResultId = 777;
- action.setBuildId( expectedResultId );
- buildResult.setState( org.apache.maven.continuum.project.ContinuumProjectState.SENT_TO_AGENT );
- ProjectRunSummary runSummary = new ProjectRunSummary();
- runSummary.setBuildResultId( expectedResultId );
- when( configurationService.isDistributedBuildEnabled() ).thenReturn( true );
- when( configurationService.getTestReportsDirectory( anyInt(), anyInt() ) ).thenReturn(
- new File( "non-existent" ) );
- when( configurationService.getBuildOutputFile( anyInt(), anyInt() ) ).thenReturn(
- new File( "nonExistentBuildOutputFile" ) );
- when( distributedBuildManager.getBuildResult( anyInt() ) ).thenReturn( new HashMap<String, Object>() );
- when( distributedBuildManager.getCurrentRun( anyInt(), anyInt() ) ).thenReturn( runSummary );
-
- assertEquals( Action.SUCCESS, action.execute() );
-
- verify( distributedBuildManager, never() ).getBuildResult( anyInt() );
- }
-
- @Test
public void testSuccessfulWhenTestDirThrows()
throws Exception
{