modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceCriteria.java | 20 +++++++++-
modules/core/domain/src/main/java/org/rhq/core/domain/resource/InventoryStatus.java | 12 +++++-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryServerServiceImpl.java | 16 +++-----
3 files changed, 37 insertions(+), 11 deletions(-)
New commits:
commit 5c08fe27afdd5712622fb2f212e6496bdd082976
Author: Jay Shaughnessy <jshaughn(a)jshaughn.csb>
Date: Fri Feb 1 12:50:50 2013 -0500
Fix up some stuff in getResourcesAsList
- new filtering for better perf
- pull optional data we need to send to the agent
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryServerServiceImpl.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryServerServiceImpl.java
index 4a269da..70e993a 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryServerServiceImpl.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryServerServiceImpl.java
@@ -176,21 +176,19 @@ public class DiscoveryServerServiceImpl implements DiscoveryServerService {
long start = System.currentTimeMillis();
ResourceCriteria criteria = new ResourceCriteria();
+ // get all of the resources for the supplied ids
criteria.addFilterIds(resourceIds);
- criteria.addFilterInventoryStatus(null); // get them all and remove some later
+ // filter out any that are not actually in inventory
+ criteria.addFilterInventoryStatuses(new ArrayList<InventoryStatus>(InventoryStatus.getInInventorySet()));
+ // get all of them, don't limit to default paging
criteria.clearPaging();
+ criteria.fetchResourceType(true);
+ criteria.fetchPluginConfiguration(true);
ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
Subject overlord = LookupUtil.getSubjectManager().getOverlord();
- List<Resource> resources = resourceManager.findResourcesByCriteria(overlord, criteria);
- List<Resource> result = new ArrayList<Resource>(resources.size());
+ List<Resource> result = resourceManager.findResourcesByCriteria(overlord, criteria);
- for (Resource r : resources) {
- if (isVisibleInInventory(r)) {
- Resource resourcePojo = convertToPojoResource(r, false);
- result.add(resourcePojo);
- }
- }
if (log.isDebugEnabled()) {
log.debug("Performance: get ResourcesAsList [" + resourceIds + "], timing ("
+ (System.currentTimeMillis() - start) + ")ms");
commit 5c6b126d93845163b2d8138995cd9d70538084cf
Author: Jay Shaughnessy <jshaughn(a)jshaughn.csb>
Date: Fri Feb 1 12:50:01 2013 -0500
Add a new filter for ResourceCriteria, for a list of
InventoryStatuses. And also add a convenience method
to InventoryStatus to get just the set of enums for resources
in Inventory.
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceCriteria.java
index 066c84f..96b51fa 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceCriteria.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceCriteria.java
@@ -49,6 +49,7 @@ public class ResourceCriteria extends TaggedCriteria {
private String filterName;
private String filterResourceKey;
private InventoryStatus filterInventoryStatus = InventoryStatus.COMMITTED; // default
+ private List<InventoryStatus> filterInventoryStatuses; // needs overrides
private String filterVersion;
private String filterDescription;
private Integer filterResourceTypeId; // needs overrides
@@ -68,7 +69,7 @@ public class ResourceCriteria extends TaggedCriteria {
private List<Integer> filterIds; // needs overrides
private List<Integer> filterExplicitGroupIds; // requires overrides
private List<Integer> filterImplicitGroupIds; // requires overrides
- private Integer filterRootResourceId; // requires overrides
+ private Integer filterRootResourceId; // requires overrides
private boolean fetchResourceType;
private boolean fetchChildResources;
@@ -133,6 +134,7 @@ public class ResourceCriteria extends TaggedCriteria {
+ " WHERE implicitGroup.id IN ( ? ) )");
filterOverrides.put("rootResourceId", "agent.id = (SELECT r2.agent.id FROM Resource r2 where r2.id = ?)");
filterOverrides.put("resourceTypeIds", "resourceType.id IN (?)");
+ filterOverrides.put("inventoryStatuses", "inventoryStatus IN ( ? )");
sortOverrides.put("resourceTypeName", "resourceType.name");
sortOverrides.put("resourceCategory", "resourceType.category");
@@ -160,10 +162,26 @@ public class ResourceCriteria extends TaggedCriteria {
this.filterResourceKey = filterResourceKey;
}
+ /**
+ * Note, by default this filter is set to COMMITTED. This must be explicitly set to null to get all
+ * Resources.
+ *
+ * @param filterInventoryStatus
+ */
public void addFilterInventoryStatus(InventoryStatus filterInventoryStatus) {
this.filterInventoryStatus = filterInventoryStatus;
}
+ /**
+ * Note, setting this filter will set filterInventoryStatus to null since that is a mutually exclusive filter.
+ *
+ * @param filterInventoryStatus
+ */
+ public void addFilterInventoryStatuses(List<InventoryStatus> filterInventoryStatuses) {
+ this.filterInventoryStatuses = filterInventoryStatuses;
+ this.filterInventoryStatus = null;
+ }
+
public void addFilterVersion(String filterVersion) {
this.filterVersion = filterVersion;
}
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/InventoryStatus.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/InventoryStatus.java
index 16d21ab..e8d8797 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/InventoryStatus.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/InventoryStatus.java
@@ -22,6 +22,8 @@
*/
package org.rhq.core.domain.resource;
+import java.util.EnumSet;
+
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlEnum;
@@ -52,5 +54,13 @@ public enum InventoryStatus {
* resources, after which they are removed from the database completely.</li>
* </ul>
*/
- NEW, IGNORED, COMMITTED, DELETED, UNINVENTORIED
+ NEW, IGNORED, COMMITTED, DELETED, UNINVENTORIED;
+
+ /**
+ * @return Returns the InventoryStatus set representing the resources currently in inventory, omitting
+ * the resources marked for special processing (like UNINVNETORIED).
+ */
+ static public EnumSet<InventoryStatus> getInInventorySet() {
+ return EnumSet.of(NEW, IGNORED, COMMITTED);
+ }
}
\ No newline at end of file