From commits-return-4587-apmail-continuum-commits-archive=continuum.apache.org@continuum.apache.org Fri Dec 05 10:57:57 2008 Return-Path: Delivered-To: apmail-continuum-commits-archive@www.apache.org Received: (qmail 70638 invoked from network); 5 Dec 2008 10:57:56 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 5 Dec 2008 10:57:56 -0000 Received: (qmail 84848 invoked by uid 500); 5 Dec 2008 10:58:09 -0000 Delivered-To: apmail-continuum-commits-archive@continuum.apache.org Received: (qmail 84789 invoked by uid 500); 5 Dec 2008 10:58:08 -0000 Mailing-List: contact commits-help@continuum.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@continuum.apache.org Delivered-To: mailing list commits@continuum.apache.org Received: (qmail 84780 invoked by uid 99); 5 Dec 2008 10:58:08 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 05 Dec 2008 02:58:08 -0800 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 05 Dec 2008 10:56:47 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id E2CE72388879; Fri, 5 Dec 2008 02:57:05 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r723707 - in /continuum/branches/continuum-parallel-builds/continuum-core/src: main/java/org/apache/continuum/buildmanager/DefaultBuildManager.java test/java/org/apache/continuum/buildmanager/DefaultBuildManagerTest.java Date: Fri, 05 Dec 2008 10:57:04 -0000 To: commits@continuum.apache.org From: oching@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20081205105705.E2CE72388879@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: oching Date: Fri Dec 5 02:57:02 2008 New Revision: 723707 URL: http://svn.apache.org/viewvc?rev=723707&view=rev Log: o added parallel builds additional test cases Modified: continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/buildmanager/DefaultBuildManager.java continuum/branches/continuum-parallel-builds/continuum-core/src/test/java/org/apache/continuum/buildmanager/DefaultBuildManagerTest.java Modified: continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/buildmanager/DefaultBuildManager.java URL: http://svn.apache.org/viewvc/continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/buildmanager/DefaultBuildManager.java?rev=723707&r1=723706&r2=723707&view=diff ============================================================================== --- continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/buildmanager/DefaultBuildManager.java (original) +++ continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/buildmanager/DefaultBuildManager.java Fri Dec 5 02:57:02 2008 @@ -36,6 +36,7 @@ import org.codehaus.plexus.context.ContextException; import org.codehaus.plexus.logging.AbstractLogEnabled; import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable; +import org.codehaus.plexus.taskqueue.TaskQueue; import org.codehaus.plexus.taskqueue.TaskQueueException; /** @@ -72,11 +73,16 @@ // should be invoked before adding anything in any of the queues! private synchronized OverallBuildQueue getOverallBuildQueue() - throws ComponentLookupException + throws ComponentLookupException, TaskQueueException { OverallBuildQueue overallBuildQueue = null; int parallelBuildsNum = configurationService.getNumberOfBuildsInParallel(); + if( parallelBuildsNum <= 0 ) + { + parallelBuildsNum = 1; + } + if( overallBuildQueuesInUse.size() < parallelBuildsNum ) { overallBuildQueue = ( OverallBuildQueue ) container.lookup( OverallBuildQueue.class ); @@ -85,10 +91,21 @@ overallBuildQueuesInUse.add( overallBuildQueue ); } else - { - // add logic for distributing work among the queues - // - check whether the project is already in any of the queues - // - if not, always get the overall build queue with the least tasks queued to it + { + int size = 0; + for( OverallBuildQueue overallBuildQueueInUse : overallBuildQueuesInUse ) + { + // TODO: must differentiate between checkout, prepare-build & build queues! + List tasks = overallBuildQueueInUse.getBuildQueue().getQueueSnapshot(); + if( tasks != null ) + { + if( size == 0 || tasks.size() < size ) + { + overallBuildQueue = overallBuildQueueInUse; + size = tasks.size(); + } + } + } } return overallBuildQueue; Modified: continuum/branches/continuum-parallel-builds/continuum-core/src/test/java/org/apache/continuum/buildmanager/DefaultBuildManagerTest.java URL: http://svn.apache.org/viewvc/continuum/branches/continuum-parallel-builds/continuum-core/src/test/java/org/apache/continuum/buildmanager/DefaultBuildManagerTest.java?rev=723707&r1=723706&r2=723707&view=diff ============================================================================== --- continuum/branches/continuum-parallel-builds/continuum-core/src/test/java/org/apache/continuum/buildmanager/DefaultBuildManagerTest.java (original) +++ continuum/branches/continuum-parallel-builds/continuum-core/src/test/java/org/apache/continuum/buildmanager/DefaultBuildManagerTest.java Fri Dec 5 02:57:02 2008 @@ -91,20 +91,82 @@ public void testParallelBuildsLimitIsMaximized() throws Exception - { - // assert size of the overallBuildQueuesInUse! + { + // set expectations + context.checking(new Expectations() {{ + exactly( 3 ).of(configurationService).getNumberOfBuildsInParallel(); will( returnValue( 2 ) ); + }}); + + Schedule schedule = new Schedule(); + schedule.setMaxJobExecutionTime( 100 ); + + BuildDefinition buildDef = new BuildDefinition(); + buildDef.setId( 1 ); + buildDef.setSchedule( schedule ); + + buildManager.addProjectToBuildQueue( 1, buildDef, 1, "continuum-test-project-1", "build-def-label" ); + + buildManager.addProjectToBuildQueue( 2, buildDef, 1, "continuum-test-project-2", "build-def-label" ); + + buildManager.addProjectToBuildQueue( 3, buildDef, 1, "continuum-test-project-3", "build-def-label" ); + + // verify + context.assertIsSatisfied(); + + // assert if the project is in the correct build queue! + OverallBuildQueue overallBuildQueue = buildManager.getOverallBuildQueueWhereProjectIsQueued( 1 ); + assertEquals( 1, overallBuildQueue.getId() ); + + overallBuildQueue = buildManager.getOverallBuildQueueWhereProjectIsQueued( 2 ); + assertEquals( 2, overallBuildQueue.getId() ); + + overallBuildQueue = buildManager.getOverallBuildQueueWhereProjectIsQueued( 3 ); + assertEquals( 1, overallBuildQueue.getId() ); + + assertEquals( 2, buildManager.getOverallBuildQueuesInUse().size() ); } public void testParallelBuildsBuildIsCancelled() throws Exception { - + } + // project must not be queued! public void testParallelBuildsProjectAlreadyInBuildQueue() throws Exception { - + // set expectations + context.checking(new Expectations() {{ + exactly( 2 ).of(configurationService).getNumberOfBuildsInParallel(); will( returnValue( 2 ) ); + }}); + + Schedule schedule = new Schedule(); + schedule.setMaxJobExecutionTime( 100 ); + + BuildDefinition buildDef = new BuildDefinition(); + buildDef.setId( 1 ); + buildDef.setSchedule( schedule ); + + buildManager.addProjectToBuildQueue( 1, buildDef, 1, "continuum-test-project-1", "build-def-label" ); + + buildManager.addProjectToBuildQueue( 2, buildDef, 1, "continuum-test-project-2", "build-def-label" ); + + buildManager.addProjectToBuildQueue( 1, buildDef, 1, "continuum-test-project-1", "build-def-label" ); + + // verify + context.assertIsSatisfied(); + + // assert if the project is in the correct build queue! + OverallBuildQueue overallBuildQueue = buildManager.getOverallBuildQueueWhereProjectIsQueued( 1 ); + assertEquals( 1, overallBuildQueue.getId() ); + assertEquals( 1, overallBuildQueue.getBuildQueue().getQueueSnapshot().size() ); + + overallBuildQueue = buildManager.getOverallBuildQueueWhereProjectIsQueued( 2 ); + assertEquals( 2, overallBuildQueue.getId() ); + assertEquals( 1, overallBuildQueue.getBuildQueue().getQueueSnapshot().size() ); + + assertEquals( 2, buildManager.getOverallBuildQueuesInUse().size() ); } public void testParallelBuildsRemoveFromBuildQueue() @@ -152,6 +214,68 @@ public void testSingleBuild() throws Exception { + // set expectations + context.checking(new Expectations() {{ + exactly( 2 ).of(configurationService).getNumberOfBuildsInParallel(); will( returnValue( 1 ) ); + }}); + + Schedule schedule = new Schedule(); + schedule.setMaxJobExecutionTime( 100 ); + + BuildDefinition buildDef = new BuildDefinition(); + buildDef.setId( 1 ); + buildDef.setSchedule( schedule ); + + buildManager.addProjectToBuildQueue( 1, buildDef, 1, "continuum-test-project-1", "build-def-label" ); + + buildManager.addProjectToBuildQueue( 2, buildDef, 1, "continuum-test-project-2", "build-def-label" ); + + // verify + context.assertIsSatisfied(); + + // assert if the project is in the correct build queue! + OverallBuildQueue overallBuildQueue = buildManager.getOverallBuildQueueWhereProjectIsQueued( 1 ); + assertEquals( 1, overallBuildQueue.getId() ); + + overallBuildQueue = buildManager.getOverallBuildQueueWhereProjectIsQueued( 2 ); + assertEquals( 1, overallBuildQueue.getId() ); + + assertEquals( 1, buildManager.getOverallBuildQueuesInUse().size() ); + + assertEquals( 2, buildManager.getOverallBuildQueuesInUse().get( 0 ).getBuildQueue().getQueueSnapshot().size() ); + } + public void testNumberOfBuildInParallelConfigSetToZero() + throws Exception + { + // set expectations + context.checking(new Expectations() {{ + exactly( 2 ).of(configurationService).getNumberOfBuildsInParallel(); will( returnValue( 0 ) ); + }}); + + Schedule schedule = new Schedule(); + schedule.setMaxJobExecutionTime( 100 ); + + BuildDefinition buildDef = new BuildDefinition(); + buildDef.setId( 1 ); + buildDef.setSchedule( schedule ); + + buildManager.addProjectToBuildQueue( 1, buildDef, 1, "continuum-test-project-1", "build-def-label" ); + + buildManager.addProjectToBuildQueue( 2, buildDef, 1, "continuum-test-project-2", "build-def-label" ); + + // verify + context.assertIsSatisfied(); + + // assert if the project is in the correct build queue! + OverallBuildQueue overallBuildQueue = buildManager.getOverallBuildQueueWhereProjectIsQueued( 1 ); + assertEquals( 1, overallBuildQueue.getId() ); + + overallBuildQueue = buildManager.getOverallBuildQueueWhereProjectIsQueued( 2 ); + assertEquals( 1, overallBuildQueue.getId() ); + + assertEquals( 1, buildManager.getOverallBuildQueuesInUse().size() ); + + assertEquals( 2, buildManager.getOverallBuildQueuesInUse().get( 0 ).getBuildQueue().getQueueSnapshot().size() ); } }