You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by ol...@apache.org on 2008/09/08 22:48:00 UTC

svn commit: r693263 - in /continuum/trunk: continuum-api/src/main/java/org/apache/continuum/dao/ continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/ continuum-model/src/main/mdo/ continuum-store/src/main/java/org/apache/continuum/dao/

Author: olamy
Date: Mon Sep  8 13:47:59 2008
New Revision: 693263

URL: http://svn.apache.org/viewvc?rev=693263&view=rev
Log:
[CONTINUUM-1871] Continuum does not execute builds when last BUILDRESULT.END_TIME=0

use new dao method to prevent too huge loading if last build result end time == 0
use StringBuilder in a toString method to prevent too huge String creation for concatenation


Modified:
    continuum/trunk/continuum-api/src/main/java/org/apache/continuum/dao/BuildResultDao.java
    continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/DefaultBuildController.java
    continuum/trunk/continuum-model/src/main/mdo/continuum.xml
    continuum/trunk/continuum-store/src/main/java/org/apache/continuum/dao/BuildResultDaoImpl.java

Modified: continuum/trunk/continuum-api/src/main/java/org/apache/continuum/dao/BuildResultDao.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-api/src/main/java/org/apache/continuum/dao/BuildResultDao.java?rev=693263&r1=693262&r2=693263&view=diff
==============================================================================
--- continuum/trunk/continuum-api/src/main/java/org/apache/continuum/dao/BuildResultDao.java (original)
+++ continuum/trunk/continuum-api/src/main/java/org/apache/continuum/dao/BuildResultDao.java Mon Sep  8 13:47:59 2008
@@ -55,6 +55,15 @@
 
     List<BuildResult> getBuildResultsForProject( int projectId, long startIndex, long endIndex );
 
+    /**
+     * @since 1.2
+     * @param projectId
+     * @param startIndex
+     * @return the returned list will contains all BuildResult for this project after the startId
+     */
+    List<BuildResult> getBuildResultsForProjectFromId( int projectId, long startId )
+        throws ContinuumStoreException;   
+    
     List<BuildResult> getBuildResultsForProject( int projectId, long fromDate );
 
     Map<Integer, BuildResult> getLatestBuildResultsByProjectGroupId( int projectGroupId );

Modified: continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/DefaultBuildController.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/DefaultBuildController.java?rev=693263&r1=693262&r2=693263&view=diff
==============================================================================
--- continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/DefaultBuildController.java (original)
+++ continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/DefaultBuildController.java Mon Sep  8 13:47:59 2008
@@ -350,13 +350,12 @@
 
             context.setOldBuildResult( oldBuildResult );
 
-            // FIXME CONTINUUM-1871 if continuum is killed the oldBuildResult will have a endTime 0
-            // and all ScmResult will be in memory and the contains method use toString from ChangeSet 
-            // which do a lot String concat
-            
+            // CONTINUUM-1871 olamy if continuum is killed during building oldBuildResult will have a endTime 0
+            // this means all changes since the project has been loaded in continuum will be in memory
+            // now we will load all BuildResult with an Id bigger or equals than the oldBuildResult one
             if ( oldBuildResult != null )
             {
-                context.setOldScmResult( getOldScmResult( projectId, oldBuildResult.getEndTime() ) );
+                context.setOldScmResult( getOldScmResults( projectId, oldBuildResult.getBuildNumber(), oldBuildResult.getEndTime() ) );
             }
         }
         catch ( ContinuumStoreException e )
@@ -774,9 +773,12 @@
         }
     }
 
