You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by nc...@apache.org on 2016/02/01 16:41:41 UTC
[04/39] ambari git commit: AMBARI-14812 - Alerts API Does Not Honor
JPA Sorting (jonathanhurley)
AMBARI-14812 - Alerts API Does Not Honor JPA Sorting (jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/73b5399b
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/73b5399b
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/73b5399b
Branch: refs/heads/branch-dev-patch-upgrade
Commit: 73b5399b12b4c17c119d37031d8e92ca398ca195
Parents: 29243e7
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Wed Jan 27 10:00:12 2016 -0500
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Wed Jan 27 15:47:17 2016 -0500
----------------------------------------------------------------------
.../AlertDefinitionResourceProvider.java | 4 ++-
.../internal/AlertResourceProvider.java | 6 ++--
.../ambari/server/orm/dao/AlertsDAOTest.java | 38 ++++++++++++++++++++
3 files changed, 45 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/73b5399b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertDefinitionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertDefinitionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertDefinitionResourceProvider.java
index 263a7b8..0f73ec6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertDefinitionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertDefinitionResourceProvider.java
@@ -23,6 +23,7 @@ import java.util.Collection;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -223,7 +224,8 @@ public class AlertDefinitionResourceProvider extends AbstractControllerResourceP
Set<String> requestPropertyIds = getRequestPropertyIds(request, predicate);
- Set<Resource> results = new HashSet<Resource>();
+ // use a collection which preserves order since JPA sorts the results
+ Set<Resource> results = new LinkedHashSet<Resource>();
for (Map<String, Object> propertyMap : getPropertyMaps(predicate)) {
String clusterName = (String) propertyMap.get(ALERT_DEF_CLUSTER_NAME);
http://git-wip-us.apache.org/repos/asf/ambari/blob/73b5399b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertResourceProvider.java
index 0492860..dc071e9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertResourceProvider.java
@@ -21,6 +21,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -43,9 +44,9 @@ import org.apache.ambari.server.orm.dao.AlertsDAO;
import org.apache.ambari.server.orm.entities.AlertCurrentEntity;
import org.apache.ambari.server.orm.entities.AlertDefinitionEntity;
import org.apache.ambari.server.orm.entities.AlertHistoryEntity;
+import org.apache.commons.lang.StringUtils;
import com.google.inject.Inject;
-import org.apache.commons.lang.StringUtils;
/**
* ResourceProvider for Alert instances
@@ -150,7 +151,8 @@ public class AlertResourceProvider extends ReadOnlyResourceProvider implements
Set<String> requestPropertyIds = getRequestPropertyIds(request, predicate);
- Set<Resource> results = new HashSet<Resource>();
+ // use a collection which preserves order since JPA sorts the results
+ Set<Resource> results = new LinkedHashSet<Resource>();
for (Map<String, Object> propertyMap : getPropertyMaps(predicate)) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/73b5399b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertsDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertsDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertsDAOTest.java
index 0bbe998..10f099e 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertsDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/AlertsDAOTest.java
@@ -412,6 +412,44 @@ public class AlertsDAOTest {
}
/**
+ * Tests that the Ambari sort is correctly applied to JPA quuery.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testAlertCurrentSorting() throws Exception {
+ AlertCurrentRequest request = new AlertCurrentRequest();
+
+ Predicate clusterPredicate = new PredicateBuilder().property(
+ AlertResourceProvider.ALERT_CLUSTER_NAME).equals(m_cluster.getClusterName()).toPredicate();
+
+ request.Predicate = clusterPredicate;
+
+ SortRequestProperty sortRequestProperty = new SortRequestProperty(AlertResourceProvider.ALERT_ID, Order.ASC);
+ request.Sort = new SortRequestImpl(Collections.singletonList(sortRequestProperty));
+
+ List<AlertCurrentEntity> currentAlerts = m_dao.findAll(request);
+ assertTrue(currentAlerts.size() >= 5);
+ long lastId = Long.MIN_VALUE;
+ for (AlertCurrentEntity alert : currentAlerts) {
+ assertTrue(lastId < alert.getAlertId());
+ lastId = alert.getAlertId();
+ }
+
+ // change the sort to DESC
+ sortRequestProperty = new SortRequestProperty(AlertResourceProvider.ALERT_ID, Order.DESC);
+ request.Sort = new SortRequestImpl(Collections.singletonList(sortRequestProperty));
+
+ currentAlerts = m_dao.findAll(request);
+ assertTrue(currentAlerts.size() >= 5);
+ lastId = Long.MAX_VALUE;
+ for (AlertCurrentEntity alert : currentAlerts) {
+ assertTrue(lastId > alert.getAlertId());
+ lastId = alert.getAlertId();
+ }
+ }
+
+ /**
* Tests that the {@link AlertCurrentEntity} fields are updated properly when
* a new {@link AlertHistoryEntity} is associated.
*