You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by rl...@apache.org on 2017/05/30 18:29:53 UTC
[31/50] [abbrv] ambari git commit: AMBARI-21025. Avoid unnecessary
calls to load stage summaries (magyari_sandor)
AMBARI-21025. Avoid unnecessary calls to load stage summaries (magyari_sandor)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/8cebc18b
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/8cebc18b
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/8cebc18b
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 8cebc18b82e3e9df0c440675f26f8e6be32ebf06
Parents: b97d268
Author: Sandor Magyari <sm...@hortonworks.com>
Authored: Wed May 10 16:22:07 2017 +0200
Committer: Sandor Magyari <sm...@hortonworks.com>
Committed: Tue May 16 13:59:08 2017 +0200
----------------------------------------------------------------------
.../internal/StageResourceProvider.java | 81 +++-----------------
1 file changed, 10 insertions(+), 71 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/8cebc18b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StageResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StageResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StageResourceProvider.java
index db9a0e2..ec3688d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StageResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StageResourceProvider.java
@@ -211,8 +211,7 @@ public class StageResourceProvider extends AbstractControllerResourceProvider im
// !!! poor mans cache. toResource() shouldn't be calling the db
// every time, when the request id is likely the same for each stageEntity
- Map<Long, Map<Long, HostRoleCommandStatusSummaryDTO>> cache =
- new HashMap<>();
+ Map<Long, Map<Long, HostRoleCommandStatusSummaryDTO>> cache = new HashMap<>();
List<StageEntity> entities = dao.findAll(request, predicate);
for (StageEntity entity : entities) {
@@ -232,8 +231,11 @@ public class StageResourceProvider extends AbstractControllerResourceProvider im
if (null != lr) {
Collection<StageEntity> topologyManagerStages = lr.getStageEntities();
+ // preload summaries as it contains summaries for all stages within this request
+ Map<Long, HostRoleCommandStatusSummaryDTO> summary = topologyManager.getStageSummaries(requestId);
+ cache.put(requestId, summary);
for (StageEntity entity : topologyManagerStages) {
- Resource stageResource = toResource(entity, propertyIds);
+ Resource stageResource = toResource(cache, entity, propertyIds);
if (predicate.evaluate(stageResource)) {
results.add(stageResource);
}
@@ -242,7 +244,11 @@ public class StageResourceProvider extends AbstractControllerResourceProvider im
} else {
Collection<StageEntity> topologyManagerStages = topologyManager.getStages();
for (StageEntity entity : topologyManagerStages) {
- Resource stageResource = toResource(entity, propertyIds);
+ if (!cache.containsKey(entity.getRequestId())) {
+ Map<Long, HostRoleCommandStatusSummaryDTO> summary = topologyManager.getStageSummaries(entity.getRequestId());
+ cache.put(entity.getRequestId(), summary);
+ }
+ Resource stageResource = toResource(cache, entity, propertyIds);
if (predicate.evaluate(stageResource)) {
results.add(stageResource);
}
@@ -351,71 +357,4 @@ public class StageResourceProvider extends AbstractControllerResourceProvider im
return resource;
}
- /**
- * Converts the {@link StageEntity} to a {@link Resource}.
- *
- * @param entity the entity to convert (not {@code null})
- * @param requestedIds the properties requested (not {@code null})
- *
- * @return the new resource
- */
- //todo: almost exactly the same as other toResource except how summaries are obtained
- //todo: refactor to combine the two with the summary logic extracted
- private Resource toResource(StageEntity entity, Set<String> requestedIds) {
-
- Resource resource = new ResourceImpl(Resource.Type.Stage);
-
- Long clusterId = entity.getClusterId();
- if (clusterId != null && !clusterId.equals(Long.valueOf(-1L))) {
- try {
- Cluster cluster = clustersProvider.get().getClusterById(clusterId);
-
- setResourceProperty(resource, STAGE_CLUSTER_NAME, cluster.getClusterName(), requestedIds);
- } catch (Exception e) {
- LOG.error("Can not get information for cluster " + clusterId + ".", e );
- }
- }
-
- Map<Long, HostRoleCommandStatusSummaryDTO> summary =
- topologyManager.getStageSummaries(entity.getRequestId());
-
- setResourceProperty(resource, STAGE_STAGE_ID, entity.getStageId(), requestedIds);
- setResourceProperty(resource, STAGE_REQUEST_ID, entity.getRequestId(), requestedIds);
- setResourceProperty(resource, STAGE_CONTEXT, entity.getRequestContext(), requestedIds);
-
- // this property is lazy loaded in JPA; don't use it unless requested
- if (isPropertyRequested(STAGE_CLUSTER_HOST_INFO, requestedIds)) {
- resource.setProperty(STAGE_CLUSTER_HOST_INFO, entity.getClusterHostInfo());
- }
-
- // this property is lazy loaded in JPA; don't use it unless requested
- if (isPropertyRequested(STAGE_COMMAND_PARAMS, requestedIds)) {
- resource.setProperty(STAGE_COMMAND_PARAMS, entity.getCommandParamsStage());
- }
-
- // this property is lazy loaded in JPA; don't use it unless requested
- if (isPropertyRequested(STAGE_HOST_PARAMS, requestedIds)) {
- resource.setProperty(STAGE_HOST_PARAMS, entity.getHostParamsStage());
- }
-
- setResourceProperty(resource, STAGE_SKIPPABLE, entity.isSkippable(), requestedIds);
-
- Long startTime = Long.MAX_VALUE;
- Long endTime = 0L;
- if (summary.containsKey(entity.getStageId())) {
- startTime = summary.get(entity.getStageId()).getStartTime();
- endTime = summary.get(entity.getStageId()).getEndTime();
- }
-
- setResourceProperty(resource, STAGE_START_TIME, startTime, requestedIds);
- setResourceProperty(resource, STAGE_END_TIME, endTime, requestedIds);
-
- CalculatedStatus status = CalculatedStatus.statusFromStageSummary(summary, Collections.singleton(entity.getStageId()));
-
- setResourceProperty(resource, STAGE_PROGRESS_PERCENT, status.getPercent(), requestedIds);
- setResourceProperty(resource, STAGE_STATUS, status.getStatus(), requestedIds);
- setResourceProperty(resource, STAGE_DISPLAY_STATUS, status.getDisplayStatus(), requestedIds);
-
- return resource;
- }
}