private void verifyPlacementZoneIsEmpty(ContainerHostSpec hostSpec, Operation op, Runnable successCallback) { String placementZoneLink = hostSpec.hostState.resourcePoolLink; if (placementZoneLink == null || placementZoneLink.isEmpty()) { // no placement zone to verify successCallback.run(); return; } AtomicBoolean emptyZone = new AtomicBoolean(true); QueryTask queryTask = QueryUtil.buildPropertyQuery(ComputeState.class, ComputeState.FIELD_NAME_RESOURCE_POOL_LINK, placementZoneLink); QueryUtil.addCountOption(queryTask); new ServiceDocumentQuery<>(getHost(), ComputeState.class) .query(queryTask, (r) -> { if (r.hasException()) { op.fail(r.getException()); } else if (r.getCount() > 0) { emptyZone.set(false); op.fail(new LocalizableValidationException(PLACEMENT_ZONE_NOT_EMPTY_MESSAGE, PLACEMENT_ZONE_NOT_EMPTY_MESSAGE_CODE)); } else { if (emptyZone.get()) { successCallback.run(); } } }); }
state.contextId, r.getException().getMessage()); callback.complete(null, r.getException()); } else if (r.getCount() > 0) {
private void handleQueryServices(ServiceDocumentDeleteTaskState task) { QueryTask query = QueryUtil.buildQuery(task.deleteDocumentKind, false); query.querySpec.options = EnumSet.of(QueryOption.TOP_RESULTS); query.querySpec.resultLimit = 50; query.documentExpirationTimeMicros = Utils.fromNowMicrosUtc( TimeUnit.HOURS.toMicros(5)); if (task.tenantLinks != null) { // Delete documents only in current tenant and group query.querySpec.query.addBooleanClause(QueryUtil.addTenantAndGroupClause(task.tenantLinks)); } List<String> documents = new ArrayList<String>(); new ServiceDocumentQuery<ServiceDocument>(getHost(), ServiceDocument.class) .query(query, (r) -> { if (r.hasException()) { logWarning("Query failed, task will not finish: %s", r.getException().getMessage()); failTask(String.format("Could not get %s, task failed", task.deleteDocumentKind), r.getException()); return; } else if (r.hasResult() && documents.size() < r.getCount()) { documents.add(r.getDocumentSelfLink()); } else { handleDeleteServices(task, documents); } }); }
ai.set((int) r.getCount()); } else { ai.set(Integer.MAX_VALUE);
} else { logFine("Found %s containers for container host: %s", String.valueOf(r.getCount()), containerHostLink); state.customProperties.put( ContainerHostService.NUMBER_OF_CONTAINERS_PER_HOST_PROP_NAME, String.valueOf(r.getCount())); if (counter.decrementAndGet() == 0) { patchHostState(containerHostLink, state); state.customProperties.put( ContainerHostService.NUMBER_OF_SYSTEM_CONTAINERS_PROP_NAME, String.valueOf(result.getCount())); if (counter.decrementAndGet() == 0) { patchHostState(containerHostLink, state);
delete.fail(r.getException()); return; } else if (r.hasResult() && r.getCount() != 0) { delete.fail(new LocalizableValidationException("Deployment Policy is in use", "compute.deployment-policy.in.use")); delete.fail(r.getException()); return; } else if (r.hasResult() && r.getCount() != 0) { delete.fail( new LocalizableValidationException("Deployment Policy is in use",
@Override public void handleDelete(Operation delete) { GroupResourcePlacementState state = getState(delete); if (state == null || state.documentSelfLink == null) { delete.complete(); return; } countResourcesForPlacement(state, (r) -> { if (r.hasException()) { delete.fail(r.getException()); } else if (r.getCount() > 0) { long count = r.getCount(); if (state.allocatedInstancesCount != count) { logWarning("Reservation mismatch detected for placement %s!! " + "allocatedInstancesCount=%d actual=%d", state.documentSelfLink, state.allocatedInstancesCount, count); } Exception e = new LocalizableValidationException( "Can't delete with active reservations: " + count, "compute.placements.delete.with.active.reservation", count); delete.fail(e); return; } super.handleDelete(delete); }); }
private void countQueryContainers(int expectedCount) throws Throwable { List<Long> list = new ArrayList<>(); QuerySpecification qs = new QuerySpecification(); qs.query = Query.Builder.create().addKindFieldClause(ContainerState.class).build(); QueryTask qt = QueryTask.create(qs); QueryUtil.addCountOption(qt); host.testStart(1); new ServiceDocumentQuery<>( host, null).query(qt, (r) -> { if (r.hasException()) { host.failIteration(r.getException()); return; } list.add(r.getCount()); host.completeIteration(); }); host.testWait(); assertTrue(expectedCount == list.get(0)); }
private void verifyEventsCount(int count) throws Throwable { Long[] resultCount = new Long[1]; Throwable[] ex = new Throwable[1]; waitFor(() -> { QueryTask query = QueryUtil.buildQuery(EventLogState.class, true); QueryUtil.addCountOption(query); new ServiceDocumentQuery<EventLogState>(host, EventLogState.class) .query(query, (r) -> { if (r.hasException()) { ex[0] = r.getException(); return; } resultCount[0] = r.getCount(); }); return resultCount[0] != null; }); if (ex[0] != null) { Assert.fail("Could not retrieve list of events after delete"); } Assert.assertEquals(count, resultCount[0].longValue()); }
private void waitForCreationOfTenantedFavoriteImages() throws Throwable { AtomicBoolean cotinue = new AtomicBoolean(); waitFor(() -> { QueryTask queryTask = QueryUtil.buildQuery(FavoriteImage.class, true, QueryUtil.addTenantClause(tenantLinks)); ServiceDocumentQuery<FavoriteImage> query = new ServiceDocumentQuery<>(host, FavoriteImage.class); query.query(queryTask, (r) -> { if (r.hasException()) { host.log("Exception while retrieving FavoriteImage: " + r.getException()); cotinue.set(true); } else if (r.hasResult()) { if (r.getCount() == 15) { cotinue.set(true); } } }); return cotinue.get(); }); } }