modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementBaseline.java
| 4
modules/core/domain/src/test/java/org/rhq/core/domain/measurement/test/MeasurementBaselineTest.java
| 54 ----------
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementBaselineManagerBean.java
| 11 --
3 files changed, 5 insertions(+), 64 deletions(-)
New commits:
commit 35001d92bab83871f901156f82309fd58665ddb7
Author: John Sanda <jsanda(a)redhat.com>
Date: Fri May 31 13:19:42 2013 -0400
refactor query to find schedules without baselines
The JPQL query previously used resulted in a very inefficient cross join that
could result in statement timeouts in the database with a just a moderately
large number of schedules. This commit removes MeasurementBaselineTest since it
only tested the query that has been replaced. There is already test coverage
of the query in MeasurementBaselineManagerTest.
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementBaseline.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementBaseline.java
index 743c12a..5bd0e8b 100644
---
a/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementBaseline.java
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementBaseline.java
@@ -42,9 +42,6 @@ import javax.persistence.Table;
@Entity
@NamedQueries( {
- @NamedQuery(name =
MeasurementBaseline.QUERY_FIND_MEASUREMENT_SCHEDULES_WITHOUT_AUTOBASELINES, query =
"SELECT schedule FROM MeasurementSchedule schedule "
- + "WHERE schedule.definition.numericType = 0 AND "
- + "schedule.id NOT IN (SELECT mb.schedule.id FROM MeasurementBaseline
mb)"),
@NamedQuery(name = MeasurementBaseline.QUERY_FIND_BY_RESOURCE, query = "SELECT
mb FROM MeasurementBaseline mb WHERE mb.schedule.resource.id = :resourceId"),
@NamedQuery(name = MeasurementBaseline.QUERY_FIND_BY_RESOURCE_IDS_AND_DEF_IDS, query
= "SELECT mb FROM MeasurementBaseline mb "
+ "WHERE mb.schedule.resource.id IN (:resourceIds) AND
mb.schedule.definition.id IN (:definitionIds)"),
@@ -72,7 +69,6 @@ public class MeasurementBaseline implements Serializable {
public static final String QUERY_DELETE_BY_RESOURCES =
"MeasurementBaseline.deleteByResources";
public static final String QUERY_CALC_FIRST_AUTOBASELINE =
"MeasurementBaseline.calcFirstAutoBaseline";
public static final String QUERY_DELETE_EXISTING_AUTOBASELINES =
"MeasurementBaseline.deleteExistingAutoBaseline";
- public static final String QUERY_FIND_MEASUREMENT_SCHEDULES_WITHOUT_AUTOBASELINES =
"MeasurementBaseline.findMetricSchedulesWithoutAutoBaselines";
private static final long serialVersionUID = 1L;
@GeneratedValue(strategy = GenerationType.AUTO, generator =
"RHQ_MEASUREMENT_BLINE_ID_SEQ")
diff --git
a/modules/core/domain/src/test/java/org/rhq/core/domain/measurement/test/MeasurementBaselineTest.java
b/modules/core/domain/src/test/java/org/rhq/core/domain/measurement/test/MeasurementBaselineTest.java
deleted file mode 100644
index 57d45e0..0000000
---
a/modules/core/domain/src/test/java/org/rhq/core/domain/measurement/test/MeasurementBaselineTest.java
+++ /dev/null
@@ -1,54 +0,0 @@
- /*
- * RHQ Management Platform
- * Copyright (C) 2005-2008 Red Hat, Inc.
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License, version 2, as
- * published by the Free Software Foundation, and/or the GNU Lesser
- * General Public License, version 2.1, also 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 and the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License
- * and the GNU Lesser General Public License along with this program;
- * if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.rhq.core.domain.measurement.test;
-
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
-
-import org.testng.annotations.Test;
-
-import org.rhq.core.domain.measurement.MeasurementBaseline;
-import org.rhq.core.domain.test.AbstractEJB3Test;
-
-/**
- * Tests for MeasurementBaseline entity
- *
- * @author Stefan Negrea
- */
-@Test(groups = "integration.ejb3")
-public class MeasurementBaselineTest extends AbstractEJB3Test {
-
- @Test
- public void testSelectQuery() throws Exception {
- EntityManager entityManager = getEntityManager();
- Query query = entityManager
-
.createNamedQuery(MeasurementBaseline.QUERY_FIND_MEASUREMENT_SCHEDULES_WITHOUT_AUTOBASELINES);
- List<String> rows = query.getResultList();
-
System.out.println("----------------------------------------------------------------------------");
- System.out.println(rows.size());
- System.out.println(rows);
-
System.out.println("----------------------------------------------------------------------------");
- }
-}
\ No newline at end of file
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementBaselineManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementBaselineManagerBean.java
index 22ebb71..c18ff97 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementBaselineManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementBaselineManagerBean.java
@@ -189,8 +189,6 @@ public class MeasurementBaselineManagerBean implements
MeasurementBaselineManage
* In any event, an appropriate chunking solution needs to be found, and
that partitioning strategy
* needs to replace the limits in the query today.
*/
-// int schedulesWithoutBaselines = measurementBaselineManager
-// ._calculateAutoBaselinesINSERT(amountOfData);
List<MeasurementSchedule> schedulesWithoutBaselines =
measurementBaselineManager.getSchedulesWithoutBaselines();
measurementBaselineManager.calculateBaselines(schedulesWithoutBaselines,
now, amountOfData);
@@ -225,12 +223,13 @@ public class MeasurementBaselineManagerBean implements
MeasurementBaselineManage
@SuppressWarnings("unchecked")
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public List<MeasurementSchedule> getSchedulesWithoutBaselines() {
- Query query = this.entityManager
-
.createNamedQuery(MeasurementBaseline.QUERY_FIND_MEASUREMENT_SCHEDULES_WITHOUT_AUTOBASELINES);
+ String sql =
+ "SELECT s.* FROM rhq_measurement_sched s INNER JOIN rhq_measurement_def
d ON s.definition = d.id " +
+ "LEFT JOIN rhq_measurement_bline b ON s.id = b.schedule_id WHERE
b.schedule_id IS NULL AND d.numeric_type = 0";
+ Query query = this.entityManager.createNativeQuery(sql,
MeasurementSchedule.class);
query.setMaxResults(BASELINE_PROCESSING_LIMIT);
- List<MeasurementSchedule> scheduleIdsWithoutBaselines =
query.getResultList();
- return scheduleIdsWithoutBaselines;
+ return query.getResultList();
}
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
Show replies by date