modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/discovery/DiscoveryBossBeanTest.java
| 40 +++++++++-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
| 25 +++---
2 files changed, 49 insertions(+), 16 deletions(-)
New commits:
commit 2b5f6f69c6a31e157fb7a76e7f0168a5ad974150
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Mar 21 15:53:45 2013 -0400
BZ 535289 - the server will now return all ignored types in the result object from
mergeinventoryreport.
this way, the agent will know about all ignored types, not just the types
of resources that were in the report
diff --git
a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/discovery/DiscoveryBossBeanTest.java
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/discovery/DiscoveryBossBeanTest.java
index 66d6d82..137e76f 100644
---
a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/discovery/DiscoveryBossBeanTest.java
+++
b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/discovery/DiscoveryBossBeanTest.java
@@ -28,6 +28,7 @@ import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.sql.Connection;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
@@ -57,6 +58,7 @@ import org.rhq.core.clientapi.agent.discovery.DiscoveryAgentService;
import org.rhq.core.clientapi.server.discovery.InventoryReport;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.discovery.MergeInventoryReportResults;
+import org.rhq.core.domain.discovery.MergeInventoryReportResults.ResourceTypeFlyweight;
import org.rhq.core.domain.discovery.MergeResourceResponse;
import org.rhq.core.domain.discovery.ResourceSyncInfo;
import org.rhq.core.domain.resource.Agent;
@@ -332,8 +334,7 @@ public class DiscoveryBossBeanTest extends AbstractEJB3Test {
assert platformSyncInfo != null;
assertNotNull(mergeResults.getIgnoredResourceTypes());
assertEquals(mergeResults.getIgnoredResourceTypes().size(), 1);
- assertEquals(mergeResults.getIgnoredResourceTypes().iterator().next().getName(),
serverType.getName());
-
assertEquals(mergeResults.getIgnoredResourceTypes().iterator().next().getPlugin(),
serverType.getPlugin());
+ assert mergeResults.getIgnoredResourceTypes().contains(new
ResourceTypeFlyweight(serverType));
// Check merge result - make sure we should not see any children under the
platform (it should have been ignored)
assertEquals(InventoryStatus.NEW, platformSyncInfo.getInventoryStatus());
@@ -341,6 +342,38 @@ public class DiscoveryBossBeanTest extends AbstractEJB3Test {
}
@Test(groups = "integration.ejb3")
+ public void testReturnAllIgnoredResourceTypes() throws Exception {
+
+ // ignore the service types immediately
+
resourceTypeManager.setResourceTypeIgnoreFlagAndUninventoryResources(subjectManager.getOverlord(),
+ serviceType1.getId(), true);
+
resourceTypeManager.setResourceTypeIgnoreFlagAndUninventoryResources(subjectManager.getOverlord(),
+ serviceType2.getId(), true);
+
+ // create an inventory report with just a platform and a server
+ InventoryReport inventoryReport = new InventoryReport(agent);
+ Resource platform = new Resource("platform", "platform",
platformType);
+ platform.setUuid(String.valueOf(new Random().nextInt()));
+ Resource server = new Resource("server0", "server0",
serverType);
+ server.setUuid(String.valueOf(new Random().nextInt()));
+ platform.addChildResource(server);
+ inventoryReport.addAddedRoot(platform);
+
+ // Merge this inventory report
+ MergeInventoryReportResults mergeResults =
discoveryBoss.mergeInventoryReport(serialize(inventoryReport));
+ assert mergeResults != null;
+ ResourceSyncInfo platformSyncInfo = mergeResults.getResourceSyncInfo();
+ assert platformSyncInfo != null;
+
+ // now see that we were told about the service types being ignored (even though
we had no resources of that type in the report)
+ Collection<ResourceTypeFlyweight> ignoredResourceTypes =
mergeResults.getIgnoredResourceTypes();
+ assertNotNull(ignoredResourceTypes);
+ assertEquals(ignoredResourceTypes.size(), 2);
+ assert ignoredResourceTypes.contains(new ResourceTypeFlyweight(serviceType1));
+ assert ignoredResourceTypes.contains(new ResourceTypeFlyweight(serviceType2));
+ }
+
+ @Test(groups = "integration.ejb3")
public void testIgnoreResourceTypeAndUninventoryResources() throws Exception {
// First create an inventory report for a new platform with servers - nothing is
ignored yet
@@ -402,8 +435,7 @@ public class DiscoveryBossBeanTest extends AbstractEJB3Test {
assert platformSyncInfo != null;
assertNotNull(mergeResults.getIgnoredResourceTypes());
assertEquals(mergeResults.getIgnoredResourceTypes().size(), 1);
- assertEquals(mergeResults.getIgnoredResourceTypes().iterator().next().getName(),
serverType.getName());
-
assertEquals(mergeResults.getIgnoredResourceTypes().iterator().next().getPlugin(),
serverType.getPlugin());
+ assert mergeResults.getIgnoredResourceTypes().contains(new
ResourceTypeFlyweight(serverType));
assertEquals(InventoryStatus.COMMITTED, platformSyncInfo.getInventoryStatus());
// notice platform is committed now
assertEquals(platformSyncInfo.getChildSyncInfos().size(), 0); // notice there are
no server children now
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
index 5d99d68..e14baf0 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryBossBean.java
@@ -64,6 +64,7 @@ import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.criteria.ResourceCriteria;
+import org.rhq.core.domain.criteria.ResourceTypeCriteria;
import org.rhq.core.domain.discovery.MergeInventoryReportResults;
import org.rhq.core.domain.discovery.MergeResourceResponse;
import org.rhq.core.domain.discovery.ResourceSyncInfo;
@@ -192,13 +193,12 @@ public class DiscoveryBossBean implements DiscoveryBossLocal,
DiscoveryBossRemot
log.debug(report);
final Map<String, ResourceType> allTypes = new HashMap<String,
ResourceType>();
- final Set<ResourceType> ignoredTypes = new HashSet<ResourceType>();
for (Resource root : roots) {
// Make sure all platform, server, and service types are valid. Also, make
sure they're fetched - otherwise
// we'll get persistence exceptions when we try to merge OR persist the
platform.
long rootStart = System.currentTimeMillis();
- if (!initResourceTypes(root, allTypes, ignoredTypes)) {
+ if (!initResourceTypes(root, allTypes)) {
continue;
}
@@ -225,6 +225,14 @@ public class DiscoveryBossBean implements DiscoveryBossLocal,
DiscoveryBossRemot
// a chance yet to send us its full inventory report.
ResourceSyncInfo syncInfo = discoveryBoss.getResourceSyncInfo(knownAgent);
+ // we need to also tell the agent if there were any ignored types - we must
provide the agent with
+ // ALL types that are ignored, not just for those resources that were in the
report
+ ResourceTypeCriteria ignoredTypesCriteria = new ResourceTypeCriteria();
+ ignoredTypesCriteria.addFilterIgnored(true);
+ ignoredTypesCriteria.setPageControl(PageControl.getUnlimitedInstance());
+ PageList<ResourceType> ignoredTypes =
resourceTypeManager.findResourceTypesByCriteria(
+ subjectManager.getOverlord(), ignoredTypesCriteria);
+
MergeInventoryReportResults results;
if (syncInfo != null) {
results = new MergeInventoryReportResults(syncInfo, ignoredTypes);
@@ -1086,7 +1094,7 @@ public class DiscoveryBossBean implements DiscoveryBossLocal,
DiscoveryBossRemot
private boolean initResourceTypes(Resource resource) {
final HashMap<String, ResourceType> types = new HashMap<String,
ResourceType>();
try {
- return initResourceTypes(resource, types, null);
+ return initResourceTypes(resource, types);
} finally {
types.clear(); // help GC
}
@@ -1096,13 +1104,9 @@ public class DiscoveryBossBean implements DiscoveryBossLocal,
DiscoveryBossRemot
* recursively assign (detached) ResourceType entities to the resource tree
* @param resource
* @param loadedTypeMap Empty map to start, filled as we go to minimize DB fetches
- * @param ignoredTypes If the caller wants to be told about resource types that are
to be ignored,
- * pass in a set to be filled in. This is optional - if the
caller passes in null,
- * the ignored types are not captured for the caller.
* @return false if a resource's type is unknown; true if all types were
successfully loaded
*/
- private boolean initResourceTypes(Resource resource, Map<String, ResourceType>
loadedTypeMap,
- Set<ResourceType> ignoredTypes) {
+ private boolean initResourceTypes(Resource resource, Map<String, ResourceType>
loadedTypeMap) {
String plugin = resource.getResourceType().getPlugin();
String name = resource.getResourceType().getName();
@@ -1132,15 +1136,12 @@ public class DiscoveryBossBean implements DiscoveryBossLocal,
DiscoveryBossRemot
// don't bother looking at the children if we are just going to ignore this
resource
if (resourceType.isIgnored()) {
- if (ignoredTypes != null) {
- ignoredTypes.add(resourceType);
- }
return true;
}
for (Iterator<Resource> childIterator =
resource.getChildResources().iterator(); childIterator.hasNext();) {
Resource child = childIterator.next();
- if (!initResourceTypes(child, loadedTypeMap, ignoredTypes)) {
+ if (!initResourceTypes(child, loadedTypeMap)) {
childIterator.remove();
}
}