From: <sc...@hy...> - 2009-12-07 02:45:14
|
Author: scottmf Date: 2009-12-06 18:44:59 -0800 (Sun, 06 Dec 2009) New Revision: 14037 URL: http://svn.hyperic.org/?view=rev&root=Hyperic+HQ&revision=14037 Modified: trunk/src/org/hyperic/hq/bizapp/server/session/EventsBossEJBImpl.java trunk/src/org/hyperic/hq/events/server/session/AlertDAO.java trunk/src/org/hyperic/hq/events/server/session/AlertDefinitionManagerEJBImpl.java trunk/src/org/hyperic/hq/events/server/session/EventLogDAO.java Log: [HHQ-3534] batched up deleting of alerts by alert definition. Lowered the batch size when deleting resource alert info to make sure it does not fail. Modified: trunk/src/org/hyperic/hq/bizapp/server/session/EventsBossEJBImpl.java =================================================================== --- trunk/src/org/hyperic/hq/bizapp/server/session/EventsBossEJBImpl.java 2009-12-07 02:42:31 UTC (rev 14036) +++ trunk/src/org/hyperic/hq/bizapp/server/session/EventsBossEJBImpl.java 2009-12-07 02:44:59 UTC (rev 14037) @@ -1840,7 +1840,7 @@ final boolean debug = log.isDebugEnabled(); final AlertDefinitionManagerLocal adm = getADM(); final List alertDefs = getADM().getAllDeletedAlertDefs(); - final int batchSize = 1000; + final int batchSize = 500; for (int i=0; i<alertDefs.size(); i+=batchSize) { final int end = Math.min(i+batchSize, alertDefs.size()); final List sublist = alertDefs.subList(i, end); Modified: trunk/src/org/hyperic/hq/events/server/session/AlertDAO.java =================================================================== --- trunk/src/org/hyperic/hq/events/server/session/AlertDAO.java 2009-12-07 02:42:31 UTC (rev 14036) +++ trunk/src/org/hyperic/hq/events/server/session/AlertDAO.java 2009-12-07 02:44:59 UTC (rev 14037) @@ -48,6 +48,10 @@ super(Alert.class, f); } + public Alert getById(Integer id) { + return (Alert)super.get(id); + } + public Alert findById(Integer id) { return (Alert)super.findById(id); } @@ -292,10 +296,28 @@ // last alert will eventually be put into the map lastAlerts.put(a.getAlertDefinition().getId(), a); } - return lastAlerts; } + + /** + * @param {@link List} of {@link AlertDefinition}s + * Deletes all {@link Alert}s associated with the {@link AlertDefinition}s + */ + int deleteByAlertDefinitions(List alertDefs) { + String sql = "DELETE FROM Alert WHERE alertDefinition in (:alertDefs)"; + int rtn = 0; + for (int i=0; i<alertDefs.size(); i+=BATCH_SIZE) { + int end = Math.min(i+BATCH_SIZE, alertDefs.size()); + rtn += getSession().createQuery(sql) + .setParameterList("alertDefs", alertDefs.subList(i, end)) + .executeUpdate(); + } + return rtn; + } + /** + * Deletes all {@link Alert}s associated with the {@link AlertDefinition} + */ int deleteByAlertDefinition(AlertDefinition def) { String sql = "DELETE FROM Alert WHERE alertDefinition = :alertDef"; Modified: trunk/src/org/hyperic/hq/events/server/session/AlertDefinitionManagerEJBImpl.java =================================================================== --- trunk/src/org/hyperic/hq/events/server/session/AlertDefinitionManagerEJBImpl.java 2009-12-07 02:42:31 UTC (rev 14036) +++ trunk/src/org/hyperic/hq/events/server/session/AlertDefinitionManagerEJBImpl.java 2009-12-07 02:44:59 UTC (rev 14037) @@ -796,14 +796,19 @@ final AlertDefinitionDAO aDao = getAlertDefDAO(); final ActionDAO actionDAO = getActionDAO(); try { + final List alertDefs = new ArrayList(alertDefIds.size()); for (final Iterator i = alertDefIds.iterator(); i.hasNext();) { final Integer alertdefId = (Integer) i.next(); final AlertDefinition alertdef = aDao.findById(alertdefId); + alertDefs.add(alertdef); + } + // Delete the alerts + if (debug) watch.markTimeBegin("deleteByAlertDefinition"); + dao.deleteByAlertDefinitions(alertDefs); + if (debug) watch.markTimeEnd("deleteByAlertDefinition"); - // Delete the alerts - if (debug) watch.markTimeBegin("deleteByAlertDefinition"); - dao.deleteByAlertDefinition(alertdef); - if (debug) watch.markTimeEnd("deleteByAlertDefinition"); + for (final Iterator i = alertDefs.iterator(); i.hasNext();) { + final AlertDefinition alertdef = (AlertDefinition) i.next(); // Remove the conditions if (debug) watch.markTimeBegin("remove conditions and triggers"); @@ -827,6 +832,7 @@ aDao.remove(alertdef); if (debug) watch.markTimeEnd("remove"); } + } finally { if (debug) log.debug("deleted " + alertDefIds.size() + " alertDefs: " + watch); } Modified: trunk/src/org/hyperic/hq/events/server/session/EventLogDAO.java =================================================================== --- trunk/src/org/hyperic/hq/events/server/session/EventLogDAO.java 2009-12-07 02:42:31 UTC (rev 14036) +++ trunk/src/org/hyperic/hq/events/server/session/EventLogDAO.java 2009-12-07 02:44:59 UTC (rev 14037) @@ -343,6 +343,9 @@ if (alertId == null) { continue; } + if (log.getResource().isInAsyncDeleteState()) { + continue; + } AlertFiredEvent alertFired = createAlertFiredEvent(alertDefId, alertId, log); rtn.put(alertDefId, alertFired); |