Build History Cleanup Errors

I am trying to cleanup build history and artifacts but it is throwing exceptions. We are preparing to switch to an external database and need to do some cleanup but I'm not sure what is wrong or why it fails to do any cleanup. i am using build 8222.

Exception in thread "ManualCleanupTimer" org.springframework.jdbc.UncategorizedSQLException: Error executing update with params:[[816, 817, 818, 819, 820, 821, 822, 824, 825, 827, 829, 831, 833, 835, 837, 839, 842, 843, 845, 847, 849, 852, 853, 855, 858, 859, 861, 863, 865, 867, 870, 873, 874, 876, 878, 879, 880, 882, 886, 887, 888, 891, 893, 894, 896, 899, 901, 904, 905, 907, 910, 911, 913, 915, 917, 919, 920, 923, 924, 927, 930, 932, 933, 935, 936, 938, 940, 943, 945, 946, 950, 953, 955, 957, 959, 961, 1224, 1225, 1226, 1228, 1230, 1232, 1234, 1235, 1237, 1240, 1241, 1243, 1246, 1247, 1249, 1252, 1253, 1255, 1257, 1259, 1261, 1263, 1265, 1268, 1269, 1271, 1273, 1274, 1281, 1282, 1285, 1287, 1296, 1299, 1301, 1303, 1305, 1308, 1310, 1311, 1312, 1314, 1316, 1318, 1320, 1322, 1324, 1326, 1327, 1328, 1330, 1331, 1333, 1335, 1337, 1339, 1341, 1343, 1345, 1347, 1349, 1352, 1354, 1356, 1357, 1369, 1370, 1372, 1374, 1377, 1379, 1382, 1383, 1385, 1387, 1403, 1412, 1414, 1416, 1425, 1429, 1432, 1433, 1438, 1439, 1442, 1443, 1445, 1451, 1452, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 1467, 1469, 1472, 1473, 1476, 1478, 1479, 1481, 1483, 1485, 1487, 1489, 1490, 1492, 1494, 1498, 1502, 1504, 1505, 1507, 1510, 1511, 1514, 1515, 1518, 1520, 1521, 1526, 1528, 1529, 1532, 1534, 1535, 1537, 1538, 1540, 1542, 1547, 1549, 1551, 1553, 1555, 1558, 1560, 1561, 1564, 1566, 1568, 1570, 1572, 1574, 1577, 1578, 1581, 1583, 1586, 1587, 1589, 1591, 1593, 1596, 1600, 1601, 1603, 1605, 1606, 1607, 1609, 1611, 1613, 1614, 1617, 1619, 1621, 1623, 1625, 1638, 1653, 1654, 1658, 1666, 1668, 1670, 1672, 1675, 1676, 1678, 1680, 1682, 1684, 1686, 1688, 1690, 1692, 1694, 1696, 1698, 1701, 1702, 1704, 1706, 1711, 1712, 1714, 1716, 1718, 1720, 1722, 1724, 1726, 1728, 1730, 1732, 1735, 1736, 1738, 1742, 1744, 1745, 1747, 1749, 1750, 1752, 1753, 1754, 1755, 1757]]; uncategorized SQLException for SQL [INSERT INTO light_history ( BUILD_ID, BUILD_STATE_ID, AGENT_NAME, BUILD_TYPE_ID, PROJECT_ID, BUILD_START_TIME_SERVER, BUILD_FINISH_TIME_SERVER, STATUS, STATUS_TEXT, PIN, IS_PERSONAL, IS_CANCELED, BUILD_NUMBER, REQUESTOR, QUEUED_TIME, REMOVE_FROM_QUEUE_TIME, BUILD_START_TIME_AGENT, USER_STATUS_TEXT )  SELECT BUILD_ID, BUILD_STATE_ID, AGENT_NAME, BUILD_TYPE_ID, PROJECT_ID, BUILD_START_TIME_SERVER, BUILD_FINISH_TIME_SERVER, STATUS, STATUS_TEXT, PIN, IS_PERSONAL, IS_CANCELED, BUILD_NUMBER, REQUESTOR, QUEUED_TIME, REMOVE_FROM_QUEUE_TIME, BUILD_START_TIME_AGENT, USER_STATUS_TEXT  FROM history WHERE BUILD_ID  in (???)]; SQL state [23000]; error code [-104]; Violation of unique constraint SYS_PK_205: duplicate value(s) for column(s) BUILD_ID in statement [INSERT INTO light_history ( BUILD_ID, BUILD_STATE_ID, AGENT_NAME, BUILD_TYPE_ID, PROJECT_ID, BUILD_START_TIME_SERVER, BUILD_FINISH_TIME_SERVER, STATUS, STATUS_TEXT, PIN, IS_PERSONAL, IS_CANCELED, BUILD_NUMBER, REQUESTOR, QUEUED_TIME, REMOVE_FROM_QUEUE_TIME, BUILD_START_TIME_AGENT, USER_STATUS_TEXT )  SELECT BUILD_ID, BUILD_STATE_ID, AGENT_NAME, BUILD_TYPE_ID, PROJECT_ID, BUILD_START_TIME_SERVER, BUILD_FINISH_TIME_SERVER, STATUS, STATUS_TEXT, PIN, IS_PERSONAL, IS_CANCELED, BUILD_NUMBER, REQUESTOR, QUEUED_TIME, REMOVE_FROM_QUEUE_TIME, BUILD_START_TIME_AGENT, USER_STATUS_TEXT  FROM history WHERE BUILD_ID  in (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)]; nested exception is java.sql.SQLException: Violation of unique constraint SYS_PK_205: duplicate value(s) for column(s) BUILD_ID in statement [INSERT INTO light_history ( BUILD_ID, BUILD_STATE_ID, AGENT_NAME, BUILD_TYPE_ID, PROJECT_ID, BUILD_START_TIME_SERVER, BUILD_FINISH_TIME_SERVER, STATUS, STATUS_TEXT, PIN, IS_PERSONAL, IS_CANCELED, BUILD_NUMBER, REQUESTOR, QUEUED_TIME, REMOVE_FROM_QUEUE_TIME, BUILD_START_TIME_AGENT, USER_STATUS_TEXT )  SELECT BUILD_ID, BUILD_STATE_ID, AGENT_NAME, BUILD_TYPE_ID, PROJECT_ID, BUILD_START_TIME_SERVER, BUILD_FINISH_TIME_SERVER, STATUS, STATUS_TEXT, PIN, IS_PERSONAL, IS_CANCELED, BUILD_NUMBER, REQUESTOR, QUEUED_TIME, REMOVE_FROM_QUEUE_TIME, BUILD_START_TIME_AGENT, USER_STATUS_TEXT  FROM history WHERE BUILD_ID  in (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)]
        at jetbrains.buildServer.serverSide.impl.query.GenericQuery.executeUpdate(GenericQuery.java:86)
        at jetbrains.buildServer.serverSide.impl.query.GenericQuery$3.run(GenericQuery.java:2)
        at jetbrains.buildServer.serverSide.impl.query.GenericQuery$3.run(GenericQuery.java:1)
        at jetbrains.buildServer.serverSide.impl.DBFacade$4.doInConnection(DBFacade.java:1)
        at jetbrains.buildServer.serverSide.impl.DBFacade$5.doInConnection(DBFacade.java:0)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:341)
        at jetbrains.buildServer.serverSide.impl.DBFacade._runSql(DBFacade.java:89)
        at jetbrains.buildServer.serverSide.impl.DBFacade.runSql(DBFacade.java:31)
        at jetbrains.buildServer.serverSide.impl.query.GenericQuery.executeUpdate(GenericQuery.java:13)
        at jetbrains.buildServer.serverSide.impl.cleanup.HistoryEntryCleaner.executeInUpdate(HistoryEntryCleaner.java:131)
        at jetbrains.buildServer.serverSide.impl.cleanup.HistoryEntryCleaner.executeInUpdate(HistoryEntryCleaner.java:260)
        at jetbrains.buildServer.serverSide.impl.cleanup.HistoryEntryCleaner.performCleanup(HistoryEntryCleaner.java:254)
        at jetbrains.buildServer.serverSide.impl.cleanup.HistoryEntryCleaner.performCleanup(HistoryEntryCleaner.java:162)
        at jetbrains.buildServer.serverSide.impl.cleanup.ServerCleanupManagerImpl$3.performCleanup(ServerCleanupManagerImpl.java:0)
        at jetbrains.buildServer.serverSide.impl.DBFacade$1$1.doInConnection(DBFacade.java:2)
        at jetbrains.buildServer.serverSide.impl.DBFacade$5.doInConnection(DBFacade.java:0)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:341)
        at jetbrains.buildServer.serverSide.impl.DBFacade._runSql(DBFacade.java:89)
        at jetbrains.buildServer.serverSide.impl.DBFacade.access$000(DBFacade.java:99)
        at jetbrains.buildServer.serverSide.impl.DBFacade$1.doInTransaction(DBFacade.java:2)
        at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:128)
        at jetbrains.buildServer.serverSide.impl.DBFacade.compact(DBFacade.java:123)
        at jetbrains.buildServer.serverSide.impl.cleanup.ServerCleanupManagerImpl.startCleanup(ServerCleanupManagerImpl.java:68)
        at jetbrains.buildServer.serverSide.impl.cleanup.ServerCleanupManagerImpl$$FastClassByCGLIB$$ba2c8525.invoke(<generated>)
        at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
        at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:700)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
        at jetbrains.buildServer.serverSide.impl.auth.TeamCityMethodSecurityInterceptor.invoke(TeamCityMethodSecurityInterceptor.java:10)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at org.springframework.aop.framework.Cglib2AopProxy$FixedChainStaticTargetInterceptor.intercept(Cglib2AopProxy.java:582)
        at jetbrains.buildServer.serverSide.impl.cleanup.ServerCleanupManagerImpl$$EnhancerByCGLIB$$e434e0a5.startCleanup(<generated>)
        at jetbrains.buildServer.controllers.admin.cleanup.AdminEditCleanupPoliciesController$5.run(AdminEditCleanupPoliciesController.java:2)
        at java.util.TimerThread.mainLoop(Timer.java:512)
        at java.util.TimerThread.run(Timer.java:462)
