continuum-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Deng Ching <och...@apache.org>
Subject Re: svn commit: r933451 [1/2] - in /continuum/trunk: continuum-api/src/main/java/org/apache/continuum/builder/distributed/manager/ continuum-buildagent/continuum-buildagent-api/src/main/java/org/apache/continuum/buildagent/ continuum-buildagent/conti
Date Tue, 13 Apr 2010 05:48:44 GMT
On Tue, Apr 13, 2010 at 8:26 AM, <ctan@apache.org> wrote:

>
> -        OverallDistributedBuildQueue overallDistributedBuildQueue =
> getOverallDistributedBuildQueueByGroup( projectGroupId );
> -
> -        if ( hasBuildagentGroup( projectsBuildDefinitionsMap ) &&
> overallDistributedBuildQueue == null )
> +        OverallDistributedBuildQueue overallDistributedBuildQueue =
> getOverallDistributedBuildQueueByGroup( projectGroupId, scmRoots, scmRootId
> );
> +
> +        if ( overallDistributedBuildQueue == null )
>         {
> -            if ( !hasBuildagentInGroup( projectsBuildDefinitionsMap ) )
> -            {
> -                log.warn( "No build agent configured in build agent group.
> Not building projects." );
> +            log.info( "no overall build queue by group" );
>
> -                throw new NoBuildAgentInGroupException( "No build agent
> configured in build agent group" );
> +            if ( hasBuildagentGroup( projectsBuildDefinitionsMap ) )
> +            {
> +                if ( !hasBuildagentInGroup( projectsBuildDefinitionsMap )
> )
> +                {
> +                    log.warn( "No build agent configured in build agent
> group. Not building projects." );
> +
> +                    throw new NoBuildAgentInGroupException( "No build
> agent configured in build agent group" );
> +                }
> +                else
> +                {
> +                    // get overall distributed build queue from build
> agent group
> +                    overallDistributedBuildQueue =
> getOverallDistributedBuildQueueByAgentGroup( projectsBuildDefinitionsMap );
> +                    log.info( "got overall build queue by agent group" );
> +                }
>             }
>             else
>             {
> -                // get overall distributed build queue from build agent
> group
> -                overallDistributedBuildQueue =
> getOverallDistributedBuildQueueByAgentGroup( projectsBuildDefinitionsMap );
> +                // project does not have build agent group
> +                overallDistributedBuildQueue =
> getOverallDistributedBuildQueue();
> +                log.info( "get overall build queue in all agents" );
>

Can we improve the log.info logs above? It looks like these these got left
out for tracing/debugging purposes :)


>             }
>         }
> -        else if ( overallDistributedBuildQueue == null )
> -        {
> -            // project does not have build agent group
> -            overallDistributedBuildQueue =
> getOverallDistributedBuildQueue();
> -        }
>
>         if ( overallDistributedBuildQueue != null )
>         {
> @@ -329,8 +336,7 @@ public class DefaultDistributedBuildMana
>                 {
>                     if ( isAgentAvailable( buildAgentUrl ) )
>                     {
> -                        SlaveBuildAgentTransportClient client =
> -                            new SlaveBuildAgentTransportClient( new URL(
> buildAgentUrl ) );
> +                        SlaveBuildAgentTransportService client =
> createSlaveBuildAgentTransportClientConnection( buildAgentUrl );
>
>                         List<Map<String, Object>> projects =
> client.getProjectsInPrepareBuildQueue();
>
> @@ -353,6 +359,9 @@ public class DefaultDistributedBuildMana
>             }
>         }
>
> +        // call reload in case we disable a build agent
> +        reload();
> +
>         return map;
>     }
>
> @@ -369,8 +378,7 @@ public class DefaultDistributedBuildMana
>                 {
>                     if ( isAgentAvailable( buildAgentUrl ) )
>                     {
> -                        SlaveBuildAgentTransportClient client =
> -                            new SlaveBuildAgentTransportClient( new URL(
> buildAgentUrl ) );
> +                        SlaveBuildAgentTransportService client =
> createSlaveBuildAgentTransportClientConnection( buildAgentUrl );
>                         Map<String, Object> project =
> client.getProjectCurrentlyPreparingBuild();
>
>                         if ( !project.isEmpty() )
> @@ -389,6 +397,10 @@ public class DefaultDistributedBuildMana
>                 }
>             }
>         }
> +
> +        // call reload in case we disable a build agent
> +        reload();
> +
>         return map;
>     }
>
> @@ -405,8 +417,7 @@ public class DefaultDistributedBuildMana
>                 {
>                     if ( isAgentAvailable( buildAgentUrl ) )
>                     {
> -                        SlaveBuildAgentTransportClient client =
> -                            new SlaveBuildAgentTransportClient( new URL(
> buildAgentUrl ) );
> +                        SlaveBuildAgentTransportService client =
> createSlaveBuildAgentTransportClientConnection( buildAgentUrl );
>                         Map<String, Object> project =
> client.getProjectCurrentlyBuilding();
>
>                         if ( !project.isEmpty() )
> @@ -426,6 +437,9 @@ public class DefaultDistributedBuildMana
>             }
>         }
>
> +        // call reload in case we disable a build agent
> +        reload();
> +
>         return map;
>     }
>
> @@ -444,8 +458,7 @@ public class DefaultDistributedBuildMana
>                 {
>                     if ( isAgentAvailable( buildAgentUrl ) )
>                     {
> -                        SlaveBuildAgentTransportClient client =
> -                            new SlaveBuildAgentTransportClient( new URL(
> buildAgentUrl ) );
> +                        SlaveBuildAgentTransportService client =
> createSlaveBuildAgentTransportClientConnection( buildAgentUrl );
>                         List<Map<String, Object>> projects =
> client.getProjectsInBuildQueue();
>
>                         for ( Map<String, Object> context : projects )
> @@ -466,6 +479,10 @@ public class DefaultDistributedBuildMana
>                 }
>             }
>         }
> +
> +        // call reload in case we disable a build agent
> +        reload();
> +
>         return map;
>     }
>
> @@ -494,10 +511,13 @@ public class DefaultDistributedBuildMana
>         {
>             if ( isAgentAvailable( buildAgentUrl ) )
>             {
> -                SlaveBuildAgentTransportClient client = new
> SlaveBuildAgentTransportClient( new URL( buildAgentUrl ) );
> +                SlaveBuildAgentTransportService client =
> createSlaveBuildAgentTransportClientConnection( buildAgentUrl );
>
>                 client.cancelBuild();
>             }
> +
> +            // call reload in case we disable the build agent
> +            reload();
>         }
>         catch ( MalformedURLException e )
>         {
> @@ -515,40 +535,40 @@ public class DefaultDistributedBuildMana
>         throws ContinuumException
>     {
>         Map<String, Object> map = new HashMap<String, Object>();
> -
> +
>         String buildAgentUrl = getBuildAgent( projectId );
> -
> +
>         if ( buildAgentUrl == null )
>         {
>             return null;
>         }
> -
> +
>         try
>         {
>             if ( isAgentAvailable( buildAgentUrl ) )
>             {
> -                SlaveBuildAgentTransportClient client = new
> SlaveBuildAgentTransportClient( new URL( buildAgentUrl ) );
> -
> +                SlaveBuildAgentTransportService client =
> createSlaveBuildAgentTransportClientConnection( buildAgentUrl );
> +
>                 Map<String, Object> result = client.getBuildResult(
> projectId );
> -
> +
>                 if ( result != null )
>                 {
>                     int buildDefinitionId =
> ContinuumBuildConstant.getBuildDefinitionId( result );
> -
> +
>                     Project project = projectDao.getProjectWithAllDetails(
> projectId );
>                     BuildDefinition buildDefinition =
> buildDefinitionDao.getBuildDefinition( buildDefinitionId );
> -
> +
>                     BuildResult oldBuildResult =
>
> buildResultDao.getLatestBuildResultForBuildDefinition( projectId,
> buildDefinitionId );
> -
> +
>                     BuildResult buildResult =
> distributedBuildUtil.convertMapToBuildResult( result );
>                     buildResult.setBuildDefinition( buildDefinition );
>                     buildResult.setBuildNumber( project.getBuildNumber() +
> 1 );
>                     buildResult.setModifiedDependencies(
> distributedBuildUtil.getModifiedDependencies( oldBuildResult, result ) );
>                     buildResult.setScmResult(
> distributedBuildUtil.getScmResult( result ) );
> -
> +
>                     String buildOutput =
> ContinuumBuildConstant.getBuildOutput( result );
> -
> +
>                     map.put( ContinuumBuildConstant.KEY_BUILD_RESULT,
> buildResult );
>                     map.put( ContinuumBuildConstant.KEY_BUILD_OUTPUT,
> buildOutput );
>                 }
> @@ -562,7 +582,10 @@ public class DefaultDistributedBuildMana
>         {
>             throw new ContinuumException( "Error while retrieving build
> result for project" + projectId, e );
>         }
> -
> +
> +        // call reload in case we disable the build agent
> +        reload();
> +
>         return map;
>     }
>
> @@ -570,15 +593,15 @@ public class DefaultDistributedBuildMana
>         throws ContinuumException
>     {
>         List<Installation> installations = new ArrayList<Installation>();
> -
> +
>         try
>         {
>             if ( isAgentAvailable( buildAgentUrl ) )
>             {
> -                SlaveBuildAgentTransportClient client = new
> SlaveBuildAgentTransportClient( new URL( buildAgentUrl ) );
> -
> +                SlaveBuildAgentTransportService client =
> createSlaveBuildAgentTransportClientConnection( buildAgentUrl );
> +
>                 List<Map<String, String>> installationsList =
> client.getAvailableInstallations();
> -
> +
>                 for ( Map context : installationsList )
>                 {
>                     Installation installation = new Installation();
> @@ -589,6 +612,10 @@ public class DefaultDistributedBuildMana
>                     installations.add( installation );
>                 }
>             }
> +
> +            // call reload in case we disable the build agent
> +            reload();
> +
>             return installations;
>         }
>         catch ( Exception e )
> @@ -601,26 +628,26 @@ public class DefaultDistributedBuildMana
>         throws ContinuumException
>     {
>         BuildResult buildResult =
> buildResultDao.getLatestBuildResultForProject( projectId );
> -
> +
>         if ( buildResult != null )
>         {
>             String buildAgentUrl = buildResult.getBuildUrl();
> -
> +
>             if ( buildAgentUrl == null )
>             {
>                 return "";
>             }
> -
> +
>             try
>             {
>                 if ( directory == null )
>                 {
>                     directory = "";
>                 }
> -
> +
>                 if ( isAgentAvailable( buildAgentUrl ) )
>                 {
> -                    SlaveBuildAgentTransportClient client = new
> SlaveBuildAgentTransportClient( new URL( buildAgentUrl ) );
> +                    SlaveBuildAgentTransportService client =
> createSlaveBuildAgentTransportClientConnection( buildAgentUrl );
>                     return client.generateWorkingCopyContent( projectId,
> directory, baseUrl, imageBaseUrl );
>                 }
>             }
> @@ -633,6 +660,10 @@ public class DefaultDistributedBuildMana
>                 log.error( "Error while generating working copy content
> from build agent " + buildAgentUrl, e );
>             }
>         }
> +
> +        // call reload in case we disable the build agent
> +        reload();
> +
>         return "";
>     }
>
> @@ -640,21 +671,21 @@ public class DefaultDistributedBuildMana
>         throws ContinuumException
>     {
>         BuildResult buildResult =
> buildResultDao.getLatestBuildResultForProject( projectId );
> -
> +
>         if ( buildResult != null )
>         {
>             String buildAgentUrl = buildResult.getBuildUrl();
> -
> +
>             if ( buildAgentUrl == null )
>             {
>                 return "";
>             }
> -
> +
>             try
>             {
>                 if ( isAgentAvailable( buildAgentUrl ) )
>                 {
> -                    SlaveBuildAgentTransportClient client = new
> SlaveBuildAgentTransportClient( new URL( buildAgentUrl ) );
> +                    SlaveBuildAgentTransportService client =
> createSlaveBuildAgentTransportClientConnection( buildAgentUrl );
>                     return client.getProjectFileContent( projectId,
> directory, filename );
>                 }
>             }
> @@ -667,6 +698,10 @@ public class DefaultDistributedBuildMana
>                 log.error( "Error while retrieving content of " + filename,
> e );
>             }
>         }
> +
> +        // call reload in case we disable the build agent
> +        reload();
> +
>         return "";
>     }
>
> @@ -677,7 +712,7 @@ public class DefaultDistributedBuildMana
>         {
>             if ( isAgentAvailable( buildAgentUrl ) )
>             {
> -                SlaveBuildAgentTransportClient client = new
> SlaveBuildAgentTransportClient( new URL( buildAgentUrl ) );
> +                SlaveBuildAgentTransportService client =
> createSlaveBuildAgentTransportClientConnection( buildAgentUrl );
>                 client.removeFromPrepareBuildQueue( projectGroupId,
> scmRootId );
>             }
>         }
> @@ -695,6 +730,9 @@ public class DefaultDistributedBuildMana
>             throw new ContinuumException( "Error occurred while removing
> projectGroupId=" + projectGroupId + " scmRootId=" +
>                                           scmRootId + " from prepare build
> queue of agent " + buildAgentUrl, e );
>         }
> +
> +        // call reload in case we disable the build agent
> +        reload();
>     }
>
>     public void removeFromBuildQueue( String buildAgentUrl, int projectId,
> int buildDefinitionId )
> @@ -704,7 +742,7 @@ public class DefaultDistributedBuildMana
>         {
>             if ( isAgentAvailable( buildAgentUrl ) )
>             {
> -                SlaveBuildAgentTransportClient client = new
> SlaveBuildAgentTransportClient( new URL( buildAgentUrl ) );
> +                SlaveBuildAgentTransportService client =
> createSlaveBuildAgentTransportClientConnection( buildAgentUrl );
>                 client.removeFromBuildQueue( projectId, buildDefinitionId
> );
>             }
>         }
> @@ -722,6 +760,9 @@ public class DefaultDistributedBuildMana
>             throw new ContinuumException( "Error occurred while removing
> project " + projectId +
>                                           " from build queue of agent " +
> buildAgentUrl, e );
>         }
> +
> +        // call reload in case we disable the build agent
> +        reload();
>     }
>
>     public void removeFromPrepareBuildQueue( List<String> hashCodes )
> @@ -735,7 +776,7 @@ public class DefaultDistributedBuildMana
>                 {
>                     if ( isAgentAvailable( buildAgentUrl ) )
>                     {
> -                        SlaveBuildAgentTransportClient client = new
> SlaveBuildAgentTransportClient( new URL( buildAgentUrl ) );
> +                        SlaveBuildAgentTransportService client =
> createSlaveBuildAgentTransportClientConnection( buildAgentUrl );
>                         client.removeFromPrepareBuildQueue( hashCodes );
>                     }
>                 }
> @@ -749,6 +790,9 @@ public class DefaultDistributedBuildMana
>                 }
>             }
>         }
> +
> +        // call reload in case we disable a build agent
> +        reload();
>     }
>
>     public void removeFromBuildQueue( List<String> hashCodes )
> @@ -762,7 +806,7 @@ public class DefaultDistributedBuildMana
>                 {
>                     if ( isAgentAvailable( buildAgentUrl ) )
>                     {
> -                        SlaveBuildAgentTransportClient client = new
> SlaveBuildAgentTransportClient( new URL( buildAgentUrl ) );
> +                        SlaveBuildAgentTransportService client =
> createSlaveBuildAgentTransportClientConnection( buildAgentUrl );
>                         client.removeFromBuildQueue( hashCodes );
>                     }
>                 }
> @@ -776,11 +820,171 @@ public class DefaultDistributedBuildMana
>                 }
>             }
>         }
> +
> +        // call reload in case we disable a build agent
> +        reload();
> +    }
> +
> +    public boolean isProjectInAnyPrepareBuildQueue( int projectId, int
> buildDefinitionId )
> +        throws ContinuumException
> +    {
> +        boolean found = false;
> +
> +        synchronized( overallDistributedBuildQueues )
> +        {
> +            for ( String buildAgentUrl :
> overallDistributedBuildQueues.keySet() )
> +            {
> +                try
> +                {
> +                    if ( isAgentAvailable( buildAgentUrl ) )
> +                    {
> +                        SlaveBuildAgentTransportService client =
> createSlaveBuildAgentTransportClientConnection( buildAgentUrl );
> +
> +                        List<Map<String, Object>> projects =
> client.getProjectsAndBuildDefinitionsInPrepareBuildQueue();
> +
> +                        for ( Map<String, Object> context : projects )
> +                        {
> +                            int pid = ContinuumBuildConstant.getProjectId(
> context );
> +                            int buildId =
> ContinuumBuildConstant.getBuildDefinitionId( context );
> +
> +                            if ( pid == projectId && buildId ==
> buildDefinitionId )
> +                            {
> +                                found = true;
> +                                break;
>

I think you can just return true here and return false if the loop has
finished instead of the multiple if conditions and break statements?

+                            }
> +
> +                        }
> +                    }
> +
> +                    if ( found )
> +                    {
> +                        break;
> +                    }
> +                }
> +                catch ( MalformedURLException e )
> +                {
> +                    throw new ContinuumException( "Invalid build agent
> url: " + buildAgentUrl );
> +                }
> +                catch ( Exception e )
> +                {
> +                    throw new ContinuumException( "Error while retrieving
> projects in prepare build queue", e );
> +                }
> +            }
> +        }
> +
> +        // call reload in case we disable a build agent
> +        reload();
> +
> +        if ( found )
> +        {
> +            return true;
> +        }
> +        else
> +        {
> +            return false;
> +        }
> +    }
> +
> +    public boolean isProjectInAnyBuildQueue( int projectId, int
> buildDefinitionId )
> +        throws ContinuumException
> +    {
> +        Map<String, List<BuildProjectTask>> map =
> getProjectsInBuildQueue();
> +
> +        for ( String url : map.keySet() )
> +        {
> +            for ( BuildProjectTask task : map.get( url ) )
> +            {
> +                if ( task.getProjectId() == projectId &&
> task.getBuildDefinitionId() == buildDefinitionId )
> +                {
> +                    return true;
> +                }
> +            }
> +        }
> +
> +        return false;
> +    }
> +
> +    public boolean isProjectCurrentlyPreparingBuild( int projectId, int
> buildDefinitionId )
> +        throws ContinuumException
> +    {
> +        boolean found = false;
> +
> +        synchronized( overallDistributedBuildQueues )
> +        {
> +            for ( String buildAgentUrl :
> overallDistributedBuildQueues.keySet() )
> +            {
> +                try
> +                {
> +                    if ( isAgentAvailable( buildAgentUrl ) )
> +                    {
> +                        SlaveBuildAgentTransportService client =
> createSlaveBuildAgentTransportClientConnection( buildAgentUrl );
> +                        List<Map<String, Object>> projects =
> client.getProjectsAndBuildDefinitionsCurrentlyPreparingBuild();
> +
> +                        for ( Map<String, Object> context : projects )
> +                        {
> +                            int pid = ContinuumBuildConstant.getProjectId(
> context );
> +                            int buildId =
> ContinuumBuildConstant.getBuildDefinitionId( context );
> +
> +                            if ( pid == projectId && buildId ==
> buildDefinitionId )
> +                            {
> +                                found = true;
> +                                break;
>

Same comment as above :)


> +                            }
> +                        }
> +                    }
> +
> +                    if ( found )
> +                    {
> +                        break;
> +                    }
> +                }
> +                catch ( MalformedURLException e )
> +                {
> +                    throw new ContinuumException( "Invalid build agent
> url: " + buildAgentUrl );
> +                }
> +                catch ( Exception e )
> +                {
> +                    throw new ContinuumException( "Error retrieving
> projects currently preparing build in " + buildAgentUrl, e );
> +                }
> +            }
> +        }
> +
> +        // call reload in case we disable a build agent
> +        reload();
> +
> +        if ( found )
> +        {
> +            return true;
> +        }
> +        else
> +        {
> +            return false;
> +        }
> +    }
> +
> +    public boolean isProjectCurrentlyBuilding( int projectId, int
> buildDefinitionId )
> +        throws ContinuumException
> +    {
> +        Map<String, BuildProjectTask> map =
> getProjectsCurrentlyBuilding();
> +
> +        for ( String url : map.keySet() )
> +        {
> +            BuildProjectTask task = map.get( url );
> +
> +            if ( task.getProjectId() == projectId &&
> task.getBuildDefinitionId() == buildDefinitionId )
> +            {
> +                return true;
> +            }
> +        }
> +
> +        return false;
>     }
>


Thanks,
Deng

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message