From: <sc...@hy...> - 2008-09-29 05:27:38
|
Author: scottmf Date: 2008-09-28 22:27:15 -0700 (Sun, 28 Sep 2008) New Revision: 11328 URL: http://svn.hyperic.org/?view=rev&root=Hyperic+HQ&revision=11328 Added: trunk/src/org/hyperic/hq/measurement/server/session/SynchronousAvailDataInserter.java Modified: trunk/src/org/hyperic/hq/measurement/server/mbean/AvailabilityCheckService.java trunk/src/org/hyperic/hq/measurement/server/session/DataManagerEJBImpl.java trunk/src/org/hyperic/hq/measurement/server/session/ReportProcessorEJBImpl.java trunk/src/org/hyperic/hq/measurement/server/session/SynchronousDataInserter.java Log: [HHQ-2515] extended BatchAggregateInserter to allow Availability to be inserted via a separate queuing mechanism. Batched backfiller so that transactions are not too long. Modified: trunk/src/org/hyperic/hq/measurement/server/mbean/AvailabilityCheckService.java =================================================================== --- trunk/src/org/hyperic/hq/measurement/server/mbean/AvailabilityCheckService.java 2008-09-29 05:22:12 UTC (rev 11327) +++ trunk/src/org/hyperic/hq/measurement/server/mbean/AvailabilityCheckService.java 2008-09-29 05:27:15 UTC (rev 11328) @@ -201,7 +201,14 @@ backfillList.add(point); } } - availMan.addData(backfillList); + final int batchSize = 500; + int i=0; + for (i=0; (i+batchSize)<backfillList.size(); i+=batchSize) { + availMan.addData(backfillList.subList(i, i+batchSize)); + } + if (backfillList.size() > i) { + availMan.addData(backfillList.subList(i, backfillList.size())); + } } } Modified: trunk/src/org/hyperic/hq/measurement/server/session/DataManagerEJBImpl.java =================================================================== --- trunk/src/org/hyperic/hq/measurement/server/session/DataManagerEJBImpl.java 2008-09-29 05:22:12 UTC (rev 11327) +++ trunk/src/org/hyperic/hq/measurement/server/session/DataManagerEJBImpl.java 2008-09-29 05:27:15 UTC (rev 11328) @@ -233,34 +233,13 @@ /** * Write metric data points to the DB with transaction * - * @param data a list of {@link MeasDataPoint}s + * @param data a list of {@link DataPoint}s * @throws NumberFormatException if the value from the * DataPoint.getMetricValue() cannot instantiate a BigDecimal * * @ejb:interface-method */ public boolean addData(List data) { - AvailabilityManagerLocal aMan = AvailabilityManagerEJBImpl.getOne(); - List aPoints = new ArrayList(data.size()); - List dPoints = new ArrayList(data.size()); - for (Iterator it=data.iterator(); it.hasNext(); ) { - MeasDataPoint pt = (MeasDataPoint)it.next(); - if (pt.isAvail()) { - aPoints.add(pt); - } else { - dPoints.add(pt); - } - } - // don't want to lose datapoints, so do this in a try/catch - try { - aMan.addData(aPoints); - } catch (Throwable t) { - _log.error(t.getMessage(), t); - } - return _addData(dPoints); - } - - private boolean _addData(List data) { if (shouldAbortDataInsertion(data)) { return true; } Modified: trunk/src/org/hyperic/hq/measurement/server/session/ReportProcessorEJBImpl.java =================================================================== --- trunk/src/org/hyperic/hq/measurement/server/session/ReportProcessorEJBImpl.java 2008-09-29 05:22:12 UTC (rev 11327) +++ trunk/src/org/hyperic/hq/measurement/server/session/ReportProcessorEJBImpl.java 2008-09-29 05:27:15 UTC (rev 11328) @@ -64,7 +64,7 @@ extends SessionEJB implements SessionBean { - private final Log log = LogFactory.getLog(ReportProcessorEJBImpl.class); + private final Log _log = LogFactory.getLog(ReportProcessorEJBImpl.class); private final MeasurementManagerLocal _dmMan = MeasurementManagerEJBImpl.getOne(); @@ -73,18 +73,21 @@ private void addPoint(List points, Measurement m, MetricValue[] vals) { + final boolean debug = _log.isDebugEnabled(); for (int i=0; i<vals.length; i++) { try { //this is just to check if the metricvalue is valid //will throw a NumberFormatException if there is a problem new BigDecimal(vals[i].getValue()); - MeasDataPoint pt = new MeasDataPoint( - m.getId(), vals[i], m.getTemplate().isAvailability()); + DataPoint pt = new DataPoint(m.getId(), vals[i]); points.add(pt); + if (debug && m.getTemplate().isAvailability()) { + _log.debug("availability -> " + pt); + } } catch(NumberFormatException e) { - log.warn("Unable to insert: " + e.getMessage() + - ", metric id=" + m); + _log.warn("Unable to insert: " + e.getMessage() + + ", metric id=" + m); } } } @@ -96,7 +99,7 @@ // Safeguard against an anomaly if (interval <= 0) { - log.warn("Measurement had bogus interval[" + interval + "]: " + m); + _log.warn("Measurement had bogus interval[" + interval + "]: " + m); interval = 60 * 1000; } @@ -160,9 +163,11 @@ } } - // want to batch availability points separate from data points - sendMetricDataToDB(dataPoints); - sendMetricDataToDB(availPoints); + DataInserter d = MeasurementStartupListener.getDataInserter(); + sendMetricDataToDB(d, dataPoints); + DataInserter a = MeasurementStartupListener.getAvailDataInserter(); + sendMetricDataToDB(a, availPoints); + // Check the SRNs to make sure the agent is up-to-date SRNManagerLocal srnManager = getSRNManager(); Collection nonEntities = srnManager.reportAgentSRNs(report.getSRNList()); @@ -174,7 +179,7 @@ try { _measurementProc.unschedule(report.getAgentToken(), entIds); } catch (MeasurementUnscheduleException e) { - log.error("Cannot unschedule entities: " + + _log.error("Cannot unschedule entities: " + StringUtil.arrayToString(entIds)); } } @@ -183,11 +188,9 @@ /** * Sends the actual data to the DB. */ - private void sendMetricDataToDB(List dataPoints) + private void sendMetricDataToDB(DataInserter d, List dataPoints) throws DataInserterException { - DataInserter d = MeasurementStartupListener.getDataInserter(); - try { d.insertMetrics(dataPoints); int size = dataPoints.size(); Added: trunk/src/org/hyperic/hq/measurement/server/session/SynchronousAvailDataInserter.java =================================================================== --- trunk/src/org/hyperic/hq/measurement/server/session/SynchronousAvailDataInserter.java (rev 0) +++ trunk/src/org/hyperic/hq/measurement/server/session/SynchronousAvailDataInserter.java 2008-09-29 05:27:15 UTC (rev 11328) @@ -0,0 +1,41 @@ +/* + * NOTE: This copyright does *not* cover user programs that use HQ + * program services by normal system calls through the application + * program interfaces provided as part of the Hyperic Plug-in Development + * Kit or the Hyperic Client Development Kit - this is merely considered + * normal use of the program, and does *not* fall under the heading of + * "derived work". + * + * Copyright (C) [2004-2008], Hyperic, Inc. + * This file is part of HQ. + * + * HQ is free software; you can redistribute it and/or modify + * it under the terms version 2 of the GNU General Public License as + * published by the Free Software Foundation. This program is distributed + * in the hope that it will be useful, but WITHOUT ANY WARRANTY; without + * even the implied warranty of MERCHANTABILITY or FITNESS FOR A + * PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA. + */ + +package org.hyperic.hq.measurement.server.session; + +import java.util.List; + +import org.hyperic.hq.measurement.shared.AvailabilityManagerLocal; + +public class SynchronousAvailDataInserter implements DataInserter { + + AvailabilityManagerLocal _aMan = AvailabilityManagerEJBImpl.getOne(); + + public void insertMetrics(List availData) + throws InterruptedException, DataInserterException { + _aMan.addData(availData); + } + +} Modified: trunk/src/org/hyperic/hq/measurement/server/session/SynchronousDataInserter.java =================================================================== --- trunk/src/org/hyperic/hq/measurement/server/session/SynchronousDataInserter.java 2008-09-29 05:22:12 UTC (rev 11327) +++ trunk/src/org/hyperic/hq/measurement/server/session/SynchronousDataInserter.java 2008-09-29 05:27:15 UTC (rev 11328) @@ -36,7 +36,7 @@ public class SynchronousDataInserter implements DataInserter { - private DataManagerLocal _dMan = DataManagerEJBImpl.getOne(); + private final DataManagerLocal _dMan = DataManagerEJBImpl.getOne(); public void insertMetrics(List metricData) throws InterruptedException { _dMan.addData(metricData); |