-    private ScmResult getOldScmResult( int projectId, long fromDate )
+    private ScmResult getOldScmResults( int projectId, long startId, long fromDate )
+        throws ContinuumStoreException
     {
-        List<BuildResult> results = buildResultDao.getBuildResultsForProject( projectId, fromDate );
+        // TODO CONTINUUM-1871 use a new method in dao : buildResultDao.getBuildResultsForProject( projectId, buildResultId )
+        // which load all buildResult with Id >= buildResultId
+        List<BuildResult> results = buildResultDao.getBuildResultsForProjectFromId( projectId, startId );
 
         ScmResult res = new ScmResult();
 
@@ -797,8 +799,7 @@
                             if ( changeSet.getDate() < fromDate )
                             {
                                 continue;
-                            }
-
+                            }                            
                             if ( !res.getChanges().contains( changeSet ) )
                             {
                                 res.addChange( changeSet );

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=693263&r1=693262&r2=693263&view=diff
==============================================================================
--- continuum/trunk/continuum-model/src/main/mdo/continuum.xml (original)
+++ continuum/trunk/continuum-model/src/main/mdo/continuum.xml Mon Sep  8 13:47:59 2008
@@ -764,24 +764,34 @@
             /**
              * @return Returns string representation of the changeset
              */
-            // FIXME CONTINUUM-1871 use at least a StringBuilder here
             public String toString()
             {
-                String result = author + "\n" + date + "\n";
+                StringBuilder result = new StringBuilder();
+                if ( author != null )
+                {
+                    result.append( author ).append( "\n" );
+                }
+                result.append( date ).append( "\n" );
 
                 if ( files != null )
                 {
                     for ( java.util.Iterator i = files.iterator(); i.hasNext(); )
                     {
                         ChangeFile file = (ChangeFile) i.next();
-
-                        result += file + "\n";
+                        
+                        if (file != null)
+                        {
+                            result.append( file ).append( "\n" );
+                        }
                     }
                 }
 
-                result += comment;
+                if ( comment != null )
+                {
+                    result.append( comment );
+                }
 
-                return result;
+                return result.toString();
             }
 
             /**

Modified: continuum/trunk/continuum-store/src/main/java/org/apache/continuum/dao/BuildResultDaoImpl.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-store/src/main/java/org/apache/continuum/dao/BuildResultDaoImpl.java?rev=693263&r1=693262&r2=693263&view=diff
==============================================================================
--- continuum/trunk/continuum-store/src/main/java/org/apache/continuum/dao/BuildResultDaoImpl.java (original)
+++ continuum/trunk/continuum-store/src/main/java/org/apache/continuum/dao/BuildResultDaoImpl.java Mon Sep  8 13:47:59 2008
@@ -411,7 +411,7 @@
         PersistenceManager pm = getPersistenceManager();
 
         Transaction tx = pm.currentTransaction();
-
+        
         try
         {
             tx.begin();
@@ -444,6 +444,47 @@
             rollback( tx );
         }
     }
+    
+    public List<BuildResult> getBuildResultsForProjectFromId( int projectId, long startId )
+        throws ContinuumStoreException
+    {
+        PersistenceManager pm = getPersistenceManager();
+
+        Transaction tx = pm.currentTransaction();
+
+        pm.getFetchPlan().addGroup( BUILD_RESULT_WITH_DETAILS_FETCH_GROUP );
+        
+        try
+        {
+            tx.begin();
+
+            Extent extent = pm.getExtent( BuildResult.class, true );
+
+            Query query = pm.newQuery( extent );
+
+            query.declareParameters( "int projectId, int buildNumber" );
+           
+            query.setFilter( "this.project.id == projectId && this.buildNumber >= buildNumber" );
+            
+            query.setOrdering( "this.startTime descending" );
+
+            List result = (List) query.execute( projectId, startId );
+
+            result = (List) pm.detachCopyAll( result );
+
+            tx.commit();
+
+            return result;
+        }
+        catch ( Exception e )
+        {
+            throw new ContinuumStoreException( e.getMessage(), e );
+        }
+        finally
+        {
+            rollback( tx );
+        }
+    }
 
     public List<BuildResult> getBuildResultsForProject( int projectId, long fromDate )
     {