private void updateResourcePool(PlacementCapacityUpdateTaskState state) { // calculate average cpu usage per core double totalCpuUsage = 0.0; if (state.aggregatedStats.cpuCoreCount > 0) { totalCpuUsage = state.aggregatedStats.cpuUsageSumAllCores / state.aggregatedStats.cpuCoreCount; } ResourcePoolState rpPatchState = new ResourcePoolState(); rpPatchState.customProperties = new HashMap<>(); rpPatchState.customProperties.put( ContainerHostDataCollectionService.RESOURCE_POOL_CPU_USAGE_CUSTOM_PROP, Double.toString(totalCpuUsage)); rpPatchState.customProperties.put( ContainerHostDataCollectionService.RESOURCE_POOL_AVAILABLE_MEMORY_CUSTOM_PROP, Long.toString(state.aggregatedStats.availableMemoryBytes)); rpPatchState.maxMemoryBytes = state.aggregatedStats.totalMemoryBytes; sendRequest(Operation.createPatch(this, state.resourcePoolLink) .setBody(rpPatchState) .setCompletion((o, e) -> { if (e != null) { failTask(String.format("Unable to update resource pool '%s'", state.resourcePoolLink), e); return; } proceedTo(PlacementCapacityUpdateTaskState.SubStage.UPDATE_PLACEMENTS); })); }
private void handleComputePage(PlacementCapacityUpdateTaskState state) { sendRequest(Operation .createGet(getHost(), state.nextPageLink) .setCompletion((o, e) -> { if (e != null) { failTask("Error retrieving computes", e); return; } ServiceDocumentQueryResult result = o.getBody(QueryTask.class).results; List<ComputeState> computes = result.documents.values().stream() .map(json -> Utils.fromJson(json, ComputeState.class)) .collect(Collectors.toList()); if (computes.isEmpty()) { proceedTo(PlacementCapacityUpdateTaskState.SubStage.UPDATE_RESOURCE_POOL); } else { queryComputeDescriptions(state, computes, result.nextPageLink); } })); }
OperationJoin.create(placementUpdateOps).setCompletion((ops, exs) -> { if (exs != null) { failTask("Error updating placements", exs.values().iterator().next()); } else { proceedTo(PlacementCapacityUpdateTaskState.SubStage.COMPLETED);
.query(queryTask, (r) -> { if (r.hasException()) { failTask("Error querying for compute descriptions.", r.getException()); } else if (r.hasResult()) { computeDescriptions.put(r.getDocumentSelfLink(), r.getResult());
private void retrieveAndUpdatePlacements(PlacementCapacityUpdateTaskState state) { Query query = Query.Builder.create() .addKindFieldClause(GroupResourcePlacementState.class) .addFieldClause(GroupResourcePlacementState.FIELD_NAME_RESOURCE_POOL_LINK, state.resourcePoolLink) .build(); QueryTask queryTask = QueryTask.Builder.createDirectTask() .setQuery(query) .addOption(QueryOption.EXPAND_CONTENT) .build(); List<GroupResourcePlacementState> placements = new ArrayList<>(); new ServiceDocumentQuery<>(getHost(), GroupResourcePlacementState.class).query( queryTask, (r) -> { if (r.hasException()) { failTask(String.format("Error quering placements for resource pool '%s'", state.resourcePoolLink), r.getException()); } else if (r.hasResult()) { placements.add(r.getResult()); } else { updatePlacements(state, placements); } }); }