Caused by: java.sql.SQLException: Violation of unique constraint SYS_PK_205: duplicate value(s) for column(s) BUILD_ID in statement [INSERT INTO light_history ( BUILD_ID, BUILD_STATE_ID, AGENT_NAME, BUILD_TYPE_ID, PROJECT_ID, BUILD_START_TIME_SERVER, BUILD_FINISH_TIME_SERVER, STATUS, STATUS_TEXT, PIN, IS_PERSONAL, IS_CANCELED, BUILD_NUMBER, REQUESTOR, QUEUED_TIME, REMOVE_FROM_QUEUE_TIME, BUILD_START_TIME_AGENT, USER_STATUS_TEXT )  SELECT BUILD_ID, BUILD_STATE_ID, AGENT_NAME, BUILD_TYPE_ID, PROJECT_ID, BUILD_START_TIME_SERVER, BUILD_FINISH_TIME_SERVER, STATUS, STATUS_TEXT, PIN, IS_PERSONAL, IS_CANCELED, BUILD_NUMBER, REQUESTOR, QUEUED_TIME, REMOVE_FROM_QUEUE_TIME, BUILD_START_TIME_AGENT, USER_STATUS_TEXT  FROM history WHERE BUILD_ID  in (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)]
        at org.hsqldb.jdbc.Util.throwError(Unknown Source)
        at org.hsqldb.jdbc.jdbcPreparedStatement.executeUpdate(Unknown Source)
        at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:102)
        at jetbrains.buildServer.serverSide.impl.query.GenericQuery.executeUpdate(GenericQuery.java:45)
        ... 33 more

2 comments
Comment actions Permalink

It looks like server was killed during cleanup process. light_history table is a copy of history table. To this table records from the history table are moved. Then light_history table is used in statistics only. According to this error TeamCity tries to insert into the light_history records which already exist in this table. To fix this problem you can invoke the following SQL command:
DELETE FROM light_history WHERE BUILD_ID IN (SELECT BUILD_ID FROM history)

If you are using HSQLDB you need to shutdown TeamCity server. Then use HSQLDB SqlTool to invoke SQL command: http://hsqldb.org/doc/guide/ch08.html

0
Comment actions Permalink

Pavel,
Thank you. I went ahead a just deleted a ton of archives from the file system and then we did the db migration to mysql (finally - remember me from the slow server problem?). Anyway, it appears to be much faster.

This worked! Thanks for the support!

---Melody

0

Please sign in to leave a comment.