Subversion Repositories DevTools

Rev

Rev 7047 | Rev 7051 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7047 Rev 7048
Line 34... Line 34...
34
{
34
{
35
    /**Unit test hook.
35
    /**Unit test hook.
36
     * Prevents Oracle interaction when false.
36
     * Prevents Oracle interaction when false.
37
     * @attribute
37
     * @attribute
38
     */
38
     */
39
    public static boolean mUseDatabase = true;
39
    public boolean mUseDatabase = true;
40
 
40
 
41
    /**Debug Support.
41
    /**Debug Support.
42
     * Set to false if EnvVar GBE_BUILDTOOL_DEBUG exists
42
     * Set to false if EnvVar GBE_BUILDTOOL_DEBUG exists
43
     * Value of GBE_BUILDTOOL_DEBUG is expected to be an email if greater than
43
     * Value of GBE_BUILDTOOL_DEBUG is expected to be an email if greater than
44
     * one character.
44
     * one character.
Line 159... Line 159...
159
                if (connection != null)
159
                if (connection != null)
160
                	connection.close();
160
                	connection.close();
161
            }
161
            }
162
            catch (SQLException e)
162
            catch (SQLException e)
163
            {
163
            {
164
                mLogger.error("SQL Exception closing connection:" + e.getMessage());
164
                mLogger.error("SQL Exception closing connection: {}", e.getMessage());
165
            }
165
            }
166
    	}
166
    	}
167
    }
167
    }
168
    
168
    
169
    /**database connection for use when not planning a build
169
    /**database connection for use when not planning a build
Line 261... Line 261...
261
     * @param username
261
     * @param username
262
     * @param password
262
     * @param password
263
     */
263
     */
264
    public ReleaseManager(final String connectionString, final String username, final String password)
264
    public ReleaseManager(final String connectionString, final String username, final String password)
265
    {
265
    {
266
        mLogger.debug("ReleaseManager " + connectionString);
266
        mLogger.debug("ReleaseManager {}", connectionString);
267
        mConnectionString = connectionString;
267
        mConnectionString = connectionString;
268
        mUsername = username;
268
        mUsername = username;
269
        mPassword = password;
269
        mPassword = password;
270
 
270
 
271
        String gbeBtDebug = System.getenv("GBE_BUILDTOOL_DEBUG");
271
        String gbeBtDebug = System.getenv("GBE_BUILDTOOL_DEBUG");
Line 313... Line 313...
313
     *               False: Escrow Mode
313
     *               False: Escrow Mode
314
     */
314
     */
315
    public void setDaemonMode(boolean isDaemon)
315
    public void setDaemonMode(boolean isDaemon)
316
    {
316
    {
317
        mDaemon = isDaemon;
317
        mDaemon = isDaemon;
318
        mLogger.debug("DaemonMode:" + mDaemon);
318
        mLogger.debug("DaemonMode:{}", mDaemon);
319
    }
319
    }
320
    
320
    
321
    /**
321
    /**
322
     * Clear mUseMutex
322
     * Clear mUseMutex
323
     * Used only in test mode to prevent the use of a mutex 
323
     * Used only in test mode to prevent the use of a mutex 
Line 564... Line 564...
564
     * @throws Exception
564
     * @throws Exception
565
     */
565
     */
566
    void handleSQLException(SQLException e, String instanceId ) throws SQLException, Exception
566
    void handleSQLException(SQLException e, String instanceId ) throws SQLException, Exception
567
    {
567
    {
568
        String callingMethodName = Thread.currentThread().getStackTrace()[2].getMethodName() + instanceId ;
568
        String callingMethodName = Thread.currentThread().getStackTrace()[2].getMethodName() + instanceId ;
569
        mLogger.error(callingMethodName + " sql exception:" + e.getMessage());
569
        mLogger.error("{} sql exception:{}", callingMethodName, e.getMessage());
570
        
570
        
571
        if ( mConnection == null || !mConnection.isValid(10) )
571
        if ( mConnection == null || !mConnection.isValid(10) )
572
        {
572
        {
573
            mLogger.error(callingMethodName + " database access error only");
573
            mLogger.error( "{} database access error only", callingMethodName);
574
            RmConnection.closeConnection(mConnection);
574
            RmConnection.closeConnection(mConnection);
575
            throw new SQLException(e);
575
            throw new SQLException(e);
576
        }
576
        }
577
        else
577
        else
578
        {
578
        {
579
            mLogger.error(callingMethodName + " show stopper");
579
            mLogger.error( "{} show stopper", callingMethodName);
580
            throw new Exception(callingMethodName + " show stopper");
580
            throw new Exception(callingMethodName + " show stopper");
581
        }
581
        }
582
    }
582
    }
583
    
583
    
584
    /** Claim the Build System Planning Lock
584
    /** Claim the Build System Planning Lock
Line 687... Line 687...
687
            }
687
            }
688
            catch( SQLException e )
688
            catch( SQLException e )
689
            {
689
            {
690
                // do not throw Exception
690
                // do not throw Exception
691
                // this is part of Exception handling
691
                // this is part of Exception handling
692
                mLogger.error( "indefinitePause caught SQLException " + e.getMessage() );
692
                mLogger.error( "indefinitePause caught SQLException {}", e.getMessage() );
693
                RmConnection.closeConnection(mConnection);
693
                RmConnection.closeConnection(mConnection);
694
            }
694
            }
695
            catch( Exception e )
695
            catch( Exception e )
696
            {
696
            {
697
                mLogger.error( "indefinitePause caught Exception " + e.getMessage() );
697
                mLogger.error( "indefinitePause caught Exception {}", e.getMessage() );
698
            }
698
            }
699
            finally
699
            finally
700
            {
700
            {
701
                // this block is executed regardless of what happens in the try block
701
                // this block is executed regardless of what happens in the try block
702
                // even if an exception is thrown
702
                // even if an exception is thrown
Line 707... Line 707...
707
                }
707
                }
708
                catch( Exception e )
708
                catch( Exception e )
709
                {
709
                {
710
                    // do not throw Exception
710
                    // do not throw Exception
711
                    // this is part of Exception handling
711
                    // this is part of Exception handling
712
                    mLogger.error( "indefinitePause2 caught Exception " + e.getMessage() );
712
                    mLogger.error( "indefinitePause2 caught Exception {}", e.getMessage() );
713
                    RmConnection.closeConnection(mConnection);
713
                    RmConnection.closeConnection(mConnection);
714
                }
714
                }
715
            }
715
            }
716
        }
716
        }
717
    }
717
    }
Line 755... Line 755...
755
     * @exception SQLException
755
     * @exception SQLException
756
     * @exception Exception
756
     * @exception Exception
757
     */
757
     */
758
    void claimVersion(int pkgId, String pkgVersion, int rtagId) throws SQLException, Exception
758
    void claimVersion(int pkgId, String pkgVersion, int rtagId) throws SQLException, Exception
759
    {
759
    {
760
        mLogger.debug("claimVersion " + pkgId + " " + pkgVersion);
760
        mLogger.debug("claimVersion {} {}", pkgId, pkgVersion);
761
        if ( mUseDatabase )
761
        if ( mUseDatabase )
762
        {
762
        {
763
            CallableStatement stmt1 = null;
763
            CallableStatement stmt1 = null;
764
            try
764
            try
765
            {
765
            {
Line 856... Line 856...
856
     *  @param pkgId - Identifies the name of the package being built
856
     *  @param pkgId - Identifies the name of the package being built
857
     *  @param pkgPvId - Identifies the packageVersion the build is based upon
857
     *  @param pkgPvId - Identifies the packageVersion the build is based upon
858
     */
858
     */
859
    public void setCurrentPackageBeingBuilt(int rconId, int pkgId, int pkgPvId) throws SQLException, Exception
859
    public void setCurrentPackageBeingBuilt(int rconId, int pkgId, int pkgPvId) throws SQLException, Exception
860
    {
860
    {
861
        mLogger.error("setCurrentPackageBeingBuilt " + rconId);
861
        mLogger.error("setCurrentPackageBeingBuilt {}", rconId);
862
        if ( mUseDatabase )
862
        if ( mUseDatabase )
863
        {
863
        {
864
            CallableStatement stmt = null;
864
            CallableStatement stmt = null;
865
            try
865
            try
866
            {
866
            {
Line 902... Line 902...
902
     * 
902
     * 
903
     *  @param rconId - Identifies the Release Config table entry
903
     *  @param rconId - Identifies the Release Config table entry
904
     */
904
     */
905
    public void clearCurrentPackageBeingBuilt(int rconId) throws SQLException, Exception
905
    public void clearCurrentPackageBeingBuilt(int rconId) throws SQLException, Exception
906
    {
906
    {
907
        mLogger.error("clearCurrentPackageBeingBuilt " + rconId);
907
        mLogger.error("clearCurrentPackageBeingBuilt {}", rconId);
908
        if ( mUseDatabase )
908
        if ( mUseDatabase )
909
        {
909
        {
910
            try
910
            try
911
            {
911
            {
912
                connect();
912
                connect();
Line 951... Line 951...
951
     */
951
     */
952
    public boolean autoMakeRelease(ReportingData mReporting) throws SQLException, Exception
952
    public boolean autoMakeRelease(ReportingData mReporting) throws SQLException, Exception
953
    {
953
    {
954
 
954
 
955
        mReporting.errMsg = null;
955
        mReporting.errMsg = null;
956
        mLogger.debug("autoMakeRelease " + mReporting.packageName);
956
        mLogger.debug("autoMakeRelease {}", mReporting.packageName);
957
        if ( mUseDatabase )
957
        if ( mUseDatabase )
958
        {
958
        {
959
            try
959
            try
960
            {
960
            {
961
                //  Create an array of dependencies
961
                //  Create an array of dependencies
Line 1003... Line 1003...
1003
                //  Report per-package errors directly
1003
                //  Report per-package errors directly
1004
                //  Exceptions are for errors that need to halt the entire system
1004
                //  Exceptions are for errors that need to halt the entire system
1005
                //
1005
                //
1006
                if ( result <= 0 )
1006
                if ( result <= 0 )
1007
                {
1007
                {
1008
                    mLogger.error("autoMakeRelease PK_RMAPI.AUTO_MAKE_VCSRELEASE failed, returned " + result);
1008
                    mLogger.error("autoMakeRelease PK_RMAPI.AUTO_MAKE_VCSRELEASE failed, returned {}", result);
1009
                    if ( result == -4 ) {
1009
                    if ( result == -4 ) {
1010
                        mReporting.errMsg = "Package migrated to SVN being built from CC tag";
1010
                        mReporting.errMsg = "Package migrated to SVN being built from CC tag";
1011
                    } else if ( result == -3 ) {
1011
                    } else if ( result == -3 ) {
1012
                        mReporting.errMsg = "Package not approved for autobuild";
1012
                        mReporting.errMsg = "Package not approved for autobuild";
1013
                    } else if ( result == -2 ) {
1013
                    } else if ( result == -2 ) {
Line 1051... Line 1051...
1051
     *  Handles database connection/disconnection
1051
     *  Handles database connection/disconnection
1052
     */
1052
     */
1053
    public void insertPackageMetrics(int mRtagId, String packageName, 
1053
    public void insertPackageMetrics(int mRtagId, String packageName, 
1054
            String packageExtension, String metrics) throws SQLException, Exception
1054
            String packageExtension, String metrics) throws SQLException, Exception
1055
    {
1055
    {
1056
        mLogger.debug("insertPackageMetrics " + packageName);
1056
        mLogger.debug("insertPackageMetrics {}", packageName);
1057
        if ( mUseDatabase )
1057
        if ( mUseDatabase )
1058
        {
1058
        {
1059
            try
1059
            try
1060
            {
1060
            {
1061
                connect();
1061
                connect();
Line 1069... Line 1069...
1069
                int result = stmt.getInt( 1 );
1069
                int result = stmt.getInt( 1 );
1070
 
1070
 
1071
                if ( result != 0 )
1071
                if ( result != 0 )
1072
                {
1072
                {
1073
                    // flag build failure
1073
                    // flag build failure
1074
                    mLogger.error("insertPackageMetrics show stopper PK_RMAPI.INSERT_PACKAGE_METRICS failed, returned" + result);
1074
                    mLogger.error("insertPackageMetrics show stopper PK_RMAPI.INSERT_PACKAGE_METRICS failed, returned {}", result);
1075
                    throw new Exception("insertPackageMetrics show stopper PK_RMAPI.INSERT_PACKAGE_METRICS failed, returned" + result);
1075
                    throw new Exception("insertPackageMetrics show stopper PK_RMAPI.INSERT_PACKAGE_METRICS failed, returned" + result);
1076
                }
1076
                }
1077
                stmt.close();
1077
                stmt.close();
1078
                commit();
1078
                commit();
1079
            }
1079
            }
Line 1100... Line 1100...
1100
     */
1100
     */
1101
    public int createBuildInstance(int rtagId, int pvId, BuildReason reason) throws SQLException, Exception
1101
    public int createBuildInstance(int rtagId, int pvId, BuildReason reason) throws SQLException, Exception
1102
    {
1102
    {
1103
        int buildId = 0;
1103
        int buildId = 0;
1104
        
1104
        
1105
        mLogger.debug("createBuildInstance " + rtagId + ":" + pvId);
1105
        mLogger.debug("createBuildInstance {}:{}", rtagId, pvId);
1106
        if ( mUseDatabase )
1106
        if ( mUseDatabase )
1107
        {
1107
        {
1108
            try
1108
            try
1109
            {
1109
            {
1110
                connect();
1110
                connect();
Line 1115... Line 1115...
1115
                stmt.setLong( 3,pvId );
1115
                stmt.setLong( 3,pvId );
1116
                stmt.setString( 4,reason.toString() );
1116
                stmt.setString( 4,reason.toString() );
1117
                stmt.executeUpdate();
1117
                stmt.executeUpdate();
1118
                buildId = stmt.getInt( 1 );
1118
                buildId = stmt.getInt( 1 );
1119
                
1119
                
1120
                mLogger.warn("createBuildInstance: Build Instance ID: " + buildId);
1120
                mLogger.warn("createBuildInstance: Build Instance ID: {}", buildId);
1121
 
1121
 
1122
                stmt.close();
1122
                stmt.close();
1123
                commit();
1123
                commit();
1124
            }
1124
            }
1125
            catch ( SQLException e )
1125
            catch ( SQLException e )
Line 1152... Line 1152...
1152
     */
1152
     */
1153
    public int updateBuildInstance(int buildID, int pvId, BuildResult result) throws SQLException, Exception
1153
    public int updateBuildInstance(int buildID, int pvId, BuildResult result) throws SQLException, Exception
1154
    {
1154
    {
1155
        int rv = 0;
1155
        int rv = 0;
1156
        
1156
        
1157
        mLogger.debug("updateBuildInstance " + buildID + ":" + pvId + ":" + result);
1157
        mLogger.debug("updateBuildInstance {}:{}:{}", buildID, pvId, result);
1158
        if ( mUseDatabase )
1158
        if ( mUseDatabase )
1159
        {
1159
        {
1160
            try
1160
            try
1161
            {
1161
            {
1162
                connect();
1162
                connect();
Line 1169... Line 1169...
1169
                stmt.setLong( 3,pvId );
1169
                stmt.setLong( 3,pvId );
1170
                stmt.setString( 4,result.toString() );
1170
                stmt.setString( 4,result.toString() );
1171
                stmt.executeUpdate();
1171
                stmt.executeUpdate();
1172
                rv = stmt.getInt( 1 );
1172
                rv = stmt.getInt( 1 );
1173
                
1173
                
1174
                mLogger.warn("updateBuildInstance: Result: " + rv);
1174
                mLogger.warn("updateBuildInstance: Result: {}", rv);
1175
 
1175
 
1176
                stmt.close();
1176
                stmt.close();
1177
                commit();
1177
                commit();
1178
            }
1178
            }
1179
            catch ( SQLException e )
1179
            catch ( SQLException e )
Line 1210... Line 1210...
1210
        if ( !mUseDatabase || !btr.mResultsFound )
1210
        if ( !mUseDatabase || !btr.mResultsFound )
1211
        {
1211
        {
1212
            return;
1212
            return;
1213
        }
1213
        }
1214
 
1214
 
1215
        mLogger.warn("insertTestResults: " + buildId + ", Number:" + btr.mTestResults.size() );
1215
        mLogger.warn("insertTestResults: {}, Number:{}", buildId, btr.mTestResults.size() );
1216
        try
1216
        try
1217
        {
1217
        {
1218
            connect();
1218
            connect();
1219
            String sql = "BEGIN ? := PK_RMAPI.insert_test_run(?, ?, ?, ?, ?, ?, ?);end;";
1219
            String sql = "BEGIN ? := PK_RMAPI.insert_test_run(?, ?, ?, ?, ?, ?, ?);end;";
1220
            CallableStatement stmt = mConnection.prepareCall(sql);
1220
            CallableStatement stmt = mConnection.prepareCall(sql);
Line 1282... Line 1282...
1282
     * 
1282
     * 
1283
     * @return  true if an instruction exists - for use in a while loop
1283
     * @return  true if an instruction exists - for use in a while loop
1284
     */
1284
     */
1285
    public boolean getDaemonInst(DaemonInstruction di ) throws SQLException, Exception
1285
    public boolean getDaemonInst(DaemonInstruction di ) throws SQLException, Exception
1286
    {
1286
    {
1287
        mLogger.debug("getDaemonInst " + di.instruction);
1287
        mLogger.debug("getDaemonInst {}", di.instruction);
1288
        boolean retVal = false;
1288
        boolean retVal = false;
1289
 
1289
 
1290
        if ( mUseDatabase )
1290
        if ( mUseDatabase )
1291
        {
1291
        {
1292
            try
1292
            try
Line 1350... Line 1350...
1350
     *  
1350
     *  
1351
     *  @param  instruction - PVID of the daemon instruction to process
1351
     *  @param  instruction - PVID of the daemon instruction to process
1352
     */
1352
     */
1353
    public void markDaemonInstInProgress(final int instruction) throws SQLException, Exception
1353
    public void markDaemonInstInProgress(final int instruction) throws SQLException, Exception
1354
    {
1354
    {
1355
        mLogger.debug("markDaemonInstInProgress " + instruction);
1355
        mLogger.debug("markDaemonInstInProgress {}", instruction);
1356
 
1356
 
1357
        if ( mUseDatabase )
1357
        if ( mUseDatabase )
1358
        {
1358
        {
1359
            try
1359
            try
1360
            {
1360
            {
Line 1376... Line 1376...
1376
     *  
1376
     *  
1377
     *  @param  instruction - PVID of Daemon Instruction to process
1377
     *  @param  instruction - PVID of Daemon Instruction to process
1378
     */
1378
     */
1379
    public void markDaemonInstCompleted(final int instruction) throws SQLException, Exception
1379
    public void markDaemonInstCompleted(final int instruction) throws SQLException, Exception
1380
    {
1380
    {
1381
        mLogger.debug("markDaemonInstCompletedConnect " + instruction);
1381
        mLogger.debug("markDaemonInstCompletedConnect {}", instruction);
1382
        boolean connectionCreated = false;
1382
        boolean connectionCreated = false;
1383
 
1383
 
1384
        try
1384
        try
1385
        {
1385
        {
1386
            if (! mIsConnected)
1386
            if (! mIsConnected)
Line 1461... Line 1461...
1461
     *  
1461
     *  
1462
     * Overridden in ReleaseManagerUtf 
1462
     * Overridden in ReleaseManagerUtf 
1463
     */
1463
     */
1464
    public String queryBaselineName(int baseline) throws SQLException, Exception
1464
    public String queryBaselineName(int baseline) throws SQLException, Exception
1465
    {
1465
    {
1466
        mLogger.debug("queryBaselineName " + mDaemon);
1466
        mLogger.debug("queryBaselineName {}", mDaemon);
1467
        StringBuilder retVal = new StringBuilder();
1467
        StringBuilder retVal = new StringBuilder();
1468
 
1468
 
1469
        String sql = "";
1469
        String sql = "";
1470
 
1470
 
1471
        if ( mDaemon )
1471
        if ( mDaemon )
Line 1535... Line 1535...
1535
        catch ( SQLException e )
1535
        catch ( SQLException e )
1536
        {
1536
        {
1537
            handleSQLException(e, "");
1537
            handleSQLException(e, "");
1538
        }
1538
        }
1539
 
1539
 
1540
        mLogger.info("queryBaselineName returned " + retVal);
1540
        mLogger.info("queryBaselineName returned {}", retVal);
1541
        return retVal.toString();
1541
        return retVal.toString();
1542
    }
1542
    }
1543
    
1543
    
1544
    /**only used in daemon mode
1544
    /**only used in daemon mode
1545
     *   select config from release_manager.build_service_config where service='MAIL SERVER';
1545
     *   select config from release_manager.build_service_config where service='MAIL SERVER';
Line 1577... Line 1577...
1577
        {
1577
        {
1578
            handleSQLException(e, "");
1578
            handleSQLException(e, "");
1579
        }
1579
        }
1580
 
1580
 
1581
 
1581
 
1582
        mLogger.info("queryMailServer returned " + retVal);
1582
        mLogger.info("queryMailServer returned {}", retVal);
1583
        return retVal;
1583
        return retVal;
1584
    }
1584
    }
1585
 
1585
 
1586
    /**only used in daemon mode
1586
    /**only used in daemon mode
1587
     * returns the configured service 
1587
     * returns the configured service 
Line 1616... Line 1616...
1616
        catch ( SQLException e )
1616
        catch ( SQLException e )
1617
        {
1617
        {
1618
            handleSQLException(e, "");
1618
            handleSQLException(e, "");
1619
        }
1619
        }
1620
 
1620
 
1621
        mLogger.debug("queryMailSender returned " + retVal);
1621
        mLogger.debug("queryMailSender returned {}", retVal);
1622
        return retVal;
1622
        return retVal;
1623
    }
1623
    }
1624
 
1624
 
1625
    /**only used in daemon mode
1625
    /**only used in daemon mode
1626
     * returns the configured global email addresses 
1626
     * returns the configured global email addresses 
Line 1658... Line 1658...
1658
        {
1658
        {
1659
            handleSQLException(e, "");
1659
            handleSQLException(e, "");
1660
        }
1660
        }
1661
 
1661
 
1662
 
1662
 
1663
        mLogger.debug("queryGlobalAddresses returned " + retVal);
1663
        mLogger.debug("queryGlobalAddresses returned {}", retVal);
1664
        return retVal;
1664
        return retVal;
1665
    }
1665
    }
1666
    
1666
    
1667
    /**
1667
    /**
1668
     * Determine a list of global, project wide and release email recipients
1668
     * Determine a list of global, project wide and release email recipients
Line 1776... Line 1776...
1776
     * @param rtag_id   - Target Release
1776
     * @param rtag_id   - Target Release
1777
     * @param buildFile - buildfile content to be saved
1777
     * @param buildFile - buildfile content to be saved
1778
     */
1778
     */
1779
    public void publishBuildFile(int rtag_id, BuildFile buildFile) throws SQLException, Exception
1779
    public void publishBuildFile(int rtag_id, BuildFile buildFile) throws SQLException, Exception
1780
    {
1780
    {
1781
        mLogger.debug("publishBuildFile publishing a build file of length " + buildFile.content.length());
1781
        mLogger.debug("publishBuildFile publishing a build file of length {}", buildFile.content.length());
1782
        mLogger.debug("publishBuildFile publishing pkgId: " + buildFile.mPkgId + " pvid: " + buildFile.mPvId);
1782
        mLogger.debug("publishBuildFile publishing pkgId: {} pvid: {}", buildFile.mPkgId, buildFile.mPvId);
1783
 
1783
 
1784
        try
1784
        try
1785
        {
1785
        {
1786
            connect();
1786
            connect();
1787
 
1787
 
Line 1824... Line 1824...
1824
        }
1824
        }
1825
        catch ( Exception e )
1825
        catch ( Exception e )
1826
        {
1826
        {
1827
            // this catch and rethrow is historical
1827
            // this catch and rethrow is historical
1828
            // problems were found using CallableStatement when updating a CLOB column with data > 4000 bytes
1828
            // problems were found using CallableStatement when updating a CLOB column with data > 4000 bytes
1829
            mLogger.error("publishBuildFile caught Exception " + e.getMessage());
1829
            mLogger.error("publishBuildFile caught Exception {}", e.getMessage());
1830
            throw new Exception("publishBuildFile caught Exception " + e.getMessage());
1830
            throw new Exception("publishBuildFile caught Exception " + e.getMessage());
1831
        }
1831
        }
1832
        finally
1832
        finally
1833
        {
1833
        {
1834
            // this block is executed regardless of what happens in the try block
1834
            // this block is executed regardless of what happens in the try block
Line 1897... Line 1897...
1897
            {
1897
            {
1898
                disconnect();
1898
                disconnect();
1899
            }
1899
            }
1900
        }
1900
        }
1901
        
1901
        
1902
        mLogger.warn("queryReleaseSeqNum returned " + retVal);
1902
        mLogger.warn("queryReleaseSeqNum returned {}", retVal);
1903
        return retVal;
1903
        return retVal;
1904
    }
1904
    }
1905
 
1905
 
1906
    /**
1906
    /**
1907
     * Disable all the daemons for a specific release
1907
     * Disable all the daemons for a specific release
Line 1912... Line 1912...
1912
     * @throws SQLException
1912
     * @throws SQLException
1913
     * @throws Exception
1913
     * @throws Exception
1914
     */
1914
     */
1915
    private void disableDaemons(final int rtag_id) throws SQLException, Exception
1915
    private void disableDaemons(final int rtag_id) throws SQLException, Exception
1916
    {
1916
    {
1917
        mLogger.error("disableDaemons: " + rtag_id );
1917
        mLogger.error("disableDaemons: {}", rtag_id );
1918
        
1918
        
1919
        try
1919
        try
1920
        {
1920
        {
1921
            CallableStatement stmt1 = mConnection.prepareCall( "call PK_BUILDAPI.set_daemon_states(?,2)" );
1921
            CallableStatement stmt1 = mConnection.prepareCall( "call PK_BUILDAPI.set_daemon_states(?,2)" );
1922
            stmt1.setInt( 1, rtag_id );
1922
            stmt1.setInt( 1, rtag_id );
Line 1963... Line 1963...
1963
        }
1963
        }
1964
        catch ( SQLException e )
1964
        catch ( SQLException e )
1965
        {
1965
        {
1966
            handleSQLException(e, "");
1966
            handleSQLException(e, "");
1967
        }
1967
        }
1968
        mLogger.info("isRtagIdConfigured returning " + retVal);
1968
        mLogger.info("isRtagIdConfigured returning {}", retVal);
1969
        return retVal;
1969
        return retVal;
1970
    }
1970
    }
1971
 
1971
 
1972
    /**queries the RUN_LEVEL table for daemon to determine if the daemon has been paused
1972
    /**queries the RUN_LEVEL table for daemon to determine if the daemon has been paused
1973
     * or disabled.
1973
     * or disabled.
Line 1987... Line 1987...
1987
     * @exception SQLException
1987
     * @exception SQLException
1988
     * @exception Exception
1988
     * @exception Exception
1989
     */
1989
     */
1990
    public boolean queryDirectedRunLevel(final int rcon_id) throws SQLException, Exception
1990
    public boolean queryDirectedRunLevel(final int rcon_id) throws SQLException, Exception
1991
    {
1991
    {
1992
        mLogger.debug("queryDirectedRunLevel " + rcon_id);
1992
        mLogger.debug("queryDirectedRunLevel {}", rcon_id);
1993
        boolean retVal = true;
1993
        boolean retVal = true;
1994
 
1994
 
1995
        if ( mUseDatabase )
1995
        if ( mUseDatabase )
1996
        {
1996
        {
1997
            try
1997
            try
Line 2035... Line 2035...
2035
            {
2035
            {
2036
                handleSQLException(e, "");
2036
                handleSQLException(e, "");
2037
            }
2037
            }
2038
        }
2038
        }
2039
 
2039
 
2040
        mLogger.info("queryDirectedRunLevel returning " + retVal);
2040
        mLogger.info("queryDirectedRunLevel returning {}", retVal);
2041
        return retVal;
2041
        return retVal;
2042
    }
2042
    }
2043
 
2043
 
2044
    /**
2044
    /**
2045
     * queries the RELEASE_CONFIG and BUILD_MACHINE_CONFIG tables using the rcon_id primary key, rtag_id, machine_hostname, daemon_mode
2045
     * queries the RELEASE_CONFIG and BUILD_MACHINE_CONFIG tables using the rcon_id primary key, rtag_id, machine_hostname, daemon_mode
Line 2122... Line 2122...
2122
                //      Handles case where daemon has just been started/restarted
2122
                //      Handles case where daemon has just been started/restarted
2123
                //
2123
                //
2124
                if ( daemon_mode == 'M' &&  build_age > 0 && days_since_last_build > (build_age + 1) )
2124
                if ( daemon_mode == 'M' &&  build_age > 0 && days_since_last_build > (build_age + 1) )
2125
                {
2125
                {
2126
                    long upTimeSecs = (System.currentTimeMillis() - threadStartTime)/1000;
2126
                    long upTimeSecs = (System.currentTimeMillis() - threadStartTime)/1000;
2127
                    mLogger.error("queryReleaseConfig 1: " + rtag_id + ", " + rcon_id + ", "+ daemon_mode + ", " + pause + ", " + build_age + ", " + days_since_last_build + ", " + upTimeSecs );
2127
                    mLogger.error("queryReleaseConfig 1: {},{},{},{},{},{},{}",rtag_id, rcon_id, daemon_mode, pause, build_age, days_since_last_build, upTimeSecs );
2128
                    if ( upTimeSecs > mPostponeShutdown)
2128
                    if ( upTimeSecs > mPostponeShutdown)
2129
                    {
2129
                    {
2130
                        disableDaemons(rtag_id);
2130
                        disableDaemons(rtag_id);
2131
                        pause = 2;
2131
                        pause = 2;
2132
                    }
2132
                    }
Line 2134... Line 2134...
2134
                    {
2134
                    {
2135
                        mLogger.error("queryReleaseConfig 1: Shutdown Postponed"  );    
2135
                        mLogger.error("queryReleaseConfig 1: Shutdown Postponed"  );    
2136
                    }
2136
                    }
2137
                }
2137
                }
2138
 
2138
 
2139
                mLogger.info("queryReleaseConfig 1: " + rtag_id + ", " + rcon_id + ", "+ daemon_mode + ", " + pause + ", " + build_age + ", " + days_since_last_build );
2139
                mLogger.info("queryReleaseConfig 1: {},{},{},{},{},{}",rtag_id, rcon_id, daemon_mode, pause, build_age, days_since_last_build  );
2140
 
2140
 
2141
                if ( pause <= 1 )
2141
                if ( pause <= 1 )
2142
                {
2142
                {
2143
                    retVal = true;
2143
                    retVal = true;
2144
                }
2144
                }
Line 2157... Line 2157...
2157
        catch ( SQLException e )
2157
        catch ( SQLException e )
2158
        {
2158
        {
2159
            handleSQLException(e, ":1");
2159
            handleSQLException(e, ":1");
2160
        }
2160
        }
2161
 
2161
 
2162
        mLogger.info("queryReleaseConfig 1 returning " + retVal);
2162
        mLogger.info("queryReleaseConfig 1 returning {}", retVal);
2163
        return retVal;
2163
        return retVal;
2164
    }
2164
    }
2165
 
2165
 
2166
    /**removes all elements from the mReleaseConfigCollection
2166
    /**removes all elements from the mReleaseConfigCollection
2167
     * handles database connection and disconnection
2167
     * handles database connection and disconnection
Line 2213... Line 2213...
2213
                int rcon_id = rset.mustGetInt("rcon_id");
2213
                int rcon_id = rset.mustGetInt("rcon_id");
2214
                
2214
                
2215
                char dm = 'S';          
2215
                char dm = 'S';          
2216
                String daemon_mode = rset.getString("daemon_mode","S");
2216
                String daemon_mode = rset.getString("daemon_mode","S");
2217
               
2217
               
2218
                mLogger.info("queryReleaseConfig 2 daemon_mode " + daemon_mode + ".");
2218
                mLogger.info("queryReleaseConfig 2 daemon_mode '{}'", daemon_mode);
2219
 
2219
 
2220
                if ( daemon_mode.compareTo("M") == 0 )
2220
                if ( daemon_mode.compareTo("M") == 0 )
2221
                {
2221
                {
2222
                    dm = 'M';
2222
                    dm = 'M';
2223
                }
2223
                }
Line 2271... Line 2271...
2271
     *  
2271
     *  
2272
     * Used by the BuildDaemon thread to determine daemons to start and stop
2272
     * Used by the BuildDaemon thread to determine daemons to start and stop
2273
     */
2273
     */
2274
    public void queryReleaseConfig(final String hostname) throws SQLException, Exception
2274
    public void queryReleaseConfig(final String hostname) throws SQLException, Exception
2275
    {
2275
    {
2276
        mLogger.debug("queryReleaseConfig 3 " + hostname);
2276
        mLogger.debug("queryReleaseConfig 3 {}", hostname);
2277
        mReleaseConfigCollection.resetData();
2277
        mReleaseConfigCollection.resetData();
2278
 
2278
 
2279
        try
2279
        try
2280
        {
2280
        {
2281
            connect();
2281
            connect();
Line 2314... Line 2314...
2314
                int rcon_id = rset.mustGetInt("rcon_id");
2314
                int rcon_id = rset.mustGetInt("rcon_id");
2315
 
2315
 
2316
                char dm = 'S';          
2316
                char dm = 'S';          
2317
                String daemon_mode = rset.getString("daemon_mode", "S");
2317
                String daemon_mode = rset.getString("daemon_mode", "S");
2318
 
2318
 
2319
                mLogger.info("queryReleaseConfig 3 daemon_mode " + daemon_mode + ".");
2319
                mLogger.info("queryReleaseConfig 3 daemon_mode '{}'", daemon_mode);
2320
 
2320
 
2321
                if ( daemon_mode.compareTo("M") == 0 )
2321
                if ( daemon_mode.compareTo("M") == 0 )
2322
                {
2322
                {
2323
                    dm = 'M';
2323
                    dm = 'M';
2324
                }
2324
                }
Line 2376... Line 2376...
2376
     *  Used by the Master and Slave Daemons 
2376
     *  Used by the Master and Slave Daemons 
2377
     *  Overridden in ReleaseManagerUtf 
2377
     *  Overridden in ReleaseManagerUtf 
2378
     */
2378
     */
2379
    public int queryMasterCount(final int rtag_id) throws SQLException, Exception
2379
    public int queryMasterCount(final int rtag_id) throws SQLException, Exception
2380
    {
2380
    {
2381
        mLogger.debug("queryMasterCount rtag_id " + rtag_id);
2381
        mLogger.debug("queryMasterCount rtag_id {}", rtag_id);
2382
 
2382
 
2383
        int masterCount = 0;
2383
        int masterCount = 0;
2384
        try
2384
        try
2385
        {
2385
        {
2386
            connect();
2386
            connect();
Line 2469... Line 2469...
2469
            disconnect();
2469
            disconnect();
2470
        }
2470
        }
2471
        return rv;
2471
        return rv;
2472
    }
2472
    }
2473
 
2473
 
2474
    /**in daemon mode
-
 
2475
     *  1 get planned package info
-
 
2476
     *     select pl.pv_id, p.pkg_id, p.pkg_name, pv.v_ext, pv.pkg_vcs_tag, pv.change_type
-
 
2477
     *     from release_manager.planned pl, release_manager.package_versions pv, release_manager.packages p
-
 
2478
     *     where pl.rtag_id=<mBaseline> and pv.build_type='A' and pv.dlocked='A'
-
 
2479
     *     and pv.pv_id=pl.pv_id and p.pkg_id=pv.pkg_id
-
 
2480
     *     order by pl.pv_id;
-
 
2481
     *  2 get planned package dependency info
-
 
2482
     *     select pl.pv_id, p.pkg_name, dpv.v_ext
-
 
2483
     *     from release_manager.planned pl, release_manager.package_versions pv, release_manager.package_dependencies pd, release_manager.package_versions dpv, release_manager.packages p
-
 
2484
     *     where pl.rtag_id=<mBaseline> and pv.build_type='A' and pv.dlocked='A'
-
 
2485
     *     and pv.pv_id = pl.pv_id and pd.pv_id=pl.pv_id and dpv.pv_id=pd.dpv_id and p.pkg_id=dpv.pkg_id
-
 
2486
     *     order by pl.pv_id;
-
 
2487
     *  3 get planned package build info
-
 
2488
     *     select pl.pv_id, bm.bm_name, bsa.bsa_name
-
 
2489
     *     from release_manager.planned pl, release_manager.package_versions pv, release_manager.package_build_info pbi, release_manager.build_machines bm, release_manager.build_standards_addendum bsa
-
 
2490
     *     where pl.rtag_id=<mBaseline> and pv.build_type='A' and pv.dlocked='A'
-
 
2491
     *     and pv.pv_id = pl.pv_id and pbi.pv_id=pv.pv_id and bm.bm_id=pbi.bm_id and bsa.bsa_id=pbi.bsa_id
-
 
2492
     *     order by pl.pv_id;
-
 
2493
     *  4 get planned package unit test info
-
 
2494
     *     select pl.pv_id, tt.test_type_name
-
 
2495
     *     from release_manager.planned pl, release_manager.package_versions pv, release_manager.unit_tests ut, release_manager.test_types tt
-
 
2496
     *     where pl.rtag_id=<mBaseline> and pv.build_type='A' and pv.dlocked='A'
-
 
2497
     *     and pv.pv_id = pl.pv_id and ut.pv_id=pv.pv_id and tt.test_type_id=ut.test_types_fk
-
 
2498
     *     order by pl.pv_id;
-
 
2499
     *  5 get planned package build failure info
-
 
2500
     *     select pl.pv_id, u.user_email
-
 
2501
     *     from release_manager.planned pl, release_manager.release_tags rt, release_manager.package_versions pv, release_manager.autobuild_failure af, release_manager.members_group mg, release_manager.users u
-
 
2502
     *     where pl.rtag_id=<mBaseline> and rt.rtag_id=pl.rtag_id and pv.build_type='A' and pv.dlocked='A'
-
 
2503
     *     and pv.pv_id = pl.pv_id and af.view_id=pl.view_id and mg.group_email_id=af.group_email_id and u.user_id=mg.user_id and af.proj_id=rt.proj_id
-
 
2504
     *     order by pl.pv_id;
-
 
2505
     *  6 get planned package do not ripple info
-
 
2506
     *     select pl.pv_id
-
 
2507
     *     from release_manager.planned pl, release_manager.package_versions pv, release_manager.do_not_ripple dnr
-
 
2508
     *     where pl.rtag_id=<mBaseline> and pv.build_type='A' and pv.dlocked='A'
-
 
2509
     *     and pv.pv_id = pl.pv_id and dnr.rtag_id=pl.rtag_id and dnr.pv_id=pl.pv_id
-
 
2510
     *     order by pl.pv_id;
-
 
2511
     *  7 get planned package advisory ripple info
-
 
2512
     *     select pl.pv_id
-
 
2513
     *     from release_manager.planned pl, release_manager.package_versions pv, release_manager.advisory_ripple ar
-
 
2514
     *     where pl.rtag_id=<mBaseline> and pv.build_type='A' and pv.dlocked='A'
-
 
2515
     *     and pv.pv_id = pl.pv_id and ar.rtag_id=pl.rtag_id and ar.pv_id=pl.pv_id
-
 
2516
     *     order by pl.pv_id;
-
 
2517
     *  8 get released package info
-
 
2518
     *     select rc.pv_id, p.pkg_id, p.pkg_name, pv.pkg_version, pv.v_ext, pv.pkg_vcs_tag, pv.ripple_field
-
 
2519
     *     pv.major_limit, pv.minor_limit, pv.patch_limit, pv.build_number_limit
-
 
2520
     *     from release_manager.release_content rc, release_manager.package_versions pv, release_manager.packages p
-
 
2521
     *     where rc.rtag_id=<mBaseline>
-
 
2522
     *     and pv.pv_id = rc.pv_id and p.pkg_id = pv.pkg_id
-
 
2523
     *     order by rc.pv_id;
-
 
2524
     *  9 get released package dependency info
-
 
2525
     *     select rc.pv_id, dpv.pv_id, p.pkg_name, dpv.v_ext
-
 
2526
     *     from release_manager.release_content rc, release_manager.package_versions pv, release_manager.package_dependencies pd, release_manager.package_versions dpv, release_manager.packages p
-
 
2527
     *     where rc.rtag_id=<mBaseline>
-
 
2528
     *     and pv.pv_id = rc.pv_id and pd.pv_id=pv.pv_id and dpv.pv_id=pd.dpv_id and p.pkg_id=dpv.pkg_id
-
 
2529
     *     order by rc.pv_id;
-
 
2530
     * 10 get released package build info
-
 
2531
     *     select rc.pv_id, bm.bm_name, bsa.bsa_name
-
 
2532
     *     from release_manager.release_content rc, release_manager.package_versions pv, release_manager.package_build_info pbi, release_manager.build_machines bm, release_manager.build_standards_addendum bsa
-
 
2533
     *     where rc.rtag_id=<mBaseline>
-
 
2534
     *     and pv.pv_id = rc.pv_id and pbi.pv_id=pv.pv_id and bm.bm_id=pbi.bm_id and bsa.bsa_id=pbi.bsa_id
-
 
2535
     *     order by rc.pv_id;
-
 
2536
     * 11 get released package unit test info
-
 
2537
     *     select rc.pv_id, tt.test_type_name
-
 
2538
     *     from release_manager.release_content rc, release_manager.package_versions pv, release_manager.unit_tests ut, release_manager.test_types tt
-
 
2539
     *     where rc.rtag_id=<mBaseline>
-
 
2540
     *     and pv.pv_id = rc.pv_id and ut.pv_id=pv.pv_id and tt.test_type_id=ut.test_types_fk
-
 
2541
     *     order by rc.pv_id;
-
 
2542
     * 12 get released package build failure email info
-
 
2543
     *     select rc.pv_id, u.user_email
-
 
2544
     *     from release_manager.release_content rc, release_manager.release_tags rt, release_manager.package_versions pv, release_manager.autobuild_failure af, release_manager.members_group mg, release_manager.users u
-
 
2545
     *     where rc.rtag_id=<mBaseline> and rt.rtag_id=rc.rtag_id
-
 
2546
     *     and pv.pv_id = rc.pv_id and af.view_id=rc.base_view_id and mg.group_email_id=af.group_email_id and u.user_id=mg.user_id and af.proj_id=rt.proj_id
-
 
2547
     *     order by rc.pv_id;
-
 
2548
     * 13 get released package do not ripple info
-
 
2549
     *     select rc.pv_id
-
 
2550
     *     from release_manager.release_content rc, release_manager.package_versions pv, release_manager.do_not_ripple dnr
-
 
2551
     *     where rc.rtag_id=<mBaseline>
-
 
2552
     *     and pv.pv_id = rc.pv_id and dnr.rtag_id=rc.rtag_id and dnr.pv_id=rc.pv_id
-
 
2553
     *     order by rc.pv_id;
-
 
2554
     * 14 get released advisory ripple info
-
 
2555
     *     select rc.pv_id
-
 
2556
     *     from release_manager.release_content rc, release_manager.package_versions pv, release_manager.advisory_ripple ar
-
 
2557
     *     where rc.rtag_id=<mBaseline>
-
 
2558
     *     and pv.pv_id = rc.pv_id and ar.rtag_id=rc.rtag_id and ar.pv_id=rc.pv_id
-
 
2559
     *     order by rc.pv_id;
-
 
2560
     *     
2474
    /**
2561
     * in escrow mode
-
 
2562
     *  1 get released product info
-
 
2563
     *     select oc.prod_id, p.pkg_name, pv.pkg_version, pv.v_ext, pv.pkg_vcs_tag
2475
     * Extract all package-version information for released packages
2564
     *     from deployment_manager.bom_contents bc, deployment_manager.operating_systems os, deployment_manager.os_contents oc, release_manager.package_versions pv, release_manager.packages p
-
 
2565
     *     where bc.bom_id=<mBaseline> and os.node_id=bc.node_id and oc.os_id=os.os_id and pv.pv_id=oc.prod_id and p.pkg_id=pv.pkg_id
-
 
2566
     *     order by oc.prod_id;
2476
     * Used in both Escrow and non-Escrow modes
2567
     *    this will generate a list of pv_ids associated with products
-
 
2568
     *    many in the list will reference cots products outside the scope of a escrow build
-
 
2569
     *  2 for each <pv_id>, call traverseDependencies( packageCollection, pv_id, false ) to traverse its set of dependencies
-
 
2570
     *  3 for each Package, call queryBuildInfo to get released package build info
-
 
2571
     *  
2477
     * 
2572
     * Supports
-
 
2573
     *    test_type_name="Autobuild UTF"
2478
     * @param   rippleEngine        - Instance to use
2574
     *    bm_name="Generic"|"Linux"|"Solaris"|"Win32"
2479
     * @param   packageCollection   - Package Collection structure to fill. Expected to be cleared
2575
     *    bsa_name="Debug"|"Production"|"Production and Debug"|"Java 1.4"|"Java 1.5"|"Java 1.6"
2480
     * @param   baseline            - RtagId of the release being processed, BomId of an Escrow being processed
2576
     *  
2481
     *  
2577
     * Overridden in ReleaseManagerUtf
2482
     * Overridden in ReleaseManagerUtf
2578
     *  
2483
     *  
2579
     */
2484
     */
2580
    
-
 
2581
    protected void queryPackageVersions(
-
 
2582
            RippleEngine rippleEngine, 
-
 
2583
            ArrayList<Package> packageCollection, 
-
 
2584
            int baseline) throws SQLException, Exception
2485
    protected void queryPackageVersions(RippleEngine rippleEngine, ArrayList<Package> packageCollection, int baseline) throws SQLException, Exception
2585
    {
2486
    {
2586
        Phase phase = new Phase("rmData");
2487
        Phase phase = new Phase("rmData");
2587
        mLogger.debug("queryPackageVersions " + mDaemon);
2488
        mLogger.debug("queryPackageVersions {}", mDaemon);
2588
 
2489
 
2589
        try
2490
        try
2590
        {
2491
        {
2591
            if (mDaemon)
2492
            if (mDaemon)
2592
            {
2493
            {
2593
                // Get planned package info
-
 
2594
                // Support multiple WIPS on the same package and build in the order they were released
-
 
2595
                // These are packages that are marked as pending build
-
 
2596
                //
-
 
2597
                mLogger.debug("queryPackageVersions: stmt1");
-
 
2598
                phase.setPhase("getPlannedPkgs1");
-
 
2599
                PreparedStatement stmt1 = mConnection.prepareStatement(
-
 
2600
                        "select pl.pv_id, p.pkg_id, p.pkg_name, pv.pkg_version, " +
-
 
2601
                                " pv.v_ext, pv.change_type, pv.ripple_field," +
-
 
2602
                                " pv.major_limit, pv.minor_limit, pv.patch_limit, pv.build_number_limit," +
-
 
2603
                                " pv.modified_stamp," +
-
 
2604
                                " release_manager.PK_RMAPI.return_vcs_tag(pl.pv_id) AS vcsTag" +
-
 
2605
                                " from release_manager.planned pl," +
-
 
2606
                                "      release_manager.package_versions pv," +
-
 
2607
                                "      release_manager.packages p" +
-
 
2608
                                " where pl.rtag_id=" + baseline +
-
 
2609
                                "   and pv.build_type='A' and pv.dlocked='A'" +
-
 
2610
                                "   and pv.pv_id=pl.pv_id and p.pkg_id=pv.pkg_id" +
-
 
2611
                                " order by pv.modified_stamp"
-
 
2612
                        );
-
 
2613
                stmt1.setFetchSize(500);
-
 
2614
                RmResultSet rset1 = new RmResultSet(stmt1.executeQuery(), "queryPackageVersions rset1");
-
 
2615
 
-
 
2616
                while( rset1.next() )
-
 
2617
                {
-
 
2618
                    int pv_id = rset1.mustGetKeyInt("pv_id");
-
 
2619
                    int pkg_id = rset1.mustGetInt("pkg_id");
-
 
2620
                    String pkg_name = rset1.mustGetString("pkg_name");
-
 
2621
                    String pkg_version = rset1.mustGetString("pkg_version");
-
 
2622
 
-
 
2623
                    // Previous Version of this package, without the project suffix
-
 
2624
                    String pkg_prevVersion = getBaseVersionNumber(pv_id);
-
 
2625
                    if ( pkg_prevVersion == null)
-
 
2626
                    {
-
 
2627
                        mLogger.error("queryPackageVersions. No Previous version" + pv_id);
-
 
2628
                        // show stopper
-
 
2629
                        throw new Exception("queryPackageVersions. No Previous version" + pv_id);
-
 
2630
                    }
-
 
2631
                    
-
 
2632
                    String v_ext = rset1.getString("v_ext","");
-
 
2633
                    String change_type = rset1.getString("change_type", "P");
-
 
2634
 
-
 
2635
                    char ct = 'x';
-
 
2636
 
-
 
2637
                    if ( change_type.compareTo("M") == 0 )
-
 
2638
                    {
-
 
2639
                        ct = 'M';
-
 
2640
                    }
-
 
2641
                    else if ( change_type.compareTo("N") == 0 )
-
 
2642
                    {
-
 
2643
                        ct = 'N';
-
 
2644
                    }
-
 
2645
                    else if ( change_type.compareTo("P") == 0 )
-
 
2646
                    {
-
 
2647
                        ct = 'P';
-
 
2648
                    }
-
 
2649
                    else if ( change_type.compareTo("F") == 0 )
-
 
2650
                    {
-
 
2651
                        ct = 'F';
-
 
2652
                    }
-
 
2653
 
-
 
2654
                    if ( ct != 'x' )
-
 
2655
                    {
-
 
2656
                        String ripple_field = rset1.getString("ripple_field", "b");
-
 
2657
                        int major_limit = rset1.getInt("major_limit", 0);
-
 
2658
                        int minor_limit = rset1.getInt("minor_limit",0);
-
 
2659
                        int patch_limit = rset1.getInt("patch_limit",0);
-
 
2660
                        int build_number_limit = rset1.getInt("build_number_limit",0);
-
 
2661
                        String vcs_tag = rset1.getString("vcsTag", "");
-
 
2662
 
-
 
2663
                        Package p = new Package(pkg_id, pv_id, pkg_name, pkg_version, v_ext, pkg_name + v_ext, vcs_tag, ripple_field.charAt(0), ct);
-
 
2664
                        p.mDirectlyPlanned = true;
-
 
2665
                        p.mBuildReason = BuildReason.NewVersion;
-
 
2666
                        p.mMajorLimit = major_limit;
-
 
2667
                        p.mMinorLimit = minor_limit;
-
 
2668
                        p.mPatchLimit = patch_limit;
-
 
2669
                        p.mBuildLimit = build_number_limit;
-
 
2670
                        p.mPrevVersion = pkg_prevVersion;
-
 
2671
 
-
 
2672
                        Package prevPlannedPackage = findPackage(p.mAlias, packageCollection);
-
 
2673
 
-
 
2674
                        // If there are multiple packages with the same Alias, then only the first one
-
 
2675
                        // will be placed in the build set. The will be the oldest, the first one released
-
 
2676
                        // to be built
-
 
2677
                        if ( prevPlannedPackage == NULL_PACKAGE )
-
 
2678
                        {
-
 
2679
                            mLogger.info("queryPackageVersions rset1 no previous planned package " + pv_id);
-
 
2680
                            packageCollection.add(p);
-
 
2681
                        }
-
 
2682
                    }
-
 
2683
                }
-
 
2684
 
-
 
2685
                rset1.close();
-
 
2686
                stmt1.close();
-
 
2687
 
-
 
2688
                // get planned package dependency info
-
 
2689
                mLogger.debug("queryPackageVersions: stmt2");
-
 
2690
                phase.setPhase("getPlannedPkgs2");
-
 
2691
                PreparedStatement stmt2 = mConnection.prepareStatement(
-
 
2692
                        "select pl.pv_id, p.pkg_name, dpv.v_ext, pv.modified_stamp " +
-
 
2693
                                "from release_manager.planned pl,"+
-
 
2694
                                "     release_manager.package_versions pv,"+
-
 
2695
                                "     release_manager.package_dependencies pd," +
-
 
2696
                                "     release_manager.package_versions dpv,"+
-
 
2697
                                "     release_manager.packages p " +
-
 
2698
                                " where pl.rtag_id=" + baseline + 
-
 
2699
                                "  and pv.build_type='A'"+
-
 
2700
                                "  and pv.dlocked='A' " +
-
 
2701
                                "  and pv.pv_id = pl.pv_id"+
-
 
2702
                                "  and pd.pv_id=pl.pv_id"+
-
 
2703
                                "  and dpv.pv_id=pd.dpv_id"+
-
 
2704
                                "  and p.pkg_id=dpv.pkg_id " +
-
 
2705
                                " order by pv.modified_stamp"
-
 
2706
                        );
-
 
2707
                stmt2.setFetchSize(500);
-
 
2708
                RmResultSet rset2 = new RmResultSet(stmt2.executeQuery(), "queryPackageVersions rset2");
-
 
2709
 
-
 
2710
                while( rset2.next() )
-
 
2711
                {
-
 
2712
                    boolean ignore = false;
-
 
2713
 
-
 
2714
                    int pv_id = rset2.mustGetKeyInt("pv_id");
-
 
2715
                    Package p = findPackage(pv_id, packageCollection);
-
 
2716
 
-
 
2717
                    if ( p == NULL_PACKAGE )
-
 
2718
                    {
-
 
2719
                        mLogger.info("queryPackageVersions rset2 package superceded by planned " + pv_id);
-
 
2720
                        ignore = true;
-
 
2721
                    }
-
 
2722
 
-
 
2723
                    String pkg_name = rset2.mustGetString("pkg_name");
-
 
2724
                    String v_ext = rset2.getString("v_ext","");
-
 
2725
                    if ( !ignore )
-
 
2726
                    {
-
 
2727
                        p.mDependencyCollection.add(pkg_name + v_ext);
-
 
2728
                        p.mDependencyIDCollection.add(-1);
-
 
2729
                    }
-
 
2730
                }
-
 
2731
 
-
 
2732
                rset2.close();
-
 
2733
                stmt2.close();
-
 
2734
 
-
 
2735
                // get planned package build info
-
 
2736
                mLogger.debug("queryPackageVersions: stmt3");
-
 
2737
                phase.setPhase("getPlannedPkgs3");
-
 
2738
                PreparedStatement stmt3 = mConnection.prepareStatement(
-
 
2739
                        "select pl.pv_id, bm.bm_name, bsa.bsa_name, pv.modified_stamp " +
-
 
2740
                                "from release_manager.planned pl," +
-
 
2741
                                "     release_manager.package_versions pv," +
-
 
2742
                                "     release_manager.package_build_info pbi," +
-
 
2743
                                "     release_manager.build_machines bm," +
-
 
2744
                                "     release_manager.build_standards_addendum bsa " +
-
 
2745
                                "where pl.rtag_id=" + baseline + 
-
 
2746
                                "     and pv.build_type='A' and pv.dlocked='A' " +
-
 
2747
                                "     and pv.pv_id = pl.pv_id" +
-
 
2748
                                "     and pbi.pv_id=pv.pv_id" +
-
 
2749
                                "     and bm.bm_id=pbi.bm_id" +
-
 
2750
                                "     and bsa.bsa_id=pbi.bsa_id " +
-
 
2751
                                "order by pv.modified_stamp"
-
 
2752
                        );
-
 
2753
                stmt3.setFetchSize(500);
-
 
2754
                RmResultSet rset3 = new RmResultSet(stmt3.executeQuery(), "queryPackageVersions rset3");
-
 
2755
 
-
 
2756
                while( rset3.next() )
-
 
2757
                {
-
 
2758
                    boolean ignore = false;
-
 
2759
                    int pv_id = rset3.mustGetKeyInt("pv_id");
-
 
2760
 
-
 
2761
                    Package p = findPackage(pv_id, packageCollection);
-
 
2762
                    if ( p == NULL_PACKAGE )
-
 
2763
                    {
-
 
2764
                        mLogger.info("queryPackageVersions rset3 package superceded by planned " + pv_id);
-
 
2765
                        ignore = true;
-
 
2766
                    }
-
 
2767
 
-
 
2768
                    String bm_name = rset3.mustGetString("bm_name");
-
 
2769
                    String bsa_name = rset3.mustGetString("bsa_name");
-
 
2770
 
-
 
2771
                    if ( !ignore )
-
 
2772
                    {
-
 
2773
                        BuildStandard bs = new BuildStandard(rippleEngine, bm_name, bsa_name);
-
 
2774
                        if ( bs.supportedBuildStandard() )
-
 
2775
                        {
-
 
2776
                            p.mBuildStandardCollection.add(bs);
-
 
2777
                        }
-
 
2778
                    }
-
 
2779
                }
-
 
2780
 
-
 
2781
                rset3.close();
-
 
2782
                stmt3.close();
-
 
2783
 
-
 
2784
                // get planned package unit test info
-
 
2785
                mLogger.debug("queryPackageVersions: stmt4");
-
 
2786
                phase.setPhase("getPlannedPkgs4");
-
 
2787
                PreparedStatement stmt4 = mConnection.prepareStatement(
-
 
2788
                        "select pl.pv_id, tt.test_type_name, pv.modified_stamp" +
-
 
2789
                        "  from release_manager.planned pl,"+
-
 
2790
                        "       release_manager.package_versions pv,"+
-
 
2791
                        "       release_manager.unit_tests ut," +
-
 
2792
                        "       release_manager.test_types tt" +
-
 
2793
                        " where pl.rtag_id=" + baseline + 
-
 
2794
                        "   and pv.build_type='A'" +
-
 
2795
                        "   and pv.dlocked='A'" +
-
 
2796
                        "  and pv.pv_id = pl.pv_id" +
-
 
2797
                        "  and ut.pv_id=pv.pv_id" +
-
 
2798
                        "  and tt.test_type_id=ut.test_types_fk" +
-
 
2799
                        " order by pv.modified_stamp"
-
 
2800
                        );
-
 
2801
                stmt4.setFetchSize(500);
-
 
2802
                RmResultSet rset4 = new RmResultSet(stmt4.executeQuery(), "queryPackageVersions rset4");
-
 
2803
 
-
 
2804
                while( rset4.next() )
-
 
2805
                {
-
 
2806
                    boolean ignore = false;
-
 
2807
 
-
 
2808
                    int pv_id = rset4.mustGetKeyInt("pv_id");
-
 
2809
                    Package p = findPackage(pv_id, packageCollection);
-
 
2810
                    if ( p == NULL_PACKAGE )
-
 
2811
                    {
-
 
2812
                        mLogger.info("queryPackageVersions rset4 package superceded by planned " + pv_id);
-
 
2813
                        ignore = true;
-
 
2814
                    }
-
 
2815
 
-
 
2816
                    String test_type_name = rset4.mustGetString("test_type_name");
-
 
2817
                    if ( !ignore )
-
 
2818
                    {
-
 
2819
                        if ( test_type_name.compareTo("Autobuild UTF") == 0 )
-
 
2820
                        {
-
 
2821
                            p.mHasAutomatedUnitTests = true;
-
 
2822
                        }
-
 
2823
                    }
-
 
2824
                }
-
 
2825
 
-
 
2826
                rset4.close();
-
 
2827
                stmt4.close();
-
 
2828
 
-
 
2829
                // get planned package build failure info...
-
 
2830
                //      view based
-
 
2831
                mLogger.debug("queryPackageVersions: stmt5");
-
 
2832
                phase.setPhase("getPlannedPkgs6");
-
 
2833
                PreparedStatement stmt5 = mConnection.prepareStatement(
-
 
2834
                        "select pl.pv_id, u.user_email, pv.modified_stamp " +
-
 
2835
                                " from release_manager.planned pl, " +
-
 
2836
                                "      release_manager.release_tags rt, " +
-
 
2837
                                "      release_manager.package_versions pv, " +
-
 
2838
                                "      release_manager.autobuild_failure af, " +
-
 
2839
                                "      release_manager.members_group mg, " +
-
 
2840
                                "      release_manager.users u " +
-
 
2841
                                " where pl.rtag_id=" + baseline + 
-
 
2842
                                "      and rt.rtag_id=pl.rtag_id" +
-
 
2843
                                "      and pv.build_type='A' and pv.dlocked='A' " +
-
 
2844
                                "      and pv.pv_id = pl.pv_id " +
-
 
2845
                                "      and af.view_id=pl.view_id " +
-
 
2846
                                "      and mg.group_email_id=af.group_email_id " +
-
 
2847
                                "      and u.user_id=mg.user_id " +
-
 
2848
                                "      and af.proj_id=rt.proj_id " +
-
 
2849
                                " order by pv.modified_stamp"
-
 
2850
                        );
-
 
2851
                stmt5.setFetchSize(500);
-
 
2852
                RmResultSet rset5 = new RmResultSet(stmt5.executeQuery(), "queryPackageVersions rset5");
-
 
2853
 
-
 
2854
                while( rset5.next() )
-
 
2855
                {
-
 
2856
                    int pv_id = rset5.mustGetKeyInt("pv_id");
-
 
2857
                    Package p = findPackage(pv_id, packageCollection);
-
 
2858
                    if ( p == NULL_PACKAGE )
-
 
2859
                    {
-
 
2860
                        mLogger.info("queryPackageVersions rset5 package superceded by planned " + pv_id);
-
 
2861
                    }
-
 
2862
                    else
-
 
2863
                    {
-
 
2864
                        String user_email = rset5.getString("user_email", null);
-
 
2865
                        if ( user_email != null )
-
 
2866
                        {
-
 
2867
                            p.addEmail(user_email);
-
 
2868
                        }
-
 
2869
                    }
-
 
2870
                }
-
 
2871
 
-
 
2872
                rset5.close();
-
 
2873
                stmt5.close();
-
 
2874
 
-
 
2875
                // get planned package build failure info...
-
 
2876
                // package version
-
 
2877
                mLogger.debug("queryPackageVersions: stmt6");
-
 
2878
                phase.setPhase("getPlannedPkgs7");
-
 
2879
                PreparedStatement stmt6 = mConnection.prepareStatement(
-
 
2880
                        "select pl.pv_id, u1.user_email, u2.user_email, u3.user_email, pv.modified_stamp" +
-
 
2881
                        " from release_manager.planned pl," +
-
 
2882
                        "      release_manager.release_tags rt," +
-
 
2883
                        "      release_manager.package_versions pv," +
-
 
2884
                        "      release_manager.users u1," +
-
 
2885
                        "      release_manager.users u2," +
-
 
2886
                        "      release_manager.users u3 " +
-
 
2887
                        " where pl.rtag_id=" + baseline + 
-
 
2888
                        "   and rt.rtag_id=pl.rtag_id" +
-
 
2889
                        "   and pv.build_type='A'" +
-
 
2890
                        "   and pv.dlocked='A' " +
-
 
2891
                        "   and pv.pv_id = pl.pv_id" +
-
 
2892
                        "   and u1.user_id=pv.creator_id" +
-
 
2893
                        "   and u2.user_id=pv.owner_id" +
-
 
2894
                        "   and u3.user_id=pv.modifier_id" +
-
 
2895
                        "   order by pv.modified_stamp"
-
 
2896
                        );
-
 
2897
                stmt6.setFetchSize(500);
-
 
2898
                RmResultSet rset6 = new RmResultSet(stmt6.executeQuery(), "queryPackageVersions rset6");
-
 
2899
 
-
 
2900
                while( rset6.next() )
-
 
2901
                {
-
 
2902
                    int pv_id = rset6.mustGetKeyInt("pv_id");
-
 
2903
                    Package p = findPackage(pv_id, packageCollection);
-
 
2904
                    if ( p == NULL_PACKAGE )
-
 
2905
                    {
-
 
2906
                        mLogger.info("queryPackageVersions rset6 package superceded by planned " + pv_id);
-
 
2907
                    }
-
 
2908
                    else
-
 
2909
                    {
-
 
2910
 
-
 
2911
                        // walk the 3 columns of user_email in the resultset
-
 
2912
                        // columns 2, 3 and 4, all of the same name, respectively
-
 
2913
                        for(int column=2; column<5; column++ )
-
 
2914
                        {
-
 
2915
                            String user_email = rset6.getString(column,null);
-
 
2916
                            if ( user_email != null )
-
 
2917
                            {
-
 
2918
                                p.addEmail(user_email);
-
 
2919
                            }
-
 
2920
                        }
-
 
2921
                    }
-
 
2922
                }
-
 
2923
 
-
 
2924
                rset6.close();
-
 
2925
                stmt6.close();
-
 
2926
 
-
 
2927
                // get planned package advisory ripple info
-
 
2928
                mLogger.debug("queryPackageVersions: stmt7");
-
 
2929
                phase.setPhase("getPlannedPkgs8");
-
 
2930
                PreparedStatement stmt7 = mConnection.prepareStatement(
-
 
2931
                        "select pl.pv_id, pv.modified_stamp " +
-
 
2932
                        " from release_manager.planned pl," +
-
 
2933
                        "      release_manager.package_versions pv," +
-
 
2934
                        "      release_manager.advisory_ripple ar " +
-
 
2935
                        " where pl.rtag_id=" + baseline + 
-
 
2936
                        "   and pv.build_type='A'" +
-
 
2937
                        "    and pv.dlocked='A' " +
-
 
2938
                        "    and pv.pv_id = pl.pv_id" +
-
 
2939
                        "    and ar.rtag_id=pl.rtag_id" +
-
 
2940
                        "    and ar.pv_id=pl.pv_id " +
-
 
2941
                        " order by pv.modified_stamp"
-
 
2942
                        );
-
 
2943
                stmt7.setFetchSize(500);
-
 
2944
                RmResultSet rset7 = new RmResultSet(stmt7.executeQuery(), "queryPackageVersions rset7");
-
 
2945
 
-
 
2946
                while( rset7.next() )
-
 
2947
                {
-
 
2948
                    boolean ignore = false;
-
 
2949
 
-
 
2950
                    int pv_id = rset7.mustGetInt("pv_id");
-
 
2951
                    Package p = findPackage(pv_id, packageCollection);
-
 
2952
                    if ( p == NULL_PACKAGE )
-
 
2953
                    {
-
 
2954
                        mLogger.info("queryPackageVersions rset7 package superceded by planned " + pv_id);
-
 
2955
                        ignore = true;
-
 
2956
                    }
-
 
2957
 
-
 
2958
                    if ( !ignore )
-
 
2959
                    {
-
 
2960
                        p.mAdvisoryRipple = true;
-
 
2961
                    }
-
 
2962
                }
-
 
2963
 
-
 
2964
                rset7.close();
-
 
2965
                stmt7.close();
-
 
2966
                
-
 
2967
                //  Process Scheduled Build Approvals. OpCode is 2
-
 
2968
                //      These are treated as requests to not-include a 'Pending' package-version in the current build set
-
 
2969
                //      If there is an un-expired instruction, then remove the pending package-version from the build set
-
 
2970
                //
-
 
2971
                //  Process all expired requests
-
 
2972
                //      These are scheduled builds were the scheduled time has been exceeded
-
 
2973
                //      Simply discard the instruction and let the Approved build proceed
-
 
2974
                //
-
 
2975
                DaemonInstruction di = new DaemonInstruction(baseline, 2, true);
-
 
2976
              
-
 
2977
                phase.setPhase("removeOldSchedBuilds");
-
 
2978
                while ( getDaemonInst( di ) )
-
 
2979
                {
-
 
2980
                    markDaemonInstCompleted(di.instruction);
-
 
2981
                    mLogger.info("queryPackageVersions remove Scheduled Build Approvals " + di.pvId);
-
 
2982
                }
-
 
2983
                
-
 
2984
                phase.setPhase("getSchedBuilds");
-
 
2985
                di = new DaemonInstruction(baseline, 2, false);
-
 
2986
                while ( getDaemonInst( di ) )
-
 
2987
                {
-
 
2988
                    Package p = findPackage(di.pvId, packageCollection);
-
 
2989
 
-
 
2990
                    if ( p != NULL_PACKAGE )
-
 
2991
                    {
-
 
2992
                        mLogger.info("queryPackageVersions Scheduled Build Approvals " + di.pvId);
-
 
2993
                        packageCollection.remove(p);
-
 
2994
                    }
-
 
2995
                    else
-
 
2996
                    {
-
 
2997
                        // discard - the package no longer exists
-
 
2998
                        markDaemonInstCompleted( di.instruction );
-
 
2999
                        mLogger.info("queryPackageVersions remove Scheduled Build Approvals for nonexistent package " + di.pvId);
-
 
3000
                    }
-
 
3001
                }                
-
 
3002
 
-
 
3003
                // get released package info
-
 
3004
                //    Get package information on ALL released packages within the release of interest
2494
                // Get package information on ALL released packages within the release of interest
3005
                //
2495
                //
3006
                mLogger.debug("queryPackageVersions: stmt8");
2496
                mLogger.debug("queryPackageVersions: stmt8");
3007
                phase.setPhase("getAllPkgs1");
2497
                phase.setPhase("getAllPkgs1");
3008
                PreparedStatement stmt8 = mConnection.prepareStatement(
2498
                PreparedStatement stmt8 = mConnection.prepareStatement(
3009
                        "SELECT rc.pv_id," +
2499
                        "SELECT rc.pv_id," +
3010
                                "  p.pkg_id," +
2500
                                " p.pkg_id," +
3011
                                "  p.pkg_name," +
2501
                                " p.pkg_name," +
3012
                                "  pv.pkg_version," +
2502
                                " pv.pkg_version," +
3013
                                "  pv.v_ext," +
2503
                                " pv.v_ext," +
3014
                                "  pv.ripple_field," +
2504
                                " pv.ripple_field," +
3015
                                "  pv.major_limit," +
2505
                                " pv.major_limit," +
3016
                                "  pv.minor_limit," +
2506
                                " pv.minor_limit," +
3017
                                "  pv.patch_limit," +
2507
                                " pv.patch_limit," +
3018
                                "  pv.build_number_limit," +
2508
                                " pv.build_number_limit," +
3019
                                "  pv.build_type," +
2509
                                " pv.build_type," +
3020
                                "  rc.sdktag_id," +
2510
                                " rc.sdktag_id," +
3021
                                "  rc.ripple_stop," +
2511
                                " rc.ripple_stop," +
3022
                                "  peg.pv_id as pegged," +
2512
                                " peg.pv_id as pegged," +
3023
                                "  release_manager.PK_RMAPI.return_vcs_tag(rc.pv_id) AS vcsTag" +
2513
                                " release_manager.PK_RMAPI.return_vcs_tag(rc.pv_id) AS vcsTag," +
-
 
2514
                                " pv.build_time" +
3024
                                " FROM release_manager.release_content rc," +
2515
                                " FROM release_manager.release_content rc," +
3025
                                "  release_manager.package_versions pv," +
2516
                                "  release_manager.package_versions pv," +
3026
                                "  release_manager.packages p," +
2517
                                "  release_manager.packages p," +
3027
                                "  release_manager.pegged_versions peg" +
2518
                                "  release_manager.pegged_versions peg" +
3028
                                " WHERE rc.rtag_id= " + baseline +
2519
                                " WHERE rc.rtag_id= " + baseline +
Line 3052... Line 2543...
3052
                    String vcs_tag = rset8.getString("vcsTag","");
2543
                    String vcs_tag = rset8.getString("vcsTag","");
3053
                    int isAnSdk = rset8.getInt("sdktag_id",0); 
2544
                    int isAnSdk = rset8.getInt("sdktag_id",0); 
3054
                    int isPegged = rset8.getInt("pegged",0);
2545
                    int isPegged = rset8.getInt("pegged",0);
3055
                    String buildType = rset8.getString("build_type", null);
2546
                    String buildType = rset8.getString("build_type", null);
3056
                    boolean isBuildable = ( buildType != null ) && (buildType.equals("A") || buildType.equals("Y") );
2547
                    boolean isBuildable = ( buildType != null ) && (buildType.equals("A") || buildType.equals("Y") );
-
 
2548
                    int buildTime = rset8.getInt("build_time", 60);
3057
                    
2549
                    
3058
                    String rippleStopData = rset8.getString("ripple_stop","n");
2550
                    String rippleStopData = rset8.getString("ripple_stop","n");
3059
                    char rippleStop = rippleStopData.charAt(0);
2551
                    char rippleStop = rippleStopData.charAt(0);
3060
 
2552
 
3061
                    Package p = new Package(pkg_id, pv_id, pkg_name, pkg_version, v_ext, pkg_name + v_ext, vcs_tag, ripple_field.charAt(0));
2553
                    Package p = new Package(pkg_id, pv_id, pkg_name, pkg_version, v_ext, pkg_name + v_ext, vcs_tag, ripple_field.charAt(0));
Line 3065... Line 2557...
3065
                    p.mBuildLimit = build_number_limit;
2557
                    p.mBuildLimit = build_number_limit;
3066
                    p.mIsSdk = isAnSdk > 0;
2558
                    p.mIsSdk = isAnSdk > 0;
3067
                    p.mIsPegged = isPegged > 0;
2559
                    p.mIsPegged = isPegged > 0;
3068
                    p.mIsBuildable = isBuildable;
2560
                    p.mIsBuildable = isBuildable;
3069
                    p.mRippleStop = rippleStop;
2561
                    p.mRippleStop = rippleStop;
3070
                    
-
 
3071
                    Integer ipv_id = Integer.valueOf(pv_id);
2562
                    p.mBuildTime = buildTime;
3072
                    rippleEngine.mReleasedPvIDCollection.add(ipv_id);
-
 
3073
                    
2563
                    
3074
                    //  If this package is to be replaced by a planned package then
2564
                    //  If this package is to be replaced by a planned package then
3075
                    //  insert some of the current packages attributes
2565
                    //  insert some of the current packages attributes
3076
                    //  Otherwise, add the the package to the package collection
2566
                    //  Otherwise, add the the package to the package collection
3077
                    //
2567
                    //
-
 
2568
//TODO Sort out this bit of logic                    
3078
                    Package plannedPackage = findPackage(p.mAlias, packageCollection);
2569
                    Package plannedPackage = findPackage(p.mAlias, packageCollection);
3079
                    if ( plannedPackage == NULL_PACKAGE )
2570
                    if ( plannedPackage == NULL_PACKAGE )
3080
                    {
2571
                    {
3081
                        mLogger.info("queryPackageVersions rset8 no planned package " + pv_id);
2572
                        mLogger.info("queryPackageVersions rset8 no planned package {}", pv_id);
3082
                        packageCollection.add(p);
2573
                        packageCollection.add(p);
3083
                    }
2574
                    }
3084
                    else
2575
                    else
3085
                    {
2576
                    {
3086
                        //  Copy these flags from the package that will be replaced
2577
                        //  Copy these flags from the package that will be replaced
Line 3119... Line 2610...
3119
                RmResultSet rset9 = new RmResultSet(stmt9.executeQuery(), "queryPackageVersions rset9");
2610
                RmResultSet rset9 = new RmResultSet(stmt9.executeQuery(), "queryPackageVersions rset9");
3120
                mLogger.debug("queryPackageVersions: stmt9 query done");
2611
                mLogger.debug("queryPackageVersions: stmt9 query done");
3121
 
2612
 
3122
                while( rset9.next() )
2613
                while( rset9.next() )
3123
                {
2614
                {
3124
                    boolean ignore = false;
-
 
3125
 
-
 
3126
                    int pv_id = rset9.mustGetKeyInt("pv_id");
2615
                    int pv_id = rset9.mustGetKeyInt("pv_id");
3127
                    int dpv_id = rset9.mustGetInt("dpv_id");
2616
                    int dpv_id = rset9.mustGetInt("dpv_id");
3128
                    Package p = findPackage(pv_id, packageCollection);
-
 
3129
 
-
 
3130
                    if ( p == NULL_PACKAGE )
-
 
3131
                    {
-
 
3132
                        mLogger.info("queryPackageVersions rset9 package superceded by planned " + pv_id);
-
 
3133
                        ignore = true;
-
 
3134
                    }
-
 
3135
 
-
 
3136
                    String pkg_name = rset9.mustGetString("pkg_name");
2617
                    String pkg_name = rset9.mustGetString("pkg_name");
3137
                    String v_ext = rset9.getString("v_ext","");
2618
                    String v_ext = rset9.getString("v_ext","");
3138
 
2619
 
-
 
2620
                    Package p = findPackage(pv_id, packageCollection);
3139
                    if ( !ignore )
2621
                    if ( p != NULL_PACKAGE )
3140
                    {
2622
                    {
3141
                        p.mDependencyCollection.add(pkg_name + v_ext);
2623
                        p.mDependencyCollection.add(pkg_name + v_ext);
3142
                        p.mDependencyIDCollection.add(dpv_id);
2624
                        p.mDependencyIDCollection.add(dpv_id);
3143
                    }
2625
                    }
-
 
2626
 
3144
                }
2627
                }
3145
                mLogger.debug("queryPackageVersions: stmt9 processing complete");
2628
                mLogger.debug("queryPackageVersions: stmt9 processing complete");
3146
 
2629
 
3147
                rset9.close();
2630
                rset9.close();
3148
                stmt9.close();
2631
                stmt9.close();
Line 3168... Line 2651...
3168
                stmt10.setInt(1, baseline);
2651
                stmt10.setInt(1, baseline);
3169
                RmResultSet rset10 = new RmResultSet(stmt10.executeQuery(), "queryPackageVersions rset10");
2652
                RmResultSet rset10 = new RmResultSet(stmt10.executeQuery(), "queryPackageVersions rset10");
3170
 
2653
 
3171
                while( rset10.next() )
2654
                while( rset10.next() )
3172
                {
2655
                {
3173
                    boolean ignore = false;
-
 
3174
                    int pv_id = rset10.mustGetKeyInt("pv_id");
2656
                    int pv_id = rset10.mustGetKeyInt("pv_id");
3175
                    Package p = findPackage(pv_id, packageCollection);
-
 
3176
                    if ( p == NULL_PACKAGE )
-
 
3177
                    {
-
 
3178
                        mLogger.info("queryPackageVersions rset10 package superceded by planned " + pv_id);
-
 
3179
                        ignore = true;
-
 
3180
                    }
-
 
3181
 
-
 
3182
                    String bm_name = rset10.mustGetString("bm_name");
2657
                    String bm_name = rset10.mustGetString("bm_name");
3183
                    String bsa_name = rset10.mustGetString("bsa_name");
2658
                    String bsa_name = rset10.mustGetString("bsa_name");
3184
 
2659
 
-
 
2660
                    Package p = findPackage(pv_id, packageCollection);
3185
                    if ( !ignore )
2661
                    if ( p != NULL_PACKAGE )
3186
                    {
2662
                    {
3187
                        BuildStandard bs = new BuildStandard(rippleEngine, bm_name, bsa_name);
2663
                        BuildStandard bs = new BuildStandard(rippleEngine, bm_name, bsa_name);
3188
 
-
 
3189
                        if ( bs.supportedBuildStandard() )
2664
                        if ( bs.supportedBuildStandard() )
3190
                        {
2665
                        {
3191
                            p.mBuildStandardCollection.add(bs);
2666
                            p.mBuildStandardCollection.add(bs);
3192
                        }
2667
                        }
3193
                    }
2668
                    }
Line 3209... Line 2684...
3209
                stmt11.setFetchSize(1000);
2684
                stmt11.setFetchSize(1000);
3210
                RmResultSet rset11 = new RmResultSet(stmt11.executeQuery(), "queryPackageVersions rset11");
2685
                RmResultSet rset11 = new RmResultSet(stmt11.executeQuery(), "queryPackageVersions rset11");
3211
 
2686
 
3212
                while( rset11.next() )
2687
                while( rset11.next() )
3213
                {
2688
                {
3214
                    boolean ignore = false;
-
 
3215
 
-
 
3216
                    int pv_id = rset11.mustGetKeyInt("pv_id");
2689
                    int pv_id = rset11.mustGetKeyInt("pv_id");
3217
                    Package p = findPackage(pv_id, packageCollection);
-
 
3218
                    if ( p == NULL_PACKAGE )
-
 
3219
                    {
-
 
3220
                        mLogger.info("queryPackageVersions rset11 package superceded by planned " + pv_id);
-
 
3221
                        ignore = true;
-
 
3222
                    }
-
 
3223
 
-
 
3224
                    String test_type_name = rset11.mustGetString("test_type_name");
2690
                    String test_type_name = rset11.mustGetString("test_type_name");
-
 
2691
                    Package p = findPackage(pv_id, packageCollection);
3225
                    if ( !ignore )
2692
                    if ( p != NULL_PACKAGE )
3226
                    {
2693
                    {
3227
                        if ( test_type_name.compareTo("Autobuild UTF") == 0 )
2694
                        if ( test_type_name.compareTo("Autobuild UTF") == 0 )
3228
                        {
2695
                        {
3229
                            p.mHasAutomatedUnitTests = true;
2696
                            p.mHasAutomatedUnitTests = true;
3230
                        }
2697
                        }
Line 3260... Line 2727...
3260
                RmResultSet rset12 = new RmResultSet(stmt12.executeQuery(), "queryPackageVersions rset12");
2727
                RmResultSet rset12 = new RmResultSet(stmt12.executeQuery(), "queryPackageVersions rset12");
3261
 
2728
 
3262
                while( rset12.next() )
2729
                while( rset12.next() )
3263
                {
2730
                {
3264
                    int pv_id = rset12.mustGetKeyInt("pv_id");
2731
                    int pv_id = rset12.mustGetKeyInt("pv_id");
-
 
2732
                    String user_email = rset12.getString("user_email",null);
3265
                    Package p = findPackage(pv_id, packageCollection);
2733
                    Package p = findPackage(pv_id, packageCollection);
3266
 
2734
 
3267
                    if ( p == NULL_PACKAGE )
2735
                    if ( p != NULL_PACKAGE )
3268
                    {
2736
                    {
3269
                        mLogger.info("queryPackageVersions rset12 package superceded by planned " + pv_id);
-
 
3270
                    }
-
 
3271
                    else
-
 
3272
                    {
-
 
3273
                        String user_email = rset12.getString("user_email",null);
-
 
3274
 
-
 
3275
                        if ( user_email != null )
-
 
3276
                        {
-
 
3277
                            p.addEmail(user_email);
2737
                        p.addEmail(user_email);
3278
                        }
-
 
3279
                    }
2738
                    }
3280
                }
2739
                }
3281
 
2740
 
3282
                rset12.close();
2741
                rset12.close();
3283
                stmt12.close();
2742
                stmt12.close();
Line 3295... Line 2754...
3295
                stmt14.setFetchSize(1000);
2754
                stmt14.setFetchSize(1000);
3296
                RmResultSet rset14 = new RmResultSet(stmt14.executeQuery(), "queryPackageVersions rset14");
2755
                RmResultSet rset14 = new RmResultSet(stmt14.executeQuery(), "queryPackageVersions rset14");
3297
 
2756
 
3298
                while( rset14.next() )
2757
                while( rset14.next() )
3299
                {
2758
                {
3300
                    boolean ignore = false;
-
 
3301
 
-
 
3302
                    int pv_id = rset14.mustGetInt("pv_id");
2759
                    int pv_id = rset14.mustGetInt("pv_id");
3303
                    Package p = findPackage(pv_id, packageCollection);
2760
                    Package p = findPackage(pv_id, packageCollection);
3304
                    if ( p == NULL_PACKAGE )
2761
                    if ( p != NULL_PACKAGE )
3305
                    {
-
 
3306
                        mLogger.info("queryPackageVersions rset14 package superceded by planned " + pv_id);
-
 
3307
                        ignore = true;
-
 
3308
                    }
-
 
3309
 
-
 
3310
                    if ( !ignore )
-
 
3311
                    {
2762
                    {
3312
                        p.mAdvisoryRipple = true;
2763
                        p.mAdvisoryRipple = true;
3313
                    }
2764
                    }
3314
                }
2765
                }
3315
 
2766
 
3316
                rset14.close();
2767
                rset14.close();
3317
                stmt14.close();
2768
                stmt14.close();
3318
 
-
 
3319
                // Daemon Instruction: Force Package Ripple
-
 
3320
                //  An op code of 0 means force ripple
-
 
3321
 
-
 
3322
                phase.setPhase("getDaemonInstructions1");
-
 
3323
                di = new DaemonInstruction( baseline, 0, true);
-
 
3324
                while ( getDaemonInst( di ) )
-
 
3325
                {
-
 
3326
                    Package p = findPackage(di.pvId, packageCollection);
-
 
3327
 
-
 
3328
                    if ( p != NULL_PACKAGE )
-
 
3329
                    {
-
 
3330
                        mLogger.info("queryPackageVersions forced ripple data " + di.pvId);
-
 
3331
                        p.mForcedRippleInstruction = di.instruction;
-
 
3332
                        p.mTestBuildEmail = di.userEmail;
-
 
3333
                    }
-
 
3334
                    else
-
 
3335
                    {
-
 
3336
                        // discard
-
 
3337
                        markDaemonInstCompleted( di.instruction );
-
 
3338
                    }
-
 
3339
                }
-
 
3340
 
-
 
3341
                // Daemon Instruction: Test Build Package
-
 
3342
                //  An op code of 1 means test build
-
 
3343
                //
-
 
3344
                // bare minimal data collection - last thing needed is more data to collect
-
 
3345
                // the approach...
-
 
3346
                // query all test build instructions for this baseline
-
 
3347
                // for each, query its build information
-
 
3348
                // store them in "mTestBuild" Package attributes as follows:
-
 
3349
                // - mTestBuildInstruction (default 0)
-
 
3350
                // - mTestBuildEmail (default "null")
-
 
3351
                // - mTestBuildVcsTag (default "null")
-
 
3352
                // - mTestBuildStandardCollection
-
 
3353
                // - mTestBuildDependencyCollection
-
 
3354
                // additionally, trust nothing - these are mostly wips that at any time may have:
-
 
3355
                // - no build location
-
 
3356
                // - no build label
-
 
3357
                // - an empty build standard collection
-
 
3358
                // proceed with defaults above if necessary (the build will subsequently fail)
-
 
3359
                // in all cases, build a meaningful email body to inform the user
-
 
3360
                // of the snapshot of build information that applied to the build and store in:
-
 
3361
                // - mTestBuildEmailBody
-
 
3362
                
-
 
3363
                mLogger.debug("queryPackageVersions: stmt141");
-
 
3364
                phase.setPhase("getTestBuild1");
-
 
3365
                di = new DaemonInstruction( baseline, 1, true);
-
 
3366
                while ( getDaemonInst( di ) )
-
 
3367
                {
-
 
3368
                    // can only do one test build at a time - others will be discarded until future cycle
-
 
3369
                    mLogger.info("queryPackageVersions test build data " + di.pvId);
-
 
3370
                    int testBuildPvId = di.pvId;
-
 
3371
                    int testBuildInstruction = di.instruction;
-
 
3372
                    String testBuildEmail = di.userEmail; 
-
 
3373
 
-
 
3374
                    String pkg_name = "";
-
 
3375
                    String pkg_ext = "";
-
 
3376
                    String testBuildVcsTag = "null";
-
 
3377
                    int pkg_id = 0;
-
 
3378
 
-
 
3379
                    // get package info for test build package
-
 
3380
                    mLogger.debug("queryPackageVersions: stmt15");
-
 
3381
                    PreparedStatement stmt15 = mConnection.prepareStatement(
-
 
3382
                            "select p.pkg_name, p.pkg_id, pv.v_ext, release_manager.PK_RMAPI.return_vcs_tag(pv.pv_id) AS vcsTag " +
-
 
3383
                                    " from release_manager.package_versions pv," +
-
 
3384
                                    "release_manager.packages p" +
-
 
3385
                                    " where pv.pv_id=" + testBuildPvId +
-
 
3386
                                    " and p.pkg_id=pv.pkg_id "
-
 
3387
                            );
-
 
3388
                    stmt15.setFetchSize(10);
-
 
3389
                    RmResultSet rset15 = new RmResultSet(stmt15.executeQuery(), "queryPackageVersions rset15");
-
 
3390
 
-
 
3391
                    int rsetSize = 0;
-
 
3392
 
-
 
3393
                    while( rset15.next() )
-
 
3394
                    {
-
 
3395
                        rsetSize++;
-
 
3396
                        pkg_name = rset15.mustGetKeyString("pkg_name");
-
 
3397
                        pkg_id = rset15.mustGetInt("pkg_id");
-
 
3398
                        pkg_ext = rset15.getString("v_ext","");
-
 
3399
                        testBuildVcsTag = rset15.getString("vcsTag", "null");
-
 
3400
                    }
-
 
3401
 
-
 
3402
                    rset15.close();
-
 
3403
                    stmt15.close();
-
 
3404
 
-
 
3405
                    mLogger.debug("queryPackageVersions: stmt16");
-
 
3406
                    if ( rsetSize == 0 )
-
 
3407
                    {
-
 
3408
                        mLogger.error("queryPackageVersions rset15 no data found " + di.instruction);
-
 
3409
                        markDaemonInstCompleted( di.instruction );
-
 
3410
                    }
-
 
3411
                    else
-
 
3412
                    {
-
 
3413
                        Package q = findPackage(pkg_name + pkg_ext, packageCollection);
-
 
3414
 
-
 
3415
                        if ( q == NULL_PACKAGE )
-
 
3416
                        {
-
 
3417
                            // Package alias does not exist in this release (planned or released packages)
-
 
3418
                            q = new Package(pkg_id, testBuildPvId, pkg_name, pkg_ext, pkg_name + pkg_ext, testBuildVcsTag, testBuildInstruction, testBuildEmail);
-
 
3419
                            packageCollection.add(q);
-
 
3420
                        }
-
 
3421
                        else
-
 
3422
                        {
-
 
3423
                            // Avoid interaction with real versions
-
 
3424
                        	// Flag as not pegged - so that we test build
-
 
3425
                            q.mVersion = "0.0.0000";
-
 
3426
                            q.mTestBuildVcsTag = testBuildVcsTag;
-
 
3427
                            q.mTestBuildInstruction = testBuildInstruction;
-
 
3428
                            q.mTestBuildEmail = testBuildEmail;
-
 
3429
                            q.mTestBuildPvId = testBuildPvId;
-
 
3430
                            q.mTestBuildHasAutomatedUnitTests = false;
-
 
3431
                            q.mIsPegged = false;
-
 
3432
                        }
-
 
3433
 
-
 
3434
                        // get test build package dependency info
-
 
3435
                        PreparedStatement stmt16 = mConnection.prepareStatement(
-
 
3436
                                "select p.pkg_name, dpv.v_ext " +
-
 
3437
                                        " from release_manager.package_versions pv," +
-
 
3438
                                        "   release_manager.package_dependencies pd,"+
-
 
3439
                                        "   release_manager.package_versions dpv,"+
-
 
3440
                                        "   release_manager.packages p" +
-
 
3441
                                        " where pv.pv_id=" + testBuildPvId +
-
 
3442
                                        "   and pd.pv_id=" + testBuildPvId +
-
 
3443
                                        "   and dpv.pv_id=pd.dpv_id"+
-
 
3444
                                        "   and p.pkg_id=dpv.pkg_id"
-
 
3445
                                );
-
 
3446
                        stmt16.setFetchSize(1000);
-
 
3447
                        RmResultSet rset16 = new RmResultSet(stmt16.executeQuery(), "queryPackageVersions rset16");
-
 
3448
 
-
 
3449
                        while( rset16.next() )
-
 
3450
                        {
-
 
3451
                            String dpkg_name = rset16.mustGetString("pkg_name");
-
 
3452
                            String v_ext = rset16.getString("v_ext", "");
-
 
3453
                            q.mTestBuildDependencyCollection.add(dpkg_name + v_ext);
-
 
3454
                        }
-
 
3455
 
-
 
3456
                        rset16.close();
-
 
3457
                        stmt16.close();
-
 
3458
 
-
 
3459
                        // get test build package build info
-
 
3460
                        mLogger.debug("queryPackageVersions: stmt17");
-
 
3461
                        PreparedStatement stmt17 = mConnection.prepareStatement(
-
 
3462
                                "select bm.bm_name, bsa.bsa_name " +
-
 
3463
                                        "from release_manager.package_versions pv," +
-
 
3464
                                        "     release_manager.package_build_info pbi," +
-
 
3465
                                        "     release_manager.build_machines bm," +
-
 
3466
                                        "     release_manager.build_standards_addendum bsa " +
-
 
3467
                                        "where pv.pv_id=" + testBuildPvId +
-
 
3468
                                        "   and pbi.pv_id=pv.pv_id" +
-
 
3469
                                        "   and bm.bm_id=pbi.bm_id" +
-
 
3470
                                        "   and bsa.bsa_id=pbi.bsa_id"
-
 
3471
                                );
-
 
3472
                        RmResultSet rset17 = new RmResultSet(stmt17.executeQuery(), "queryPackageVersions rset17");
-
 
3473
 
-
 
3474
                        while( rset17.next() )
-
 
3475
                        {
-
 
3476
                            String bm_name = rset17.mustGetKeyString("bm_name");
-
 
3477
                            String bsa_name = rset17.mustGetString("bsa_name");
-
 
3478
 
-
 
3479
                            BuildStandard bs = new BuildStandard(rippleEngine, bm_name, bsa_name);
-
 
3480
 
-
 
3481
                            if ( bs.supportedBuildStandard() )
-
 
3482
                            {
-
 
3483
                                q.mTestBuildStandardCollection.add(bs);
-
 
3484
                            }
-
 
3485
                        }
-
 
3486
 
-
 
3487
                        rset17.close();
-
 
3488
                        stmt17.close();
-
 
3489
                        
-
 
3490
                        // get test build package unit test info
-
 
3491
                        mLogger.debug("queryPackageVersions: stmt4");
-
 
3492
                        PreparedStatement stmt18 = mConnection.prepareStatement(
-
 
3493
                                "select tt.test_type_name" +
-
 
3494
                                "  from release_manager.unit_tests ut," +
-
 
3495
                                "       release_manager.test_types tt" +
-
 
3496
                                " where ut.pv_id=" + testBuildPvId +
-
 
3497
                                "  and tt.test_type_id=ut.test_types_fk" 
-
 
3498
                                );
-
 
3499
                        RmResultSet rset18 = new RmResultSet(stmt18.executeQuery(), "queryPackageVersions rset18");
-
 
3500
 
-
 
3501
                        while( rset18.next() )
-
 
3502
                        {
-
 
3503
                            boolean ignore = false;
-
 
3504
 
-
 
3505
                            String test_type_name = rset18.mustGetString("test_type_name");
-
 
3506
 
-
 
3507
                            if ( !ignore )
-
 
3508
                            {
-
 
3509
                                if ( test_type_name.compareTo("Autobuild UTF") == 0 )
-
 
3510
                                {
-
 
3511
                                	q.mTestBuildHasAutomatedUnitTests = true;
-
 
3512
                                }
-
 
3513
                            }
-
 
3514
                        }
-
 
3515
 
-
 
3516
                        rset18.close();
-
 
3517
                        stmt18.close();
-
 
3518
                        
-
 
3519
                    }
-
 
3520
                }
-
 
3521
               
2769
               
3522
            }
2770
            }
3523
            else
2771
            else
3524
            {
2772
            {
3525
                // Escrow Mode
2773
                // Escrow Mode
Line 3559... Line 2807...
3559
                    }
2807
                    }
3560
                }
2808
                }
3561
 
2809
 
3562
                rset.close();
2810
                rset.close();
3563
                stmt.close();
2811
                stmt.close();
-
 
2812
                
-
 
2813
                //  Now have all the package-versions used in the SBOM need to 
-
 
2814
                //      determine all the dependent packages 
-
 
2815
                //      determine the build info for all the packages
-
 
2816
                
-
 
2817
                //  Determine all dependent packages
-
 
2818
                //  Note: use a ListIterator as it allows traverseDependencies to modify the packageCollection
-
 
2819
                for (ListIterator<Package> it = packageCollection.listIterator(); it.hasNext(); )
-
 
2820
                {
-
 
2821
                    Package p = it.next();
-
 
2822
                    traverseDependencies(packageCollection, p, false, it);
-
 
2823
                }
-
 
2824
 
-
 
2825
                //  Add required build information
-
 
2826
                for (Iterator<Package> it = packageCollection.iterator(); it.hasNext(); )
-
 
2827
                {
-
 
2828
                    Package p = it.next();
-
 
2829
                    queryBuildInfo(rippleEngine, p);
-
 
2830
                }
3564
            }
2831
            }
3565
        }
2832
        }
3566
        catch ( SQLException e )
2833
        catch ( SQLException e )
3567
        {
2834
        {
3568
            handleSQLException(e, "");
2835
            handleSQLException(e, "");
3569
        }
2836
        }
-
 
2837
        phase.setPhase("End");
-
 
2838
    }
-
 
2839
    
-
 
2840
    /**
-
 
2841
     * Extract all package-version information for Planned Packages (WIPS)
-
 
2842
     * Not used in ESCROW
-
 
2843
     * 
-
 
2844
     * @param   rippleEngine        - Instance to use
-
 
2845
     * @param   packageCollection   - Package Collection structure to fill. Expected to be cleared
-
 
2846
     * @param   baseline            - RtagId of the release being processed, BomId of an Escrow being processed
-
 
2847
     *  
-
 
2848
     * Overridden in ReleaseManagerUtf
-
 
2849
     *  
-
 
2850
     */
-
 
2851
    protected void queryWips(RippleEngine rippleEngine, ArrayList<Package> packageCollection, int baseline) throws SQLException, Exception
-
 
2852
    {
-
 
2853
        if (!mDaemon){
-
 
2854
            return;
-
 
2855
        }
-
 
2856
        
-
 
2857
        Phase phase = new Phase("rmData");
-
 
2858
        mLogger.debug("queryWips {}", mDaemon);
3570
 
2859
 
3571
        if (!mDaemon)
2860
        try
3572
        {
2861
        {
-
 
2862
            // Get planned package info
3573
            // use a ListIterator as it allows traverseDependencies to modify the packageCollection
2863
            // Support multiple WIPS on the same package and build in the order they were released
-
 
2864
            // These are packages that are marked as pending build
-
 
2865
            //
-
 
2866
            mLogger.debug("queryPackageVersions: stmt1");
-
 
2867
            phase.setPhase("getPlannedPkgs1");
3574
            for (ListIterator<Package> it = packageCollection.listIterator(); it.hasNext(); )
2868
            PreparedStatement stmt1 = mConnection.prepareStatement(
-
 
2869
                    "select pl.pv_id, pv.modified_stamp," +
-
 
2870
                            " from release_manager.planned pl," +
-
 
2871
                            "      release_manager.package_versions pv," +
-
 
2872
                            "      release_manager.packages p" +
-
 
2873
                            " where pl.rtag_id=" + baseline +
-
 
2874
                            "   and pv.build_type='A' and pv.dlocked='A'" +
-
 
2875
                            "   and pv.pv_id=pl.pv_id and p.pkg_id=pv.pkg_id" +
-
 
2876
                            " order by pv.modified_stamp"
-
 
2877
                    );
-
 
2878
            stmt1.setFetchSize(500);
-
 
2879
            RmResultSet rset1 = new RmResultSet(stmt1.executeQuery(), "queryPackageVersions rset1");
-
 
2880
 
-
 
2881
            while( rset1.next() )
3575
            {
2882
            {
-
 
2883
                int pvId = rset1.mustGetKeyInt("pv_id");
-
 
2884
                
-
 
2885
                Package p = getPackageInfo(pvId, rippleEngine);
3576
                Package p = it.next();
2886
                if ( p != NULL_PACKAGE)
-
 
2887
                {
-
 
2888
                    p.mIsNotReleased = true;
-
 
2889
                    p.mDirectlyPlanned = true;
-
 
2890
                    p.mBuildReason = BuildReason.NewVersion;
-
 
2891
 
-
 
2892
                    // If there are multiple packages with the same Alias, then only the first one
-
 
2893
                    // will be placed in the build set. The will be the oldest, the first one released
-
 
2894
                    // to be built
-
 
2895
 
-
 
2896
                    Package prevPlannedPackage = findPackage(p.mAlias, packageCollection);
-
 
2897
                    if ( prevPlannedPackage == NULL_PACKAGE )
-
 
2898
                    {
-
 
2899
                        mLogger.info("queryWips rset1 no previous WIP package {}", pvId);
3577
                traverseDependencies(packageCollection, p, false, it);
2900
                        packageCollection.add(p);
-
 
2901
                    }
-
 
2902
                }
3578
            }
2903
            }
3579
 
2904
 
-
 
2905
            rset1.close();
-
 
2906
            stmt1.close();
-
 
2907
            
-
 
2908
            //  Process Scheduled Build Approvals. OpCode is 2
-
 
2909
            //      These are treated as requests to not-include a 'Pending' package-version in the current build set
-
 
2910
            //      If there is an un-expired instruction, then remove the pending package-version from the build set
-
 
2911
            //
-
 
2912
            //  Process all expired requests
-
 
2913
            //      These are scheduled builds were the scheduled time has been exceeded
-
 
2914
            //      Simply discard the instruction and let the Approved build proceed
-
 
2915
            //
3580
            for (Iterator<Package> it = packageCollection.iterator(); it.hasNext(); )
2916
            DaemonInstruction di = new DaemonInstruction(baseline, 2, true);
-
 
2917
          
-
 
2918
            phase.setPhase("removeOldSchedBuilds");
-
 
2919
            while ( getDaemonInst( di ) )
3581
            {
2920
            {
-
 
2921
                markDaemonInstCompleted(di.instruction);
-
 
2922
                mLogger.info("queryPackageVersions remove Scheduled Build Approvals {}", di.pvId);
-
 
2923
            }
-
 
2924
            
-
 
2925
            phase.setPhase("getSchedBuilds");
-
 
2926
            di = new DaemonInstruction(baseline, 2, false);
-
 
2927
            while ( getDaemonInst( di ) )
-
 
2928
            {
-
 
2929
                Package p = findPackage(di.pvId, packageCollection);
-
 
2930
 
-
 
2931
                if ( p != NULL_PACKAGE )
-
 
2932
                {
-
 
2933
                    mLogger.info("queryPackageVersions Scheduled Build Approvals {}", di.pvId);
-
 
2934
                    packageCollection.remove(p);
-
 
2935
                }
-
 
2936
                else
-
 
2937
                {
-
 
2938
                    // discard - the package no longer exists
-
 
2939
                    markDaemonInstCompleted( di.instruction );
-
 
2940
                    mLogger.info("queryPackageVersions remove Scheduled Build Approvals for nonexistent package {}", di.pvId);
-
 
2941
                }
-
 
2942
            }                
-
 
2943
 
-
 
2944
        }
-
 
2945
        catch ( SQLException e )
-
 
2946
        {
-
 
2947
            handleSQLException(e, "");
-
 
2948
        }
-
 
2949
        phase.setPhase("End");
-
 
2950
    }
-
 
2951
    
-
 
2952
    /**
-
 
2953
     * Extract all TEST package-version information
-
 
2954
     * Only active in Daemon Mode
-
 
2955
     * 
-
 
2956
     * @param   rippleEngine        - Instance to use
-
 
2957
     * @param   packageCollection   - Package Collection structure to fill. Expected to be cleared
-
 
2958
     * @param   baseline            - RtagId of the release being processed, BomId of an Escrow being processed
-
 
2959
     *  
-
 
2960
     * Overridden in ReleaseManagerUtf
-
 
2961
     *  
-
 
2962
     */
-
 
2963
    protected void queryTest(RippleEngine rippleEngine, ArrayList<Package> packageCollection, int baseline) throws SQLException, Exception
-
 
2964
    {
-
 
2965
        if (!mDaemon){
-
 
2966
            return;
-
 
2967
        }
-
 
2968
        
-
 
2969
        Phase phase = new Phase("rmData");
-
 
2970
        mLogger.debug("queryTest {}", mDaemon);
-
 
2971
 
-
 
2972
        try
-
 
2973
        {
-
 
2974
 
-
 
2975
            // Daemon Instruction: Test Build Package
-
 
2976
            //  An op code of 1 means test build
-
 
2977
            //
-
 
2978
            // Trust nothing - these are mostly wips that at any time may have:
-
 
2979
            // - no build location
-
 
2980
            // - no build label
-
 
2981
            // - an empty build standard collection
-
 
2982
            // proceed with defaults above if necessary (the build will subsequently fail)
-
 
2983
            // in all cases, build a meaningful email body to inform the user
-
 
2984
            // of the snapshot of build information that applied to the build and store in:
-
 
2985
            // - mTestBuildEmailBody
-
 
2986
            
-
 
2987
            mLogger.debug("queryTest: stmt141");
-
 
2988
            phase.setPhase("getTestBuild1");
-
 
2989
            DaemonInstruction di = new DaemonInstruction( baseline, 1, true);
-
 
2990
            while ( getDaemonInst( di ) )
-
 
2991
            {
-
 
2992
                mLogger.info("queryPackageVersions test build data {}", di.pvId);
-
 
2993
 
-
 
2994
                Package p = getPackageInfo(di.pvId, rippleEngine);
-
 
2995
                if ( p == NULL_PACKAGE )
-
 
2996
                {
-
 
2997
                    mLogger.error("queryTest rset15 no data found {}", di.instruction);
-
 
2998
                    markDaemonInstCompleted( di.instruction );
-
 
2999
                    
-
 
3000
                }
-
 
3001
                else
-
 
3002
                {
3582
                Package p = it.next();
3003
                    packageCollection.add(p);
-
 
3004
                    
-
 
3005
                    //  Set some Test information
-
 
3006
                    //  Avoid interaction with real versions
-
 
3007
                    //  Flag as not pegged - so that we test build
-
 
3008
                    p.mVersion = "0.0.0000";
-
 
3009
                    p.mTestBuildInstruction = di.instruction;
3583
                queryBuildInfo(rippleEngine, p);
3010
                    p.addEmail(di.userEmail);
-
 
3011
                    p.mBuildReason = BuildReason.Test;
-
 
3012
                    p.mIsPegged = false;
-
 
3013
                    p.mIsNotReleased = true;
-
 
3014
                }
3584
            }
3015
            }
3585
        }
3016
        }
-
 
3017
        catch ( SQLException e )
-
 
3018
        {
-
 
3019
            handleSQLException(e, "");
-
 
3020
        }
3586
        phase.setPhase("End");
3021
        phase.setPhase("End");
3587
    }
3022
    }
3588
    
3023
    
-
 
3024
    /**
-
 
3025
     * Extract all Ripple Request package-version information
-
 
3026
     * The returned list is in daemon instruction id order - ie the first request will be first
-
 
3027
     * Only active in Daemon Mode
-
 
3028
     * 
-
 
3029
     * @param   rippleEngine        - Instance to use
-
 
3030
     * @param   packageCollection   - Package Collection structure to fill. Expected to be cleared
-
 
3031
     * @param   baseline            - RtagId of the release being processed, BomId of an Escrow being processed
-
 
3032
     *  
-
 
3033
     * Overridden in ReleaseManagerUtf
-
 
3034
     *  
-
 
3035
     */
-
 
3036
    protected void queryRipples(RippleEngine rippleEngine, ArrayList<Package> packageCollection, int baseline) throws SQLException, Exception
-
 
3037
    {
-
 
3038
        if (!mDaemon){
-
 
3039
            return;
-
 
3040
        }
-
 
3041
        
-
 
3042
        Phase phase = new Phase("rmData");
-
 
3043
        mLogger.debug("queryPackageVersions {}", mDaemon);
3589
    
3044
    
-
 
3045
        try
-
 
3046
        {
-
 
3047
            // Daemon Instruction: Force Package Ripple
-
 
3048
            //  An op code of 0 means force ripple
-
 
3049
 
-
 
3050
            phase.setPhase("getDaemonInstructions1");
-
 
3051
            DaemonInstruction di = new DaemonInstruction( baseline, 0, true);
-
 
3052
            while ( getDaemonInst( di ) )
-
 
3053
            {
-
 
3054
                Package p = getPackageInfo(di.pvId, rippleEngine);
-
 
3055
                if ( p != NULL_PACKAGE )
-
 
3056
                {
-
 
3057
                    mLogger.info("queryPackageVersions forced ripple data {}", di.pvId);
-
 
3058
                    packageCollection.add(p);
-
 
3059
                    p.mForcedRippleInstruction = di.instruction;
-
 
3060
                    p.addEmail(di.userEmail);
-
 
3061
                    p.mBuildReason = BuildReason.Ripple;
-
 
3062
                    p.mIsNotReleased = true;
-
 
3063
                }
-
 
3064
                else
-
 
3065
                {
-
 
3066
                    // discard
-
 
3067
                    markDaemonInstCompleted( di.instruction );
-
 
3068
                }
-
 
3069
            }
-
 
3070
    
-
 
3071
        }
-
 
3072
        catch ( SQLException e )
-
 
3073
        {
-
 
3074
            handleSQLException(e, "");
-
 
3075
        }
-
 
3076
        phase.setPhase("End");
-
 
3077
    }
-
 
3078
 
-
 
3079
    /** Get all build information for a single package
-
 
3080
     *  Don't use this where lots of packages are expected, but should be OK to get data for TEST, WIP and Ripples
-
 
3081
     *  
-
 
3082
     *  Does not get:
-
 
3083
     *      mBuildReason
-
 
3084
     *      mDirectlyPlanned
-
 
3085
     *  
-
 
3086
     *  @param  pvId    - Package to process
-
 
3087
     * @param rippleEngine - Ripple engine associated wit the Release
-
 
3088
     * @throws Exception 
-
 
3089
     *  
-
 
3090
     *  @returns a package - May be null, but this is not good
-
 
3091
     */
-
 
3092
    Package getPackageInfo(int pvId, RippleEngine rippleEngine) throws Exception
-
 
3093
    {
-
 
3094
        Package p = NULL_PACKAGE;
-
 
3095
        
-
 
3096
        try
-
 
3097
        {
-
 
3098
            // Get Package info
-
 
3099
            //
-
 
3100
            mLogger.debug("getPackageInfo: stmt1");
-
 
3101
            PreparedStatement stmt1 = mConnection.prepareStatement(
-
 
3102
                    "select pv.pv_id, p.pkg_id, p.pkg_name, pv.pkg_version, " +
-
 
3103
                            " pv.v_ext, pv.change_type, pv.ripple_field," +
-
 
3104
                            " pv.major_limit, pv.minor_limit, pv.patch_limit, pv.build_number_limit," +
-
 
3105
                            " pv.modified_stamp," +
-
 
3106
                            " release_manager.PK_RMAPI.return_vcs_tag(pl.pv_id) AS vcsTag," +
-
 
3107
                            " pv.build_time" +
-
 
3108
                            " from " +
-
 
3109
                            "      release_manager.package_versions pv," +
-
 
3110
                            "      release_manager.packages p" +
-
 
3111
                            " where pv.pv_id=" + pvId +
-
 
3112
                            "   and p.pkg_id=pv.pkg_id"
-
 
3113
 
-
 
3114
                    );
-
 
3115
            stmt1.setFetchSize(500);
-
 
3116
            RmResultSet rset1 = new RmResultSet(stmt1.executeQuery(), "getPackageInfo rset1");
-
 
3117
 
-
 
3118
            //  Package must exist
-
 
3119
            if ( ! rset1.next() )
-
 
3120
            {
-
 
3121
                return NULL_PACKAGE;
-
 
3122
            }
-
 
3123
            
-
 
3124
 
-
 
3125
            int pv_id = rset1.mustGetKeyInt("pv_id");
-
 
3126
            int pkg_id = rset1.mustGetInt("pkg_id");
-
 
3127
            String pkg_name = rset1.mustGetString("pkg_name");
-
 
3128
            String pkg_version = rset1.mustGetString("pkg_version");
-
 
3129
            int buildTime = rset1.getInt("build_time", 60);
-
 
3130
 
-
 
3131
            // Previous Version of this package, without the project suffix
-
 
3132
            String pkg_prevVersion = getBaseVersionNumber(pv_id);
-
 
3133
            if ( pkg_prevVersion == null)
-
 
3134
            {
-
 
3135
                // show stopper
-
 
3136
                mLogger.error("getPackageInfo. No Previous version {}", pv_id);
-
 
3137
                throw new Exception("getPackageInfo. No Previous version" + pv_id);
-
 
3138
            }
-
 
3139
            
-
 
3140
            String v_ext = rset1.getString("v_ext","");
-
 
3141
            String change_type = rset1.getString("change_type", "P");
-
 
3142
 
-
 
3143
            char ct = 'P';
-
 
3144
 
-
 
3145
            if ( change_type.compareTo("M") == 0 )
-
 
3146
            {
-
 
3147
                ct = 'M';
-
 
3148
            }
-
 
3149
            else if ( change_type.compareTo("N") == 0 )
-
 
3150
            {
-
 
3151
                ct = 'N';
-
 
3152
            }
-
 
3153
            else if ( change_type.compareTo("P") == 0 )
-
 
3154
            {
-
 
3155
                ct = 'P';
-
 
3156
            }
-
 
3157
            else if ( change_type.compareTo("F") == 0 )
-
 
3158
            {
-
 
3159
                ct = 'F';
-
 
3160
            }
-
 
3161
 
-
 
3162
            String ripple_field = rset1.getString("ripple_field", "b");
-
 
3163
            int major_limit = rset1.getInt("major_limit", 0);
-
 
3164
            int minor_limit = rset1.getInt("minor_limit",0);
-
 
3165
            int patch_limit = rset1.getInt("patch_limit",0);
-
 
3166
            int build_number_limit = rset1.getInt("build_number_limit",0);
-
 
3167
            String vcs_tag = rset1.getString("vcsTag", "");
-
 
3168
 
-
 
3169
            p = new Package(pkg_id, pv_id, pkg_name, pkg_version, v_ext, pkg_name + v_ext, vcs_tag, ripple_field.charAt(0), ct);
-
 
3170
            p.mMajorLimit = major_limit;
-
 
3171
            p.mMinorLimit = minor_limit;
-
 
3172
            p.mPatchLimit = patch_limit;
-
 
3173
            p.mBuildLimit = build_number_limit;
-
 
3174
            p.mPrevVersion = pkg_prevVersion;
-
 
3175
            p.mBuildTime = buildTime;
-
 
3176
 
-
 
3177
            rset1.close();
-
 
3178
            stmt1.close();
-
 
3179
 
-
 
3180
            // get Package dependency info
-
 
3181
            mLogger.debug("getPackageInfo: stmt2");
-
 
3182
            PreparedStatement stmt2 = mConnection.prepareStatement(
-
 
3183
                    "select dpv.v_ext" +
-
 
3184
                            "from " +
-
 
3185
                            "     release_manager.package_versions pv,"+
-
 
3186
                            "     release_manager.package_dependencies pd," +
-
 
3187
                            "     release_manager.package_versions dpv,"+
-
 
3188
                            " where pv.pv_id=" + pvId + 
-
 
3189
                            "  and pd.pv_id=pv.pv_id"+
-
 
3190
                            "  and dpv.pv_id=pd.dpv_id"
-
 
3191
                    );
-
 
3192
            stmt2.setFetchSize(500);
-
 
3193
            RmResultSet rset2 = new RmResultSet(stmt2.executeQuery(), "getPackageInfo rset2");
-
 
3194
 
-
 
3195
            if( rset2.next() )
-
 
3196
            {
-
 
3197
                String dpv_ext = rset2.getString("v_ext","");
-
 
3198
                
-
 
3199
                p.mDependencyCollection.add(pkg_name + dpv_ext);
-
 
3200
                p.mDependencyIDCollection.add(-1);
-
 
3201
            }
-
 
3202
 
-
 
3203
            rset2.close();
-
 
3204
            stmt2.close();
-
 
3205
 
-
 
3206
            // get Package build info
-
 
3207
            mLogger.debug("getPackageInfo: stmt3");
-
 
3208
            PreparedStatement stmt3 = mConnection.prepareStatement(
-
 
3209
                    "select bm.bm_name, bsa.bsa_name" +
-
 
3210
                            "from " +
-
 
3211
                            "     release_manager.package_versions pv," +
-
 
3212
                            "     release_manager.package_build_info pbi," +
-
 
3213
                            "     release_manager.build_machines bm," +
-
 
3214
                            "     release_manager.build_standards_addendum bsa " +
-
 
3215
                            "where pv_id=" + pvId + 
-
 
3216
                            "     and pbi.pv_id=pv.pv_id" +
-
 
3217
                            "     and bm.bm_id=pbi.bm_id" +
-
 
3218
                            "     and bsa.bsa_id=pbi.bsa_id "
-
 
3219
                    );
-
 
3220
            stmt3.setFetchSize(500);
-
 
3221
            RmResultSet rset3 = new RmResultSet(stmt3.executeQuery(), "getPackageInfo rset3");
-
 
3222
 
-
 
3223
            if( rset3.next() )
-
 
3224
            {
-
 
3225
                String bm_name = rset3.mustGetString("bm_name");
-
 
3226
                String bsa_name = rset3.mustGetString("bsa_name");
-
 
3227
 
-
 
3228
                BuildStandard bs = new BuildStandard(rippleEngine, bm_name, bsa_name);
-
 
3229
                if ( bs.supportedBuildStandard() )
-
 
3230
                {
-
 
3231
                    p.mBuildStandardCollection.add(bs);
-
 
3232
                }
-
 
3233
            }
-
 
3234
 
-
 
3235
            rset3.close();
-
 
3236
            stmt3.close();
-
 
3237
 
-
 
3238
            // get Package unit test info
-
 
3239
            mLogger.debug("getPackageInfo: stmt4");
-
 
3240
            PreparedStatement stmt4 = mConnection.prepareStatement(
-
 
3241
                    "select pv.pv_id, tt.test_type_name" +
-
 
3242
                    "  from "+
-
 
3243
                    "       release_manager.package_versions pv,"+
-
 
3244
                    "       release_manager.unit_tests ut," +
-
 
3245
                    "       release_manager.test_types tt" +
-
 
3246
                    " where pv.pv_id=" + pvId + 
-
 
3247
                    "  and ut.pv_id=pv.pv_id" +
-
 
3248
                    "  and tt.test_type_id=ut.test_types_fk"
-
 
3249
                    );
-
 
3250
            stmt4.setFetchSize(500);
-
 
3251
            RmResultSet rset4 = new RmResultSet(stmt4.executeQuery(), "getPackageInfo rset4");
-
 
3252
 
-
 
3253
            if( rset4.next() )
-
 
3254
            {
-
 
3255
                String test_type_name = rset4.mustGetString("test_type_name");
-
 
3256
                if ( test_type_name.compareTo("Autobuild UTF") == 0 )
-
 
3257
                {
-
 
3258
                    p.mHasAutomatedUnitTests = true;
-
 
3259
                }
-
 
3260
            }
-
 
3261
 
-
 
3262
            rset4.close();
-
 
3263
            stmt4.close();
-
 
3264
 
-
 
3265
            // get Package build failure info...
-
 
3266
            //      view based
-
 
3267
            mLogger.debug("getPackageInfo: stmt5");
-
 
3268
            PreparedStatement stmt5 = mConnection.prepareStatement(
-
 
3269
                    "select pv.pv_id, u.user_email" +
-
 
3270
                            " from " +
-
 
3271
                            "      release_manager.release_tags rt, " +
-
 
3272
                            "      release_manager.package_versions pv, " +
-
 
3273
                            "      release_manager.autobuild_failure af, " +
-
 
3274
                            "      release_manager.members_group mg, " +
-
 
3275
                            "      release_manager.users u " +
-
 
3276
                            " where pv.pv_id=" + pvId + 
-
 
3277
                            "      and rt.rtag_id=" + rippleEngine.getRtagId() + 
-
 
3278
                            "      and af.view_id=pv.view_id " +
-
 
3279
                            "      and mg.group_email_id=af.group_email_id " +
-
 
3280
                            "      and u.user_id=mg.user_id " +
-
 
3281
                            "      and af.proj_id=rt.proj_id "
-
 
3282
                    );
-
 
3283
            stmt5.setFetchSize(500);
-
 
3284
            RmResultSet rset5 = new RmResultSet(stmt5.executeQuery(), "getPackageInfo rset5");
-
 
3285
 
-
 
3286
            if( rset5.next() )
-
 
3287
            {
-
 
3288
                p.addEmail(rset5.getString("user_email", null));
-
 
3289
            }
-
 
3290
 
-
 
3291
            rset5.close();
-
 
3292
            stmt5.close();
-
 
3293
 
-
 
3294
            // get Package build failure info...
-
 
3295
            // package version
-
 
3296
            mLogger.debug("getPackageInfo: stmt6");
-
 
3297
            PreparedStatement stmt6 = mConnection.prepareStatement(
-
 
3298
                    "select pv.pv_id, u1.user_email as creator, u2.user_email as owner, u3.user_email as modifier" +
-
 
3299
                    " from " +
-
 
3300
                    "      release_manager.release_tags rt," +
-
 
3301
                    "      release_manager.package_versions pv," +
-
 
3302
                    "      release_manager.users u1," +
-
 
3303
                    "      release_manager.users u2," +
-
 
3304
                    "      release_manager.users u3 " +
-
 
3305
                    " where pv.pv_id=" + pvId + 
-
 
3306
                    "   and rt.rtag_id=" + rippleEngine.getRtagId() + 
-
 
3307
                    "   and pv.build_type='A'" +
-
 
3308
                    "   and pv.dlocked='A' " +
-
 
3309
                    "   and pv.pv_id = pl.pv_id" +
-
 
3310
                    "   and u1.user_id=pv.creator_id" +
-
 
3311
                    "   and u2.user_id=pv.owner_id" +
-
 
3312
                    "   and u3.user_id=pv.modifier_id"
-
 
3313
                    );
-
 
3314
            stmt6.setFetchSize(500);
-
 
3315
            RmResultSet rset6 = new RmResultSet(stmt6.executeQuery(), "getPackageInfo rset6");
-
 
3316
 
-
 
3317
            if( rset6.next() )
-
 
3318
            {
-
 
3319
                p.addEmail( rset6.getString("creator",null));
-
 
3320
                p.addEmail( rset6.getString("owner",null));
-
 
3321
                p.addEmail( rset6.getString("modifier",null));
-
 
3322
            }
-
 
3323
 
-
 
3324
            rset6.close();
-
 
3325
            stmt6.close();
-
 
3326
            
-
 
3327
            // get Package advisory ripple info
-
 
3328
            mLogger.debug("getPackageInfo: stmt7");
-
 
3329
            PreparedStatement stmt7 = mConnection.prepareStatement(
-
 
3330
                    "select pl.pv_id, pv.modified_stamp " +
-
 
3331
                    " from " +
-
 
3332
                    "      release_manager.package_versions pv," +
-
 
3333
                    "      release_manager.advisory_ripple ar " +
-
 
3334
                    " where pv.pv_id = " + pvId +
-
 
3335
                    "    and ar.rtag_id=" + rippleEngine.getRtagId() +
-
 
3336
                    "    and ar.pv_id=pv.pv_id "
-
 
3337
                    );
-
 
3338
            stmt7.setFetchSize(500);
-
 
3339
            RmResultSet rset7 = new RmResultSet(stmt7.executeQuery(), "getPackageInfo rset7");
-
 
3340
 
-
 
3341
            if( rset7.next() )
-
 
3342
            {
-
 
3343
                p.mAdvisoryRipple = true;
-
 
3344
            }
-
 
3345
 
-
 
3346
            rset7.close();
-
 
3347
            stmt7.close();            
-
 
3348
 
-
 
3349
        }
-
 
3350
        catch ( SQLException e )
-
 
3351
        {
-
 
3352
            handleSQLException(e, "");
-
 
3353
        }
-
 
3354
 
-
 
3355
        return p;
-
 
3356
    }
-
 
3357
 
3590
   /**	Determine the version number of the base package
3358
    /**	Determine the version number of the base package
3591
    *   Used in a ripple build to determine the base for calculating the next version number
3359
    *   Used in a ripple build to determine the base for calculating the next version number
3592
    *   Assumes that a database connection has been established
3360
    *   Assumes that a database connection has been established
3593
    *   Used in Daemon Mode Only
3361
    *   Used in Daemon Mode Only
3594
    *   
3362
    *   
3595
    *   History: Used to determine the last non-rippled package, but this had issues [JATS-402]
3363
    *   History: Used to determine the last non-rippled package, but this had issues [JATS-402]
Line 3651... Line 3419...
3651
			rset.close();
3419
			rset.close();
3652
			stmt.close();
3420
			stmt.close();
3653
        
3421
        
3654
    	} catch (SQLException e) {
3422
    	} catch (SQLException e) {
3655
    		baseVersion = null;
3423
    		baseVersion = null;
3656
    		mLogger.error("Exception for getBaseVersionNumber " + pv_id);
3424
    		mLogger.error("Exception for getBaseVersionNumber {}", pv_id);
3657
		}
3425
		}
3658
        return baseVersion;
3426
        return baseVersion;
3659
    }
3427
    }
3660
 
3428
 
3661
    /**called only in escrow mode
3429
    /** Called only in escrow mode
-
 
3430
     * 
-
 
3431
     * Used to process each package in the escrow list and to locate all dependent packages - recursively.
-
 
3432
     * 
3662
     * if checkCollection is true, checks the pv_id is in the packageCollection
3433
     * if checkCollection is true, checks the pv_id is in the packageCollection
3663
     * if checkCollection is false, or the pv_id is not in the collection
3434
     * if checkCollection is false, or the pv_id is not in the collection
3664
     * 1 traverses the pv_id package dependencies
3435
     *    Traverses the pv_id package dependencies
3665
     *   select dpv.pv_id, p.pkg_name, dpv.pkg_version, dpv.v_ext
-
 
3666
     *   from release_manager.package_versions pv, release_manager.package_dependencies pd, release_manager.package_versions dpv, release_manager.packages p
-
 
3667
     *   where pv.pv_id = <pv_id> and pd.pv_id=pv.pv_id and dpv.pv_id=pd.dpv_id and p.pkg_id=dpv.pkg_id
-
 
3668
     *   order by pv.pv_id;
-
 
3669
     * 2 for each dpv.pv_id in the resultset
3436
     *    for each dpv.pv_id in the resultset
3670
     *     call traverseDependencies( packageCollection, dpv.pv_id, true )
3437
     *     call traverseDependencies( packageCollection, dpv.pv_id, true )
3671
     *     if the pv_id is not in the collection, add it
3438
     *     if the pv_id is not in the collection, add it
-
 
3439
     * 
-
 
3440
     *   @param packageCollection   - Collection of packages being processed
-
 
3441
     *   @param pkg                 - Current package in the collection
-
 
3442
     *   @param checkCollection     - How to handle pkg not in the collection. False: Process all package dependencies. True: Skip if package is in collection
-
 
3443
     *   @param listIterator        - List iterator being used to iterate over packageCollection. Used to insert new packages
3672
     *   
3444
     *   
-
 
3445
     *   This function is called recursively
3673
     */
3446
     */
3674
    private void traverseDependencies(ArrayList<Package> packageCollection, Package pkg, 
3447
    private void traverseDependencies(ArrayList<Package> packageCollection, Package pkg, boolean checkCollection, ListIterator<Package> listIterator) throws SQLException, Exception
3675
            boolean checkCollection, 
-
 
3676
            ListIterator<Package> listIterator) throws SQLException, Exception
-
 
3677
            {
3448
    {
3678
        mLogger.debug("traverseDependencies " + checkCollection);
3449
        mLogger.debug("traverseDependencies {}", checkCollection);
3679
        boolean pvIdInCollection = false;
3450
        boolean pvIdInCollection = false;
3680
 
3451
 
3681
        if ( checkCollection )
3452
        if ( checkCollection )
3682
        {
3453
        {
3683
            for (Iterator<Package> it = packageCollection.iterator(); it.hasNext(); )
3454
            for (Iterator<Package> it = packageCollection.iterator(); it.hasNext(); )
Line 3735... Line 3506...
3735
            catch ( SQLException e )
3506
            catch ( SQLException e )
3736
            {
3507
            {
3737
                handleSQLException(e, "");
3508
                handleSQLException(e, "");
3738
            }
3509
            }
3739
 
3510
 
-
 
3511
            //  Process each dependent package
3740
            for (Iterator<Package> it = resultset.iterator(); it.hasNext();)
3512
            for (Iterator<Package> it = resultset.iterator(); it.hasNext();)
3741
            {
3513
            {
3742
                Package r = it.next();
3514
                Package r = it.next();
3743
                traverseDependencies(packageCollection, r, true, listIterator);
3515
                traverseDependencies(packageCollection, r, true, listIterator);
3744
 
3516
 
Line 3762... Line 3534...
3762
                    listIterator.add(r);
3534
                    listIterator.add(r);
3763
                }
3535
                }
3764
 
3536
 
3765
            }
3537
            }
3766
        }
3538
        }
3767
            }
3539
    }
3768
 
3540
 
3769
    /**called only in escrow mode to add build info to the Package
3541
    /** Called only in escrow mode
-
 
3542
     * 
3770
     * select bm.bm_name, bsa.bsa_name
3543
     *  <p>Add build information to a Package
3771
     * from release_manager.package_versions pv, release_manager.package_build_info pbi, release_manager.build_machines bm, release_manager.build_standards_addendum bsa
3544
     *  <br>Adds: bm_name and bsa_name, but only if they are supported
-
 
3545
     * 
3772
     * where pv.pv_id = <p.pv_id> and pbi.pv_id=pv.pv_id and bm.bm_id=pbi.bm_id and bsa.bsa_id=pbi.bsa_id
3546
     * @param   rippleEngine    - Ripple Engine being used
-
 
3547
     * @param   p               - Package to process
3773
     * order by pv.pv_id;
3548
     * 
3774
     */
3549
     */
3775
    private void queryBuildInfo(RippleEngine rippleEngine, Package p) throws SQLException, Exception
3550
    private void queryBuildInfo(RippleEngine rippleEngine, Package p) throws SQLException, Exception
3776
    {
3551
    {
3777
        mLogger.debug("queryBuildInfo");
3552
        mLogger.debug("queryBuildInfo");
3778
 
3553
 
Line 3817... Line 3592...
3817
     * Find Package by pvid
3592
     * Find Package by pvid
3818
     * @param   id                  - pvid of package to locate
3593
     * @param   id                  - pvid of package to locate
3819
     * @param   packageCollection   - Collection to scan
3594
     * @param   packageCollection   - Collection to scan
3820
     * @return  Package with the matching mID or NULL_PACKAGE if no package has the mID
3595
     * @return  Package with the matching mID or NULL_PACKAGE if no package has the mID
3821
     */
3596
     */
-
 
3597
    int findPackageLastId = 0;
-
 
3598
    Package findPackageLastPackage = NULL_PACKAGE;
-
 
3599
    
3822
    protected Package findPackage(int id, ArrayList<Package> packageCollection)
3600
    protected Package findPackage(int id, ArrayList<Package> packageCollection)
3823
    {
3601
    {
3824
        mLogger.debug("findPackage 1 id " + id);
3602
        mLogger.debug("findPackage id {}", id);
3825
        Package retVal = NULL_PACKAGE;
3603
        Package retVal = NULL_PACKAGE;
3826
 
3604
        
3827
        for (Iterator<Package> it = packageCollection.iterator(); it.hasNext(); )
3605
        if (findPackageLastId != 0 && findPackageLastId == id) {
-
 
3606
            mLogger.debug("findPackage id {} - cache hit", id);
-
 
3607
            retVal = findPackageLastPackage;
-
 
3608
        }
-
 
3609
        else
3828
        {
3610
        {
3829
            Package p = it.next();
3611
            for (Iterator<Package> it = packageCollection.iterator(); it.hasNext(); )
3830
 
-
 
3831
            if ( p.mId == id )
-
 
3832
            {
3612
            {
-
 
3613
                Package p = it.next();
-
 
3614
    
-
 
3615
                if ( p.mId == id )
-
 
3616
                {
-
 
3617
                    findPackageLastId = id;
-
 
3618
                    findPackageLastPackage = p;
3833
                retVal = p;
3619
                    retVal = p;
3834
                break;
3620
                    break;
-
 
3621
                }
3835
            }
3622
            }
3836
        }
3623
        }
3837
 
3624
 
3838
        mLogger.debug("findPackage 1 returned " + retVal.mName);
3625
        mLogger.debug("findPackage id {} returned {}", id, retVal.mName);
3839
        return retVal;
3626
        return retVal;
3840
    }
3627
    }
3841
 
3628
 
3842
    /**
3629
    /**
3843
     * Find Package by package alias
3630
     * Find Package by package alias
Line 3845... Line 3632...
3845
     * @param   packageCollection   - Collection to scan
3632
     * @param   packageCollection   - Collection to scan
3846
     * @return  Package with the matching mAlias or NULL_PACKAGE if no package has the mAlias
3633
     * @return  Package with the matching mAlias or NULL_PACKAGE if no package has the mAlias
3847
     */
3634
     */
3848
    protected Package findPackage(String alias, ArrayList<Package> packageCollection)
3635
    protected Package findPackage(String alias, ArrayList<Package> packageCollection)
3849
    {
3636
    {
3850
        mLogger.debug("findPackage 2 alias " + alias);
3637
        mLogger.debug("findPackage alias {}", alias);
3851
        Package retVal = NULL_PACKAGE;
3638
        Package retVal = NULL_PACKAGE;
3852
 
3639
 
3853
        for (Iterator<Package> it = packageCollection.iterator(); it.hasNext(); )
3640
        for (Iterator<Package> it = packageCollection.iterator(); it.hasNext(); )
3854
        {
3641
        {
3855
            Package p = it.next();
3642
            Package p = it.next();
Line 3859... Line 3646...
3859
                retVal = p;
3646
                retVal = p;
3860
                break;
3647
                break;
3861
            }
3648
            }
3862
        }
3649
        }
3863
 
3650
 
3864
        mLogger.info("findPackage 2 returned " + retVal.mName);
3651
        mLogger.info("findPackage alias {} returned {}", alias, retVal.mName);
3865
        return retVal;
3652
        return retVal;
3866
    }
3653
    }
3867
 
3654
 
3868
    /**only used in daemon mode to determine version existence in the database
3655
    /**only used in daemon mode to determine version existence in the database
3869
     *  1 select pkg_id from release_manager.package_versions where pkg_id=<pkg_id> and pkg_version=<pkg_version>;
3656
     *  1 select pkg_id from release_manager.package_versions where pkg_id=<pkg_id> and pkg_version=<pkg_version>;
Line 3897... Line 3684...
3897
                rset1.close();
3684
                rset1.close();
3898
                stmt1.close();
3685
                stmt1.close();
3899
 
3686
 
3900
                if ( rsetSize > 1 )
3687
                if ( rsetSize > 1 )
3901
                {
3688
                {
3902
                    mLogger.error("queryPackageVersions rsetSize > 1 " + pkg_id + " " + pkg_version);
3689
                    String msg = "queryPackageVersions rsetSize > 1 " + pkg_id + " " + pkg_version;
-
 
3690
                    mLogger.error(msg);
3903
                    // show stopper
3691
                    // show stopper
3904
                    throw new Exception("queryPackageVersions rsetSize > 1 " + pkg_id + " " + pkg_version);
3692
                    throw new Exception(msg);
3905
                }
3693
                }
3906
 
3694
 
3907
                if ( rsetSize == 1 )
3695
                if ( rsetSize == 1 )
3908
                {
3696
                {
3909
                    retVal = true;
3697
                    retVal = true;
Line 3927... Line 3715...
3927
                    rset2.close();
3715
                    rset2.close();
3928
                    stmt2.close();
3716
                    stmt2.close();
3929
 
3717
 
3930
                    if ( rsetSize > 1 )
3718
                    if ( rsetSize > 1 )
3931
                    {
3719
                    {
3932
                        mLogger.error("queryPackageVersions rsetSize > 1 " + pkg_id + " " + pkg_version);
3720
                        String msg = "queryPackageVersions rsetSize > 1 " + pkg_id + " " + pkg_version;
-
 
3721
                        mLogger.error(msg);
3933
                        // show stopper
3722
                        // show stopper
3934
                        throw new Exception("queryPackageVersions rsetSize > 1 " + pkg_id + " " + pkg_version);
3723
                        throw new Exception(msg);
3935
                    }
3724
                    }
3936
 
3725
 
3937
                    if ( rsetSize == 1 )
3726
                    if ( rsetSize == 1 )
3938
                    {
3727
                    {
3939
                        retVal = true;
3728
                        retVal = true;
Line 3944... Line 3733...
3944
            {
3733
            {
3945
                handleSQLException(e, "");
3734
                handleSQLException(e, "");
3946
            }
3735
            }
3947
        }
3736
        }
3948
 
3737
 
3949
        mLogger.info("queryPackageVersions returned " + retVal);
3738
        mLogger.info("queryPackageVersions returned {}", retVal);
3950
        return retVal;
3739
        return retVal;
3951
    }
3740
    }
3952
 
3741
 
3953
    /**
3742
    /**
3954
     * Determine the set of packages that have been excluded from the build 
3743
     * Determine the set of packages that have been excluded from the build 
Line 3962... Line 3751...
3962
     * @exception SQLException
3751
     * @exception SQLException
3963
     * @exception Exception
3752
     * @exception Exception
3964
     */
3753
     */
3965
    public void queryBuildExclusions(List<BuildExclusion> buildExclusionCollection, int baseline) throws SQLException, Exception
3754
    public void queryBuildExclusions(List<BuildExclusion> buildExclusionCollection, int baseline) throws SQLException, Exception
3966
    {
3755
    {
3967
        mLogger.debug("queryBuildExclusions " + baseline);
3756
        mLogger.debug("queryBuildExclusions {}", baseline);
3968
 
3757
 
3969
        try
3758
        try
3970
        {
3759
        {
3971
            PreparedStatement stmt = mConnection.prepareStatement(
3760
            PreparedStatement stmt = mConnection.prepareStatement(
3972
                    "select pv_id, root_pv_id, root_cause" +
3761
                    "select pv_id, root_pv_id, root_cause" +
Line 4026... Line 3815...
4026
            String rootPvId, 
3815
            String rootPvId, 
4027
            String rootCause,
3816
            String rootCause,
4028
            String rootFile,
3817
            String rootFile,
4029
            boolean supercede, Boolean testBuildInstruction) throws SQLException, Exception
3818
            boolean supercede, Boolean testBuildInstruction) throws SQLException, Exception
4030
    {
3819
    {
4031
        mLogger.debug("excludeFromBuild " + packageVersionId);
3820
        mLogger.debug("excludeFromBuild {}", packageVersionId);
4032
 
3821
 
4033
        //  If a Test Build, then don't excluded package
3822
        //  If a Test Build, then don't excluded package
4034
        if ( testBuildInstruction )
3823
        if ( testBuildInstruction )
4035
        {
3824
        {
4036
            return;
3825
            return;
Line 4104... Line 3893...
4104
                    int result = stmt.getInt( 1 );
3893
                    int result = stmt.getInt( 1 );
4105
 
3894
 
4106
                    if ( result != 0 )
3895
                    if ( result != 0 )
4107
                    {
3896
                    {
4108
                        // flag build failure
3897
                        // flag build failure
4109
                        mLogger.error( "excludeFromBuild show stopper PK_RMAPI.EXCLUDE_INDIRECT_FROM_BUILD failed, returned " + result );
3898
                        mLogger.error( "excludeFromBuild show stopper PK_RMAPI.EXCLUDE_INDIRECT_FROM_BUILD failed, returned {}",  result );
4110
                        throw new Exception("excludeFromBuild show stopper PK_RMAPI.EXCLUDE_INDIRECT_FROM_BUILD failed, returned " + result);
3899
                        throw new Exception("excludeFromBuild show stopper PK_RMAPI.EXCLUDE_INDIRECT_FROM_BUILD failed, returned " + result);
4111
                    }
3900
                    }
4112
                    stmt.close();
3901
                    stmt.close();
4113
                    if (!hasConnection )
3902
                    if (!hasConnection )
4114
                        commit();
3903
                        commit();
Line 4141... Line 3930...
4141
     * @exception Exception
3930
     * @exception Exception
4142
     */
3931
     */
4143
 
3932
 
4144
    public void includeToBuild(int packageVersionId, int rtagId) throws SQLException, Exception
3933
    public void includeToBuild(int packageVersionId, int rtagId) throws SQLException, Exception
4145
    {
3934
    {
4146
        mLogger.debug("includeToBuild " + packageVersionId);
3935
        mLogger.debug("includeToBuild {}", packageVersionId);
4147
        if ( mUseDatabase )
3936
        if ( mUseDatabase )
4148
        {
3937
        {
4149
            try
3938
            try
4150
            {
3939
            {
4151
                CallableStatement stmt = mConnection.prepareCall(
3940
                CallableStatement stmt = mConnection.prepareCall(
Line 4179... Line 3968...
4179
     */
3968
     */
4180
    public String queryBuildFile(int rcon_id) throws SQLException, Exception
3969
    public String queryBuildFile(int rcon_id) throws SQLException, Exception
4181
    {
3970
    {
4182
        String buildFile = null;
3971
        String buildFile = null;
4183
        
3972
        
4184
        mLogger.debug("queryRunLevel 1 rcon_id " + rcon_id);
3973
        mLogger.debug("queryRunLevel 1 rcon_id {}", rcon_id);
4185
        if ( !mUseDatabase )
3974
        if ( !mUseDatabase )
4186
        {
3975
        {
4187
            mLogger.info("queryRunLevel 1 !mUseDatabase");
3976
            mLogger.info("queryRunLevel 1 !mUseDatabase");
4188
            buildFile = "unit test build file content";
3977
            buildFile = "unit test build file content";
4189
        }
3978
        }
Line 4242... Line 4031...
4242
     *	Used by the Master Daemon 
4031
     *	Used by the Master Daemon 
4243
     * 	Overridden in ReleaseManagerUtf 
4032
     * 	Overridden in ReleaseManagerUtf 
4244
     */
4033
     */
4245
    public void queryRunLevel(final int rtag_id) throws SQLException, Exception
4034
    public void queryRunLevel(final int rtag_id) throws SQLException, Exception
4246
    {
4035
    {
4247
        mLogger.debug("queryRunLevel 2 rtag_id " + rtag_id);
4036
        mLogger.debug("queryRunLevel 2 rtag_id {}", rtag_id);
4248
 
4037
 
4249
        mRunLevelCollection.clear();
4038
        mRunLevelCollection.clear();
4250
 
4039
 
4251
        try
4040
        try
4252
        {
4041
        {
Line 4331... Line 4120...
4331
     * @exception Exception Too many rows extracted from the database
4120
     * @exception Exception Too many rows extracted from the database
4332
     *                      Empty(NULL) data in database
4121
     *                      Empty(NULL) data in database
4333
     */
4122
     */
4334
    public void querySingleRunLevel(final int rcon_id, String hostname, char daemon_mode) throws SQLException, Exception
4123
    public void querySingleRunLevel(final int rcon_id, String hostname, char daemon_mode) throws SQLException, Exception
4335
    {
4124
    {
4336
        mLogger.debug("querySingleRunLevel rcon_id " + rcon_id);
4125
        mLogger.debug("querySingleRunLevel rcon_id {}", rcon_id);
4337
        mRunLevelCollection.clear();
4126
        mRunLevelCollection.clear();
4338
 
4127
 
4339
        try
4128
        try
4340
        {
4129
        {
4341
            connect();
4130
            connect();
Line 4479... Line 4268...
4479
 
4268
 
4480
                        if ( sr != null )
4269
                        if ( sr != null )
4481
                        {
4270
                        {
4482
                            Date scheduledResume = new Date( sr.getTime() );
4271
                            Date scheduledResume = new Date( sr.getTime() );
4483
                            int repeat = rset.getInt("repeat");
4272
                            int repeat = rset.getInt("repeat");
4484
                            mLogger.info("queryRunLevelSchedule repeat " + repeat);
4273
                            mLogger.info("queryRunLevelSchedule repeat {}", repeat);
4485
 
4274
 
4486
                            //
4275
                            //
4487
                            //  Have scheduled_pause and scheduled_resume
4276
                            //  Have scheduled_pause and scheduled_resume
4488
                            //  Examine the repeat field and determine how these are used
4277
                            //  Examine the repeat field and determine how these are used
4489
                            //  Supported repeat:
4278
                            //  Supported repeat:
Line 4597... Line 4386...
4597
            {
4386
            {
4598
                handleSQLException(e, ":2");
4387
                handleSQLException(e, ":2");
4599
            }
4388
            }
4600
        }
4389
        }
4601
 
4390
 
4602
        mLogger.info("queryRunLevelSchedule returning " + retVal);
4391
        mLogger.info("queryRunLevelSchedule returning {}", retVal);
4603
        return retVal;
4392
        return retVal;
4604
    }
4393
    }
4605
 
4394
 
4606
    /**persists the runLevel in the RUN_LEVEL table for the rcon_id primary key
4395
    /**persists the runLevel in the RUN_LEVEL table for the rcon_id primary key
4607
     * 
4396
     * 
Line 4617... Line 4406...
4617
 
4406
 
4618
        try
4407
        try
4619
        {
4408
        {
4620
            connect();
4409
            connect();
4621
 
4410
 
4622
            mLogger.warn("updateCurrentRunLevel: Set Runlevel:" + runLevel + ", rcon_id: " + rcon_id);
4411
            mLogger.warn("updateCurrentRunLevel: Set Runlevel:{}, rconId:{}", runLevel, rcon_id);
4623
            PreparedStatement stmt = mConnection.prepareCall("update release_manager.run_level set current_run_level=" + runLevel + ", keep_alive=SYSDATE where rcon_id=" + rcon_id);
4412
            PreparedStatement stmt = mConnection.prepareCall("update release_manager.run_level set current_run_level=" + runLevel + ", keep_alive=SYSDATE where rcon_id=" + rcon_id);
4624
            stmt.executeUpdate();
4413
            stmt.executeUpdate();
4625
            stmt.close();
4414
            stmt.close();
4626
 
4415
 
4627
            mLogger.info("updateCurrentRunLevel: committing");
4416
            mLogger.info("updateCurrentRunLevel: committing");
Line 4650... Line 4439...
4650
     * @param mBuildOrder - Ordered list of PackageVersions that we plan to build
4439
     * @param mBuildOrder - Ordered list of PackageVersions that we plan to build
4651
     * @throws Exception 
4440
     * @throws Exception 
4652
     * @throws SQLException 
4441
     * @throws SQLException 
4653
     */
4442
     */
4654
    public void reportPlan(int mRtagId, List<Package> mBuildOrder) throws SQLException, Exception {
4443
    public void reportPlan(int mRtagId, List<Package> mBuildOrder) throws SQLException, Exception {
4655
        mLogger.debug("reportPlan " + mRtagId);
4444
        mLogger.debug("reportPlan {}", mRtagId);
4656
 
4445
 
4657
        if ( mUseDatabase )
4446
        if ( mUseDatabase )
4658
        {
4447
        {
4659
            try
4448
            try
4660
            {
4449
            {
Line 4713... Line 4502...
4713
            }
4502
            }
4714
        }
4503
        }
4715
    }
4504
    }
4716
    
4505
    
4717
    public void updateBuildDuration(int pvId, int duration) throws Exception {
4506
    public void updateBuildDuration(int pvId, int duration) throws Exception {
4718
        mLogger.debug("updateBuildDuration " + pvId + ":" + duration);
4507
        mLogger.debug("updateBuildDuration {}:{}", pvId, duration);
4719
        if ( mUseDatabase )
4508
        if ( mUseDatabase )
4720
        {
4509
        {
4721
            try
4510
            try
4722
            {
4511
            {
4723
                connect();
4512
                connect();