modules/core/client-api/src/main/java/org/rhq/core/clientapi/server/discovery/DiscoveryServerService.java
| 2
modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
| 9 ++-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/discovery/DiscoveryServerServiceImpl.java
| 24 ++++++----
3 files changed, 23 insertions(+), 12 deletions(-)
New commits:
commit 270606f4c7613efd3444df25f872230dc1c55de2
Author: Jay Shaughnessy <jshaughn(a)jshaughn.csb>
Date: Thu Jan 31 17:38:48 2013 -0500
Hopefully get more speed in mergeUnknownResource logic by
making a single criteria query for a batch of ids, and passing
Integers by array.
diff --git
a/modules/core/client-api/src/main/java/org/rhq/core/clientapi/server/discovery/DiscoveryServerService.java
b/modules/core/client-api/src/main/java/org/rhq/core/clientapi/server/discovery/DiscoveryServerService.java
index 04915ae..1e2ee9f 100644
---
a/modules/core/client-api/src/main/java/org/rhq/core/clientapi/server/discovery/DiscoveryServerService.java
+++
b/modules/core/client-api/src/main/java/org/rhq/core/clientapi/server/discovery/DiscoveryServerService.java
@@ -101,7 +101,7 @@ public interface DiscoveryServerService {
* @return a list of resources in the same order as the passed in ids, with the
latest data
*/
@LimitedConcurrency(CONCURRENCY_LIMIT_INVENTORY_SYNC)
- List<Resource> getResourcesAsList(List<Integer> resourceIds);
+ List<Resource> getResourcesAsList(Integer... resourceIds);
/**
* Set the specified resource enabled or disabled. The call has no effect if the
resource is already
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 3b31fee..29ca007 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
@@ -2889,10 +2889,13 @@ public class InventoryManager extends AgentService implements
ContainerService,
int end = (BATCH_SIZE < size) ? BATCH_SIZE : size;
List<Integer> resourceIdBatch = resourceIdList.subList(0, end);
- ArrayList<Integer> serializableResourceIdBatch = new
ArrayList<Integer>(resourceIdBatch);
- resourceIdBatch.clear(); // advance progress now - this helps GC by clearing
now
+ Integer[] resourceIdArray = new Integer[resourceIdBatch.size()];
+
+ // Advance our progress and possibly help GC. This will remove the processed
resources from the backing list
+ resourceIdBatch.clear();
+
List<Resource> resourceBatch =
configuration.getServerServices().getDiscoveryServerService()
- .getResourcesAsList(serializableResourceIdBatch);
+ .getResourcesAsList(resourceIdArray);
// add the newly fetched resources to the end of our master list
for (Resource r : resourceBatch) {
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 fe03746..4a269da 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
@@ -35,6 +35,7 @@ import org.rhq.core.clientapi.server.discovery.InventoryReport;
import org.rhq.core.clientapi.server.discovery.StaleTypeException;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.criteria.ResourceCriteria;
import org.rhq.core.domain.discovery.AvailabilityReport;
import org.rhq.core.domain.discovery.MergeResourceResponse;
import org.rhq.core.domain.discovery.ResourceSyncInfo;
@@ -171,16 +172,23 @@ public class DiscoveryServerServiceImpl implements
DiscoveryServerService {
}
@Override
- public List<Resource> getResourcesAsList(List<Integer> resourceIds) {
+ public List<Resource> getResourcesAsList(Integer... resourceIds) {
long start = System.currentTimeMillis();
+
+ ResourceCriteria criteria = new ResourceCriteria();
+ criteria.addFilterIds(resourceIds);
+ criteria.addFilterInventoryStatus(null); // get them all and remove some later
+ criteria.clearPaging();
+
ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
- List<Resource> result = new ArrayList<Resource>(resourceIds.size());
- for (Integer resourceId : resourceIds) {
- //TODO: This can probably be one call to resource criteria fetch
- Resource resource = resourceManager.getResourceTree(resourceId, false);
- if (isVisibleInInventory(resource)) {
- resource = convertToPojoResource(resource, false);
- result.add(resource);
+ Subject overlord = LookupUtil.getSubjectManager().getOverlord();
+ List<Resource> resources =
resourceManager.findResourcesByCriteria(overlord, criteria);
+ List<Resource> result = new ArrayList<Resource>(resources.size());
+
+ for (Resource r : resources) {
+ if (isVisibleInInventory(r)) {
+ Resource resourcePojo = convertToPojoResource(r, false);
+ result.add(resourcePojo);
}
}
if (log.isDebugEnabled()) {
Show replies by date