Mazz, good catch.
What is the next effect of this fix? I notice that size of the
'unknownResourceIds' collection is, in part, responsible for a
subsequent availability check and resource service scan. When the
collection size is incorrect - in the context of the larger inventory
synchronization process - what would the net effect of the previous
logic error be? Specifically, under what conditions would it trigger an
unnecessary availability check and service scan (false positive)? Under
what conditions would it miss them (false negative)? I'm satisfied by
inspection that this fix is correct, but I'd still like to know what
users (who lack the fix) would experience in terms of inventory
synchronization. On that note, shouldn't this be pushed to the latest
cumulative patch branch? Do you think this requires a BZ to track?
On 10/29/2010 04:57 PM, mazz wrote:
modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
| 136 +++++-----
1 file changed, 73 insertions(+), 63 deletions(-)
New commits:
commit 7155896be74b82b2a9be7b1358103a4e2182fbcf
Author: John Mazzitelli<mazz(a)redhat.com>
Date: Fri Oct 29 16:52:44 2010 -0400
we need to remove the disabled resource's IDs from the callers set - removing
resources from our internal resource set is useless
diff --git
a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
index 4c3b345..e483bb7 100644
---
a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
+++
b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
@@ -2449,7 +2449,7 @@ public class InventoryManager extends AgentService implements
ContainerService,
Set<Resource> unknownResources =
configuration.getServerServices().getDiscoveryServerService()
.getResources(unknownResourceIds, true);
- Set<Resource> toBeIgnored = new HashSet<Resource>();
+ Set<Integer> toBeIgnored = new HashSet<Integer>();
for (Resource unknownResource : unknownResources) {
ResourceType resourceType =
pmm.getType(unknownResource.getResourceType());
@@ -2457,7 +2457,7 @@ public class InventoryManager extends AgentService implements
ContainerService,
mergeResource(unknownResource);
syncSchedulesRecursively(unknownResource);
} else {
- toBeIgnored.add(unknownResource);
+ toBeIgnored.add(unknownResource.getId());
if (log.isDebugEnabled()) {
log.debug("During an inventory sync, the server gave us
resource [" + unknownResource
+ "] but its type is disabled in the agent; ignoring
it");
@@ -2465,7 +2465,7 @@ public class InventoryManager extends AgentService implements
ContainerService,
}
}
- unknownResources.removeAll(toBeIgnored);
+ unknownResourceIds.removeAll(toBeIgnored);
}
return;
}