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
     {